/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
