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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM