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

posted @ 2017-10-02 21:48  hui666  阅读(2661)  评论(0编辑  收藏  举报