数
数据狂
Unregistered / Unconfirmed
GUEST, unregistred user!
为什么将metafile上的图元stretchdraw到打印机上的canvas上;
会发生水平、垂直比例的失调?
基本思路:
先建立一个Tmetafile类型的变量mf(因为Tmetafile类型的图元进行缩放时
不会失真),再建立一个Tmetafilecanvas类型的变量vc,然后将mf的宽度和高度
设置为当前打印纸的尺寸(按比例缩放后);然后在vc上画图、输出文字;
最后将vc上的图元StretchDraw到打印机的画布上进行打印输出。
同时将vc上的图元StretchDraw到一个Image上后,显示的结果和打印结果
一样出现比例失调,打印出来的文字不是正方形,字的高度为宽度的2倍左右。
为什么???
procedure TForm1.Button1Click(Sender: TObject);
var
mf:Tmetafile;
vc:Tmetafilecanvas;
rx,ry:real;
//打印机的canvas和mf的像素缩放比例
begin
rx:=GetDeviceCaps(printer.Handle,logPixelsX)/PixelsPerInch;
ry:=GetDeviceCaps(printer.Handle,logPixelsY)/PixelsPerInch;
mf:=Tmetafile.Create;
mf.Width:=trunc(printer.PageWidth/rx);
mf.Height:=trunc(printer.PageHeight/ry);
mf.Clear;
vc:=Tmetafilecanvas.Create(mf,0);
vc.Brush.Color:=clwhite;
vc.Font.Size:=12;
vc.TextOut(50,50,'设计程序');
vc.Free;
printer.begin
Doc;
printer.Canvas.StretchDraw(
rect(0,0,printer.PageWidth,printer.PageHeight),mf);
printer.EndDoc;
end;
[!]
会发生水平、垂直比例的失调?
基本思路:
先建立一个Tmetafile类型的变量mf(因为Tmetafile类型的图元进行缩放时
不会失真),再建立一个Tmetafilecanvas类型的变量vc,然后将mf的宽度和高度
设置为当前打印纸的尺寸(按比例缩放后);然后在vc上画图、输出文字;
最后将vc上的图元StretchDraw到打印机的画布上进行打印输出。
同时将vc上的图元StretchDraw到一个Image上后,显示的结果和打印结果
一样出现比例失调,打印出来的文字不是正方形,字的高度为宽度的2倍左右。
为什么???
procedure TForm1.Button1Click(Sender: TObject);
var
mf:Tmetafile;
vc:Tmetafilecanvas;
rx,ry:real;
//打印机的canvas和mf的像素缩放比例
begin
rx:=GetDeviceCaps(printer.Handle,logPixelsX)/PixelsPerInch;
ry:=GetDeviceCaps(printer.Handle,logPixelsY)/PixelsPerInch;
mf:=Tmetafile.Create;
mf.Width:=trunc(printer.PageWidth/rx);
mf.Height:=trunc(printer.PageHeight/ry);
mf.Clear;
vc:=Tmetafilecanvas.Create(mf,0);
vc.Brush.Color:=clwhite;
vc.Font.Size:=12;
vc.TextOut(50,50,'设计程序');
vc.Free;
printer.begin
Doc;
printer.Canvas.StretchDraw(
rect(0,0,printer.PageWidth,printer.PageHeight),mf);
printer.EndDoc;
end;
[!]