如何将实心字符串绘制到位图
How to draw solid strings to a bitmap
以下代码
var fnt = new Font("Consolas", 12, FontStyle.Regular);
var bmp = new Bitmap(24, 24);
using (var grp = Graphics.FromImage(bmp))
{
var size = grp.MeasureString(shortName, fnt, new SizeF(24, 24),
new StringFormat(StringFormatFlags.NoFontFallback | StringFormatFlags.NoWrap |
StringFormatFlags.FitBlackBox));
grp.TranslateTransform(0, (bmp.Height - size.Height) / 2);
grp.DrawString("DW", fnt, Color.FromArgb(0xff, 0x33, 0x66, 0x33),
new RectangleF(0, 0, 24, 24),
new StringFormat(StringFormatFlags.NoFontFallback |
StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox));
grp.TranslateTransform(0, (size.Height - bmp.Height) / 2);
}
bmp.Save(string.Format("d:\out-{0}.bmp", shortName));
输出看起来像 ,看起来不太好(放大时您可以看到边框中的黑点)。如果将上面的画笔更改为 Brushes.Black
,我们会得到 ,这更好,但它太粗了(注意我将字体样式设置为 "regular")。
但是我可以手动实现类似的东西,它清晰而简洁。那个是使用 GIMP 创建的,在透明 canvas.
上具有相同的字体系列、字体大小和颜色
所以我想知道如何以编程方式使用 GDI+ 做同样的事情?
重复?? Font is very ugly
grp.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
以下代码
var fnt = new Font("Consolas", 12, FontStyle.Regular);
var bmp = new Bitmap(24, 24);
using (var grp = Graphics.FromImage(bmp))
{
var size = grp.MeasureString(shortName, fnt, new SizeF(24, 24),
new StringFormat(StringFormatFlags.NoFontFallback | StringFormatFlags.NoWrap |
StringFormatFlags.FitBlackBox));
grp.TranslateTransform(0, (bmp.Height - size.Height) / 2);
grp.DrawString("DW", fnt, Color.FromArgb(0xff, 0x33, 0x66, 0x33),
new RectangleF(0, 0, 24, 24),
new StringFormat(StringFormatFlags.NoFontFallback |
StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox));
grp.TranslateTransform(0, (size.Height - bmp.Height) / 2);
}
bmp.Save(string.Format("d:\out-{0}.bmp", shortName));
输出看起来像 Brushes.Black
,我们会得到
但是我可以手动实现类似
所以我想知道如何以编程方式使用 GDI+ 做同样的事情?
重复?? Font is very ugly
grp.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;