巨困难或者巨简单, 如何正确让TImage动态载入TImageList正确透明显示

时间:2023-02-06 06:07:58
这个问题困扰了很久,看看大家有没有什么好方法

我在imglist: TImageList index 0上有一个图片, 在某些可以使用ImageList的控件比如Toolbutton指定ImageIndex=0可以正确的透明显示
现在,我试图在运行期动态给Image1: TImage载入TImageList上面同一个index 0上面的图象,使用了如下方法
1. 
imglist.GetBitmap(0, Image1.Picture.Bitmap);
2.
定义Bitmap: TBitmap; MS: TMemoryStream;
Bitmap := TBitmap.Create;
MS := TMemoryStream.Create;
imglist.GetBitmap(0, Bitmap);
Bitmap.SaveToStream(MS);
Image1.Picture.Bitmap.LoadFromStream(MS);
3.
Bitmap := TBitmap.Create;
imglist.GetBitmap(0, Bitmap);
Image1.Picture.Assign(Bitmap);

以上方法都能显示,但是背景变成白色,而不是希望的透明
所有的Image1.Picture.Bitamp.Transparent等属性我都有尝试过,但是背景都是白色
请问这是为什么(请大家试一下)

9 个解决方案

#1


你是不是还安装了Raise控件?

#2


应该不难,你在Image1获取图片以后再设置
Image1.Transparent := True
试试呢?

#3


#4


我也测试过了,确实不能透明

#5


可以实现。方法是:

首先设置ImageList的Masked属性为False
然后再向ImageList中添加位图

就可以了。
问题在于ImageList对位图做了Mask处理

#6


帮着顶一个

#7


引用 5 楼 lihuasoft 的回复:
可以实现。方法是: 

首先设置ImageList的Masked属性为False 
然后再向ImageList中添加位图 

就可以了。 
问题在于ImageList对位图做了Mask处理


enenenenenenen

#8


Image1.Transparent := True
这个应该可以实现的 啊

#9


问题解决了,
Imagelist先吧Masked设置为false,然后一定要重新载入你的图标,再画到image里就透明了。

#1


你是不是还安装了Raise控件?

#2


应该不难,你在Image1获取图片以后再设置
Image1.Transparent := True
试试呢?

#3


#4


我也测试过了,确实不能透明

#5


可以实现。方法是:

首先设置ImageList的Masked属性为False
然后再向ImageList中添加位图

就可以了。
问题在于ImageList对位图做了Mask处理

#6


帮着顶一个

#7


引用 5 楼 lihuasoft 的回复:
可以实现。方法是: 

首先设置ImageList的Masked属性为False 
然后再向ImageList中添加位图 

就可以了。 
问题在于ImageList对位图做了Mask处理


enenenenenenen

#8


Image1.Transparent := True
这个应该可以实现的 啊

#9


问题解决了,
Imagelist先吧Masked设置为false,然后一定要重新载入你的图标,再画到image里就透明了。