Текущий архив: 2004.03.28;
Скачать: CL | DM;
Вниз
Как правильно вывести метафайл на принтер? Найти похожие ветки
← →
Курдль © (2004-03-11 13:01) [0]Как правильно вывести метафайл на принтер? Спасибо.
← →
Тимохов © (2004-03-11 13:18) [1]Я делал, делаю и буду делать (т.к. справился с проблемами) так
Printer.Orientation := fPages.Orientation;
for kI := 0 to fPages.Count - 1 do
begin
Printer.BeginDoc();
with Printer.Canvas do
begin
StretchDraw(BOUNDS(0, 0, fPages.PrinterInfo.PrintW, fPages.PrinterInfo.PrintH), fPages[kI].MetaFile);
end;
Printer.EndDoc();
end;
где fPages - список страниц, c метафайлами.
Метафайлы Enhanced = true
PrinterInfo - параметры из принтера:
CODE>constructor TPrinterInfo.Create(aOrientation : TPrinterOrientation);
begin
Printer.Orientation := aOrientation;
fDpiX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
fDpiY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
fMarginL := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
fMarginT := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
fPrintW := GetDeviceCaps(Printer.Handle, HORZRES);
fPrintH := GetDeviceCaps(Printer.Handle, VERTRES);
fPhysW := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
fMarginR := fPhysW - fPrintW - fMarginL;
fPhysH := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
fMarginB := fPhysH - fPrintH - fMarginT;
end;
← →
Курдль © (2004-03-11 13:23) [2]Спасибо!
Но я имел в виду "правильное проигрывание" метафайла.
StretchDraw же его просто рисует побитово.
Сравни:
1. Printer.BeginDoc;
Printer.Canvas.OutText(0,0, "Test");
Printer.EndDoc;
2. MetafileCanvas := TMetafileCanvas.Create(Metafile, Printer.Handle);
MetafileCanvas.OutText(0,0, "Test");
MetafileCanvas.Free;
Printer.BeginDoc;
Printer.Canvas.Draw(0,0, Metafile);
Printer.EndDoc;
← →
Тимохов © (2004-03-11 13:28) [3]Стравнивать нет времени (виноват).
Что значит "правильное проигрывание"?
← →
Курдль © (2004-03-11 15:01) [4]
> Что значит "правильное проигрывание"?
Метафайл, как известно, хранит не изображения, а инструкции по созданию изображений линий, многоугольников, шрифтов и т.п.
Но если его выводить на принтер с помощью Canvas.Draw, он печатается в растровом виде. А хотелось бы печатать в векторном.
След. рабочий пример помогает заметить разницу:procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(0,0, "TMetafile is an encapsulation of the Win32 Enhanced metafile.");
Printer.EndDoc;
end;
procedure TForm1.Button2Click(Sender: TObject);
var MetafileCanvas : TMetafileCanvas; Metafile: TMetafile;
begin
Metafile := TMetafile.Create;
MetafileCanvas := TMetafileCanvas.Create(Metafile, 0);
MetafileCanvas.TextOut(0,0, "TMetafile is an encapsulation of the Win32 Enhanced metafile.");
MetafileCanvas.Free;
Printer.BeginDoc;
//вместо 6396,4896 вставить VERTRES и HORZRES своего принтера
Printer.Canvas.StretchDraw(Bounds(0,0,6396,4896), Metafile);
Printer.EndDoc;
Metafile.Free;
end;
Попробую вывести его на принтер через поток.
← →
Тимохов © (2004-03-11 16:47) [5]
> Курдль © (11.03.04 15:01) [4]
У меня все в векторном.
только я еще после tmetafile.create делаю
fMetaFile.Width := vertres;
fMetaFile.Height := horzres;
соответственно и рассчеты все делаю исходя из dpi принтера.
У меня все векторно.
← →
Курдль © (2004-03-11 17:24) [6]
> У меня все векторно.
StretchDraw по-любому выводит растрово.
Другое дело, что передаваемая принтеру картинка была создана на основе векторной графики и разница может быть незаметна.
Я все никак не могу услать метафайл прямиком на принтер (что-то подзабыл низкоуровневый доступ), но потом расскажу результат.
(Похоже, что мы уродуемся над одной проблемой - превьюкалкой сложной графики:)
← →
WebErr © (2004-03-11 17:29) [7]
> StretchDraw по-любому выводит растрово
Метафайл? Растрово? Это из жанра TBitmap.ScanLine[Index] язменяет что-то на устройстве... :))))
← →
Тимохов © (2004-03-11 17:30) [8]
> Курдль © (11.03.04 17:24) [6]
1. Да я в общем-то все проблемы пока решил. Просто рисовать надо lineto, а не fillrect с шинирой 1.
2. Повторюсь, что у меня на принтере выводится все гладенько, кружочки, наклонные линии, никаких растров.
← →
Курдль © (2004-03-11 17:42) [9]
> WebErr © (11.03.04 17:29) [7]
>
> Метафайл? Растрово?
Не передергивайте! Речь шла о процедуре StretchDraw.
Если у Вас иное мнение - изложите!
Страницы: 1 вся ветка
Текущий архив: 2004.03.28;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.03 c