我正在尝试使用像素样式字体在 WinForm 中的位图上写入文本。 我使用的字体是这样的:https://font.download/font/pocket-pixel.
我希望文本非常小(6pt)并且像素完美,没有抗锯齿,但是当在位图上绘制文本时,它与字体不匹配。
在图像编辑软件(我的例子是Paint.NET)中使用该字体时,我将大小设置为6 pt,结果是完美的。
当我继续使用相同的字体在 WinFrom 中的位图上绘制文本时,结果既小又混乱,即使在较高的字体大小下也是如此。
我有一个模板位图和作为资源嵌入的字体文件。这是一个代码片段:
public class Class1
{
private static PrivateFontCollection fonts = new PrivateFontCollection();
static FontFamily LoadFontResource(byte[] fontData)
{
IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
uint dummy = 0;
fonts.AddMemoryFont(fontPtr, fontData.Length);
AddFontMemResourceEx(fontPtr, (uint)fontData.Length, IntPtr.Zero, ref dummy);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
return fonts.Families.Last();
}
public Bitmap GetBitmap()
{
var bmp = new Bitmap(Resources.template);
FontFamily PocketPixel_FontFamily = LoadFontResource(Resources.pokemon_pixel_font);
Font PocketPixel_Font = new Font(PocketPixel_FontFamily, 12, GraphicsUnit.Pixel);
using (Graphics graphics = Graphics.FromImage(bmp))
{
Brush brush = Brushes.Black;
StringFormat format = new StringFormat
{
Alignment = StringAlignment.Center, // Justify center
LineAlignment = StringAlignment.Near
};
// Disable anti-aliasing
graphics.SmoothingMode = SmoothingMode.None;
graphics.PixelOffsetMode = PixelOffsetMode.None;
graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
graphics.PageUnit = GraphicsUnit.Pixel;
graphics.PageScale = 1f;
// Draw text
RectangleF area = new RectangleF(20, 145, 100, 10);
graphics.DrawString("1234567890", PocketPixel_Font, brush, area, format);
}
return bmp;
}
public SavePng()
{
var bmp = GetBitmap();
bmp.Save("WhyYouNoWork.png", ImageFormat.Png);
}
}
如您所见,我尝试更改 Graphics 对象或 Font 对象本身的多个属性以获得所需的结果,但没有成功。
有什么建议吗(请为图片点赞)?
谢谢你
我刚刚发现我导入了错误的字体:
FontFamily PocketPixel_FontFamily = LoadFontResource(Resources.pokemon_pixel_font);
而不是导入实际的“Pocket Pixel Font”
我应该早点睡的...🤦u200d♂️