用PngImage加载透明PNG图片,无法打印透明,透明的全是黑的底色。 ( 积分: 200 )

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

wuchxin

Unregistered / Unconfirmed
GUEST, unregistred user!
用PngImage加载透明PNG图片,无法在打印时显示透明,透明的全是黑的底色。
主要是我要用delphi写打印程序,打印透明PNG图片时,png图片显示为黑色底色。
 
没有人能解决吗?
 
先转成BMP呢
procedure PNGFileToBitmap(const Source, Dest: string);
var
Bitmap: TBitmap;
PNG: TPNGObject;
begin
PNG := TPNGObject.Create;
Bitmap := TBitmap.Create;
{In case something goes wrong, free booth PNG and Bitmap}
try
PNG.LoadFromFile(Source);
Bitmap.Assign(PNG); //Convert data into bitmap
Bitmap.SaveToFile(Dest);
finally
PNG.Free;
Bitmap.Free;
end
end;
 
打印机当然不可能打印透明色啊!你把透明设置为纯白就不会打印了
 
首先,转换成bmp其实也不行,就是由于Bitmp不支持透明,才要增加png的格式。
为了抛砖引玉,下面是一个简单的打印程序:
var
i: integer;
Img: TImage;
begin
Printer.BeginDoc; // **
for i := 0 to componentcount - 1 do
if components is TImage then
begin
Img := TImage(components);
Printer.CANVAS.stretchDraw(
Rect(Img.left, Img.top,
Img.left + img.Picture.Graphic.Width,
Img.Top + img.Picture.Graphic.Height
),
img.Picture.Graphic)
end;
Printer.EndDoc; // **
end;
---要保证这段代码可以运行,请先保证你机子正常连接打印机(或装个虚拟打印机,如SmartPrinter),然后建一工程,form上放两个Image,两Image互相重叠,一大一小。并分别load不同图片,在上面的image装载透明png图片,下面的随便装什么图片均可。
再放一个Button。点击事件就用上面的代码即可。
请大家先测试看看。其实,引用TGifImage就能搞透明的,和上面的代码一样。
 
大富翁的高手呢?
唉,delphi论坛人越来越少了阿!
 
大富翁的高手呢?
唉,delphi论坛人越来越少了阿!
 
真的没人回答阿?
 
这个,,这个,,呵呵。


// 未处理 Doc 缩放,未处理非半透明
procedure PrinterPNGFile(const PngFile,BmpFile: string;Printer:TPrinter);
var
PNG: TPNGObject;
BMP: TBitmap;
begin
BMP := TBitmap.Create;
try
BMP.LoadFromFile(BmpFile);
if FileExists(PngFile) then
begin
PNG := TPNGObject.Create;
PNG.LoadFromFile(PngFile);
if Assigned(Printer) then
try
Printer.BeginDoc;
SetStretchBltMode(Printer.Canvas.Handle,COLORONCOLOR);
Printer.Canvas.StretchDraw(Printer.Canvas.ClipRect,BMP);
if PNG.TransparencyMode <> ptmPartial then
MessageBox(0,'png not Transparency, Bitmap be overlay','warning',0);
PNG.Draw(Printer.Canvas,Printer.Canvas.ClipRect);
finally
Printer.EndDoc;
PNG.Free;
end;
end;
finally
BMP.Free;
end
end;
 
后退
顶部