Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WMF. Переформулирую вопрос


Феликс ©   (2008-06-05 11:43:00) 

Как перевести значения координат из логических юнитов в пиксели?


Феликс   (2008-06-06 16:54:00) [1]

Да, этот код тоже смотрел. Нет, всё не то. Я по другому пути решил идти -- выведу канвас в bmp, а уж его-то я просканирую запросто. И всё будет так, как мне нужно..


Sapersky   (2008-06-06 14:51:00) [2]

Там есть ещё вариант:
     begin     { convert 0.01mm units to referenceDC device pixels }
       GetEnhMetaFileHeader(FHandle, Sizeof(EMFHeader), @EMFHeader);
       Result := MulDiv(FWidth,                      { metafile width in 0.01mm }
         EMFHeader.szlDevice.cx,                      { device width in pixels }
         EMFHeader.szlMillimeters.cx*100);            { device width in 0.01mm }
     end
FWidth/FHeight получаются из EMFHeader.rclFrame.

Вообще если работает построение оболочки перебором всех элементов, то ИМХО лучше так и оставить (мало ли, какая-нибудь кривая программа запишет в заголовок неверные данные), если это не слишком медленно.


Феликс   (2008-06-05 17:29:00) [3]

Смотрел.. Эту строку видел:
Result := MulDiv(FWidth, ScreenLogPixels, HundredthMMPerInch);
Увы. В файле координаты непонятно в каких единицах измерения, а здесь FWidth в сотых долях мимлимметра. А примерно к такой же формуле я и сам до этого пришёл..
То есть, для примера, fWidth у меня равен 28549, в результате получаем 1079 пикселей, а логические единицы для такой координаты -- 1152. Вот этого и не понимаю..


Sapersky   (2008-06-05 13:08:00) [4]

См. Graphics -> TMetafile.GetWidth/GetHeight.


Наверх

Титульная страница Поиск, карта сайта Написать письмо