Picture Control控件图象保存为bmp,jpg,emf,tif,gif

今天在做项目的时候,遇见了一个需求:如何把MFC控件 Picture Control  中的图像保存到一个文件夹下?

平时也没做过这些,在网上寻求解决方案,一位大神的方法,完美的解决了我的问题,也让我get到了新的技能,感谢!

解决方法如下:

解决方法1:

  以下代码要求.net2003以上环境,因为vc6.0无atlimage.h.如果你要用vc6.0,那么请在.net2003下去拷altimage.h,它是gdi+的包装类 
 

HBITMAP   hBitmap   =   NULL;
  //创建位图段
  BITMAPINFO   bmi;
  LPBYTE   pBits;
  ZeroMemory(&bmi,sizeof(bmi));
  //m_bmpShow为Picture Control控件变量名称
  CDC *pShowDC = m_bmpShow.GetDC();
  //获取Picture Control控件的宽度和高度
  CRect m_rcShow
  m_bmpShow.GetWindowRect(&m_rcShow);
  bmi.bmiHeader.biSize   =   sizeof(BITMAPINFOHEADER);
  bmi.bmiHeader.biWidth   =   m_rcShow.Width();
  bmi.bmiHeader.biHeight   =  m_rcShow.Height();
  bmi.bmiHeader.biPlanes   =   1;
  bmi.bmiHeader.biBitCount   =   24;
  bmi.bmiHeader.biCompression   =   BI_RGB;
  hBitmap     =   CreateDIBSection(pShowDC->m_hDC,&bmi,DIB_RGB_COLORS,(void   **)&pBits,0,0   );
  //创建兼容dc并选择位图段
  CDC   dcMem;
  dcMem.CreateCompatibleDC(pShowDC);
  dcMem.SelectObject(hBitmap);
  dcMem.BitBlt(0,0,m_rcShow.Width(),m_rcShow.Height(),pShowDC,0,0,SRCCOPY);
  m_bmpShow.ReleaseDC(pShowDC);
  if( hBitmap )
  {
   CImage   img;
   img.Attach(hBitmap);
   img.Save(_T("f:\\1.bmp"));
   img.Save(_T("f:\\1.jpg"));
   //其它文件格式同理
   DeleteObject(hBitmap);
   AfxMessageBox(_T("OK!!"));
  }



解决方法2:

用CImage类更简洁的代码如下:

//m_bmpShow为Picture Control控件变量名称
 CDC *pdc = m_bmpShow.GetDC();
 CImage   imag;
 //获取Picture Control控件的宽度和高度
 CRect   rcClient;
 m_bmpShow.GetWindowRect(&rcClient);
 imag.Create(   rcClient.Width(),rcClient.Height(),32);
 ::BitBlt(imag.GetDC(),0,0,rcClient.Width(),rcClient.Height(),pdc->m_hDC,0,0,SRCCOPY);
 imag.Save(_T("f:\\2.bmp"));
 imag.Save(_T("f:\\21.jpg"));
 //ReleaseDC(pdc);
 imag.ReleaseDC();
 AfxMessageBox(_T("OK!"));


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值