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等,但都很糟糕。我能做什么?所有文本像素必须为白色,只是不透明度可以更改。
答案 0 :(得分:3)
解决:(使用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);
答案 1 :(得分:1)
这是因为位图的背景是透明的黑色。在绘制之前尝试使其成为透明白色:
gfx.Clear(Color.FromArgb(0, 255, 255, 255));
显然这不会改变任何事情。请改用TextRenderer.DrawText
。它允许您指定背景颜色:
TextRenderer.DrawText(gfx, "text", font, point, foreColor, backColor);
但是它可能只填充文本矩形。我不确定。或者重复上面的操作(gfx.Clear(...)
),重载为TextRenderer.DrawText
,但没有backColor。
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