怎么将带透明渐变的png图像画到image上

如何将带透明渐变的png图像画到image上
有三个image控件:
MainImg、Image1、MaskImg

在timer1中,不断将Image1中的位图画到MainImg上,产生动态效果
MainImg.Canvas.CopyRect(Rect2,Image1.Canvas,SourceRect);
我想在MainImg上画完Image1中的位图后,再画上个渐变效果,但MaskImg加载的源图用的是png格式,CopyRect方法不支持。
如果将MaskImg直接放到MainImg上面的话,虽然实现了效果,但是会闪烁。

请问怎样才能在image控件上画完位图后,再画上个png透明渐变效果呢?(不闪烁)
新手,最好给点代码参考
谢谢


------解决方案--------------------
直接用GDI+,每次再画时,填充一下canvas
Delphi(Pascal) code

procedure TForm1.btn1click(Sender : TObject);
 var Bmp : TGpBitmap;
     gp : TGpGraphics;
begin
  Image1.canvas.fillrect(Image1.canvas.cliprect);
  Bmp := TGpBitmap.Create('a.png);
  Gr := GpRect(0,0,Image1.width,Image1.heidth);
  try
    gp := TGpGraphics.Create(Image1.Canvas.Handle);
    gp.DrawImage(Bmp,Gr);
  finally
    gp.Free;
    Bmp.Free;
  end;
end;

------解决方案--------------------
他是用GDI+,这种方法是不错的方法,缺点是在设计期看不到效果。

还有一种方式是用pngButton控件,这样可以不用写一行代码就把png图标载进来了。

另外还有2种:

1.用pngimage控件。
2.用gifimage单元中的方法。前提是要将png转为透明的gif。gif支持透明的。