Главная страница
    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}

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


 
McSimm ©   (2006-08-20 00:56) [41]

> И теперь можно осуществлять контроль над монитором. Имеется
> в виду делать с монитором то, что можно сделать с кнопок
> находящихся на мониторе.

Жаль производители мониторов об этом до сих пор не знают и лепят зачем-то дополнительный USB интерфейс для этих целей.


 
Pavia ©   (2006-08-20 01:01) [42]

Еще могу добавить если не верите мне то возьмите: линейку, рулетку, или сантиметр и померьте.

Про USB на мониторе, мало что знаю. Но выступает в качестве улучшения дизайна, для того чтобы всяки та Flash накопители могильники было проще подключать, к компьютеру.


 
McSimm ©   (2006-08-20 01:20) [43]

> Про USB на мониторе, мало что знаю.

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

Жаль, что они не научились делать этого по стандарту, который изменился с 2000 года :)


 
Pavia ©   (2006-08-20 01:24) [44]

Если хотите подробней вам на www.vesa.org только там мало информации лежит в открытом доступе. Советую искать пословам EDID(EXTENDED DISPLAY IDENTIFICATION DATA) и DDC (Display Data Channel).


 
Мефисто   (2006-08-20 01:26) [45]


> Pavia ©   (20.08.06 00:53) [40]



> Другая часть засекречена.


Кто этот жадный подлец? :)


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


Скорее не изменилось, а кое что дополнилось.


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


И так для каждого девайса будем коэффициенты подбивать?


> Еще могу добавить если не верите мне то возьмите: линейку,
>  рулетку, или сантиметр и померьте.


Взял, померил. Результат приблизительно, так попадает. Но с моей линейкой, чего-то погрешность более 1,5-2 см. Толи моник у меня кривой, толи линейка :)


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


> Pavia ©   (20.08.06 01:24) [44]


Попробуйте-ка получить возвращаемы значения при разных разрешениях дисплея:


>  vsiz := GetDeviceCaps(h,VERTSIZE);  {display height in
> mm}


Раз по твоему мнению, винда получает точные значения от монитора, то почему при разных разрешениях дисплея вылазят разные цифры? Динамически меняются физические размеры монитора? :)))

Это, так, еще раз тебе на засыпку, чтобы развеять миф в который ты веришь. Получить точные СМ для монитора не реально, придется все время подбивать некий коэффициэнт. А вот для принтеров, можно получить точный расчет.


 
Anatoly Podgoretsky ©   (2006-08-20 11:23) [47]

Верить не запретишь.


 
Anatoly Podgoretsky ©   (2006-08-20 11:48) [48]

Произвел проверку
procedure TForm1.TntButton1Click(Sender: TObject);
begin
 TntLabel1.Caption := IntToStr(GetDeviceCaps(GetDC(Handle),HORZSIZE));
 TntLabel2.Caption := IntToStr(GetDeviceCaps(GetDC(Handle),VERTSIZE));
end;

При разрешении 1920*1200 получил 512*320 что не совсем то, но близко
При разрешении 1600*900 получил 520*292 что то фантастическое
При разрешении 1280*1024 получил 400*320 что то резко сжался монитор
При разрешении 800*600 получил 426*320 что то совсем не в порядке с моим монитором, физические размеры гуляют куда угодно

Как сказал Прудков, не верь глазам своим. Дальше будешь песни петь про DDC


 
Мефисто   (2006-08-20 12:32) [49]


> Anatoly Podgoretsky ©   (20.08.06 11:48) [48]


Про что всем форумом и разжевываем несчастному :)

Ибо системе пофиг на физический размер пикселя (и межпиксельный шаг) монитора. Для системы главное получить список поддерживаемых разрешений для монитора дабы корректно с данным устройством общаться.

Pavia  ©   (20.08.06 01:24) [44]

