Как я могу получить размер шрифта в пикселях? - PullRequest
1 голос
/ 17 января 2012

Мой первоначальный инстинкт - получить текущую настройку DpiY системы через экземпляр Graphics, но я не могу понять, как его получить.

Spellunking через Reflector Я вижу, что Microsoft управляет им, используя небезопасный код:

IntPtr dC = UnsafeNativeMethods.GetDC(NativeMethods.NullHandleRef);
try
{
    using (Graphics graphics = Graphics.FromHdcInternal(dC))
    {
        float num = graphics.DpiY;
    }
}

Что такое управляемый эквивалентный способ создания графики, когда у меня нет графики?

Я пытался:

using (Graphics g = Graphics.FromHdc(IntPtr.Zero))
{
    return font.GetHeight(g.DpiY);
}

Но это выдает Значение не может быть нулевым исключение.

1 Ответ

1 голос
/ 17 января 2012

Вы можете попробовать использовать метод TextRendering, который не использует объект Graphics:

int textHeight = TextRenderer.MeasureText("Text", this.Font).Height;

Или, если необходимо, вы можете сделать свой собственный быстрый Graphic:

float textHeight;
using (Bitmap b = new Bitmap(1,1))
using (Graphics g = Graphics.FromImage(b)) {
  textHeight = this.Font.GetHeight(g.DpiY);
}
...