打印canvas上的图形,刷子的风格为bscross,但不管怎么改,格子的底色都是黑色的,盼高手相助(100分)

  • 主题发起人 主题发起人 wujiangok_2001
  • 开始时间 开始时间
W

wujiangok_2001

Unregistered / Unconfirmed
GUEST, unregistred user!
代码为:
with printerdo
begin
begindoc
canvas.brush.color:=clred;
canvas.brush.style:=bscross;
canvas.rectangle(0,0,100,100);
enddoc;
end;
然后打印;
 
with printerdo
begin
begindoc
canvas.brush.color:=clred;
canvas.brush.style:=bsClear;
canvas.rectangle(0,0,100,100);
enddoc;
end;
 
你用的是HP激光打印机吧?换一个其它牌子或型号的就可以了(如喷墨的)。
我以前遇到,以为是程序的问题,其实程序是正确的。[:)]
 
好像不是啊!后来在大幅翁 上查到了方法,和大家分享一下,不过这个方法可能不作么好的,我在使用过程中有遇到了 一些问题,
方法:先在bitmap 上画好图像,然后用bitblt 函数拷会打印机的canvas上去,源代码为;
bmp.Width := abs(Aleft - Aright);
bmp.Height := abs(Atop - ABottom);
with bmp.Canvas do
begin
//bmp.PixelFormat:=[pf32bit];
bmp.Canvas.Font.PixelsPerInch:=printer.Canvas.Font.PixelsPerInch;
pen.Color := (owner as Tmycad).ColorOfBackGround;
pen.Mode := pmcopy;
brush.Color := (owner as Tmycad).ColorOfBackGround;
brush.Style := bssolid;
fillrect(rect(0, 0, bmp.width, bmp.height));

SetDrawSquareCurveMode(bmp.Canvas);
Rectangle(0, 0, bmp.width, bmp.height); //画框框。。^_^
end;

bitblt(mycanvas.Handle, Aleft, Atop, bmp.width, bmp.height,
bmp.Canvas.Handle, 0, 0, srccopy); //画框框。。^_^
bu
 
这样,底色可以变了,但是由于时用bitblt 拷过去的,期间mycanvas (为形参)由窗体的canvas变为打印机的canvas,分辨率发生了 变化.图像的坐标我已经处理过了,只是,画出来的图像风格很密的,不知怎么改好,还请高手帮助啊 !
 
请帮忙提前[:)]
 
>>先在bitmap 上画好图像,然后用bitblt 函数拷会打印机的canvas上去
你这是图像打印还是图形打印啊?在BITMAP上画图,位图资源占用极大,在
高精度打印机上会死得很惨的,你可能需要几万乘几万大小的位图;不然的
话,使用小的位图又需要进行缩放,结果是产生屏幕输出般的锯齿。
如果你确实要这样做,可试试使用TMetaFile替代TBITMAP,在某些情况下格
子的底色可能不是黑的[:)]。
 
多人接受答案了。
 
后退
顶部