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

时间:2015-03-02 15:53:45

标签: c# system.drawing

我正在尝试使用C#将文本文件的内容转换为图像,但我似乎无法做到这一点。我从A generic error occurred in GDI+.收到了令人讨厌的System.Drawing错误。

这是我的实际代码:

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);

3 个答案:

答案 0 :(得分:3)

因此,您需要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; } 构造自动完成。对于这样编写的方法你应该没问题:

{{1}}

答案 1 :(得分:0)

由于UAC,您将收到一般错误,因为您正在尝试写入C:驱动器的根目录,这在Windows中是不允许的。

更改行

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

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

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

答案 2 :(得分:0)

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

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

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

此外,您无需致电graphics.Dispose();,因为using会为您完成。