Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Пиксели -> миллиметры


Автор: Angakok 26.4.2007, 21:24
Как осуществить перевод экранных пикселей в реальные миллиметры ?

Пробовал:
1. 
Вычисляю число пикселей в миллиметре по X и по Y:
Код

  HorResol,VertResol,HorScWidth,VertScHeight: Integer;
  PixXFact,PixYFact: Double;
  ...
  
  HorResol := GetDeviceCaps(GetDC(HWND(Nil)),HORZRES);
  VertResol := GetDeviceCaps(GetDC(HWND(Nil)),VERTRES);
  HorScWidth := GetDeviceCaps(GetDC(HWND(Nil)),HORZSIZE);
  VertScHeight := GetDeviceCaps(GetDC(HWND(Nil)),VERTSIZE);
  PixXFact := HorResol/HorScWidth;
  PixYFact := VertResol/VertScHeight;



Но такой вариант дает весьма неточные значения, которые с увеличением значения отображаемой величины, очень сильно искажаются.

2. 
Есть свойство класса TScreen - PixelsPerInch, которое дает число пикселей в логическом дюйме по вертикали. Но, очевидно, этого недостаточно. 

Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?

Автор: Snowy 27.4.2007, 01:57
Винда не знает, какой монитор подключен, если только не установлен родной драйвер монитора.
С родным драйвером значения получаются точные.
А вот если не ставить родной драйвер, то значение приходится угадывать.
PixelsPerInch - есть правильное решение.
Но действительно правильным оно будет только, если установлен родной драйвер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)