急啊!关于TBitmap开启透明后,Canvas颜色变浅问题,能恢复正常吗?

洒车 2012-01-09 04:43:53
最近要做一画图功能,由于要显示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;
...全文
394 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码跳动 2012-01-10
  • 打赏
  • 举报
回复
png 本来就是透明的, 没有底色 ,要么你自己设置底色来控制。
funxu 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 warrially 的回复:]
delphi 直接载入 png 就是透明的啊,不用加载透明通道, 用 TImage 不行么?
[/Quote]
所以我说没看出来LZ透明的目的啊
爱蹄子的羊头 2012-01-10
  • 打赏
  • 举报
回复
delphi 直接载入 png 就是透明的啊,不用加载透明通道, 用 TImage 不行么?
funxu 2012-01-10
  • 打赏
  • 举报
回复
呃,我从你的代码没看出来为什么要透明,你最后也是用draw画到了一个picturebox上啊,你加载png图片后,再用copyrect或draw的方法画到一个bmp上,此时透明的部分就会变成黑色背景或是白色的(具体细节忘记了),然后你让bmp的Transparent:=true;也可以达到透明效果,而再用控件加载这个bmp放到form上,透明效果和png应该是相同的
erhan 2012-01-09
  • 打赏
  • 举报
回复
我D7,编译都过不了,呵呵
看看这个对你有用不
http://www.cnblogs.com/jxsoft/archive/2011/06/02/2067714.html
洒车 2012-01-09
  • 打赏
  • 举报
回复
谢谢 funxu 但这方法不行的。因为要画PNG图片,所以一定要开启透明通道的。
funxu 2012-01-09
  • 打赏
  • 举报
回复
你可以试试
//ABmp.AlphaFormat := afDefined; // 开启透明
ABmp.Transparent:=true;
ABmp.TransparentColor:=clwhite;//或者黑色
洒车 2012-01-09
  • 打赏
  • 举报
回复
我只是在内存中处理一些图片用,不是用来做窗口的,请问有什么方法恢复正常吗?
funxu 2012-01-09
  • 打赏
  • 举报
回复
这,画布本身都透明了,画布上画的东东当然会受影响了,windows窗体好像也是这样吧
话说你画布透明的部分用来显示什么?桌面背景么?还是后面的窗体?

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