我想把由CCD采集到内存中的数据以BMP图像的形式显示出来,要以8位灰度图显示出来,可是不知道调色板以及信息头怎么设置,请大侠们指点一下,我把部分代码写出来:
图像存放在pImageBuffer的缓冲区中,大小为ImageHeight*ImageWidth;
之前调色板设置如下:
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[i].rgbRed = i;
greyScale[i].rgbGreen = i;
greyScale[i].rgbBlue = i;
greyScale[i].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[i].peRed = i;
pLogPal->palPalEntry[i].peGreen = i;
pLogPal->palPalEntry[i].peBlue = i;
pLogPal->palPalEntry[i].peFlags = 0;
}
显示;
StretchDIBits(pDC->GetSafeHdc(),
0,
0,
ImageWidth,//显示窗口宽度
ImageHeight,//显示窗口高度
0,
0,
ImageWidth,//图像宽度
ImageHeight,//图像高度
pImageBuffer,//图像缓冲区
m_pGreyBMI,//BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
不知道为什么没有办法显示,估计是信息头设置的不对,那位大虾能帮忙改一下 不胜感激
图像存放在pImageBuffer的缓冲区中,大小为ImageHeight*ImageWidth;
之前调色板设置如下:
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[i].rgbRed = i;
greyScale[i].rgbGreen = i;
greyScale[i].rgbBlue = i;
greyScale[i].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[i].peRed = i;
pLogPal->palPalEntry[i].peGreen = i;
pLogPal->palPalEntry[i].peBlue = i;
pLogPal->palPalEntry[i].peFlags = 0;
}
显示;
StretchDIBits(pDC->GetSafeHdc(),
0,
0,
ImageWidth,//显示窗口宽度
ImageHeight,//显示窗口高度
0,
0,
ImageWidth,//图像宽度
ImageHeight,//图像高度
pImageBuffer,//图像缓冲区
m_pGreyBMI,//BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
不知道为什么没有办法显示,估计是信息头设置的不对,那位大虾能帮忙改一下 不胜感激
m_pBih->biHeight = lHeight;
m_pBih->biWidth = lWidth;
m_pBih->biPlanes = 1;
m_pBih->biBitCount = 8;
m_pBih->biCompression = BI_RGB;
m_pBih->biSizeImage = m_dwSize;
m_pBih->biXPelsPerMeter = 0x0ec4;
m_pBih->biYPelsPerMeter = 0x0ec4;
m_pBih->biClrUsed = 0;
m_pBih->biClrImportant = 0;