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

Вниз

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

 
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.61 MB
Время: 0.028 c
2-1156119958
Ref
2006-08-21 04:25
2006.09.10
таблица Excel


2-1156253429
AlexanderMS
2006-08-22 17:30
2006.09.10
Зачем нужен const?


15-1155554018
ArtemESC
2006-08-14 15:13
2006.09.10
государство Монако!!!


15-1155020125
QuickFinder
2006-08-08 10:55
2006.09.10
Популярность поисковиков


6-1145597801
ms_odin
2006-04-21 09:36
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский