首页 > 其他分享 >GreenOpenPaint的实现(六)图片的保存和打开

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

时间:2022-12-22 12:33:57浏览次数:45  
标签:GreenOpenPaint return exif EXIF exifinfo 保存 图片 lpszPathName hFile

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


标签:GreenOpenPaint,return,exif,EXIF,exifinfo,保存,图片,lpszPathName,hFile
From: https://blog.51cto.com/jsxyhelu2017/5962543

相关文章

  • GreenOpenPaint的实现(二)打开显示图片
    1、DOC中添加,核心图片文件保存在这里。之所以不用Mat,是因为CVVImage有更好的输入输出函数。我这里直接使用了public public:  CvvImagem_image;2、重载打开//将文......
  • GreenOpenPaint的实现(三)添加标尺
    标尺对于图像处理程序,特别是需要精确测量的程序来说意义很大。这里进行了专门的研究。基于现在已经引入的类和定义的变量,主要讲一讲如何调用。1、添加放大缩小voidCGreenOp......
  • fastadmin修改导出时,图片大小以及表格高度的问题
    1、在public/assets/js/require-table.js 中找到 exportOptions:{  }这个json2、将以下代码放入放入其中onBeforeSaveToFile:function(data,fileName,type,ch......
  • 如何通过Java提取PDF中的图片
    PDF文档格式具有固定的文档布局,可以避免他人对其进行随意更改。但这也在一定程度上影响了我们对PDF的操作,例如,当我们需要将PDF文档中的图片用于其他地方时。​​FreeSpire.......
  • 如何通过Java提取PDF中的图片
    PDF文档格式具有固定的文档布局,可以避免他人对其进行随意更改。但这也在一定程度上影响了我们对PDF的操作,例如,当我们需要将PDF文档中的图片用于其他地方时。FreeSpire.PDF......
  • python之图片与视频互转
    图片转视频defimage_to_video(image_dir,video_dir,fps):im_list=[iforiinos.listdir(image_dir)ifi.endswith('jpg')]im_list.sort(key=lambdax:......
  • 机器学习--是否佩戴口罩图片识别
    (一)选题背景:秋冬季本就是流感的高发期,叠加近年来势汹汹的肺炎病毒疫情。个人防护工作显得更加重要。流感多数以人体唾沫传播。此时口罩就起到了非常重要的作用,可以在源头进......
  • 一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
    华丽炫酷的动画特效总能够让人心旷神怡,不能自已。艳羡之余,如果还能够探究其华丽外表下的实现逻辑,那就是百尺竿头,更上一步了。本次我们使用图片、SCSS样式以及SVG图片动画来......
  • Go/Python 基于gRPC传输图片
    python程序作为服务端,Go程序作为客户端,基于gPRC进行通信客户端定义proto文件:syntax="proto3";optiongo_package=".;transfer";serviceGreeter{rpcSendI......
  • 用在Excel中的数字图片
    ......