MFC图片框中画的图形用CImage保存成多种格式

//改变Hwnd即可以得到不同控件的句柄
   //整个对话框中 每个元素都是一个窗体!
    HWND hwnd = GetDlgItem(IDC_STATIC2)->GetSafeHwnd(); 
    HDC hDC = ::GetWindowDC(hwnd);//获取DC
 
    RECT rect;    
    ::GetWindowRect(hwnd, &rect);//获取屏幕大小   
    HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC    
   
    HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//创建兼容位图    
    HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值    
   
    ::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中    
   
    CImage image;//需要#include <atlimage.h>   
    image.Attach(hBitMap);

    //image.Save(_T("c:\\B.jpg"));//如果文件后缀为.bmp,则保存为为bmp格式 
    //以下程序用于选择图片保存路径等信息    

    CString strFilter="位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|GIF 图像文件|*.gif|PNG 图像文件|*.png||";
    CFileDialog dlg(FALSE,"bmp","untitled.bmp",NULL,strFilter);
   if ( IDOK != dlg.DoModal())
    return;
 // 如果用户没有指定文件扩展名,则为其添加一个
 CString strFileName;
 CString strExtension;
 
 strFileName = dlg.m_ofn.lpstrFile;
   if (dlg.m_ofn.nFileExtension == 0)
    {
  switch (dlg.m_ofn.nFilterIndex)
  {
     case 1:
      strExtension = "bmp"; break;
     case 2:
      strExtension = "jpg"; break;
     case 3:
      strExtension = "gif"; break;
     case 4:
      strExtension = "png"; break;
     default:
      break;
  }
  strFileName = strFileName + '.' + strExtension;
   }
   // 图像保存
   HRESULT hResult = image.Save(strFileName);
   if (FAILED(hResult))
    MessageBox("保存图像文件失败!");
 else
    MessageBox("保存图像文件成功!");
 
 
 
    image.Detach();    
   
    ::SelectObject(hDCMem, hOldMap);//选入上次的返回值    
   
    //释放    
    ::DeleteObject(hBitMap);    
    ::DeleteDC(hDCMem);    
    ::DeleteDC(hDC); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值