похоже, сильно подразумевает WinForms. В любом случае, спасибо за отрицательное голосование.

, чтобы преобразовать пиксели в дюймы и наоборот. Я понимаю, что мне нужен DPI, но я не уверен, как получить эту информацию (например, у меня нетGraphics объект, так что это не вариант).

Есть ли способ?

 Mehrdad Afshari23 янв. 2009 г., 23:12
DPI чего? экран? принтер? ...?

Ответы на вопрос(1)

Решение Вопроса

амый простой пример, чтобы понять, почему это так, - это проектор. Разрешение на выходе, скажем, 1024x768, но значение DPI зависит от того, насколько далеко экран находится от проектора. WPF, например, всегда предполагает 96 DPI на видеоустройстве.

Предполагая, что вам все еще нужен ответ, независимо от точности, и у вас нет графического объекта, вы можете создать его с экрана с помощью P / Invoke и получить от него ответ.

Single xDpi, yDpi;

IntPtr dc = GetDC(IntPtr.Zero);

using(Graphics g = Graphics.FromHdc(dc))
{
    xDpi = g.DpiX;
    yDpi = g.DpiY;
}

if (ReleaseDC(IntPtr.Zero) != 0)
{
    // GetLastError and handle...
}


[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);    
[DllImport("user32.dll")]
private static extern Int32 ReleaseDC(IntPtr hwnd);
 epotter07 авг. 2009 г., 17:32
Исходя из того, что просил пользователь, это должен быть принятый ответ.

Ваш ответ на вопрос