Я использую следующий код для создания BMP-файла размером 1bbp для использования на экране электронной бумаги. 8-пиксельный шрифт не виден, 20-пиксельный тоже выглядит не очень хорошо.
Я что-то упустил или это не способ сделать это?
public async Task<byte[]> Create()
{
var image = new Bitmap(480, 840);
using (Graphics graph = Graphics.FromImage(image))
{
graph.Clear(Color.White);
var fam = new FontFamily("Arial");
var font8 = new Font(fam, 8);
graph.DrawString(DateTime.Now.ToString("d-M-yy HH:mm:ss"), font8, Brushes.Black, 0, 0);
var font20 = new Font(fam, 20);
graph.DrawString(DateTime.Now.ToString("d-M-yy HH:mm:ss"), font20, Brushes.Black, 0, 12);
}
using (var ms = new MemoryStream())
{
var imgOut = new Bitmap(480, 840, PixelFormat.Format1bppIndexed);
Convert(image, imgOut);
imgOut.Save(ms, ImageFormat.Bmp);
return ms.ToArray();
}
}
Обновлять
Добавлен код (спасибо @canton7):
graph.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
Это было спасибо!





Похоже, он рисует сглаженный текст, а затем отбрасывает любые пиксели, которые были сглажены до оттенков серого (а не чистого черного). Вы можете видеть, что пиксели отбрасываются вокруг кривых, где вы ожидаете сглаживания, и это происходит больше с меньшими шрифтами, что опять же то, что вы ожидаете.
Попробуйте что-то вроде graph.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; или SingleBitPerPixelGridFit, чтобы отключить сглаживание (вероятно, вы получите лучшие результаты с помощью SingleBitPerPixelGridFit, так как он учитывает подсказки типов, но вам нужно будет протестировать и, возможно, протестировать разные шрифты).
using (Graphics graph = Graphics.FromImage(image))
{
graph.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
graph.Clear(Color.White);
var fam = new FontFamily("Arial");
var font8 = new Font(fam, 8);
graph.DrawString(DateTime.Now.ToString("d-M-yy HH:mm:ss"), font8, Brushes.Black, 0, 0);
var font20 = new Font(fam, 20);
graph.DrawString(DateTime.Now.ToString("d-M-yy HH:mm:ss"), font20, Brushes.Black, 0, 12);
}
См. Как: использовать сглаживание с текстом, чтобы узнать еще пару деталей.
Похоже, он рисует сглаженный текст, а затем отбрасывает любые пиксели, которые были сглажены до оттенков серого (а не чистого черного). Попробуйте что-то вроде
e.Graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;илиSingleBitPerPixelGridFit, чтобы отключить сглаживание.