我正在尝试使用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);
答案 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
会为您完成。