读书人

[学妹求问]关于函数SetDIBitsToDevice

发布时间: 2012-02-01 16:58:19 作者: rapoo

[学妹求问]关于函数SetDIBitsToDevice的使用
不懂该函数最后一个参数:UINT fuColorUse

是什么意思,查了msdn说必须取DIB_PAL_COLORS和DIB_RGB_COLORS其中之一,但我却不知道什么时候该取哪个参数,什么时候不该取哪个参数?

另外这个参数在我程序里面我尝试过两个参数,结果我的图像都能显示,但当图像为4、8位时明显选择参数DIB_PAL_COLORS时显示效果很差,而当图像为真彩色24位时,感觉两个参数的显示效果差不多。


请高手详细解释一下这两个参数的异同,谢谢。



[解决办法]
8位以上(16/24/32等)的位图,不使用调色板,所以这个参数没有作用。8位(含)以下的位图,使用调色板,这个参数指明:DIB_PAL_COLORS表示使用系统调色板,BITMAPINFO结构中的bmiColors代表系统调色板中的索引号;而DIB_RGB_COLORS表示BITMAPINFO结构中的bmiColors代表一个一个的RGB颜色值,也就是位图自己的调色板。所以,一般用DIB_RGB_COLORS就可以了。
[解决办法]
DIB_PAL_COLORS是指图像颜色数据的存储采用了调色板技术,比如一副只有16种颜色的图像,那么我们完全没有必要将它所有像素的RGB三通道的强度值都存储起来,因为那样每个像素都要占用3个字节,会浪费大量的空间,我们只需要做一个颜色查找表,即调色板,将图像所用到的16中颜色分别对应一个索引值,那么在存储图像数据的时候,对于每个像素只要记录他的索引值就可以了,这样可以节省空间。而对于DIB_RGB_COLORS,说明图像数据存储的是RGB三个通道的强度值,当三个通道的数值不一样的时候,就是24位的真彩色图,若三个通道的数值都一样,就是256色的灰度图像,当然你可以将它转化为8位的灰度图处理。如果是做图像处理或模式识别,则一般处理的图像数据都是灰度值,通常使用DIB_RGB_COLORS。
[解决办法]
是不是未设置调色板啊!

读书人网 >VC/MFC

热点推荐