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

Вниз

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

 
apic ©   (2006-08-18 17:52) [0]

Мне нужно нарисовать на экране например прямоугольник 10х5 см, в натуральную величину, но в прграммировании графики, насколько я знаю все в пикселях, Так вот может кнонибудь подкинуть ф-ции преобразования пикселей в см и наоборот


 
Джо ©   (2006-08-18 17:58) [1]

Выводишь на экран квадрат 100x100 пикселей, просишь пользователя замерить его линейкой и ввести размеры в сантиметрах. После этого, получаешь коэффициенты перехода и пользуешься ими при пересчете.


 
Ega23 ©   (2006-08-18 17:59) [2]

dpi, дюймы потом в сантиметры переводи. Типа 1 дюйм - 2,54 см. (могу ошибаться)


 
Германн ©   (2006-08-18 18:04) [3]


> Ega23 ©   (18.08.06 17:59) [2]
>

Не поможет. Есть ведь настройки у монитора. Так что только [1] :-(


 
Ega23 ©   (2006-08-18 18:07) [4]


> Не поможет. Есть ведь настройки у монитора.


А они разве отличаются от Screen?


 
guav ©   (2006-08-18 18:11) [5]

Используя SetMapMode можно указывать всё в десятых или сотых мм.
Используя GetDeviceCaps можно узнать количество пикселей на дюйм и пересчитывать в точки используя это значение.

Но эти функции точно работают для принтера, вряд ли эти функции будут точно работать для монитора.
[1].


 
Virgo_Style ©   (2006-08-18 18:17) [6]

Ega23 ©   (18.08.06 18:07) [4]

а если подкрутить "размер" или "форма"?


 
McSimm ©   (2006-08-18 18:20) [7]


> Ega23 ©

Мониторы 14" или 21" будут отличаться в метрических единицах, но не в dpi.


 
Ega23 ©   (2006-08-18 18:45) [8]


> Мониторы 14" или 21" будут отличаться в метрических единицах,
>  но не в dpi.


Блин. А ведь и вправду так... Не знал... Точнее - не задумывался.
Буду знать, спасибо.


 
DesWind ©   (2006-08-18 19:30) [9]


> apic ©   (18.08.06 17:52) 


> guav ©   (18.08.06 18:11) [5]

А измерение в сантиметрах только и имеет смысл для принтера. Причем то что видно на мониторе совсем не то что будет потом отбражено на принтере. Надо через dpi пересчитывать т.к. он разный.


 
Anatoly Podgoretsky ©   (2006-08-18 23:52) [10]

Пиксели абстрактная единица, безразмерная, а сантиметры конкретная.
Как перевести триста пикселей в сантиметры?


 
guav ©   (2006-08-19 00:11) [11]

> Как перевести триста пикселей в сантиметры?

Result := 300 / GetDeviceCaps(DC, LOGPIXELSY) * 2.54


 
Ketmar ©   (2006-08-19 00:14) [12]

> [11] guav ©   (19.08.06 00:11)
и что? получим предположение, не более.


 
Anatoly Podgoretsky ©   (2006-08-19 00:24) [13]

А причем тут GetDeviceCaps?
Повторяю вопрос сколько сантиметров в 300 пикселей?
Прошу отвечать серьезно.


 
Ketmar ©   (2006-08-19 00:26) [14]

кстати, а почему Y?


 
guav ©   (2006-08-19 01:19) [15]

> А причем тут GetDeviceCaps?

При том что размер пикселей зависит от контекста. В одном случае в в сантиметре 236 пикселей в другом может быть 38,  и т.д.

> [14] Ketmar ©   (19.08.06 00:26)
> кстати, а почему Y?

В чужих исходниках часто замечал, что когда нужно выбрать одно из разрешений, выбирают Y.
Например в InitScreenLogPixels из unit Graphics. Почему - не знаю.


 
Ketmar ©   (2006-08-19 02:29) [16]

> [15] guav ©   (19.08.06 01:19)
ну и получают ерунду для диагонали, например, при неквадратных пикселах.
да и для горизонтали ерунду получают, вообще-то. %-)


 
isasa ©   (2006-08-19 08:47) [17]

Anatoly Podgoretsky ©   (19.08.06 00:24) [13]
Можно рискнуть, посчитать, отталкиваясь от размера "зерна" трубы(для LCD ?), в прдположении, что это 1 пиксел (0,2 0.22 0.25 мм).
Хотя, это тоже, не факт.


 
Мефисто   (2006-08-19 09:31) [18]


> isasa ©   (19.08.06 08:47) [17]


Совсем не факт, утверждение частично верно если уставновлено максимальное разрешение изображения (еще ксати есть шаг между точками :) ). А вот если разрешение меньше установлено? Сколько пиксель займет физических точек моника для своего отображения?


 
isasa ©   (2006-08-19 11:32) [19]

