Delphi里的Canvas画布能画半透明效果的图片么?

guest |浏览569次
收藏|2014/06/07 00:59

在Delphi里面怎么样使用Canvas画布来实现半透明的图片的效果呢?

满意回答

2014/06/07 20:13

可以参考下这里的代码:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  img1.AutoSize := True;
  img1.Picture.Bitmap.LoadFromFile('1.bmp');
end;
 
procedure TForm1.MyDraw;
var
  bf: BLENDFUNCTION;
  desBmp, srcBmp: TBitmap;
  rgn: HRGN;
begin
  with bf do
  begin
    BlendOp := AC_SRC_OVER;
    BlendFlags := 0;
    AlphaFormat := 0;
    SourceConstantAlpha := 180; // 透明度,0~255
  end;
 
  desBmp := TBitmap.Create;
  srcBmp := TBitmap.Create;
 
  try
    srcBmp.Assign(img1.Picture.Bitmap);
 
    desBmp.Width := srcBmp.Width;
    desBmp.Height := srcBmp.Height;
 
    Windows.AlphaBlend(desBmp.Canvas.Handle, 0, 0,
      desBmp.Width, desBmp.Height, srcBmp.Canvas.Handle,
      0, 0, srcBmp.Width, srcBmp.Height, bf);
 
    rgn := CreateEllipticRgn(20,20, 200, 200); // 创建一个圆形区域
    SelectClipRgn(srcBmp.Canvas.Handle, rgn);
    srcBmp.Canvas.Draw(0, 0, desBmp);
 
    img1.Picture.Bitmap.Assign(nil);
    img1.Picture.Bitmap.Assign(srcBmp);
  finally
    desBmp.Free;
    srcBmp.Free;
  end
end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
  MyDraw;
end;
 
end.

来源:http://bbs.csdn.net/topics/390627275

admin

其他回答(0)
0人关注该问题
待解决问题



+1
 加载中...