相关疑难解决方法(0)

GDI +,JPEG Image to MemoryStream中发生一般错误

这似乎是整个网络上一个臭名昭着的错误.因为我的情景不适合,所以我无法找到问题的答案.将图像保存到流时会抛出异常.

奇怪的是这与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)

c# gdi+

314
推荐指数
16
解决办法
45万
查看次数

获取字体支持的字符 - 在C#中

我有第三方字体,支持日语字符,我需要用于应用程序.只要此字体不支持某个字符,就会绘制常见的矩形("默认字符").显然不是所有日文字符都受支持,因为如果我试图绘制翻译办公室给我们的翻译,那么有很多矩形.

我需要在使用不受支持的字符时收到通知,以便我可以更改此单个字符的字体(如Word所做的那样)或对其执行其他一些反应.

有任何想法吗?如果我可以从TTF文件中提取unicode字符列表,那么我将能够检查此列表是否包含已使用的字符.但是我怎么能这样做呢?

c# unicode fonts character

23
推荐指数
2
解决办法
1万
查看次数

如何精确测量弦的宽度?

首先,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)

c# gdi+ winforms

6
推荐指数
2
解决办法
8062
查看次数

标签 统计

c# ×3

gdi+ ×2

character ×1

fonts ×1

unicode ×1

winforms ×1