将文本文件内容保存为图像

Save text file contents as an image

我正在尝试使用 C# 将文本文件的内容转换为图像,但我似乎做不到。我从 System.Drawing 收到烦人的 A generic error occurred in GDI+. 错误。

这是我的实际代码:

public static Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int Height)
{
    Bitmap bmp = new Bitmap(width, Height);
    using (Graphics graphics = Graphics.FromImage(bmp))
    {
        Font font = new Font(fontname, fontsize);
        graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
        graphics.DrawString(txt, font, new SolidBrush(fcolor), 0, 0);
        graphics.Flush();
        font.Dispose();
        graphics.Dispose();
    }
    bmp.Save("C:\" + Guid.NewGuid().ToString() + ".bmp");
    Convert(bmp);
    return bmp;
}

所以在 bmp.Save("C:\" + Guid.NewGuid().ToString() + ".bmp"); 行,当我尝试保存图像时,出现了这个错误。我阅读了帖子和类似的问题,并按照多个来源的建议将所有内容都包裹在 using 语句中,但我仍然遗漏了一些东西并且无法弄清楚。

我使用 File.ReadAllText(path); 读取文本文件的内容,然后正常调用我的方法:

ConvertTextToImage(content, "Bookman Old Style", 10, Color.White, Color.Black, width, height);

因此,您 Dispose() 两次 Graphics 对象。一旦通过你的 graphics.Dispose() 行,一旦通过 using 构造自动完成。这样写的方法应该没问题:

public static Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int Height)
{
    var bmp = new Bitmap(width, Height);

    using (var graphics = Graphics.FromImage(bmp))
    using (var font = new Font(fontname, fontsize))
    {
        graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
        graphics.DrawString(txt, font, new SolidBrush(fcolor), 0, 0);
    }

    bmp.Save("C:\" + Guid.NewGuid() + ".bmp");
    Convert(bmp);
    return bmp;
}

由于 UAC,您遇到了一般性错误,因为您正在尝试写入 C: 驱动器的根目录,这在 Windows.

中是不允许的

换行

bmp.Save("C:\" + Guid.NewGuid().ToString() + ".bmp");

bmp.Save("C:\Temp\" + Guid.NewGuid().ToString() + ".bmp");

(或您有权访问的任何其他文件夹),允许成功创建图像。

我认为您的应用没有在 C:/ 上写入文件的权限。 A 修改了您的代码,这对我有用:

bmp.Save(Guid.NewGuid().ToString() + ".bmp");

它会将图像保存在您的应用程序文件夹中。

此外,您不必调用 graphics.Dispose();,因为 using 会为您完成。