В настоящее время я пишу приложение . NET Core для кроссплатформенности. Частично это приложение рисования текста и наложения на растровое изображение.
Итак, я добавил System.Drawing.Common
и в итоге получил рабочий код (Вкл. Windows), например:
public static Bitmap WriteText(Bitmap bmp, string txt)
{
RectangleF rectf = new RectangleF(0, 0, bmp.Width, bmp.Height);
// Create graphic object that will draw onto the bitmap
using (Graphics g = Graphics.FromImage(bmp))
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
StringFormat format = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
// dampening
using (Brush brush = new SolidBrush(Color.FromArgb(69, Color.Black)))
g.FillRectangle(brush, rectf);
var fSize = 26;
var fFam = Fonts.GetDefaultFontName();
// Draw the path
GraphicsPath p = new GraphicsPath();
p.AddString(txt, fFam, (int)FontStyle.Regular, g.DpiX * fSize / 72.2f, rectf, format);
g.DrawPath(new Pen(Color.FromArgb(180, Color.Black), 8), p);
// Draw the text
g.DrawString(txt, new Font(fFam, fSize), Brushes.White, rectf, format);
// Flush all graphics changes to the bitmap
g.Flush();
}
// Now save or use the bitmap
return bmp;
}
Вкл. Windows Выходы генерируются правильно или как ожидается, как это для примера:
Но при запуске на моем сервере Ubuntu / linux GraphicsPath / Shadow будет генерировать так:
Моей первой мыслью была Ошибка в расчете DPI, поскольку на моем Сервере не установлен X-сервер, но, по-видимому, GraphicsPath отображается правильно; просто неправильная позиция?
* Editnote: Также «Форматирование», очевидно, работает на обычном DrawString ... так что это очень странно
Может быть, я что-то пропустил, но это выглядит как Платформо-специфическая c ошибка для меня?
Буду признателен за любую помощь и мнения на данный момент ... Спасибо