Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.043 c
2-1155811830
alexandrine
2006-08-17 14:50
2006.09.10
фильтр


15-1155806124
Rouse_
2006-08-17 13:15
2006.09.10
Каждому спамеру по бульдозеру :)


15-1155620805
Elen
2006-08-15 09:46
2006.09.10
Конфигурация для компа


15-1156171909
imbalacedees
2006-08-21 18:51
2006.09.10
Картинки


2-1156236491
misha_gr
2006-08-22 12:48
2006.09.10
Директивы компилятора