天天看点

GreenOpenPaint的实现(六)图片的保存和打开

如果只是直接的图片保存和打开,是没有很多内容的。但是我这里,将EXIF的信息融入其中,使得图像处理的结果能够保存下来。这样就非常有价值意义了。

所有的操作都放在DOC中进行处理。

我之前已经对EXIF的操作进行总结,这里进行引入

#include "Exif.h"

/*读取

EXIFINFO m_exifinfo;

FILE* hFile=fopen(FilePathName.c_str(),"rb");

if (hFile){

memset(&m_exifinfo,0,sizeof(EXIFINFO));

Cexif exif(&m_exifinfo);

exif.DecodeExif(hFile);

fclose(hFile);

写入

Cexif ceif;

sprintf_s(cbuf2,"123");

int iret = ceif.WriteExif2Image(FilePathName.c_str(),PropertyTagCopyright,cbuf2);

if(iret == 0)

AfxMessageBox("写入EXIF信息成功!");

else

AfxMessageBox("写入EXIF信息失败!");

*/

并且在doc中打开和保存函数中进行引入。

//将文件的处理集中在DOC中是非常正确的方法

BOOL CGreenOpenPaintDoc::OnOpenDocument(LPCTSTR lpszPathName)

{

    if (!CDocument::OnOpenDocument(lpszPathName))

        return FALSE;

    m_filename = CT2CA(lpszPathName);

    //读入文件

    m_image.Load(CT2CA(lpszPathName));

    m_fScaleFactor = ZOOM_NORMAL;

    //读入EXIF

    FILE* hFile=fopen(CT2CA(lpszPathName),"rb");

    if (hFile){

        memset(&m_exifinfo,0,sizeof(EXIFINFO));

        Cexif exif(&m_exifinfo);

        exif.DecodeExif(hFile);

        fclose(hFile);

        //已经获得了保存的数据

        m_bitmapInfo =  m_exifinfo.CopyRight;

    }

    return TRUE;

}

//保存文件,其实没有修改文件,只是修改了EXIF信息

BOOL CGreenOpenPaintDoc::OnSaveDocument(LPCTSTR lpszPathName)

    // TODO: 在此添加专用代码和/或调用基类

    CString cstring =_T("GREENOPEN");

    if (m_filename !=  "empty")

    {

        int iret = ceif.WriteExif2Image(m_filename,PropertyTagCopyright,cstring);

    //这里false

    return FALSE;

注意OnSaveDocument的return false。这样已经达到融合EXIF的目的。

GreenOpenPaint小结:

一直以来,我都想实现一个类似MSPaint的程序。经过春节几天的集中研究,应该说目的基本达到。实现细节都在代码和手札中,反思几条务虚的东西:

1、代码重构是不断进行的。一旦停止,那么对于“最好”的追求也就停止了。优秀程序员应该去不断磨砺自己的技能;

2、MFC提供了强大的基础框架,很多东西需要继续研究;

3、寻找到符合问题解决的基础模型(比如我现在建立的几个),是解决问题的首要。

下一步,GreenOpenPaint将运用于符合这一类问题解决的所有项目中,并且在这个过程中,不断完善。相关资料也将在第一时间开放出去。

2017年1月28日

全部代码:

http://files.cnblogs.com/files/jsxyhelu/GreenOpenPaint.rar

目前方向:图像拼接融合、图像识别

联系方式:[email protected]

继续阅读