ImageList图片透明显示问题,XP下,16位色显示属性和32色显示属性显示不同。
http://www.delphi2007.net/DelphiMultimedia/html/delphi_2006120700102477.html
从ImageList1中调出一幅位图,显示在Image1中,Image1.Transparent设为true。在16位色显示下,图片是透明的;在32位色显示下,图片周边的白色方框依然显示出来。
将显示属性中的颜色质量设定为32位。
代码如下:
//有白框的--32位色环境
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Transparent := True;
ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;
//没白框的--32位色环境
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Transparent := True;
Image1.Picture.Bitmap.LoadFromFile('cms.bmp');
end;
另外使用Image1.Picture.Bitmap.LoadFromResource(HInstance,'B1');即从资源调入图片也可以正常显示。
唯独在32色下 从ImageList调入有问题。其实使用其他方式也能解决,不过好奇为什么ImageList会有这个现象?跟ImageList选项设置有关吗?试过几个选项,没什么效果。
你说的32色环境指的是32色图片?还是屏幕设置32位方式?
你说的32色环境指的是32位图片?还是屏幕设置32位方式?
窗体的Transparent??
maozefa(阿发伯)
你说的32色环境指的是32色图片?还是屏幕设置32位方式?
=========
32位色环境是屏幕设置为32位颜色,屏幕显示属性,“颜色质量”设置为“最高(32位)”。听你这么一说,我忘了图片的颜色是多少位的了,好像是用windows带的画笔工具画出来后存为最高质量的.bmp文件,是不是跟这个有关系.....我再去试试,有可能啊。
qzmp_sc(你是白云~我是乌鸦)
窗体的Transparent??
=========
我说的不是窗体的Transparent,是在窗体上放个Image,Image的图片根据需要从ImageList中调出,让Image透明。
去试了试,bmp文件只有单色、8色、256色、24位色这么几种,没有32位色的bmp,我再详细说下做法; 在form上放一个Image组件,再放一个ImageList组件,打开windows画笔,创建一个64*64的图片,用白色填充,随便画几笔红色(别画到左下角的那个点上),存为一个bmp文件,将ImageList尺寸改为64×64,调入刚做好的bmp文件。然后放个button在form上。
代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Transparent := True;
ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;
这时Image1将白色的背景和红色的图案都显示出来了——白色部分应该透明掉的。
此时不用改程序,到桌面,点右键选“属性”,到显示设置去选桌面的“颜色质量”,改为“中(16位)”,然后再运行这个程序,现在白色部分透明了,只显示红色的图案了。
我就是想问问:图片的透明与桌面的颜色质量设置有关么?但是另外一个例子又说明似乎无关:
先将桌面改回32位颜色。
然后将代码改为:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Transparent := True;
ImageList1.Picture.Bitmap.LoadFromFile('1.bmp'); //1.bmp就是刚才我们创建的图片
end;
现在运行:可看到在32位颜色质量的桌面环境下,图片的白色部分又透明了~ 我有点糊涂了,各位能指点下么?
我有点糊涂了,各位能指点下么?
=============================================================================
听你说,我倒糊涂了,我从没试过你说的情况,我的显卡一直就是32位,我运行了你的代码,能够透明显示
你是否安装了第三方类似JPEG.PAS用于打开图形文件的单元或者组件,如果是,可能与这些文件有关
maozefa(阿发伯) ( ) 信誉:110 Blog 2006-12-8 19:33:41 得分: 0
听你说,我倒糊涂了,我从没试过你说的情况,我的显卡一直就是32位,我运行了你的代码,能够透明显示
================================
呵呵,我的机器上装了一大堆组件,现在外面出差,等回去有时间找台别的机器试试。多谢各位关注。周末愉快,加班的兄弟们辛苦啊。
结贴先。