Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод пикселей в миллиметры

7.1K
26 апреля 2007 года
Dunkel
33 / / 16.11.2005
Как осуществить перевод экранных пикселей в реальные миллиметры ?

Пробовал:
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, которое дает число пикселей в логическом дюйме по вертикали. Но, очевидно, этого недостаточно.

Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?
19K
30 апреля 2007 года
Malice
33 / / 13.03.2007
Использовать функцию PixelsPerInch, а при переводе в милиметры(сантиметры) указывать с большей точностью значение дюйм/сантиметр. Проверял на практике - распечатывал линии и линеечкой измерял :p
257
30 апреля 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=Dunkel]Проверял на практике - распечатывал линии и линеечкой измерял [/quote]
во-первых, насколько я понимаю автору надо, чтобы размер на экране совпадал с вычисленным; во-вторых: где-то читал, что PixelsPerInch дает хорошие результаты только тогда, когда стоит родной драйвер монитора, который идет вместе с монитором.
вообще задача, как видно, непростая.
3.2K
02 мая 2007 года
Sania
186 / / 28.10.2006
Вообще я бы делал так:
 
Код:
PixXFact := 2.54/GetDeviceCaps(GetDC(HWND(Nil)),LOGPIXELSX);
PixYFact := 2.54/GetDeviceCaps(GetDC(HWND(Nil)),LOGPIXELSY);

LOGPIXELSX Number of pixels per logical inch along the screen width.
LOGPIXELSY Number of pixels per logical inch along the screen height.
И когда я мерял размер своего монитора, он совпал абсолютно...
Про драйвера kosfiz абсолютно прав: если драйвер вам скажет, что у вас метр на метр, то тут уж не попишешь :D
303
03 мая 2007 года
makbeth
1.0K / / 25.11.2004
Sania, а зачем лезть в WinAPI? :)
Смотрим в исходник класса TScreen:
 
Код:
begin
    ...
    DC := GetDC(0);
    FPixelsPerInch := GetDeviceCaps(DC, LOGPIXELSY);
    ...
end;


;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог