从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位色环境
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选项设置有关吗?试过几个选项,没什么效果。
解决方案 »
- 问一个C++转换到DELPHI的函数的问题
- 由12/30/1899以来的天数(比如39562)﹐計算出對應的日期。謝謝
- 如何获得局域网内的sql2000数据库名称(没分了,有了立即加)
- 哭天喊地 跪求 达人帮助
- Dll调试不能捕获断点
- 数据库高手来解答呀,一个SELECT汇总统计语句,,急!!在线等!!
- 怎么使showmessage弹出的对话框中的"OK"按钮变成“确定”啊
- 怎样读取由.aspx生成的xml文件?
- 大虾请帮忙!!!
- Paradox数据库,建了索引,用GotoKey的查找方法(普通性能PC),20000条记录,请问速度如何?会理想码?
- BCB/delphi 调用Interbase的存储过程带回返回值问题(ADO)
- 注册码:通过dll文件读取硬盘id和计算机名称,怎么判断用户已经注册和没有注册呢?
你说的32色环境指的是32色图片?还是屏幕设置32位方式?
=========
32位色环境是屏幕设置为32位颜色,屏幕显示属性,“颜色质量”设置为“最高(32位)”。听你这么一说,我忘了图片的颜色是多少位的了,好像是用windows带的画笔工具画出来后存为最高质量的.bmp文件,是不是跟这个有关系.....我再去试试,有可能啊。qzmp_sc(你是白云~我是乌鸦)
窗体的Transparent??
=========
我说的不是窗体的Transparent,是在窗体上放个Image,Image的图片根据需要从ImageList中调出,让Image透明。
代码:
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位颜色质量的桌面环境下,图片的白色部分又透明了~ 我有点糊涂了,各位能指点下么?
================================
呵呵,我的机器上装了一大堆组件,现在外面出差,等回去有时间找台别的机器试试。多谢各位关注。周末愉快,加班的兄弟们辛苦啊。
结贴先。