background image

    BOOL CImageDlg:: GetImageData(CByteArray & DBArray)

    {

    CByteArray Array;

    Array.Copy

 

( DBArray);

    int HeaderLen = 78 + sizeof(BITMAPFILEHEADER

 

); file://确定图像头信息的起始位

    Array.RemoveAt

 

( 0, HeaderLen 

 

); // 移动到图像头信息的起始位置

    BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)Array.GetData()

 

;

    BITMAPINFO &bmInfo = *(LPBITMAPINFO)Array.GetData

 

() ;

    file://得到图像数据的头信息

    int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 

 

《 bmiHeader.biBitCount;

    file://确定图像的颜色数

    LPVOID lpDIBBits;

    if

 

( bmInfo.bmiHeader.biBitCount > 8 )

 

 

 

  lpDIBBits=

LPVOID

LPDWORD

(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+

    ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS

 

) ? 3 : 0));

    else

    lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);

    file://得到图像各个像素的具体数据

    CClientDC dc(NULL);

    HBITMAP hBmp = CreateDIBitmap

 

( dc.m_hDC,

    &bmiHeader,

    CBM_INIT,

    lpDIBBits,

    &bmInfo,

    DIB_RGB_COLORS);

    file://生成位图句柄