VC 求CDib函数处理中将真彩色图片转化为灰度图的函数

来源:百度知道 编辑:UC知道 时间:2024/06/03 18:43:13
如题,就是在CDib中将导入的真彩色图像转化为灰度图的图像的函数代码。
256色转灰度图的我自己解决了,只需要用(LPSTR)lpDIB=pDib->m_lpBMIH来获取图像数据,其他的不变,则可实现将256色位图灰度化。

silvergingko大侠,在下为初学者,如果什么都知道的话还用问?如果就对那些已有程序不懂的打扁头瞎琢磨恐怕事倍功半吧?若能得到经验丰富的人指点岂不事半功倍?否则要网络干什么... 不想回答别瞎嚷嚷

感谢你的关注:不过,我刚开始就是特地把256彩色和真彩色分开做的。从你的图像效果看好像不怎么理想,怎么好像就是图片的绿色分量而不是真正意义上的灰度图呢?

你这样发贴,谁知道是怎么回事? 

也不说清楚,你说的CDib应该是你自己做的一个类吧?还是别人事先做好的一个类?MFC里没有这个类的. 

问的问题太笼统,直接问人要函数代码? 

给个提示: 

研究下BITMAPINFO数据结构.然后在上次你贴的那段代码的基础上做下修改: 

把对调色板颜色的修改,直接改为对Bits像素数组的修改,改法是差不多的. 

真不知道,你改256色位图的代码是不是你写的,是你写的,怎么就不会变通呢?不是你写的,就说明你对那段代码根本看不明白,先研究研究那段代码吧! 

============================================================= 

补充: 

if (lpbmi->bmiHeader.biBitCount != 24) { 

//不是真彩图,改调色板。 

} else { 

//是真彩图,改lpDIBBits中的位图数据。 

PBYTE lpLast = (PBYTE)lpDIBBits + lpbmi->bmiHeader.biSizeImage; 

PBYTE lpCur = (PBYTE)lpDIBBits; 

while (lpCur < lpLast) { 

*lpCur++ = (*lpCur) * 0.299; 

*lpCur++ = (*lpCur) * 0.587; 

*lpCur++ = (*lpCur) * 0.114; 

}&nb