-
Как перевести значения координат из логических юнитов в пиксели?
-
См. Graphics -> TMetafile.GetWidth/GetHeight.
-
Смотрел.. Эту строку видел: Result := MulDiv(FWidth, ScreenLogPixels, HundredthMMPerInch); Увы. В файле координаты непонятно в каких единицах измерения, а здесь FWidth в сотых долях мимлимметра. А примерно к такой же формуле я и сам до этого пришёл.. То есть, для примера, fWidth у меня равен 28549, в результате получаем 1079 пикселей, а логические единицы для такой координаты -- 1152. Вот этого и не понимаю..
-
Там есть ещё вариант: 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.
Вообще если работает построение оболочки перебором всех элементов, то ИМХО лучше так и оставить (мало ли, какая-нибудь кривая программа запишет в заголовок неверные данные), если это не слишком медленно.
-
Да, этот код тоже смотрел. Нет, всё не то. Я по другому пути решил идти -- выведу канвас в bmp, а уж его-то я просканирую запросто. И всё будет так, как мне нужно..
|