打印大图象(100分)

  • 主题发起人 主题发起人 Tony01
  • 开始时间 开始时间
T

Tony01

Unregistered / Unconfirmed
GUEST, unregistred user!
TImage中的图象预览时不仅仅是一张,有可能多张
问题:
1.如何打印?尤其是横向打印
2.如何分页打印?
应用于CAD系统,有那位高手提供些意见,谢谢
 
利用TBitmap的Draw和StrechDraw方法,将
大图切割为若干小图,然后一张一张的打印
 
使用 TPrinter 对象可以实现你的要求。并且需要一个 TBitmap 对象用作缓冲。
比如:(下面只是打印一页的例子,如果打印多页,可以循环切割)
var Bmp: TBitmap;
PaperWidth, PaperHeight: Integer;
// 打印纸宽高
begin

Bmp := TBitmap.Create;
Bmp.Width := PaperWidth;
Bmp.Height := PaperHeight;
BitBlt(Bmp.Canvas.Handle,0,0,PaperWidth,PaperHeight,Image1.Picture.Bitmap.Canvas.Handle,0,0,SRCCOPY);
Printer.begin
Doc;
BitBlt(Printer.Canvas.Handle,0,0,PaperWidth,PaperHeight,Bmp.Canvas.Handle,0,0,SRCCOPY);
Printer.EndDoc;
Bmp.Free;
end;

其实 Bitmap 对象也不是必需的,但是使用它在循环切割的时候可能要方便一些!
 
请高手再赐教
如何切割图象?谢谢
能否附上更详细的代码
 
其实就是判断打印纸的尺寸和你的图片尺寸,看要分几次打印,所谓切割,无非就是确定
从 Image1 向 Bitmap 拷贝的时候的起点和大小:
BitBlt(Bmp.Canvas.Handle,0,0,PaperWidth,PaperHeight,Image1.Picture.Bitmap.Canvas.Handle,0,0,SRCCOPY);
看看 BitBlt 的参数说明吧:
BOOL BitBlt(
HDC hdcDest, // handle to destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left corner
int nYDest, // y-coordinate of destination rectangle's upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source device context
int nXSrc, // x-coordinate of source rectangle's upper-left corner
int nYSrc, // y-coordinate of source rectangle's upper-left corner
DWORD dwRop // raster operation code
);
用一个循环就可以搞定,自己想一想啊,没必要写代码了吧。:-)
 
多人接受答案了。
 
后退
顶部