目前位置: VCer资源中心 >>> VCer论坛 >>> 技术问答

[本帖已阅读1744次 分值2 回复1次] 张贴资源 发回信箱 控制面板

求助 关于调色板的小问题

提供者:bobohallie 张贴时间:2006-10-29 20:53:43.0 出处:vcer.net 作者:不祥

求助 关于调色板的小问题(2006-10-29 20:53:43.0)


bobo


 
级别: VCer小兵
头衔: VCer会员

经验: 14
作品: 1
分会: 华北分会
注册: 2006-08-07 11:02:06.0
登录: 2006-10-30 14:05:10.0

想把采集卡采集到的数据作为图像像素的灰度值来生成8位Bmp图像显示出来,数据得到了,可就是显示不出来,估计是信息头或者调色板的问题,哪位好心人帮忙看一下 小弟不胜感激

        CDC *pDC=GetDlgItem(IDC_PICVIEW)->GetDC();               

        DWORD dwNumofPixel;

        LOGPALETTE* pLogPal;

        RGBQUAD* m_pRGBQUAD;

        dwNumofPixel=ImageWidth*ImageHeight;

        ASSERT(pDC);

        m_pRGBQUAD = new RGBQUAD[256];

        m_pGreyBMI = NULL;

        m_pGreyBMI = (BITMAPINFO*)(new BYTE[sizeof(BITMAPINFOHEADER)+256*4]);

        m_pGreyBMI->bmiHeader.biSize = sizeof(BITMAPINFOHEADER)+256*4;

        m_pGreyBMI->bmiHeader.biBitCount = 8;

        m_pGreyBMI->bmiHeader.biClrUsed = 256;

//设置调色板

        RGBQUAD greyScale[256];

        for(int i=0; i<256; i++)

        {

                greyScale.rgbRed = i;

                greyScale.rgbGreen = i;

                greyScale.rgbBlue = i;

                greyScale.rgbReserved = 0;

        }

                memcpy(m_pGreyBMI->bmiColors, greyScale, sizeof(RGBQUAD)*256);

        pLogPal = NULL;

        pLogPal = (LOGPALETTE*)(new BYTE[sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY)]);

        pLogPal->palNumEntries = 256;

        pLogPal->palVersion = 0x300;

        for(i=0; i<256; i++)

        {

                pLogPal->palPalEntry.peRed = i;

                pLogPal->palPalEntry.peGreen = i;

                pLogPal->palPalEntry.peBlue = i;

                pLogPal->palPalEntry.peFlags = 0;

        }

m_pGreyBMI->bmiHeader.biWidth        = ImageWidth;

m_pGreyBMI->bmiHeader.biHeight        =ImageHeight;

m_pGreyBMI->bmiHeader.biBitCount= 8;

m_pGreyBMI->bmiHeader.biPlanes= 1;

m_pGreyBMI->bmiHeader.biCompression= BI_RGB;

m_pGreyBMI->bmiHeader.biSizeImage= dwNumofPixel;

m_pGreyBMI->bmiHeader.biXPelsPerMeter        = 0;

m_pGreyBMI->bmiHeader.biYPelsPerMeter        = 0;

m_pGreyBMI->bmiHeader.biClrUsed= 256;

m_pGreyBMI->bmiHeader.biClrImportant        = 0;

       

CDC* pDC=GetDlgItem(IDC_PICVIEW)->GetDC();

CPalette* pPal = new CPalette;

pPal->CreatePalette(pLogPal);

                        CPalette* pOldPal = pDC->SelectPalette(pPal, TRUE);

                        pDC->RealizePalette();

                        StretchDIBits(pDC->GetSafeHdc(),

                        0,

                         0,

                        ImageWidth,       

                         ImageHeight,

                        0,                                    

                        0,     

                         ImageWidth,

                        ImageHeight,

                        pData,

                        m_pGreyBMI,

                        DIB_RGB_COLORS,

                        SRCCOPY);

                        pDC->SelectPalette(pOldPal, TRUE);

                        delete pPal;

                        ReleaseDC(pDC);                               

 

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/5688.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]

re:求助 关于调色板的小问题
我印象中似乎是不用换调色板的。BMP 头里已经有图像的颜色信息了,StrenchDIBits 应该可以自动处理的。

fefe82 于 2006-10-30 09:25:49.0 编辑 [回复该贴]