图象打印的问题?(100分)

  • 主题发起人 主题发起人 neural1208
  • 开始时间 开始时间
N

neural1208

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望把图象按原来大小打印,即:

with Printerdo

begin
Doc;
Canvas.Draw(0, 0, Picture.Graphic);
EndBDoc;
end;


但是实际大出来的图象非常小,没有在屏幕上显示的这么大,是什么原因那?


 
var r:TRect;
with Printerdo

begin
Doc;
R:=Rect(0,0,500,500);
//填上你需要的大小区域
canvas.strechDraw(R,Picture.Graphic);
EndBDoc;
end;
 
物理上,打印机每英寸的点很多,但是屏幕每英寸的点很少
所以相同的点数,打印机打出的很小,显示器的很大。
但是,画图是按逻辑点来计算的,如果你把打印机的每英寸的逻辑点定的和屏幕一样,
那么打印出来的图像也一样大了。
1、简单、近似的大小 SetMapMode(Printer.canvas.Handle,MM_LOENGLISH)
这样设置打印机每英寸100个逻辑点,和屏幕的 75 到 96个点接近
2、SetMapMode(Printer.canvas.Handle,MM_ANISOTROPIC)
你可以通过 SetWindowExtEx 、 SetViewportExtEx 2个函数精确的设置逻辑点和物理点的比例
 
注意先SetMapMode之后再 Canvas.Draw
 
to Pipi:
好像很复杂的样子,请问其它的图象处理软件在打印的时候是不是也都用SetMapMode进行
设置的?另外,有没有Delphi的例子可以参考的?谢谢。
 
上面说的第一种方法:
在 Canvas.Draw 之前加入一行 SetMapMode(Printer.canvas.Handle,MM_LOENGLISH)
就可以了,不是很复杂啊。如果你800*600,显示是 96点/英寸,这个设置打印机 100点/英寸
差别很小啊,就可以了

至于第二种方法,稍微复杂一点,不过你不用这么精密嘛
 
多人接受答案了。
 
后退
顶部