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://生成位图句柄