BITMAPINFO结构体

在转换图像时,有时只有图像的灰度数据和行列值,这时候就需要创建一个BITMAPINFO结构体,下面的代码就是利用已有数据创建的结构体:

unsigned char hBitMapInfo[sizeof(BITMAPINFOHEADER)+ sizeof(RGBQUAD)* 256]; tagBITMAPINFO *BitMapInfo=(tagBITMAPINFO *) hBitMapInfo; for(int i=0;i<256;i++) { BitMapInfo->bmiColors[i].rgbBlue = i; BitMapInfo->bmiColors[i].rgbGreen = i; BitMapInfo->bmiColors[i].rgbRed = i; BitMapInfo->bmiColors[i].rgbReserved = i; } BitMapInfo->bmiHeader.biBitCount = 8; BitMapInfo->bmiHeader.biClrImportant = 0; BitMapInfo->bmiHeader.biClrUsed = 0; BitMapInfo->bmiHeader.biCompression = BI_RGB; BitMapInfo->bmiHeader.biPlanes = 1; BitMapInfo->bmiHeader.biSize=sizeof(tagBITMAPINFOHEADER); BitMapInfo->bmiHeader.biSizeImage = 0; BitMapInfo->bmiHeader.biXPelsPerMeter = 0; BitMapInfo->bmiHeader.biYPelsPerMeter = 0; BitMapInfo->bmiHeader.biHeight = nLines+1;// BitMapInfo->bmiHeader.biWidth = nPixels+1;// StretchDIBits( pDC->GetSafeHdc(), 0,0, m_ClientRect.right, m_ClientRect.bottom, 0,0,nPixels+1,nLines+1, pImage, BitMapInfo, DIB_RGB_COLORS, SRCCOPY ); 

 

 

 注意问题:

1)X坐标数目,应为4的整数倍,否则显示有问题。可以这样解决:

     //确定像素数是4的倍数,i = width*BitCount; BitCount = 8;

     #define WIDTHBYTES(i)    ((i+31)/32*4)

2)BitMapInfo->bmiHeader.biHeight 的正负,可以控制图像的上下颠倒。

 

你可能感兴趣的:(C++/VC)