Могу еще загвостку подкинуть. Непомню какая компания реализовала следующую технологию для ЭЛТ мониторов. NEC или Sony. Подзабыл как данная технология называлась. Суть в том, что для улучшения качества изображения, физические пиксели монитора имели форму немного вытянутого элипса. И как теперь подсчитывать визический размер сие пикселя? :) Это раз.

Если обратите внимание, то заметите, что пиксели монитора чаще всего расположены в шашечном порядке. (У кинескопов для телевизоров к примеру, эти физические пиксели чаще всего расположены в шахматном порядке). Вот, физические пиксели монитора расположены в шашечном порядке, как опять точно получить размер? Ведть координатная сетка X и Y для вычисления положения пикселя уже не совсем верна. Это два.

На прилавках уйма всяких мониторов. У многих из них свои физические характеристики, разная технология изготовления. Если бы под каждый пришлось подстраиваться в милемтры и сантиметры, чтобы из себя представляла ОС и был бы такой широки выбор мониторов? Это три.


 
McSimm ©   (2006-08-20 13:00) [50]

> пиксели монитора чаще всего расположены в шашечном порядке.

Не довод.
Компьютер не имеет никаких дел с "физическими пикселями".
Это и не пиксели вовсе. Пиксель отрисовывается несколькими ячейками матрицы монитора.
Координатная сетка XY верна независимо от физического устройства отображающей поверхности.


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


> McSimm ©   (20.08.06 13:00) [50]



> Это и не пиксели вовсе. Пиксель отрисовывается несколькими
> ячейками матрицы монитора.


Я и писал физический пиксель монитора подразумевая эту самую ячейку :) А не тот пиксель, который представляется системой. Треп то в ветке пошел с Pavia  © узнаем мы вызические размеры в мм или нет. Т.к. по мнению Pavia  © в мониторе эти физические данные содержаться и виндовс может получить к ним доступ.


> Компьютер не имеет никаких дел с "физическими пикселями".


Уже писал об этом и не раз, еще в предыдущей ветке на это наставлял.
Повторил об этом еще постом выше:


> Ибо системе пофиг на физический размер пикселя (и межпиксельный
> шаг) монитора. Для системы главное получить список поддерживаемых
> разрешений для монитора дабы корректно с данным устройством
> общаться.


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


 
хм...   (2006-08-20 13:49) [52]


> Произвел проверку
> procedure TForm1.TntButton1Click(Sender: TObject);
> begin
>  TntLabel1.Caption := IntToStr(GetDeviceCaps(GetDC(Handle),
> HORZSIZE));
>  TntLabel2.Caption := IntToStr(GetDeviceCaps(GetDC(Handle),
> VERTSIZE));
> end;
> При разрешении 1920*1200 получил 512*320 что не совсем то,
>  но близко
> При разрешении 1600*900 получил 520*292 что то фантастическое
> При разрешении 1280*1024 получил 400*320 что то резко сжался
> монитор
> При разрешении 800*600 получил 426*320 что то совсем не
> в порядке с моим монитором, физические размеры гуляют куда
> угодно
>
> Как сказал Прудков, не верь глазам своим. Дальше будешь
> песни петь про DDC

а я проверил на ноутбуке:
при режиме 1024*768: 320*240
при режиме 800*600: 320*240
как бы практически совпадает...
линейкой мерил: 305*230...


 
Мефисто   (2006-08-20 14:06) [53]


> хм...   (20.08.06 13:49) [52]



> как бы практически совпадает...


Вот имено, что как бы :)
Может совпадение?

Мы вот с АП - ЭЛТ мониторы тестили. Размеры скачут как хотят.
Оно же как вроде должно быть константа :)


 
Anatoly Podgoretsky ©   (2006-08-20 14:20) [54]

