Вниз
Скачать: CL | DM;

Разрешение и размер изображения TMetafile и Microsoft Word.   Найти похожие ветки 

 
guav ©   (2006-08-18 15:23) [0]

Требуется записать метафайл с заданым числом пикселей (Width, Height) и заданым DPI (Inch) (например, 273), чтобы при вставке в Word он имел размеры в см, определяемые вышеуказанными св-вами.
Когда задаю эти свойства для EMF, он создаётся всегда с 81 DPI, причём попытка задать DPI приводит к тому что размеры Width, Height в записанном WMF отличаются от заданнных.

Вопрос - можно ли получить EMF с требуемыми DPI и размерами в пикселях, если да, то как, если нет, какой формат следует применить ?


 
MBo ©   (2006-08-18 16:02) [1]

>чтобы при вставке в Word он имел размеры в см, определяемые вышеуказанными св-вами.

Попробуй задавать не Width, а mmWidth и mmHeight


 
guav ©   (2006-08-18 17:03) [2]

[1] MBo ©   (18.08.06 16:02)

> Попробуй задавать не Width, а mmWidth и mmHeight

Не получаестя

Задаю mmWidth и mmHeight так:
const
 MMPerInch = 25.4;
...
     MF.MMWidth := Round(FB.X / FRasterDpiX * MMPerInch);
     MF.MMHeight := Round(FB.Y / FRasterDpiY * MMPerInch);
{FRasterDpiX = FRasterDpiY = 273}


Получается при значениях этих св-в в диапазоне 100..200 значения Width и Height всего в несколько пискселей и размер изображения при вставке в Word меньше требуемого на пару порядков.


 
MBo ©   (2006-08-18 17:24) [3]

mmWidth задается в сотых долях миллиметра


 
guav ©   (2006-08-18 18:03) [4]


> mmWidth задается в сотых долях миллиметра

да, невнимательно прочитал справку, спасибо.

но не работает всё равно:
    MF.MMWidth := Round(FB.X / FRasterDpiX * MMPerInch * 100);
    MF.MMHeight := Round(FB.Y / FRasterDpiY * MMPerInch * 100);

и размер выходит несколько меньше требуемого.

попытался работать с Bitmap, меняя поля biXPelsPerMeter и biYPelsPerMeter. Работает если этот файл сохранять на диск, но через буфер обмена, используя SaveToClipboardFormat - нет. Как поместить TBitmap в буфер обмена с сохранением этих полей ?


 
MBo ©   (2006-08-18 18:17) [5]

>и размер выходит несколько меньше требуемого.
Да, мне тоже точно подогнать не удавалось, ошибка в несколько пикселов оставалась.

>поместить TBitmap в буфер обмена с сохранением этих полей
На мой взгляд, эти поля - справочные, свидетельствующие о параметрах контекста, в котором создавался битмап, а главное - размер в пикселах. При необходимости можно соответствующий Map режим в новом контексте сделать, но в своем, а в Word, к примеру, это не пройдет.


 
guav ©   (2006-08-18 18:44) [6]

> >и размер выходит несколько меньше требуемого.
> Да, мне тоже точно подогнать не удавалось, ошибка в несколько
> пикселов оставалась.

Ошибка  в моём случае измеряетcя не в пикселях а в милиметрах. И когда выходит вместо 13 см выходит 11 см, это неприемлемо :-(


> На мой взгляд, эти поля - справочные, свидетельствующие
> о параметрах контекста, в котором создавался битмап, а главное
> - размер в пикселах.

Экспериментально установлено что и Word и другие приложения, в которых предусмотрена работа в физических единицах таки учитывают эти поля.  Просто видимо при копировании у копии задаётся старое или стандартное значение. Сейчас пытаюсь выяснить, как скопировать BITMAP вручную без преобразований.


> При необходимости можно соответствующий Map режим в новом
> контексте сделать

Если создать контекст со своим Map-режимом и задать этот контекст для TMetafileCanvas, получится ли метафайл с соответствующим DPI ?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
2-1157791558
oleg_v
2006-09-09 12:45
2006.10.01
DBGridEh и селект


2-1157877145
zopa
2006-09-10 12:32
2006.10.01
class / class(TObject)


4-1148621971
DeeGreeZ
2006-05-26 09:39
2006.10.01
Как получить имя файла зная его handle


15-1158126179
Dima L
2006-09-13 09:42
2006.10.01
delphi 10 lite


3-1154020959
a123
2006-07-27 21:22
2006.10.01
Комментарии в SQL запросах




   Наверх