想把采集卡采集到的数据作为图像像素的灰度值来生成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);
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);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货