九星论坛


标题: [求助]在VC中怎样获得一个图像的灰度
帅哥不在了 :-( a02212105
分子暗云
Rank: 2Rank: 2


精华 0
积分 800
帖子 43
经验 274 点
威望 0 点
星币 70 ¥
恋人 单身
门派 没有门派
阅读权限 20
注册 2006-9-20
第 1 楼
 
发表于 2007-1-1 21:01  资料  个人空间  短消息  加为好友 
[求助]在VC中怎样获得一个图像的灰度

在VC中怎样获得一个图像的灰度,得到一个灰度数组,之后再用它来做其它事情,
哪位大侠帮忙啊?

顶部
天秤座 帅哥不在了 :-( 紫龙
红巨星
Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5
天龙


精华 1
积分 22605
帖子 1303
经验 6338 点
威望 0 点
星币 3531 ¥
恋人 单身
门派 雅典娜的圣域 - 圣域的守护神
阅读权限 50
注册 2004-12-20
来自 雅典娜的圣域
第 2 楼
 
发表于 2007-1-3 11:53  资料  个人空间  短消息  加为好友  QQ
void OnFILE256ToGray()
{
        // 将256色位图转换成灰度图

        CPicturesDoc* pDoc = GetDocument();

        LPSTR        lpDIB;

        lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());

        WORD wNumColors;

        wNumColors = :: DIBNumColors(lpDIB);
        
        // 判断是否是8-bpp位图
        if (wNumColors != 256)
        {
               
                ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

                return;
        }
        BeginWaitCursor();

        LPSTR   lpDIBBits;

        BYTE *        lpSrc;

        LONG        i;
        LONG        j;

        LONG        lWidth;
        
        LONG        lHeight;

        LONG        lLineBytes;
        
        LPBITMAPINFO lpbmi;

        LPBITMAPCOREINFO lpbmc;

        BOOL bWinStyleDIB;

        lpbmi = (LPBITMAPINFO)lpDIB;
        
        lpbmc = (LPBITMAPCOREINFO)lpDIB;
        
        // 灰度映射表
        BYTE bMap[256];

        bWinStyleDIB = IS_WIN30_DIB(lpDIB);
        
        // 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板
        for (i = 0; i < 256; i ++)
        {
                if (bWinStyleDIB)
                {
                        // 计算该颜色对应的灰度值
                        bMap = (BYTE)(0.299 * lpbmi->bmiColors.rgbRed +
                                                     0.587 * lpbmi->bmiColors.rgbGreen +
                                                 0.114 * lpbmi->bmiColors.rgbBlue + 0.5);

                        lpbmi->bmiColors.rgbRed = i;

                        lpbmi->bmiColors.rgbGreen = i;
                        
                        lpbmi->bmiColors.rgbBlue = i;

                        lpbmi->bmiColors.rgbReserved = 0;
                }
                else
                {
                        // 计算该颜色对应的灰度值
                        bMap = (BYTE)(0.299 * lpbmc->bmciColors.rgbtRed +
                                                     0.587 * lpbmc->bmciColors.rgbtGreen +
                                                 0.114 * lpbmc->bmciColors.rgbtBlue + 0.5);

                        lpbmc->bmciColors.rgbtRed = i;

                        lpbmc->bmciColors.rgbtGreen = i;

                        lpbmc->bmciColors.rgbtBlue = i;
                }
        }

        lpDIBBits = ::FindDIBBits(lpDIB);        

        lWidth = :: DIBWidth(lpDIB);
        

        lHeight = :: DIBHeight(lpDIB);
        
        lLineBytes = WIDTHBYTES(lWidth * 8);
        
        for(i = 0; i < lHeight; i++)
        {
                for(j = 0; j < lWidth; j++)
                {
                        lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
                        
                        *lpSrc = bMap[*lpSrc];
                }
        }

        pDoc->GetDocPalette()->SetPaletteEntries(0, 256, (LPPALETTEENTRY) ColorsTable[0]);
        
        pDoc->SetModifiedFlag(TRUE);

        OnDoRealize((WPARAM)m_hWnd,0);
        
        pDoc->UpdateAllViews(NULL);
        
        ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

        EndWaitCursor();        
}


[ 本帖最后由 紫龙 于 2007-1-3 11:54 编辑 ]






顶部
[广告]
天秤座 帅哥不在了 :-( 紫龙
红巨星
Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5
天龙


精华 1
积分 22605
帖子 1303
经验 6338 点
威望 0 点
星币 3531 ¥
恋人 单身
门派 雅典娜的圣域 - 圣域的守护神
阅读权限 50
注册 2004-12-20
来自 雅典娜的圣域
第 3 楼
 
发表于 2007-1-3 11:55  资料  个人空间  短消息  加为好友  QQ
转换算法的代码在中间部分






顶部
双鱼座 帅哥不在了 :-( 柿子红了
高密云核
Rank: 3Rank: 3Rank: 3


精华 0
积分 1598
帖子 88
经验 517 点
威望 0 点
星币 131 ¥
恋人 单身
门派 同福客栈 - 公关
阅读权限 30
注册 2006-12-9
来自 CS
第 4 楼
 
发表于 2007-1-3 13:33  资料  个人空间  短消息  加为好友 
这么长的代码...

太晕了





回忆就像倒在掌心的水
无论是紧握还是张开
都会从指间一点一滴流淌掉
顶部


当前时区 GMT+8, 现在时间是 2009-1-8 06:19
京ICP备06069844号

Powered by Discuz! 5.5.0
Processed in 0.014224 second(s), 10 queries , Gzip enabled
Copyright © 2002-2008 北理九星
清除 Cookies - 联系我们 - Archiver - WAP