Мефисто   (19.08.06 09:31) [18]

Ну, исходные для расчета:
Кадр видимой диагонали монитора(см. документацию) в пропорции 4:3(16:9, или что там еще) на разрешении X x Y (например, 1024x768). Предполагаем, что юзер нормально растянул картинку на весь экран(размеры по горизонтали и вертикали).
В, общем, грубо посчитать можно.


 
Ketmar ©   (2006-08-19 13:12) [20]

> [19] isasa ©   (19.08.06 11:32)
а по какому праву мы это предполагаем? %-)


 
McSimm ©   (2006-08-19 13:16) [21]

> Кадр видимой диагонали монитора(см. документацию)


Мастера, у меня проблема. Как программно узнать текущее разрешение экрана в пикселах я уже выяснил. Подскажите пожалуйста, как программно посмотреть в документацию к монитору - в хелп и фак не посылать, помогите, горю, и т.п.

А, это, код давай :)
(чуть не забыл)


 
Мефисто   (2006-08-19 13:18) [22]


> McSimm ©   (19.08.06 13:16) [21]


Что-то подобное уже вроде обсуждалось :) Кажися програмно узнать физический размер пикселя моника.


 
McSimm ©   (2006-08-19 13:23) [23]

> Что-то подобное уже вроде обсуждалось :)

Неоднократно.

Если программе действительно необходима метрическая привязка, то программе просто необходим мастер калибровки, с помощью которого пользователь настроит программу на соответствие между пикселами и метрами.
Как и сказали в первом же ответе.

Решение элементарное, удобное и надежное.


 
Anatoly Podgoretsky ©   (2006-08-19 14:32) [24]

Можно перевести дюймы в сантиметры, но пиксели перевести ни во что нельзя. Единица эта безразмерная.


 
isasa ©   (2006-08-19 15:24) [25]

McSimm ©   (19.08.06 13:23) [23]
... то программе просто необходим мастер калибровки,...


Не, ну цветные бумажки прикладывать к экрану доводилось(калибровал View Sonic), явно просили, приложи ... но линейку.
Видел только кадров, пытавшихся проверить размер диагонали линейкой и потом наезжавших на продавца, не то ... :)


 
SerJaNT ©   (2006-08-19 15:32) [26]

Кстати, PhotoShop считает что 1 см. = 28 пикселям при разрешении 28,346 пикс/см. Теперь остается узнать разрешение :-).
Только при увеличении разрешения увеличивается и кол-во пикселей на 1 см.


 
vrem   (2006-08-19 17:15) [27]

Cпособ [1] пример не правильного пиара, пример [23] это правильный пиар. имхо :)


 
Pavia ©   (2006-08-19 21:17) [28]


> Можно перевести дюймы в сантиметры, но пиксели перевести
> ни во что нельзя. Единица эта безразмерная.

Еденица без размерная. Но перевести можна. Вот вы на монитор смотрите? Пиксели видите?(Ой нет, выже такой старой что их не видите) Ну картинку то видите? Картинка имеет размер. На картинке число пикселей известно.
А следовательно перевести можно. Откуда виндоус знает физичиские размеры? Да знает, от манитора он их знает.

procedure CmPerPixel(canvas:TCanvas; var xcmpp,ycmpp: Real);
var h:HDC;
   hres,vres,hsiz,vsiz:integer;
begin
  h:=canvas.handle;
  hres := GetDeviceCaps(h,HORZRES);   {display width in pixels}
  vres := GetDeviceCaps(h,VERTRES);   {display height in pixels}
  hsiz := GetDeviceCaps(h,HORZSIZE);  {display width in mm}
  vsiz := GetDeviceCaps(h,VERTSIZE);  {display height in mm}
  xcmpp := hsiz/hres*0.1;
  ycmpp := vsiz/vres*0.1;
end;


> Что-то подобное уже вроде обсуждалось :) Кажися програмно
> узнать физический размер пикселя моника.

Да обсуждалась, кажись я участвовал при этом обсуждение.


 
Мефисто   (2006-08-19 21:36) [29]


> Pavia ©   (19.08.06 21:17) [28]


Продолжим боянище? :)


 
McSimm ©   (2006-08-19 22:27) [30]

> Откуда виндоус знает физичиские размеры? Да знает, от манитора
> он их знает.

Или от телевизора ?

А еще есть возможность одну и ту же картинку выводить на разные устройства одновременно. Например на 14" и на 21"


 
Anatoly Podgoretsky ©   (2006-08-19 23:25) [31]

Pavia ©   (19.08.06 21:17) [28]
Ты переводишь не пиксели, а пиксели на дюйм, при том в попугаях, поскольку это значение будет и для 17 дюймов и для 19 дюймов. И оно равно 72 или 96 пикселей на дюйм.


 
Pavia ©   (2006-08-20 00:10) [32]


