Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

Перевод пикселей в миллиметры   Найти похожие ветки 

 
Angakok ©   (2007-04-26 22:25) [0]

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

Пробовал:
[b]1. [/b]
Вычисляю число пикселей в миллиметре по X и по Y:
[code]
 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;

[/code]

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

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

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


 
McSimm ©   (2007-04-26 22:57) [1]


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

Включить в программу мастер для калибровки


 
Eraser ©   (2007-04-26 23:14) [2]

> [0] Angakok ©   (26.04.07 22:25)


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

а для чего такая задача?


 
Angakok ©   (2007-04-27 00:38) [3]


> McSimm ©   (26.04.07 22:57) [1]
> Включить в программу мастер для калибровки


То есть вывести линию, длину которой можно менять, и предложить пользователю измерить ее линейкой руками на мониторе, и зафиксировать "эталон", например, 10 мм ?


> Eraser ©   (26.04.07 23:14) [2]
> а для чего такая  задача?


Мне нужно будет использовать размеры объекта для расчета. То есть, например есть квадрат 20*20 пикселей. Пользователь задает размеры в миллиметрах, то есть для него это должно быть 20*20 мм.
Я использую компоненты FlexGraphics для работы с векторной графикой. Там есть масштабный коэффициент PixelScaleFactor. По умолчанию для него задано значение 1000. Это означает, что 1 пиксел на экране при масштабе 100% будет равен логическим единицам. То есть, для того, чтобы отобразить квадрат в 10 пикселов, размеры его сторон должны равняться 10*1000=10000 единицам. Так вот, минимальное значение PixelScaleFactor может быть 1 (так как целое). То есть получается, 1 пиксел = 1 мм. Но это не годится, так как получается что, например, линия длиной в 80 пикселов(то есть для пользователя тогда 80 мм) на экране выглядит в четверо меньше. То есть, придется самому вручную пересчитывать пиксели в миллиметры.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
2-1191402871
Pacific
2007-10-03 13:14
2007.10.28
WebBrowers1


15-1190811568
Azize
2007-09-26 16:59
2007.10.28
подскажите книжку


6-1172819387
zap8
2007-03-02 10:09
2007.10.28
Дата создания принятого файла по сети


15-1190994505
TwentyTwo
2007-09-28 19:48
2007.10.28
Может ли компьютер быть судьей?


6-1172583520
kernel
2007-02-27 16:38
2007.10.28
SMTP сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский