将文本文件内容保存为图像
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
会为您完成。
我正在尝试使用 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
会为您完成。