mfc 位图本地存储 本地位图读取显示

一、读取CImage

  //在绘图函数中直接使用参数pDC,无需定义
  CDC* pDC = GetDC();
  //读去位图路径,根据实际情况修改
  CString loatImagePath = TEXT("./res/drawing.png");
  CRect imageRect; 
  CImage  image;  
   
  //根据路径载入图片   HRESULT hresult = image.Load(loatImagePath);
  //图片不存在,结束读取   if(E_FAIL==hresult)   {
    
//MessageBox(_T(" Image Load failed!"));
    
return;   }
  //设置矩形框大小   imageRect.SetRect(
0,0 ,image.GetWidth() , image.GetHeight());   // 只能为英文路径,否则报错。   //将图片画到Picture控件表示的矩形区域   image.Draw(pDC->m_hDC, imageRect);

二、保存文件绘制显示内容

    //将存取this指向的CWnd的客户区
    CClientDC dc(this);    
    CRect rect; 
 
     //获取工作区大小(画布)
    GetClientRect(&rect);                 

    //创建兼容位图
    HBITMAP hBitmap = CreateCompatibleBitmap(*dc, rect.Width(), rect.Height());     

    //创建兼容DC    产生与dc指定设备兼容的设备上下文内存
    HDC hdc = CreateCompatibleDC(*dc);      

    //将位图选入DC,并保存返回值 
    HBITMAP hOldMap = (HBITMAP)SelectObject(hdc,hBitmap); 

    //将屏幕DC(dc)的图像复制到内存DC(hdc)中
    BitBlt(hdc,0,0,rect.Width(),rect.Height(),*dc,0,0,SRCCOPY); 

    CImage  image;
    //将位图转化为一般图像 将hBitmap附加到对象image
    image.Attach(hBitmap);                

    //保存图像,返回执行状况
    HRESULT hResult = image.Save(saveImagePath);    

    //从CImage对象分离位图。
    image.Detach();

    //复原兼容DC数据
    SelectObject(hdc,hOldMap);

  //释放设备上下文环境(DC)
   ReleaseDC(&dc);

 

posted @ 2020-12-01 10:57  燕钰达  阅读(421)  评论(0编辑  收藏  举报