VC 求CDib函数处理中将真彩色图片转化为灰度图的函数
来源:百度知道 编辑:UC知道 时间:2024/06/03 18:43:13
如题,就是在CDib中将导入的真彩色图像转化为灰度图的图像的函数代码。
256色转灰度图的我自己解决了,只需要用(LPSTR)lpDIB=pDib->m_lpBMIH来获取图像数据,其他的不变,则可实现将256色位图灰度化。
silvergingko大侠,在下为初学者,如果什么都知道的话还用问?如果就对那些已有程序不懂的打扁头瞎琢磨恐怕事倍功半吧?若能得到经验丰富的人指点岂不事半功倍?否则要网络干什么... 不想回答别瞎嚷嚷
感谢你的关注:不过,我刚开始就是特地把256彩色和真彩色分开做的。从你的图像效果看好像不怎么理想,怎么好像就是图片的绿色分量而不是真正意义上的灰度图呢?
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