使用CImage类切割png图片

来源:互联网 发布:水晶相册制作淘宝 编辑:程序博客网 时间:2024/05/16 01:22

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);}}


3.在png.cpp中调用:

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

原创粉丝点击