最近要做一画图功能,由于要显示PNG透明的图片所以要使用TBitmap作为画布,但发现TBitmap开启透明后Canvas所画出的颜色变浅了,比如红色变成了粉红,请各位大神帮帮忙,如何才能使颜色恢复正常。(难道有Alpha颜色或Alpha透明度影响)
procedure TForm1.Button1Click(Sender: TObject);
var
  ABmp: TBitmap;
begin
  ABmp := TBitmap.Create;
  try
    ABmp.PixelFormat := pf32bit;                // 设置ABmp格式为32位
    ABmp.AlphaFormat := afDefined;              // 开启透明
    ABmp.SetSize(500, 500);    ABmp.Canvas.Brush.Color := 0;
    ABmp.Canvas.FillRect(ABmp.Canvas.ClipRect); // 这两行为把画布设置为透明    ABmp.Canvas.Font.Color := clRed;            // 设置Canvas字体颜色为红色
    ABmp.Canvas.TextOut(0, 0, '我的电脑');      // 画字体    PaintBox1.Canvas.Draw(0, 0, ABmp);          // 显示ABmp图片
  finally;
    ABmp.Free;
  end;
end;

解决方案 »

  1.   

    这,画布本身都透明了,画布上画的东东当然会受影响了,windows窗体好像也是这样吧
    话说你画布透明的部分用来显示什么?桌面背景么?还是后面的窗体?
      

  2.   

    你可以试试
    //ABmp.AlphaFormat := afDefined; // 开启透明
    ABmp.Transparent:=true;
    ABmp.TransparentColor:=clwhite;//或者黑色
      

  3.   

    谢谢 funxu 但这方法不行的。因为要画PNG图片,所以一定要开启透明通道的。
      

  4.   

    我D7,编译都过不了,呵呵
    看看这个对你有用不
    http://www.cnblogs.com/jxsoft/archive/2011/06/02/2067714.html
      

  5.   

    呃,我从你的代码没看出来为什么要透明,你最后也是用draw画到了一个picturebox上啊,你加载png图片后,再用copyrect或draw的方法画到一个bmp上,此时透明的部分就会变成黑色背景或是白色的(具体细节忘记了),然后你让bmp的Transparent:=true;也可以达到透明效果,而再用控件加载这个bmp放到form上,透明效果和png应该是相同的
      

  6.   

    delphi 直接载入 png 就是透明的啊,不用加载透明通道, 用 TImage 不行么?
      

  7.   

    png 本来就是透明的, 没有底色 ,要么你自己设置底色来控制。