GraphicsPath.addString неправильно расположен на linux? - PullRequest
0 голосов
/ 07 февраля 2020

В настоящее время я пишу приложение . 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 Выходы генерируются правильно или как ожидается, как это для примера:

Test A

Но при запуске на моем сервере Ubuntu / linux GraphicsPath / Shadow будет генерировать так:

Test B

Моей первой мыслью была Ошибка в расчете DPI, поскольку на моем Сервере не установлен X-сервер, но, по-видимому, GraphicsPath отображается правильно; просто неправильная позиция?

* Editnote: Также «Форматирование», очевидно, работает на обычном DrawString ... так что это очень странно

Может быть, я что-то пропустил, но это выглядит как Платформо-специфическая c ошибка для меня?

Буду признателен за любую помощь и мнения на данный момент ... Спасибо

...