ReadBmpToMem(CString& strPath)
{
CFile photoBmp;
//打開指定文件
if (photoBmp.Open(strPath, CFile::modeRead))
{
LONG fileSize=(LONG)photoBmp.GetLength();
//分配內存
char *pDib=new char[fileSize+1];
//讀取內存
if (photoBmp.Read(pDib,fileSize)==(DWORD)fileSize)
{
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen=sizeof(bmfHeader);
//char *strncpy( char *strDest, const char *strSource, size_t count);
::strncpy((LPSTR)&bmfHeader,(LPSTR)pDib,bmfHeaderLen);
if (bmfHeader.bfType==(*(WORD*)"BM"))
{
LPSTR lpDIB =pDib+ bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)lpDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)lpDIB;
LPVOID lpDIBBits =pDib+((BITMAPFILEHEADER*)pDib)->bfOffBits;
//創建設備上下文
CWindowDC dc(this);
HBITMAP hBmp = CreateDIBitmap(dc.m_hDC, &bmiHeader,
CBM_INIT,lpDIBBits, &bmInfo, DIB_RGB_COLORS);
if (m_Bitmap.GetSafeHandle()!=NULL)
{
m_Bitmap.DeleteObject();
}
//將位圖綁定到指定對象
m_Bitmap.Attach(hBmp);
}
}
delete[] pDib;
pDib = NULL;
InvalidateRect(&m_recOffset,TRUE);
}
}
posted on 2008-07-11 13:25
cpsprogramer 閱讀(1628)
評論(1) 編輯 收藏 引用