关于TImageList和TImage,也许与TBitmap有关的简单问题。 (100分)

  • 主题发起人 主题发起人 叮叮当当
  • 开始时间 开始时间

叮叮当当

Unregistered / Unconfirmed
GUEST, unregistred user!
一个TImageList中有一个位图,要在程序里把它放到一个TImage里显示出来。
另有一个TImage,设计期已经给它放好了那个位图。
程序运行后发现第一个TImage显示的图片与第二个预先放好的有所不同。

程序下载:http://shasal.com/1152349.zip (Delphi 6.0)

1152349.gif


右面那个灯(位图)是我要的效果。
 
imagelist里面的图的大小?
 
ImageList里面图是需要按照你设定的大小进行压缩、拉伸或者截取的。
你直接load就不一样了。
 
位图是16×16像素,256色。
 
你的位图是16*16吗?刚才看好像不是呀。
还有ImageList似乎只能保存16色的位图呀。
 
ImageList不会那么差吧?
上面那个贴图是我截的程序运行时的画面,放大了,位图是那两个指示灯,实际只有16×16大。
问题还不清楚的话,下载我的程序看看就知道了,很简单的。
 
我的是D5,呵呵。
 
没错,就是因为16色的原因。
 
你的bmp是24位的,imagelist是16色的,差了n倍,呵呵。
 
DELPHI支持的太差了:)
 
imagelist好象对大于2566色的ico支持不好哟
 
是透明色的处理问题。 ImageList里将你灯上的白色作为透明色了。 试试换一种底色(比如红色作为底色)的bmp应该就没有这回事了。
 
To: Pearl
很遗憾,图片的底色并非是白色的。
1152349-1.jpg

而且在TImageList中查看的时候,图片似乎也是正常的,就是放到TImage中就不对了。
1152349-2.gif

我很希望有人能下载这个简单的工程文件,帮我解决这个简单的问题。
 
这个毛病我早就知道了,用DELPHI没有办法解决的,,,只有你用PHOTO SHOP来修改修改
可能可以解决.....
 
To: 张无忌
用PHOTO SHOP修改?该如何做呢?我还是想利用ImageList呀。
 
把那些杂色都去掉,你如果仔细看,那些图片模糊的地方都有点杂色,
就PHOTO SHOP处理一下就行了
 
我有比较完美的解决办法,就是将ImageList的Mast属性设为false,Width和Height按照
他的实际尺寸设定,试一试,是不是解决啦![:(!][red][/red]
 
你的工程文件有点问题,在我的D5下,不过没关系。
你的image1的bmp是24位的,但imagelist装入同样的图会变为是16位的。
所以有点不同,如果你把imagelist的图导出另存为一个文件,image2再load改文件,运行
结果就完全一样了。可能delphi的imagelist的颜色依当前显示卡设置的颜色位数而定的。
你不妨在24位颜色下test下。
 
To: hamsoft
我的目的是要把ImageList里的图片输出到Image中,有很多图片呢,不止一个,所以我不能采用你说的直接在设计期把图片放到Image里的方案。
而且我想弄清楚到底为什么Image显示ImageList的图片不正常。
 
这个问题我自己解决了!

原来,TImageList的Mask属性为True时(默认),从外部装入图片文件会自动(或手动)选择一种透明色,去除了底色。而当TImageList输出图片到TImage时,却不能正确输出透明色,结果就传了一张底色为白色的图片给TImage,当TImage的Transparent属性为True时(默认),它也会自动为图片设置一种透明色,去除底色,所以当TImageList的图片传递到TImage时,白色的底色被作为了透明色,这样就导致产生了我上面的问题。呵呵。

解决方法是只要为TImageList装载图片前设置它的Mask属性为False即可。这样当桃红色底色的图片从TImageList传递到TImage,由Transparent属性设置为True的Timage控件把桃红作为透明色去除底色,就没问题了。[:)]

Pearl. 和 xsxdelphi 似乎碰着了些边,但都没有细说下去,分就给他们吧。
 
后退
顶部