简单填充图形打印:为什么底色是黑的?(100分)

  • 主题发起人 主题发起人 Huzzz
  • 开始时间 开始时间
H

Huzzz

Unregistered / Unconfirmed
GUEST, unregistred user!
简单填充图形打印黑底问题:

简单地向打印机(HP 6L)输出一个红色网格填充的矩形,
结果得到一个黑底灰格矩形图,底色是黑的:(
(我想要的是白底灰格,准确说,底色应该是透明的)。
而使用实填充方式则正常。
为什么?怎么办?或者谁有其它打印机帮忙一试,我先谢谢了。

程序如下:
procedure TForm1.Button2Click(Sender: TObject);
procedure ExportTo(Cnv: TCanvas);
begin

Cnv.Pen.Color := clRed;
Cnv.Pen.Mode := pmCopy;
Cnv.Brush.Color := clFuchsia;
Cnv.Brush.Style := bsCross;
//bsSolid;使用实填充则正常

Cnv.Rectangle(10, 10, 400, 300);
end;

begin

with Printerdo

begin

begin
doc;
ExportTo(Canvas);
enddoc;
end;

end;

 
我也感到奇怪?!
 
卷起千堆雪tyn:
这种方案我不接受,因为StretchDraw的分辨率跟不上打印机,又耗内存。
 
卷起千堆雪tyn:
打印结果:什么也没有打出来。
调试了一下,原来Image1.Picture.Bitmap.Width和Height都=0,又改了一下:
Image1.AutoSize :=False;
Image1.Width := Width;
Image1.Height := height;
Image1.Picture.Bitmap.Width := Width;
Image1.Picture.Bitmap.Height := height;

还是什么都没有打出来(IMAGE1上倒是画出来了),又改了一下:
Canvas.Draw(0,0,Image1.Picture.Graphic);

还是什么都没有打出来,又改了一下:
ExportTo(Image1.Picture.Bitmap.Canvas);

KAO,还是没有![:(!] 继续:
Canvas.Draw(0,0,Image1.Picture.Bitmap);

仍然没有,我已经习惯了,继续:
with Printerdo

try
begin
Doc;
Canvas.Draw(0,0,Image1.Picture.Bitmap);
EndDoc;
finally
;
end;


果然还是没有,不出我所料,接着又改了一下:
BitBlt(Canvas.Handle,0,0,1000,500,
Image1.Picture.Bitmap.Canvas.Handle,0,0,
SRCCOPY);

哈哈!终于有了,不过太小了点,于是:
begin
Doc;
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, Image1.Picture.Width * ScaleX,
Image1.Picture.Height * ScaleY);
StretchBlt(Canvas.Handle,0,0,R.Right,R.Bottom,
Image1.Picture.Bitmap.Canvas.Handle,0,0,
Image1.Width,
Image1.Height,
SRCCOPY);
EndDoc;

CAO,又没有了!怎么回事???我的打印机都快着火了!
 
堆雪同学:
只有BitBlt可以,StretchBlt都不行。但输出到屏幕上非常OK。
我开始怀疑打印机或驱动程序了。
我累了要休息会,也许明天起来就好了。
 
procedure TForm1.Button1Click(Sender: TObject);
begin

with Image1.Canvasdo

begin

Pen.Color := clRed;
Pen.Mode := pmCopy;
Brush.Color := clFuchsia;
Brush.Style := bsCross;
Rectangle(10, 10, 400, 300);
end;

end;


procedure TForm1.Button4Click(Sender: TObject);
var
ScaleX, ScaleY: Integer;
R: TRect;
begin

Printer.begin
Doc;
// **
with Printerdo

try
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, Image1.Picture.Width * ScaleX,
Image1.Picture.Height * ScaleY);
Canvas.StretchDraw(R, Image1.Picture.Bitmap);
// **
finally
EndDoc;
// **
end;

end;
 
to 千堆雪:
以下代码打印失败:白纸一张。这问题先搁住吧,说不定是我的DELPHI有BUG、
我的机器中毒了、打印机被我折磨得自杀了。。。。还是确实是程序写得不好。

procedure TForm1.Button4Click(Sender: TObject);
var
ScaleX, ScaleY: Integer;
R: TRect;
bmp: TBitmap;
begin

bmp := TBitmap.Create;
bmp.Width := 500;
bmp.Height := 400;
with bmp.Canvasdo

begin

Pen.Color := clRed;
Pen.Mode := pmCopy;
Brush.Color := clFuchsia;
//改为黑色也不行
Brush.Style := bsCross;
//改为实填充也不行
Rectangle(10, 10, 400, 300);
end;


Printer.begin
Doc;
// **
with Printerdo

try
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, bmp.Width * ScaleX,
bmp.Height * ScaleY);
Canvas.StretchDraw(R, bmp);
// **改为BitBlt则可以!!!!!
finally
EndDoc;
// **
end;


bmp.Free;
end;

 
没有人遇见过类似情况吗?
 
没有人有打印机试一试吗?

to 卷起千堆雪tyn:
你说的可能是对的,我的打印机有问题。我把图形输出为WMF格式再用ACDSEE打印,
结果也是黑的(屏幕上显示是正常的)。
 
问题解决:打印机问题。
我们公司一台破CANON被我们弄起来打印了一把,结果一切OK了。
 
结束问题了
 

Similar threads

I
回复
0
查看
612
import
I
I
回复
0
查看
748
import
I
I
回复
0
查看
595
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部