Конференция "Media" » WMF. Переформулирую вопрос
 
  • Феликс (05.06.08 11:43) [0]
    Как перевести значения координат из логических юнитов в пиксели?
  • Sapersky (05.06.08 13:08) [1]
    См. Graphics -> TMetafile.GetWidth/GetHeight.
  • Феликс (05.06.08 17:29) [2]
    Смотрел.. Эту строку видел:
    Result := MulDiv(FWidth, ScreenLogPixels, HundredthMMPerInch);
    Увы. В файле координаты непонятно в каких единицах измерения, а здесь FWidth в сотых долях мимлимметра. А примерно к такой же формуле я и сам до этого пришёл..
    То есть, для примера, fWidth у меня равен 28549, в результате получаем 1079 пикселей, а логические единицы для такой координаты -- 1152. Вот этого и не понимаю..
  • Sapersky (06.06.08 14:51) [3]
    Там есть ещё вариант:
         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.

    Вообще если работает построение оболочки перебором всех элементов, то ИМХО лучше так и оставить (мало ли, какая-нибудь кривая программа запишет в заголовок неверные данные), если это не слишком медленно.
  • Феликс (06.06.08 16:54) [4]
    Да, этот код тоже смотрел. Нет, всё не то. Я по другому пути решил идти -- выведу канвас в bmp, а уж его-то я просканирую запросто. И всё будет так, как мне нужно..
 
Конференция "Media" » WMF. Переформулирую вопрос
Есть новые Нет новых   [133928   +471][b:0][p:0]