Мефисто   (20.08.06 14:06) [53]
Я тестировал LCD c цифровым интерфейсом! Где гарантирован размер, органы управления им заблокированы, никаких проблем, как в случае аналогового интерфейса.
И еще у меня два монитора, вне зависимости от того на каком мониторе происходил запуск размеры не меняли, только при изменении разрешения, он почему вдруг становился резко уже.


 
vrem   (2006-08-20 14:22) [55]

Эскперимент - пусть каждый измерит.


 
Мефисто   (2006-08-20 14:22) [56]


> Anatoly Podgoretsky ©   (20.08.06 14:20) [54]


Вах, хороший у Вас LCD с таким высоким разрешением. А я думал по разрешениям это ЭЛТ :)


 
Anatoly Podgoretsky ©   (2006-08-20 14:26) [57]

Мефисто   (20.08.06 14:22) [56]
Вообще то у меня слабый монитор, просто М9 не потянул, точнее посчитал не экономичным для дома.


 
хм...   (2006-08-20 14:57) [58]

цифры там и вправду лгут, сейчас написал маленькую программку которая должна нарисовать исходя из этих пикселей квадрат 10см*10см, в итоге в обоих режимах рисовался квадрат 9,5*9,5...
или может у меня линейка неправильная? :)))


 
Anatoly Podgoretsky ©   (2006-08-20 15:35) [59]

Линейка у тебя правильная, просто под каждый монитор и разрешение нужна своя линейка.


 
Pavia ©   (2006-08-20 16:17) [60]

Посмотрел при разных разрешениях. Виндоус как то хитро меняет цифры, а не должен.


 
Anatoly Podgoretsky ©   (2006-08-20 16:22) [61]

Вот именно согласно тебе не должен, поскольку размер монитора не меняется. Отсюда сделай вывод насчет этой функии сам.


 
Pavia ©   (2006-08-20 16:31) [62]

Anatoly Podgoretsky
Я сделал вывод. Попробую получить эти сантиметры другим методом.


 
Мефисто   (2006-08-20 16:40) [63]


> Pavia ©   (20.08.06 16:31) [62]


Ждем с нетирпением ;)

Хорошая ветка получилась. Может еще этот вопрос на других форумах задать :)


 
Pavia ©   (2006-08-20 17:09) [64]

Я пока до WMI, но вот функция с карактеровкой. На LSD мониторах должна давать точный результат, а вот на ЖК надо проверить.
function MaxHORRES:DWord;
var
i: Integer;
DevMode : TDeviceMode;
begin
Result:=0;
i:=0;
while EnumDisplaySettings(nil,i,DevMode) do
  with Devmode do
   begin
   if dmPelsWidth>Result then Result:=dmPelsWidth;
   inc(i);
   end;
end;

procedure CmPerPixel(canvas:TCanvas; var xcmpp,ycmpp: Real);
var h:HDC;
  MHRes,hres,vres,hsiz,vsiz:integer;
begin
 MHRes:=MaxHORRES;
 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 := hres/MHRes*hsiz/hres*0.1;
 ycmpp := hres/MHRes*vsiz/vres*0.1;
end;


 
Virgo_Style ©   (2006-08-20 17:53) [65]

ну не взлетит же.

где зависимость от координаты?


 
Pavia ©   (2006-08-21 00:44) [66]

Взлетит куда дентся. :D

Я решил из реестра прочитать информацию о мониторе. ;)
Должно работать в WinNT(WinXP, Win2K).


