Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-46607
Yaugeny
2003-04-23 15:54
2003.05.15
Работа с Paradox без создания альянса


7-47020
Андрей_13
2003-03-20 16:11
2003.05.15
Окно


8-46853
Igor__
2002-11-01 05:41
2003.05.15
Микшер


3-46567
zhizhko
2003-04-25 05:49
2003.05.15
Как правильно настроить InterBase через BDE?


14-46963
Kirilov
2003-04-26 17:14
2003.05.15
Переходить ли с D5 на D7?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский