[英]How to draw completely monocolor text with use of Graphics.DrawString?
Bitmap bmp = new Bitmap(300, 50);
Graphics gfx = Graphics.FromImage(bmp);
gfx.DrawString("Why I have black outer pixels?", new Font("Verdana", 14),
new SolidBrush(Color.White), 0, 0);
gfx.Dispose();
bmp.Save(Application.StartupPath + "\\test.png", ImageFormat.Png);
我需要文字完全是白色的。 我尝试了不同的画笔,例如Brushes.White等,但都不好。 我能做什么? 所有文本像素必须为白色,只是不透明度会发生变化。
解决:(结合使用textrenderinghints和拉绳)
Bitmap bmp = new Bitmap(300, 50);
Graphics gfx = Graphics.FromImage(bmp);
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
gfx.DrawString("Why I have black outer pixels?", new Font("Verdana", 14),
new SolidBrush(Color.White), 0, 0);
gfx.Dispose();
bmp.Save(Application.StartupPath + "\\test.png", ImageFormat.Png);
这是因为位图的背景是透明的黑色。 绘制之前,尝试使其成为透明的白色:
gfx.Clear(Color.FromArgb(0, 255, 255, 255));
显然,这没有任何改变。 请改用TextRenderer.DrawText
。 它允许您指定背景色:
TextRenderer.DrawText(gfx, "text", font, point, foreColor, backColor);
但是,它可能只是填充文本矩形。 我不确定。 或使用不具有gfx.Clear(...)
的TextRenderer.DrawText
重载,重复上述操作( gfx.Clear(...)
)。
gfx.Clear(Color.FromArgb(1, 255, 255, 255));
TextRenderer.DrawText(gfx, "text", font, point, Color.White)
所有这些技巧似乎根本没有效果。 剩下的唯一选项似乎是禁用抗锯齿。 对于非文本绘图(直线圆等),使用SmoothingMode
进行;对于文本渲染,使用TextRenderingHint
完成。
gfx.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit; // For text
gfx.SmoothingMode = SmoothingMode.None; // For geometrical objects
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.