zoukankan      html  css  js  c++  java
  • MFC单文档应用程序显示图像,将图像另存为

    /p

    摘要: 1 利用VS2010向导创建一个MFC单文档应用程序MFCTest 2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象 #include "atlimage"

    1 利用VS2010向导创建一个MFC单文档应用程序MFCTest

    2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象

    #include <atlimage.h>
    
    private:
    	CImage image;

    3 打开资源文件,选中Menu下面的IDR_MAINFRAME,添加一个新的菜单项“打开图像”,修改其ID为IDM_OPEN,再点击鼠标右键,添加事件处理程序,在弹出的对话框的列表中选择CMFCTestView
    4 添加事件处理函数OnOpen的代码

    void CMFCTestView::OnOpen()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog dlg(TRUE, _T(".bmp"), _T("*.bmp"), OFN_HIDEREADONLY | 
    		OFN_OVERWRITEPROMPT, _T("位图文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg||"));
    	if(dlg.DoModal() == IDOK)
    	{
    		if(!image.IsNull())
    		{
    			image.Destroy();
    		}
    		image.Load(dlg.GetPathName());
    		Invalidate();
    	}
    }

    5 在MFCTestView中加入图像显示的代码

    void CMFCTest2View::OnDraw(CDC* pDC)
    {
    	CMFCTest2Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    
    	// TODO: 在此处为本机数据添加绘制代码
    	if(!image.IsNull())
    	{
    		image.Draw(pDC->GetSafeHdc(), 0, 0);
    	}
    }

    效果如下:

     转载:http://blog.csdn.net/foreverling/article/details/40083431

    后续:将图片文件另存为代码:

    BOOL saveTag = FALSE;
    void CIPView::OnPfileAs()
    {
        // TODO: 在此添加命令处理程序代码
        CClientDC dc(this);
    
        CRect rect;
    
        BOOL  showMsgTag;                  //是否要弹出”图像保存成功对话框"   
    
        GetClientRect(&rect);                  //获取画布大小  
    
        HBITMAP hbitmap = CreateCompatibleBitmap(dc, rect.right - rect.left, rect.bottom - rect.top);
    
        //创建兼容位图  
    
        HDC hdc = CreateCompatibleDC(dc);      //创建兼容DC,以便将图像保存为不同的格式  
    
        HBITMAP hOldMap = (HBITMAP)SelectObject(hdc, hbitmap);
    
        //将位图选入DC,并保存返回值   
    
        BitBlt(hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, dc, 0, 0, SRCCOPY);
    
        //将屏幕DC的图像复制到内存DC中  
    
    
    
        CImage image;
    
        image.Attach(hbitmap);                //将位图转化为一般图像  
    
        
    
        if (!saveTag)                          //如果图像是第一次被写入,则打开对话框  
    
        {
    
            saveTag = TRUE;
    
            showMsgTag = TRUE;
    
            CString  strFilter = L"位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|  GIF图像文件 | *.gif | PNG图像文件 | *.png |其他格式(*.*) | *.* | ";  
    
                CFileDialog dlg(FALSE, _T("bmp"), _T("iPaint1.bmp"), NULL, strFilter);
    
            if (dlg.DoModal() != IDOK)
    
                return;
    
    
    
            CString strFileName;          //如果用户没有指定文件扩展名,则为其添加一个  
    
            CString strExtension;
            
    
            strFileName = dlg.m_ofn.lpstrFile;
    
            if (dlg.m_ofn.nFileExtension = 0)               //扩展名项目为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;
    
            }
    
             saveFilePath = strFileName;     //saveFilePath为视类中的全局变量,类型为CString  
    
        }
    
        else
    
        {
    
            showMsgTag = FALSE;
    
        }
    
    
    
        //AfxMessageBox(saveFilePath);               //显示图像保存的全路径(包含文件名)  
    
        HRESULT hResult = image.Save(saveFilePath);     //保存图像  
    
        if (FAILED(hResult))
    
        {
    
            MessageBox(_T("保存图像文件失败!"));
    
        }
    
        else
    
        {
    
            if (showMsgTag)
    
                MessageBox(_T("文件保存成功!"));
    
        }
    
        image.Detach();
    
        SelectObject(hdc, hOldMap);
    
    }

    转自 http://blog.csdn.net/loveaborn/article/details/6817617

  • 相关阅读:
    32/64位平台printf uint64的方法
    [Linux 安装]centos安装vmware tools
    【Linux】fg bg ctrl + z jobs & 等命令
    让我们慢慢地彼此遗忘
    ctrl+c,ctrl+d,ctrl+z在linux中意义
    Windows 7 右键菜单 添加命令
    修改vs2010所有工程的include目录和lib目录
    Vmware虚拟机的linux与主机共享
    防止atoi函数内存越界
    JavaScriptSerializer使用条件
  • 原文地址:https://www.cnblogs.com/denghui666/p/7622754.html
Copyright © 2011-2022 走看看