zoukankan      html  css  js  c++  java
  • 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
        FILEhFile=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



  • 相关阅读:
    python Flask基础使用
    安装docker以及常规操作
    关于InfiniBand几个基本知识点解释
    RDMA技术解析
    C++学习之 类
    C++学习 内存模型和名称空间
    C++基础知识(3)
    C++基础知识(2)
    C++基础知识(1)
    Java基础知识
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/6354342.html
Copyright © 2011-2022 走看看