Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260142
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2008-08-31 09:52:09



从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位,我运行了你的代码,能够透明显示  
  ================================  
  呵呵,我的机器上装了一大堆组件,现在外面出差,等回去有时间找台别的机器试试。多谢各位关注。周末愉快,加班的兄弟们辛苦啊。  
  结贴先。



[新闻]Google推出Android Market挑战App Store
阅读(1474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~