这似乎是整个网络上一个臭名昭着的错误.因为我的情景不适合,所以我无法找到问题的答案.将图像保存到流时会抛出异常.
奇怪的是这与png完美配合,但是jpg和gif给出了上述错误,这是相当混乱的.
最相似的问题涉及将图像保存到没有权限的文件.具有讽刺意味的是,解决方案是使用内存流,因为我正在做....
public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
using (var ms = new MemoryStream())
{
ImageFormat format;
switch (imageToConvert.MimeType())
{
case "image/png":
format = ImageFormat.Png;
break;
case "image/gif":
format = ImageFormat.Gif;
break;
default:
format = ImageFormat.Jpeg;
break;
}
imageToConvert.Save(ms, format);
return ms.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
更多细节到例外.造成这么多问题的原因是缺乏解释:(
System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(Stream stream, ImageFormat format)
at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
at …Run Code Online (Sandbox Code Playgroud) 我有第三方字体,支持日语字符,我需要用于应用程序.只要此字体不支持某个字符,就会绘制常见的矩形("默认字符").显然不是所有日文字符都受支持,因为如果我试图绘制翻译办公室给我们的翻译,那么有很多矩形.
我需要在使用不受支持的字符时收到通知,以便我可以更改此单个字符的字体(如Word所做的那样)或对其执行其他一些反应.
有任何想法吗?如果我可以从TTF文件中提取unicode字符列表,那么我将能够检查此列表是否包含已使用的字符.但是我怎么能这样做呢?
首先,How to measure width of character precisely?回答的问题对于这种情况并没有真正帮助,所以这不是重复的.
我有一个字符串.我绘制使用graphics.DrawString,但是当我需要在它之后添加另一个时,我需要知道前一个字符串的精确宽度.
为此,我使用graphics.MeasureString:
StringFormat format = new StringFormat(StringFormat.GenericTypographic);
format.Alignment = StringAlignment.Center;
format.Trimming = StringTrimming.None;
format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多其他功能,就像TextRendered.MeasureText所有功能都失败一样,所有可能的参数组合.
MeasureString的上述组合最接近我的需要(它在大多数情况下都适用,特殊字符除外),但是使用像#破坏它这样的字符.宽度更短或更长.
有没有办法获得DrawString函数生成的文本的精确大小?DrawString如何计算绘图区域的大小?它必须显然是一些其他功能,因为尺寸总是不同的.
整个应用程序的源代码在这里https://gitorious.org/pidgeon/pidgeon-main/ (我使用它的文件,是https://gitorious.org/pidgeon/pidgeon-main/blobs/master/scrollback /SBABox.cs)