FreeImage通用文件加载与转换器
在上篇中我谈到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通用文件加载与转换器相关推荐
- sql文件加载出错_四十二、SparkSQL通用数据源加载(load)和保存(save)
SparkSQL能用数据加载(load)和保存(save) 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作.loa ...
- 通用图片加载组件UniversalImageLoader
通用图片加载组件UniversalImageLoader UniversalImageLoader是一款通用图片加载组件.该组件支持多种图片来源,如网络.SD卡.Assets文件夹等.在网络请求的时候 ...
- Three.js(十四)—— 模型文件加载
文章目录 14.Three.js 加载外部模型文件 14.1 Three.js 数据结构.导入导出 Threejs导出模型信息 自定义模型加载器文件 加载Three.js导出的模型数据 14.2 加载 ...
- Objective-C学习笔记第十五章文件加载与保存
第十五章文件加载与保存 Cocoa提供了Core Data,他能在后台处理所有文件内容 Cocoa提供了两个通用的文件处理类:属性列表和对象编码 一.属性列表类 在Cocoa中,有一类名为属性列表的对 ...
- Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许 ...
- 高性能javascript 文件加载阻塞
高性能javascript javascript脚本执行过程中会中断页面加载,直到脚本执行完毕,此操作阻塞了页面加载,造成性能问题. 脚本位置和加载顺序: 如果将脚本放在head内,那么再脚本执行 ...
- 用 C 语言开发一门编程语言 — 字符串与文件加载
目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...
- wpf 加载资源html,从资源文件加载WPF样式
我试图从 WPF自定义控件库实际上从其他文件加载WPF样式 但我没有加载这里是我的解决方案. 该解决方案包含两个项目 >类型WPF自定义控件库的WpfTestControls > WPF应 ...
- python opencv imread()函数 (从文件加载图像)
def imread(filename, flags=None): # real signature unknown; restored from __doc__"""i ...
最新文章
- mysql datetime转换为date_MySQL date,datetime,timestamp区别及相互转换
- memcpy, strcpy, strncpy的区别和用法
- python3.6.5无法安装-Python3.6无法安装numpy,如何解决?
- poj 2373(单调队列优化dp)
- OI模板のpoke流[大型考试复习必备/kl]
- p1和p7签名的区别
- 三次给你讲清楚Redis之Redis是个啥
- async 与 await
- springboot之idea不合并空包
- 微信小程序怎么做店铺_微信小程序如何开通店铺
- 怎么使用win10自带修复系统功能
- 【高仿微信系列】02、消息列表ListView滑动删除
- Part Ⅴ Entertainment 娱乐活动??
- 科学研究设计六:有效性威胁
- 均值不等式中考_中考数学解题技巧方法
- 基于SSH的员工信息管理系统
- 40000字 Matplotlib 实操干货,真的全!
- pytorch加载自己的图片数据集的两种方法
- U-boot开机logo的制作方法
- java爬虫爬取笔趣阁小说
热门文章
- 如何使用3D MAX建造出DNA双螺旋结构
- 技术普及帖:你刚才在淘宝上买了一件东西
- 为什么安卓手机退出大型游戏时没有过渡动画?
- 衣米魔兽世界怀旧服—战歌峡谷PVP视频
- MATLAB的assignin和evalin函数
- 一个通用中间组件,简单通用的适配 ViewPager,以及 pager 中的 RecycleView 简化复杂的操作,简单直接。
- html转盘游戏,使用Javascript和CSS3实现一个转盘小游戏(实战篇)
- 港科夜闻|香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)...
- 如何让腾讯微博搜索排名靠前?
- 恩智浦+飞思卡尔后你需要知道的十件事