Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Печать и запись MetaFile, размеры   Найти похожие ветки 

 
KSergey ©   (2003-04-30 13:42) [0]

Имеем TMetafile. На нем что-то отрисовано. Выводим на форму, печатаем. Изначально метафайл создан на экране (в смысле отрисовывался, у TMetafileCanvas.Create второй параметр - 0).
Каждое устройство использует свои пикселы (в смысле при выводе на принтер - что-то другое).
Вопрос: как всех этих "попугаев" подвести к одному знаменателю? Привести к одной какой-либо единице измерения?


 
ASMiD ©   (2003-04-30 14:41) [1]

Метафайл, вообщето предназначен для работы с векторными, а не матричными, изображениями.
Уточни задачу.


 
SVM (Perm)   (2003-04-30 14:46) [2]

Вроде у Extended Metafile задаются размеры, в MM/100, если не ошибаюсь.
Отсюда и пляши.


 
KSergey ©   (2003-04-30 15:16) [3]

Что-то я действительно сумбурно написал...

Он конечно с векторами, но когда рисуешь на TMetaFileCanvas все равно задаешь не направление и длину вектора, а именно точки начала/конца лини (например). Верно ведь? ;)

Попробую еще раз более точно сформулировать.
Есть задача: создать метафайл, отрисовать на нем некие объекты. Потом
а) вывести на принтер в таком-то размере
б) отобразить на экране на все окно такого-то размера

Какие проблемы:

1) никак не могу победить "попугаев" (в смысле размеры): если создать TMetaFileCanvas для экрана - то для экрана все здорово, все координаты и есть экранные пикселы, да и сам метафайл отображается как бы 1 в 1 на экране. Правда есть нюанс: пр отображении на экране он отображается весь, а при записи в файл - обрезанный до указаеных в Height/Width размеров; но при этов сами св-ства Height/Width (при чтении) всегда равны разрешению экрана... С этим что-то можно сделать?

2)посмотрел реализацию записи св-ства MMHeight - значение просто пишется в Height! Или я сто-то недопонял?! К стати, значение Inch всегда равно 0. Это почему?

3) При выводе на принтер - как бы размер этого метафайла задать желаемый? Никак не могу понять из каких соображенй от масштабируется... При этом при рисовании на канве принтера размры чудно устанавливаются при желании (SetMapMode). А метафайл выводится в непонятно каком масштабе. Ради интереса и при рисовании на метафайле устанавливал тот же масштаб изменения - ну мало того, что теперь не понятно как это все привязать к экранным пикселям, так все равно на принтере все равно не те размеры, что жалаемы.

Фактически достаточны было бы получить что-то вроде такого: некий коэффициент, например, кол-во текущих единиц устройства (т.е., подозреваю, канвы) на 1 милиметр (дюйм, мерт - не важно). Как?

На всякий случай - программа. Может кто что подскажет?

var
WMF: TMetaFile;
begin
WMF := TMetafile.Create;
try
WMF.MMHeight := 50*100; // 50x50 мм, например
WMF.MMWidth := 50*100;
with TMetafileCanvas.Create (WMF, 0)do
try
SetMapMode (Handle, MM_LOMETRIC);
Rectangle (0,0,30*10,-30*10); // квадратик 30х30 мм
finally
Free;
end;
// вывод на форму
Form1.Canvas.Draw(0,0,WMF); // ну тут что-то выводится
// вывод на принтер
Printer.BeginDoc;
SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC); // установить единицы изменения - 0.1мм
Printer.Canvas.Rectangle (50,-50,50+30*10,-50+(-30*10)); // немного запутано, просто квадратик сдвинут и ось Y - вверх направлена
// но тут квадратик четкий - 30x30 мм
Printer.Canvas.Draw (50*10,-50*10, WMF); // а вот тут фигня - квадратик из метафайла не понятно каких размеров
// (в смысле не понятно почему таких)
Printer.EndDoc;
finally
WMF.Free;
end;
end;

Вот как бы это все реализовать? Может кто-то чем-то поделится?



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

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
3-46601
Merlot
2003-04-23 16:22
2003.05.15
Запрос к запросу!


1-46773
Pliajnik
2003-04-30 23:55
2003.05.15
Функция перевода чисел из 10-ой системы в 16-ю


1-46836
damx
2003-05-03 00:08
2003.05.15
Чтение и дописывание


14-46925
Sword-Fish
2003-04-24 22:23
2003.05.15
Чат !!!


8-46854
Axis_of_Evil
2003-02-05 09:42
2003.05.15
Таймер, блин.