一个非常奇怪的问题

holysword 2003-08-14 10:38:31
我在CB6下用TImage绘图,将其Transparent属性设为true,想让它的背景透明。虽然大多数情况下是透明的,但有时候却变成白色的背景,而且就算在同一台计算机以及同一个操作系统下,也有可能发生。这让我非常困惑,不知道是什么原因,所以请教各位大侠,有谁能帮到我?
...全文
15 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
holysword 2003-08-22
  • 打赏
  • 举报
回复
经过试验,我发现象下面这种做法就可以了:
TImage *img = new TImage(this);
img->Transparent = true;
img->Picture->Bitmap->TransparentColor = clWhite;
img->Canvas->Brush->Color = clWhite;
img->Canvas->FillRect(Area->ClientRect);
这样就可以保证图像的透明了,也解决了我的问题。
多谢dragonhux(dragon(清水)),hdaq(一生何求)和gaowen100(老高)!
windlyzhang 2003-08-22
  • 打赏
  • 举报
回复
可能时image刷新的问题吧!
clinton81 2003-08-22
  • 打赏
  • 举报
回复
这是老王的directX教程里面的伪代码:

BitBlt( hDCdest, 0, 0, width, height, hDCMask, 0, 0, SRCAND );

BitBlt( hDCdest, 0, 0, width, height, hDCSprite, 0, 0, SRCINVERT);

其中 hDCdest 是目标图像的句柄, hDCMask 是遮罩图像的句柄,hDCSprite 是你希望显示的图像的句柄。遮罩图中,想要透明的地方用纯白填充,不透明的地方用纯黑填充;你希望显示的图像中,透明的地方用纯黑填充,想要显示的部分不要改变。

通过这样的两次图像绘制,就可以实现绘制任意位置透明的图像了。
gaowen100 2003-08-21
  • 打赏
  • 举报
回复
有时会得不到透明色!
我怀疑你的底色不纯!因为默认透明的颜色是左上角那一部分.
如果那里不纯.有其它色,则有可能得不到透明背景
holysword 2003-08-21
  • 打赏
  • 举报
回复
我觉得 gaowen100(老高) 说得有道理,等我试试看。

另外,请教dragonhux(dragon(清水)) ,自己如何使用XOR编程实现Transparent?谢谢!
hdaq 2003-08-20
  • 打赏
  • 举报
回复
你每次改变TImage的时候重新在代码里指定一下Bitmap的透明色试试
dragonhux 2003-08-20
  • 打赏
  • 举报
回复
自己使用XOR编程实现Transparent啊!
好像使用BCB是有点问题,而且效率低下!
winespirit 2003-08-20
  • 打赏
  • 举报
回复
我用过这个功能,但没有变成你说的那样。
holysword 2003-08-20
  • 打赏
  • 举报
回复
难道无人知晓?
HenryGo 2003-08-14
  • 打赏
  • 举报
回复
会这么不稳定吗?
没试过。
xu_xinyu 2003-08-14
  • 打赏
  • 举报
回复
没有遇到过,试试再说。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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