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.分割完成后: