如何将DBImage中的图像打印出来?(50分)

  • 主题发起人 主题发起人 geshengping
  • 开始时间 开始时间
G

geshengping

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想把DBImage中的图像打印出来,用以下这段程序打印的结果比真实图像
小,不知各位高手有没有简单有效的方法。

Printer.BeginDoc;
with Printer do
begin
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(20, 10, DBImage1.Picture.Width * ScaleX,
DBImage1.Picture.Height * ScaleY);
Canvas.StretchDraw(R, DBImage1.Picture.Graphic);
end;
EndDoc;
 
恐怕和你的打印机分辨率有关系.应该先取得打印机分辨率,然后换算成磅之类的与设备无关的计算单位.具体方法查一查书吧,徐新华的delphi3编程指南上好像有.
 
呵呵,没仔细看,你已经这样写了.问题在rect吧,
rect(left,top,right,bottom),
R := Rect(20, 10, DBImage1.Picture.Width * ScaleX,
DBImage1.Picture.Height * ScaleY);
这一句应改为:
R := Rect(20, 10, DBImage1.Picture.Width * ScaleX+20,
DBImage1.Picture.Height * ScaleY+10);
 
我也想知道!
 
打印的图象比真实图象小是因为屏幕的分辨率比打印机的分辨率小的缘故。
一般屏幕分辨率为96dpi,而打印机最差的也要几千的分辨率吧,9600dpi的现在也很
常见,分辨率的不同就会导致打印效果的不同。
所以要打印前先得到屏幕跟打印机的分辨率的比值,
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch
最后打印时乘上这个比值就好了。
 
www老兄:
你写的这两条语句我已经写了.
 
屏幕跟打印机的分辨率的比值,请将屏幕调成不同分辨率,在不同的打印机上测试:

Screen.Width * 254 / 64000
rHorz = ------------------------------------------------------------
Printer.PageWidth / GetDeviceCaps(Printer.Handle, HORZSIZE)


Screen.Height * 254 / 48000
rVert = ------------------------------------------------------------
Printer.PageHeight / GetDeviceCaps(Printer.Handle, VERTSIZE)}
 
打印的结果比真实图像小是什么意思?是打印的结果比在屏幕上看到的小吧。
如果是这样是因为屏幕是真实分辨率并不是96DPI(或120DPI等等,因不同的显示器
尺寸不同而不同,并不是图像的真实大小。
 
你可以检测打印纸的长宽,然后用前面的方法放大比例可以得到不错的效果,我这样做过
 
var
b:Tbitmap;
r:TRect;
begin
b:=Tbitmap.create;
b.Picture.Graphic:=DBImage1.Picture.Graphic;
try
printer.beginDoc;
R:=Rect(,,,,);
printer.canvas.strechDraw(R,b.Geaphic);
finally
printer.enddoc;
end;
end;
 
如果你是比较的原来的大小是以屏莫显示为标准,
则你应该这样做才能做到一致:
关键是一个比例值么?
HorzBZ:=round(GetDeviceCaps(Printer.Handle,LogPixelsY)/
GetDeviceCaps(Canvas.Handle,LogPixelsY));
OK??
这样是对的,因为我这样做结果是对的
祝你好运!
 
多人接受答案了。
 
后退
顶部