如果只是直接的图片保存和打开,是没有很多内容的。但是我这里,将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

GreenOpenPaint的实现(六)图片的保存和打开的更多相关文章

  1. swift 基础小结01 --delegate、Optional、GCD的使用、request请求、网络加载图片并保存到沙箱、闭包以及桥接

    本文主要记录swift中delegate的使用.“?!”Optional的概念.GCD的使用.request请求.网络加载图片并保存到沙箱.闭包以及桥接. 一.delegate的使用 swift中de ...

  2. php获取网页中图片并保存到本地

    php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: save_img("http://www.jbxue.com" ?>

  3. php获取网页中图片并保存到本地的代码

    php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: <?php /** * 获取网页中图片,并保存至本地 * by www.jbxue.com */ header(" ...

  4. android开发 socket接收图片并保存

    逻辑:接收到socket之后需要将socket发送的图片数据保存下来并通知handler更新界面 关键代码: public void readImage(Socket socket) { try { ...

  5. 【转】前端图片该保存为什么格式?png or jpg?

    疑虑: 图片存储为web格式,该用什么格式保存呢?png?jpg?压缩比例该为多大?css spript的优劣?有时候我们可能会因为一张格式不正确的图片而导致设计品质的下降以及页面性能的降低.了解图片 ...

  6. 实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24022165 今天给大家带来CSDN的完结篇,即增加文章的查看和文章中图片的保存 ...

  7. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  8. c# 应用NPOI 获取Excel中的图片,保存至本地的算法

    要求:读取excel中的图片,保存到指定路径 思路:  利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...

  9. PHP将图片转base64编码以及base64图片转换为图片并保存代码

    图片转base64编码 /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ech ...

随机推荐

  1. iOS实现传递不定长的多个参数

    我们在使用苹果官方的文档的时候会发现可传不定数的参数例如: // [[UIAlertView alloc]initWithTitle:<#(nullable NSString *)#> m ...

  2. 实现类似printf这样的函数

    来源:http://www.vimer.cn/2009/12/cc%E5%AE%9E%E7%8E%B0%E5%A4%9A%E5%8F%82%E6%95%B0%E5%87%BD%E6%95%B0%E7% ...

  3. MQTT的学习研究(十)【转】mosquitto——一个开源的mqtt代理

    MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议,适用于一些条件比较苛刻的环境,进行低带宽.不可靠或间歇性的通信.值得一提的是mqtt提供三种不同 ...

  4. mysql load data导入脚本

    # !/bin/bash ############中文说明###################### #本程序的一些提示需要中文支持,如系统没有安装中文包,请先安装:yum -y groupinst ...

  5. OC开发_Storyboard——block和动画

     一.协议 @optional :可选的 @requied :必须实现的  二.block 代码块 1. 以一个^开头,然后是参数,然后是一个大括号,包含我们的代码块 [aDictionary enu ...

  6. oneThink发生错误,获取当前执行的SQL语句!

    echo D('AnswerInfoView')->getLastSql();die();

  7. JS事件监听的添加方法

    一. 我们一般在的事件添加时是这样做的: elm.onclick = function( ) { //handler } 这样的写法兼容主流的浏览器,但是存在一个问题,当同一个elm绑定多个事件时,只 ...

  8. OA之框架的搭建

    1.使用框架可以有效的解决耦合性过高的问题,减少代码修改的程度,同时方便添加新的功能.首先创建出基本的几个类库.这个框架就是使用基本的逻辑分层三层架构,然后进一步再使用接口对每个逻辑中的类库调用进行解 ...

  9. A Benchmark Comparsion of Monocular Visual-Inertial Odometry Algorithms for Flying Robots论文笔记

    摘要: 本文主要比较单目VIO的算法在飞行机器人上运行的性能,测试使用统一数据集为EuRoC.其中评价指标为:姿态估计精度.每帧处理时间以及CPU和内存负载使用率,同时还有RMSE(运行轨迹与真实轨迹 ...

  10. pandas读取保存数据

    将本人使用过的一些操作记录下来 1.读取数据,使用:data = pd.read_csv('./data/file.csv') 2.数据处理,如果你要修改某一个数据,其实把DATAFRAME数据看做是 ...