| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 601 人关注过本帖
标题:关于bmp图像处理的MFC程序请教(寻找错误)
只看楼主 加入收藏
dongli1067
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
关于bmp图像处理的MFC程序请教(寻找错误)
下面是主要的BMP图像处理程序。我的BMP图像为320*240
BOOL WINAPI ConvertToGrayScale(LPSTR lpDIB)
{
    LPSTR lpDIBBits;
    LPSTR lpNewDIBBits;
    LONG lLineBytes;
    unsigned char *lpSrc;
    unsigned char *lpdest;
    unsigned char *ired,*igreen,*iblue;
    long lWidth;
    long lHeight;
    long i,j;
    lWidth=::DIBWidth(lpDIB);
    lHeight=::DIBHeight(lpDIB);
    RGBQUAD *lpRGBquad;
    lpRGBquad=(RGBQUAD*)&lpDIB[sizeof(BITMAPINFOHEADER)];
    if(::DIBNumColors(lpDIB)==256)
    {
        return TRUE;
    }
    if(::DIBNumColors(lpDIB)!=256)
    {
        lLineBytes=WIDTHBYTES(lWidth*8*3);
        lpdest=new BYTE[lHeight*lWidth];
        lpDIBBits=(LPSTR)lpDIB+sizeof(BITMAPINFOHEADER);
        for(i=0;i<lHeight;i++)
            for(j=0;j<lWidth*3;j+=3)
            {
                ired=(unsigned char*)lpDIBBits+lLineBytes*i+j+2;
                igreen=(unsigned char*)lpDIBBits+lLineBytes*i+j+1;
                iblue=(unsigned char*)lpDIBBits+lLineBytes*i+j;
                lpdest[i*lWidth+j/3]=(unsigned char)(*ired)*0.299+(*igreen)*0.588+(*iblue)*0.114;
            }//总是在这个地方出错,我调试了下发现*((unsigned char*)lpDIBBits+lWidth *3*( lHeight -1)+ lWidth *3-1);这个值就已报错,为什么?每个点都是3基色呀。。。
            LPBITMAPINFOHEADER lpBI;
            lpBI=(LPBITMAPINFOHEADER)lpDIB;
            lpBI->biBitCount=8;
            for(i=0;i<256;i++)
            {
                lpRGBquad[i].rgbRed=(unsigned char)i;
                lpRGBquad[i].rgbGreen=(unsigned char)i;
                lpRGBquad[i].rgbBlue=(unsigned char)i;
                lpRGBquad[i].rgbReserved=0;
            }
            lpNewDIBBits=::FindDIBBits(lpDIB);
            lLineBytes=WIDTHBYTES(lWidth*8);
            for(i=0;i<lHeight;i++)
                for(j=0;j<lWidth;j++)
                {
                    lpSrc=(unsigned char*)lpNewDIBBits+lLineBytes*i+j;
                    *lpSrc=lpdest[i*lWidth+j];
                }
                delete lpdest;
                }
    return true;
}
在线求答案,跪求!!!!
2011-05-04 12:04
justcy
Rank: 2
等 级:论坛游民
帖 子:25
专家分:84
注 册:2009-7-25
收藏
得分:20 
图像的知识好深奥
2011-05-08 20:02
快速回复:关于bmp图像处理的MFC程序请教(寻找错误)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016569 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved