如何绘制PNG图像的部分到指定区域中并保留透明效果(100)

  • 主题发起人 主题发起人 臧马
  • 开始时间 开始时间

臧马

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。我想从一个大的PNG图像中截取部分图像,保存到一个指定区域中。并实现透明的效果。试过先Canvas.CopyRect到一个TBitmap中在会知道指定位置。效果非常不好。不知道还有没有什么其他办法。还有,从一个TpngImage对象中复制部分图到另一个TpngImage中,并保留透明效果,如何做啊?Assigne是整图复制了。不知道有什么办法?望给予帮助,谢谢。
 
一个点一个点的画不就行了?procedure DrawPngToBmp(png: TPNGObject; pngrect: TRect; bmp: TBitMap; bmppt: TPoint);var i,j,w,h:integer; pb,pp:PbyteArray; ba:byte;begin if not (assigned(png) and assigned(bmp)) then exit; w:=pngrect.Right-pngrect.Left; h:=pngrect.Bottom-pngrect.Top; for j := 0 to h- 1 do begin pb:=bmp.ScanLine[bmppt.Y+j]; pp:=png.Scanline[pngrect.top+j]; for i := 0 to w- 1 do begin ba:=png.AlphaScanline[pngrect.Top+j]^[pngrect.Left+i]; pb[(bmppt.X+i)*3]:=(pb[(bmppt.X+i)*3]*(255-ba)+pp[(pngrect.Left+i)*3]*ba) div 255; pb[(bmppt.X+i)*3+1]:=(pb[(bmppt.X+i)*3+1]*(255-ba)+pp[(pngrect.Left+i)*3+1]*ba) div 255; pb[(bmppt.X+i)*3+2]:=(pb[(bmppt.X+i)*3+2]*(255-ba)+pp[(pngrect.Left+i)*3+2]*ba) div 255; end; end;end;procedure TForm1.Button1Click(Sender: TObject);var png:tpngobject; bmp:tbitmap;begin if opendialog1.Execute then begin png:=tpngobject.Create; bmp:=tbitmap.Create; bmp.Assign(image1.Picture.Graphic); png.LoadFromFile(opendialog1.FileName); DrawPngToBmp(png,rect(30,30,250,120),bmp,point(30,30)); image1.Picture.Assign(bmp); bmp.Free; png.Free; end;end;
 
这样不是太慢了么?没有其他办法了?可恼啊!!!![:(]
 
慢?你先试试看再说慢不
 

Similar threads

回复
0
查看
885
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部