Здравствуйте, BoberPlus, Вы писали:
BP>Здравствуйте, Angakok, Вы писали:
A>>Как осуществить перевод экранных пикселей в реальные миллиметры ?
BP>GetDeviceCaps: LOGPIXELSX, LOGPIXELSY
Но тогда я получу число пикселей в логическом дюйме. А это будет работать верно только тогда, когда установлен родной драйвер монитора.
Здравствуйте, Angakok, Вы писали:
A>Да нет конечно. Просто хотелось получить результаты, максимально приближенные к реальным )
А толку то? Если я на 21" мониторе поставлю 640x480 и на 14" поставлю 640x480, то хоть убейся, но программно ты не определишь где у меня большой монитор, а где маленький. И, соответственно, определить сколько пикселей в миллиметре ты не сможешь. Аналогично для всех остальных разрешений и размеров мониторов. Можно только условно принять, что, например, разрешение 800x600 соответствует 15" монитору, 1024х768 — 17" и т.д.
A>>Да нет конечно. Просто хотелось получить результаты, максимально приближенные к реальным ) SL>А толку то? Если я на 21" мониторе поставлю 640x480 и на 14" поставлю 640x480, то хоть убейся, но программно ты не определишь где у меня большой монитор, а где маленький. И, соответственно, определить сколько пикселей в миллиметре ты не сможешь. Аналогично для всех остальных разрешений и размеров мониторов. Можно только условно принять, что, например, разрешение 800x600 соответствует 15" монитору, 1024х768 — 17" и т.д.
Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение.
A>Как осуществить перевод экранных пикселей в реальные миллиметры ? <skipped> Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?
Использовать встроенную трансформацию координат. Смотрите SetMapMode, SetViewportExtEx, SetWindowExtEx.
Смысл в том, чтобы дать виндовс самой масштабировать, а не делать это вручную.
При этом совершенно необязательно использовать MM_HIMETRIC\MM_LOMETRIC, можно получать информацию о размере монитора из EDID и соотв. образом устанавливать размеры вью\окна. В общем, вам бы Юаня почитать... Удачи.
Здравствуйте, Andrew S, Вы писали:
AS>Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение.
И что? До тех пор пока я произвольно могу менять разрешение монитора, не меняя прочих параметров и не сообщая каким-либо образом системе (или программе) о размере монитора программно узнать о количестве пикселей на 1 мм невозможно.
AS>>Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение. SL>И что? До тех пор пока я произвольно могу менять разрешение монитора, не меняя прочих параметров и не сообщая каким-либо образом системе (или программе) о размере монитора программно узнать о количестве пикселей на 1 мм невозможно.
Вы наивны. Узнать физические размеры монитора (и даже физические размеры _изображения_, используя параметры развертки) проблем не представляет еще со стародавних вин95. Я уже упоминал тут в качестве примера информацию из DDC-EDID, которую виндовс и использует в этих целях, вне зависимости от драйвера. А при желанию приложение тоже может использовать эту информцию, не полагаясь на маппинг системы — впрочем, особого смысла я тут не вижу.
Здравствуйте, Angakok, Вы писали:
A>Как осуществить перевод экранных пикселей в реальные миллиметры ?
A>Пробовал: A>1. A>Вычисляю число пикселей в миллиметре по X и по Y: A>
A> HorResol,VertResol,HorScWidth,VertScHeight: Integer;
A> PixXFact,PixYFact: Double;
A> ...
A> HorResol := GetDeviceCaps(GetDC(HWND(Nil)),HORZRES);
A> VertResol := GetDeviceCaps(GetDC(HWND(Nil)),VERTRES);
A> HorScWidth := GetDeviceCaps(GetDC(HWND(Nil)),HORZSIZE);
A> VertScHeight := GetDeviceCaps(GetDC(HWND(Nil)),VERTSIZE);
A> PixXFact := HorResol/HorScWidth;
A> PixYFact := VertResol/VertScHeight;
A>
A>Но такой вариант дает весьма неточные значения, которые с увеличением значения отображаемой величины, очень сильно искажаются.
A>2. A>Есть свойство класса TScreen — PixelsPerInch, которое дает число пикселей в логическом дюйме по вертикали. Но, очевидно, этого недостаточно.
A>Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?
VERTRES Height of the display (in raster lines). — это не пикселы
K>VERTRES Height of the display (in raster lines). — это не пикселы
Те же яйца, вид сбоку. Есть куча дисплеев (и видеорежимов), где вертикально идут растерные линиии, а горизонтально — пикселы. Все зависит от способа "обхода" — а на деле (а в особенности программно) все это именно пикселы.