随笔 - 67  文章 - 171  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(10)

随笔分类

随笔档案

连接资料

最新随笔

搜索

  •  

最新随笔

最新评论

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 阅读(1613) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 不用DIB将位图读入CBitmap 2008-07-11 20:00 梦在天涯
恩,需要了解bmp的存储结构啊!  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理