Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизПечать и запись 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c