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

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

Разрешение и размер изображения TMetafile и Microsoft Word.


guav ©   (2006-08-18 15:23:00) 

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

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


guav   (2006-08-18 18:44:00) [1]

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

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


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

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


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

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


MBo   (2006-08-18 18:17:00) [2]

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

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


guav   (2006-08-18 18:03:00) [3]


> 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 17:24:00) [4]

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


guav   (2006-08-18 17:03:00) [5]

[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 16:02:00) [6]

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

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


Наверх

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