在位图上绘制文本 - 图像显示为黑色



我正在尝试将文本绘制到位图上,图像显示为黑色。

protected Bitmap DrawTextImage(string text, float fontsize, string fontname = "Helvetica")
{
string imagePath = @"C:img.bmp";
string imagePathTest = @"C:imgTest.bmp";
Font textFont = new Font(fontname, fontsize);
var size = TextRenderer.MeasureText(text, textFont);
Bitmap bmp = new Bitmap(size.Width, size.Height);
Graphics graphics = Graphics.FromImage(bmp);
SolidBrush brush = new SolidBrush(Color.Black);
graphics.DrawString(text, textFont, brush, size.Width, size.Height);
if(File.Exists(imagePathTest))
File.Delete(imagePathTest);
bmp.Save(imagePathTest, ImageFormat.Bmp);

对于它的价值,图像最终还需要转换为位图格式,以便在热敏打印机上打印,但我现在只关注这部分。

我在这里使用的参数是DrawTextImage(text, 36);

我正在尝试将文本绘制到位图上,并且图像显示为黑色。

生成的图像是黑色的,因为您正在用黑色绘制...在黑色背景上。黑色背景的原因是位图默认为黑色。

您只需要在任何其他绘图之前获得graphics后,将FillRectangle(或注释中提到的Clear()(调用为不同的颜色。

改变:

Graphics graphics = Graphics.FromImage(bmp);
SolidBrush brush = new SolidBrush(Color.Black);
graphics.DrawString(text, textFont, ...);

。自:

Graphics graphics = Graphics.FromImage(bmp);
graphics.FillRectangle (Brushes.White, 0, 0, size.Width, size.Height); // Fill to white
SolidBrush brush = new SolidBrush(Color.Black);
graphics.DrawString(text, textFont, ...);

要获得更简单的方法,请尝试graphics.Clear(Color.White)

技巧

1. 完成后释放 GDI 对象

由于您正在创建未在其他任何地方使用的显式GraphicsBrush,因此最好在完成后Dispose它们。 GDI 资源一直是 Windows 上的系统范围的有限资源,无论位数和已安装的 RAM 如何。

例如

using (var graphics = Graphics.FromImage(bmp))
{
...
graphics.DrawString(text, ...);
if(File.Exists(imagePathTest))
File.Delete(imagePathTest);
bmp.Save(imagePathTest, ImageFormat.Bmp);
...
}

2. 尽可能使用预定义的 GDI 画笔/笔

尝试使用预先存在的画笔或笔之一,而不是创建画笔。 它们获得得更快;不需要处理,因为它们是系统范围的。

而不是:

var brush = new SolidBrush(Color.Black);

。用:

_blackBrush = Brushes.Black; // optionally save in a field for future use

相关内容

  • 没有找到相关文章