Перевод пикселей в миллиметры
От: Angakok Россия  
Дата: 26.04.07 21:13
Оценка:
Как осуществить перевод экранных пикселей в реальные миллиметры ?

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

Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?
Re: Перевод пикселей в миллиметры
От: BoberPlus  
Дата: 27.04.07 05:40
Оценка:
Здравствуйте, Angakok, Вы писали:

A>Как осуществить перевод экранных пикселей в реальные миллиметры ?


GetDeviceCaps: LOGPIXELSX, LOGPIXELSY
Re[2]: Перевод пикселей в миллиметры
От: Angakok Россия  
Дата: 27.04.07 10:09
Оценка:
Здравствуйте, BoberPlus, Вы писали:

BP>Здравствуйте, Angakok, Вы писали:


A>>Как осуществить перевод экранных пикселей в реальные миллиметры ?


BP>GetDeviceCaps: LOGPIXELSX, LOGPIXELSY


Но тогда я получу число пикселей в логическом дюйме. А это будет работать верно только тогда, когда установлен родной драйвер монитора.
Re[3]: Перевод пикселей в миллиметры
От: Андрей Россия  
Дата: 27.04.07 10:21
Оценка:
Здравствуйте, Angakok, Вы писали:

skip

A>Но тогда я получу число пикселей в логическом дюйме. А это будет работать верно только тогда, когда установлен родной драйвер монитора.


Ты задачу уточни. Зачем тебе реальные миллиметры на мониторе? Ты их там линейкой что ли мерить будешь?
Re: Перевод пикселей в миллиметры
От: Аноним  
Дата: 27.04.07 12:23
Оценка:
Здравствуйте, Angakok, Вы писали:

A>Как осуществить перевод экранных пикселей в реальные миллиметры ?


Рисовать в метафайл (EMF) и не париться?
Re[4]: Перевод пикселей в миллиметры
От: Angakok Россия  
Дата: 27.04.07 13:37
Оценка:
Здравствуйте, Андрей, Вы писали:

А>Ты задачу уточни. Зачем тебе реальные миллиметры на мониторе? Ты их там линейкой что ли мерить будешь?


Да нет конечно. Просто хотелось получить результаты, максимально приближенные к реальным )


Здравствуйте, Аноним, Вы писали:

А>Рисовать в метафайл (EMF) и не париться?


Мне нужно для отображения на мониторе.
Re[5]: Перевод пикселей в миллиметры
От: SeLarin Россия http://selarin.livejournal.com
Дата: 27.04.07 18:57
Оценка:
Здравствуйте, Angakok, Вы писали:

A>Да нет конечно. Просто хотелось получить результаты, максимально приближенные к реальным )

А толку то? Если я на 21" мониторе поставлю 640x480 и на 14" поставлю 640x480, то хоть убейся, но программно ты не определишь где у меня большой монитор, а где маленький. И, соответственно, определить сколько пикселей в миллиметре ты не сможешь. Аналогично для всех остальных разрешений и размеров мониторов. Можно только условно принять, что, например, разрешение 800x600 соответствует 15" монитору, 1024х768 — 17" и т.д.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[6]: Перевод пикселей в миллиметры
От: Andrew S Россия http://alchemy-lab.com
Дата: 27.04.07 20:46
Оценка:
A>>Да нет конечно. Просто хотелось получить результаты, максимально приближенные к реальным )
SL>А толку то? Если я на 21" мониторе поставлю 640x480 и на 14" поставлю 640x480, то хоть убейся, но программно ты не определишь где у меня большой монитор, а где маленький. И, соответственно, определить сколько пикселей в миллиметре ты не сможешь. Аналогично для всех остальных разрешений и размеров мониторов. Можно только условно принять, что, например, разрешение 800x600 соответствует 15" монитору, 1024х768 — 17" и т.д.

Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Перевод пикселей в миллиметры
От: Andrew S Россия http://alchemy-lab.com
Дата: 27.04.07 20:52
Оценка:
A>Как осуществить перевод экранных пикселей в реальные миллиметры ? <skipped> Каким еще образом можно решить эту проблему, получив при этом более или менее приемлемые данные ?

Использовать встроенную трансформацию координат. Смотрите SetMapMode, SetViewportExtEx, SetWindowExtEx.
Смысл в том, чтобы дать виндовс самой масштабировать, а не делать это вручную.
При этом совершенно необязательно использовать MM_HIMETRIC\MM_LOMETRIC, можно получать информацию о размере монитора из EDID и соотв. образом устанавливать размеры вью\окна. В общем, вам бы Юаня почитать... Удачи.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: Перевод пикселей в миллиметры
От: SeLarin Россия http://selarin.livejournal.com
Дата: 28.04.07 09:40
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение.

И что? До тех пор пока я произвольно могу менять разрешение монитора, не меняя прочих параметров и не сообщая каким-либо образом системе (или программе) о размере монитора программно узнать о количестве пикселей на 1 мм невозможно.
Re[8]: Перевод пикселей в миллиметры
От: Andrew S Россия http://alchemy-lab.com
Дата: 28.04.07 10:33
Оценка:
AS>>Мимо. Перечитайте начальное сообщение, там не от разрешения определяется соотношение.
SL>И что? До тех пор пока я произвольно могу менять разрешение монитора, не меняя прочих параметров и не сообщая каким-либо образом системе (или программе) о размере монитора программно узнать о количестве пикселей на 1 мм невозможно.

Вы наивны. Узнать физические размеры монитора (и даже физические размеры _изображения_, используя параметры развертки) проблем не представляет еще со стародавних вин95. Я уже упоминал тут в качестве примера информацию из DDC-EDID, которую виндовс и использует в этих целях, вне зависимости от драйвера. А при желанию приложение тоже может использовать эту информцию, не полагаясь на маппинг системы — впрочем, особого смысла я тут не вижу.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Перевод пикселей в миллиметры
От: kulsary  
Дата: 30.04.07 08:52
Оценка:
Здравствуйте, 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). — это не пикселы
Re[2]: Перевод пикселей в миллиметры
От: Andrew S Россия http://alchemy-lab.com
Дата: 30.04.07 12:10
Оценка:
K>VERTRES Height of the display (in raster lines). — это не пикселы

Те же яйца, вид сбоку. Есть куча дисплеев (и видеорежимов), где вертикально идут растерные линиии, а горизонтально — пикселы. Все зависит от способа "обхода" — а на деле (а в особенности программно) все это именно пикселы.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.