У меня есть вопрос, касающийся растровых шрифтов. Мне нужно создать шрифты для экрана устройства. Он должен состоять из растровых изображений всех печатных символов. Чтобы получить растровые изображения всех символов, я использую следующий подход:
public MFont(Font font, int first = 32, int last = 126)
{
var characters = new List<Character>();
Bitmap objBmpImage = new Bitmap(1, 1);
// Create a graphics object to measure the text's width and height.
Graphics objGraphics = Graphics.FromImage(objBmpImage);
for (int i = first; i <= last; i++)
{
char c = Convert.ToChar(i);
int intWidth;
int intHeight;
string s = "" + c;
// This is where the bitmap size is determined.
intWidth = (int)objGraphics.MeasureString(s, font).Width;
intHeight = (int)objGraphics.MeasureString(s, font).Height;
// Create the bmpImage again with the correct size for the text and font.
objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight));
objGraphics = Graphics.FromImage(objBmpImage);
// Set Background color
objGraphics.Clear(Color.White);
objGraphics.SmoothingMode = SmoothingMode.None;
objGraphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
objGraphics.DrawString(s, font, new SolidBrush(Color.Black), 0, 0);
objGraphics.Flush();
characters.Add(
new Character
{
Bitmap = objBmpImage,
Code = i,
Size = objBmpImage.Size
}
);
}
}
Проблема в том, что у всех символьных растровых изображений слишком много места слева и справа. Поэтому, когда я отображаю текст с помощью этих растровых изображений на экране, текст похож на то, что после каждого символа добавляется пробел. Как я могу это починить? Возможно, есть что-то, чего я не знаю о шрифтах или о том, как они должны отображаться. Я знаю, что могу обрезать растровые изображения вручную, но это не очень точно и ясно. Кроме того, у некоторых символов вообще нет лишних пробелов.