> Pavia ©   (19.08.06 21:17) [28]
> Ты переводишь не пиксели, а пиксели на дюйм, при том в попугаях,
>  поскольку это значение будет и для 17 дюймов и для 19 дюймов.
>  И оно равно 72 или 96 пикселей на дюйм.
> <Цитата>

Миллиметр это 1/10 см. О каких дюймах идет речь???
В мониторе записаны его параметры. Они указываются либо в сантиметрах либо более точно в миллиметрах.

То, что вы говорите это DPI и оно может быть произвольным. Но это относиться больше к шрифтам. Или же для переноса данных с одного устройства на другое, для правильного масштабирования. Но часто не работает, так как надо.

> Или от телевизора ?

Нет, телевизор не имеет обратной связи с компьютером.

На два монитора можно подавать 2 разные картинки.


 
DesWind ©   (2006-08-20 00:18) [33]


> Anatoly Podgoretsky ©   (19.08.06 14:32) [24]

Про что и речь!.. Берем "слонов" и говорим что на мониторе это столько-то "слонов", главное их потом в сантиметры перевести! Если чесно, для меня это было открытием. Задали нам графический редактор накалякать... Накалякал!..  А потом препод говорит- "Теперь, напечатай что нарисовал." Ну, там Printer.Canvas и т.д. Для мя был шок... )))


 
Мефисто   (2006-08-20 00:20) [34]


> То, что вы говорите это DPI и оно может быть произвольным.


Несовсем...


> Но это относиться больше к шрифтам. Или же для переноса
> данных с одного устройства на другое, для правильного масштабирования.
>


???


> В мониторе записаны его параметры. Они указываются либо
> в сантиметрах либо более точно в миллиметрах.


Это уже по какому кругу? :)


 
McSimm ©   (2006-08-20 00:24) [35]

> Нет, телевизор не имеет обратной связи с компьютером.

А какие мониторы имеют ?
И по какому каналу ? RGB ?


> На два монитора можно подавать 2 разные картинки.

Речь не о том, несложное устройство позволяет от одного выхода отображать картинку на несколько устройств. Какую информацию будет "знать Windows" в этом случае ?


 
Anatoly Podgoretsky ©   (2006-08-20 00:31) [36]

McSimm ©   (20.08.06 00:24) [35]
Даже проще Standard Monitor


 
Pavia ©   (2006-08-20 00:34) [37]


> И по какому каналу ? RGB ?

Нет канал DDC (или другое название I2C). Стандартый интерфейс для всех мониторов от 1994 года.

А ну это надо смотреть на устройство и копаться в ядре виндоуса, что он там вернет в случаи не получения параметров монитора.


 
DesWind ©   (2006-08-20 00:41) [38]


> DesWind ©   (20.08.06 00:18) [33]

До этого я не понимал филосифии единиц измерения. ))))


 
Мефисто   (2006-08-20 00:42) [39]


> Pavia ©   (20.08.06 00:34) [37]


Ну поделитесь уже конкретной информацией.
Всем уже жуть как интересно.


 
Pavia ©   (2006-08-20 00:53) [40]


> Ну поделитесь уже конкретной информацией.
> Всем уже жуть как интересно.

Я поделился все информацией, которую имею в наличии. Другая часть засекречена.
Разве, что еще могу добавить, что в 2000 году стандарт изменился. И теперь можно осуществлять контроль над монитором. Имеется в виду делать с монитором то, что можно сделать с кнопок находящихся на мониторе.

Есть монитор он соединен с видео картой. Видео карта может не только выводить информацию на монитор, но прочитать информацию с монитора о его характеристиках. одной из такой характеристик является размеры изображения на мониторе по горизонтали и вертикали в сантиметрах и если доступна более детальные данные то и в миллиметрах. Вот эти значение и получаются при помощи следующих директив.
 hsiz := GetDeviceCaps(h,HORZSIZE);  {display width in mm}
 vsiz := GetDeviceCaps(h,VERTSIZE);  {display height in mm}

Осталось узнать разрешение и сделать перерасчет.



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

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

Наверх





Память: 0.56 MB
Время: 0.047 c
2-1155736041
AlexanderMS
2006-08-16 17:47
2006.09.10
Вопросы: что компилируется, а что - нет. И когда.


2-1155816088
fast2
2006-08-17 16:01
2006.09.10
Как сделать, чтоб при нажатии на Enter, не зависимо от того, где


15-1155426441
SerJaNT
2006-08-13 03:47
2006.09.10
Выбор машины


1-1153903742
youta
2006-07-26 12:49
2006.09.10
Уважаемые мастера! Как по кнопке Esc закрыть окно формы??


2-1155804709
UMU
2006-08-17 12:51
2006.09.10
Вычесть дату





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский