在上篇中我谈到FreeImage可以用于通用图像的加载与显示,这里继续下面的操作,将上面载入的图像转换成比较常用的格式,FreeImage提供了常用的bmp,jpeg,tiff等格式,稍微修改一下上一篇中的代码,将上一篇中OnDraw定义的局部变量FIBITMAP* dib;转而定义成视类的成员变量。

在构造函数中设置  :dib = 0;这样FreeImage_Unload(dib)的操作就不应该在OnDraw函数中调用,而应在析构函数中调用。

以上设置完成后,在菜单栏:另存为……,添加命令响应函数,添加如下代码:

void CGenricImageTransformerView::OnFileSaveAs()
{// TODO: Add your command handler code hereCFileDialog fileDlg(FALSE,".bmp","img.*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Bmp(*.bmp)|*.bmp|Jpg(*.jpg)|*.jpg|/Tif(*.tif)|*.tif|Any(*.*)|*.*||",NULL);if(IDOK == fileDlg.DoModal()){CString strFileExt = fileDlg.GetFileExt();
//      strFileExt.MakeLower();CString filename = fileDlg.GetFileName();FREE_IMAGE_FORMAT fif;int nType;if(!strFileExt.Compare("bmp"))nType = 1;if(!strFileExt.Compare("jpg"))nType = 2;if (!strFileExt.Compare("tif"))nType = 3;switch(nType){case 1:fif = FIF_BMP;break;case 2:fif = FIF_JPEG;break;case 3:fif = FIF_TIFF;break;default:fif = FIF_UNKNOWN;      }FreeImage_Save(fif,dib,filename,0);}
}

这样你的程序就可以很容易的载入图像,并将其转换为常用的格式了。

或者:利用FreeImage中给出的一个例程,利用图像保存函数:

BOOL CGenricImageTransformerView::GenericWriter(FIBITMAP *dib, const char *filename)
{FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;BOOL bSuccess = FALSE;fif = FreeImage_GetFIFFromFilename(filename);if(fif != FIF_UNKNOWN){BOOL bCanSave;FREE_IMAGE_TYPE imgType = FreeImage_GetImageType(dib);if(imgType == FIT_BITMAP){WORD bpp = FreeImage_GetBPP(dib);bCanSave = (FreeImage_FIFSupportsWriting(fif)&& FreeImage_FIFSupportsExportBPP(fif,bpp));}else{bCanSave = FreeImage_FIFSupportsExportType(fif,imgType);}if(bCanSave){bSuccess = FreeImage_Save(fif,dib,filename);}}return bSuccess;
}

再调用上面的函数,思路要清晰很多:

void CGenricImageTransformerView::OnFileSaveAs()
{// TODO: Add your command handler code hereCFileDialog fileDlg(FALSE,".bmp","img.*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"bmp(*.bmp)|*.bmp|jpg(*.jpg)|*.jpg|/tif(*.tif)|*.tif|png(*.png)|*.png|/Any(*.*)|*.*||",NULL);if(IDOK == fileDlg.DoModal()){CString filename = fileDlg.GetFileName();BOOL bSuccess = GenericWriter(dib,filename);if(!bSuccess)MessageBox("Not support that type!");}
}

FreeImage通用文件加载与转换器相关推荐

  1. sql文件加载出错_四十二、SparkSQL通用数据源加载(load)和保存(save)

    SparkSQL能用数据加载(load)和保存(save) 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作.loa ...

  2. 通用图片加载组件UniversalImageLoader

    通用图片加载组件UniversalImageLoader UniversalImageLoader是一款通用图片加载组件.该组件支持多种图片来源,如网络.SD卡.Assets文件夹等.在网络请求的时候 ...

  3. Three.js(十四)—— 模型文件加载

    文章目录 14.Three.js 加载外部模型文件 14.1 Three.js 数据结构.导入导出 Threejs导出模型信息 自定义模型加载器文件 加载Three.js导出的模型数据 14.2 加载 ...

  4. Objective-C学习笔记第十五章文件加载与保存

    第十五章文件加载与保存 Cocoa提供了Core Data,他能在后台处理所有文件内容 Cocoa提供了两个通用的文件处理类:属性列表和对象编码 一.属性列表类 在Cocoa中,有一类名为属性列表的对 ...

  5. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象

    一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许 ...

  6. 高性能javascript 文件加载阻塞

    高性能javascript javascript脚本执行过程中会中断页面加载,直到脚本执行完毕,此操作阻塞了页面加载,造成性能问题.   脚本位置和加载顺序: 如果将脚本放在head内,那么再脚本执行 ...

  7. 用 C 语言开发一门编程语言 — 字符串与文件加载

    目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...

  8. wpf 加载资源html,从资源文件加载WPF样式

    我试图从 WPF自定义控件库实际上从其他文件加载WPF样式 但我没有加载这里是我的解决方案. 该解决方案包含两个项目 >类型WPF自定义控件库的WpfTestControls > WPF应 ...

  9. python opencv imread()函数 (从文件加载图像)

    def imread(filename, flags=None): # real signature unknown; restored from __doc__"""i ...

最新文章

  1. mysql datetime转换为date_MySQL date,datetime,timestamp区别及相互转换
  2. memcpy, strcpy, strncpy的区别和用法
  3. python3.6.5无法安装-Python3.6无法安装numpy,如何解决?
  4. poj 2373(单调队列优化dp)
  5. OI模板のpoke流[大型考试复习必备/kl]
  6. p1和p7签名的区别
  7. 三次给你讲清楚Redis之Redis是个啥
  8. async 与 await
  9. springboot之idea不合并空包
  10. 微信小程序怎么做店铺_微信小程序如何开通店铺
  11. 怎么使用win10自带修复系统功能
  12. 【高仿微信系列】02、消息列表ListView滑动删除
  13. Part Ⅴ Entertainment 娱乐活动??
  14. 科学研究设计六:有效性威胁
  15. 均值不等式中考_中考数学解题技巧方法
  16. 基于SSH的员工信息管理系统
  17. 40000字 Matplotlib 实操干货,真的全!
  18. pytorch加载自己的图片数据集的两种方法
  19. U-boot开机logo的制作方法
  20. java爬虫爬取笔趣阁小说

热门文章

  1. 如何使用3D MAX建造出DNA双螺旋结构
  2. 技术普及帖:你刚才在淘宝上买了一件东西
  3. 为什么安卓手机退出大型游戏时没有过渡动画?
  4. 衣米魔兽世界怀旧服—战歌峡谷PVP视频
  5. MATLAB的assignin和evalin函数
  6. 一个通用中间组件,简单通用的适配 ViewPager,以及 pager 中的 RecycleView 简化复杂的操作,简单直接。
  7. html转盘游戏,使用Javascript和CSS3实现一个转盘小游戏(实战篇)
  8. 港科夜闻|香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)...
  9. 如何让腾讯微博搜索排名靠前?
  10. 恩智浦+飞思卡尔后你需要知道的十件事