1.新建一win32控制台应该程序:png,勾选支持MFC
2.新建类:CImageHandler,并在头文件加添加#include <atlimage.h> (CImage头文件)
#pragma once #include <atlimage.h> class CImageHandler { public: CImageHandler(void); ~CImageHandler(void); private: CImage m_Image; void LoadImage(); public: void SplitImage(int dwidth, int dheight); };
#include "StdAfx.h" #include "ImageHandler.h" #include <iostream> using namespace std; CImageHandler::CImageHandler(void) { } CImageHandler::~CImageHandler(void) { } void CImageHandler::LoadImage() { CString strFilter; CSimpleArray<GUID> aguidFileTypes; HRESULT hResult; // 获取CImage支持的图像文件的过滤字符串 hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes,_T( "All Image Files") ); if (FAILED(hResult)) { AfxMessageBox("GetExporterFilter调用失败!"); return ; } CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter); if(IDOK != dlg.DoModal()) return ; m_Image.Destroy();//detach the orignal bitmap of the image if exits and destroy it. // 将外部图像文件装载到CImage对象中 hResult = m_Image.Load(dlg.GetFileName()); if (FAILED(hResult)) { AfxMessageBox("调用图像文件失败!"); return ; } } void CImageHandler::SplitImage(int dwidth, int dheight) { LoadImage(); CRect dRect(0,0,dwidth,dheight); CImage newImage; BOOL bStat = newImage.Create(dwidth, dheight,m_Image.GetBPP()); ASSERT(bStat); if(!bStat) { cout<<"bStat is FALSE"<<endl; return ; } POINT p; CImageDC imageDC(newImage); int i,j; CString fname; for(i=0;i<m_Image.GetWidth();i+=dwidth) for(j=0;j<m_Image.GetHeight();j+=dheight) { p.x=i; p.y=j; m_Image.BitBlt(imageDC,dRect,p); fname.Format("c:/testpic/%d_%d.png",i,j); newImage.Save(fname); } }
// png.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "png.h" #include "ImageHandler.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一的应用程序对象 CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // 初始化 MFC 并在失败时显示错误 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 更改错误代码以符合您的需要 _tprintf(_T("错误: MFC 初始化失败\n")); nRetCode = 1; } else { // TODO: 在此处为应用程序的行为编写代码。 CImageHandler imgHandler; imgHandler.SplitImage(20,20); //imgHandler.CaptureScreen(true,"c:/"); } return nRetCode; }
4.测试图片:
5.分割完成后: