C #: создать шрифт из логического шрифта (LOGFONT) - настройка качества игнорируется - PullRequest
2 голосов
/ 25 ноября 2010

Я пытаюсь создать System.Drawing.Font из LOGFONT, используя P / Invoke и Font.FromLogFont.Запрошенный шрифт был создан, однако он всегда имеет одинаковое качество рендеринга - независимо от того, какое значение я присвоил элементу lfQuality структуры LOGFONT.

здесь - соответствующий код:

<code>
//LOGFONT struct
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class LOGFONT
    {
        public const int LF_FACESIZE = 32;
        public int lfHeight;
        public int lfWidth;
        public int lfEscapement;
        public int lfOrientation;
        public int lfWeight;
        public byte lfItalic;
        public byte lfUnderline;
        public byte lfStrikeOut;
        public byte lfCharSet;
        public byte lfOutPrecision;
        public byte lfClipPrecision;
        public byte lfQuality;
        public byte lfPitchAndFamily;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LF_FACESIZE)]
        public string lfFaceName;
    }
Тогдаимпорт для CreateFontIndirect:
<code>
[DllImport("gdi32.dll", CharSet=CharSet.Auto)]
        public static extern IntPtr CreateFontIndirect(
            [In, MarshalAs(UnmanagedType.LPStruct)]
            LOGFONT lplf   // characteristics
            );
Теперь создайте шрифт:
<code>
LOGFONT lf = new LOGFONT();
lf.lfFaceName = "DejaVu Sans";
lf.lfHeight = 36;
lf.lfQuality = 5;
IntPtr handle = CreateFontIndirect(lf);</p>

<p>Font f = Font.FromLogFont(lf);

Таким образом, похоже, что управляемый код игнорирует член lfQuality.Любой способ исправить это?Я хотел бы контролировать способ отрисовки некоторых шрифтов, игнорируя глобальные настройки системы.

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Поскольку вы используете CLEARTYPE_QUALITY (5), вы можете зависеть от настроек ClearType системы Windows.

Смотрите это http://support.microsoft.com/kb/306527 и это http://www.howtogeek.com/howto/windows-vista/why-do-my-windows-vista-fonts-look-horrible/

0 голосов
/ 25 ноября 2010

Попробуйте с разными шрифтами.Не все шрифты поддерживают все режимы качества.

Проблема не должна быть связана с управляемым кодом, поскольку вы вызываете базовый API напрямую.(Если управляемый вызов FromLogFont не меняет ситуацию. Я думаю, это возможно, хотя это меня удивит.)

...