function ReadEDID(EDID:PByte):Boolean;
var
MyKey:HKey; { Handle для работы с разделом }
StrKey:String;
Buf:array[0..1023] of char; { Буфер }
Err, i:longint;
RegData:DWord;
begin
Result:=True;
StrKey:="SYSTEM\ControlSet001\Enum\DISPLAY\";
Err:=RegOpenKey(HKEY_LOCAL_MACHINE,@StrKey[1],MyKey); { Открыли раздел }
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;
{Определили имя первого подраздела }
Err:=RegEnumKey(MyKey,0,Buf,Sizeof(Buf));
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;
StrKey:=StrKey+Buf+"\";
Err:=RegOpenKey(HKEY_LOCAL_MACHINE,@StrKey[1],MyKey); { Открыли раздел }
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;
{Определили имя первого подраздела }
Err:=RegEnumKey(MyKey,0,Buf,Sizeof(Buf));
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;
StrKey:=StrKey+Buf+"\Device Parameters\";
Err:=RegOpenKey(HKEY_LOCAL_MACHINE,@StrKey[1],MyKey); { Открыли раздел }
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;
i:=256;
RegData:=REG_BINARY;
Err:=RegQueryValueEX(MyKey,"EDID",nil,@RegData,PByte(EDID),@i);
if Err<> ERROR_SUCCESS then
begin
Result:=False;
Exit;
end;

end;

procedure CmPerPixel(var xcmpp,ycmpp: Real);
var
  hres,vres,hsiz,vsiz:integer;
  Buf:array [0..255] of Byte;
  i:Integer;
  c:Byte;
begin
 hres := GetSystemMetrics(Sm_Cxscreen);  {display width in pixels}
 vres := GetSystemMetrics(Sm_CYscreen);  {display height in pixels}
 hsiz := 0;
 vsiz := 0;
if ReadEDID(@buf) then
begin
c:=0;
for i:= 0 to 127 do c:=c+Buf[i];  {Check summ}
if c=0 then
 begin
 hsiz:=buf[21]*10;
 vsiz:=buf[22]*10;
 for i:=0 to 3 do
  case buf[54+i*18+3] of
  $FA..$FF:;
  else
   begin
   hsiz:=buf[54+i*18+12]+((buf[54+i*18+14] and $F0)shl 4);           {H_SIZE}
   vsiz:=buf[54+i*18+13]+((buf[54+i*18+14] and $0F)shl 8);           {V_SIZE}
   end;
 end;
end;
end;
 xcmpp := hsiz/hres*0.1;
 ycmpp := vsiz/vres*0.1;
end;


 
Pavia ©   (2006-08-21 01:38) [67]

Я тут подумал новерно надо заменить "ControlSet001" на "CurrentControlSet".


 
guav ©   (2006-08-21 01:54) [68]

> Я решил из реестра прочитать информацию о мониторе. ;)

А я решил не ставить драйвер для монитора :-p


> {Определили имя первого подраздела }

А первым у меня там  вообще телевизор идёт ;-)


 
KilkennyCat ©   (2006-08-21 01:59) [69]

> [68] guav ©   (21.08.06 01:54)
> А первым у меня там  вообще телевизор идёт ;-)


С барахлящим строчником ;)


 
Pavia ©   (2006-08-21 02:05) [70]


> А я решил не ставить драйвер для монитора :-p

А это зависет от драйвера видео карты, а не от монитора :-p


 
KilkennyCat ©   (2006-08-21 02:14) [71]

> [70] Pavia ©   (21.08.06 02:05)


неправда.


 
guav ©   (2006-08-21 02:17) [72]


> А это зависет от драйвера видео карты, а не от монитора
> :-p

Возможно. всё равно у телевизора ключика EDID нет.


 
Virgo_Style ©   (2006-08-21 08:30) [73]

Pavia ©   (21.08.06 0:44) [66]

Точечная статическая модель. несерьезно. Предъявите динамическую распределенную - будет тема для разговора...



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

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

Наверх





Память: 0.67 MB
Время: 0.042 c
8-1140628607
Sour Smile
2006-02-22 20:16
2006.09.10
Как правильно нарисовать дым?


3-1151652678
salexn
2006-06-30 11:31
2006.09.10
Отловить из-за чего не законектилось


2-1155895482
иван8511
2006-08-18 14:04
2006.09.10
Как сделать папку активной?


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


15-1155708212
Furyz
2006-08-16 10:03
2006.09.10
MySQl





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