FreeImage通用文件加载与转换器
2015-12-15 20:51
323 查看
在上篇中我谈到FreeImage可以用于通用图像的加载与显示,这里继续下面的操作,将上面载入的图像转换成比较常用的格式,FreeImage提供了常用的bmp,jpeg,tiff等格式,稍微修改一下上一篇中的代码,将上一篇中OnDraw定义的局部变量FIBITMAP* dib;转而定义成视类的成员变量。
在构造函数中设置 :dib = 0;这样FreeImage_Unload(dib)的操作就不应该在OnDraw函数中调用,而应在析构函数中调用。
以上设置完成后,在菜单栏:另存为……,添加命令响应函数,添加如下代码:
这样你的程序就可以很容易的载入图像,并将其转换为常用的格式了。
或者:利用FreeImage中给出的一个例程,利用图像保存函数:
再调用上面的函数,思路要清晰很多:
原文地址:http://blog.csdn.net/summersolstice/article/details/5154326
在构造函数中设置 :dib = 0;这样FreeImage_Unload(dib)的操作就不应该在OnDraw函数中调用,而应在析构函数中调用。
以上设置完成后,在菜单栏:另存为……,添加命令响应函数,添加如下代码:
void CGenricImageTransformerView::OnFileSaveAs() { // TODO: Add your command handler code here CFileDialog 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 here CFileDialog 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!"); } }
原文地址:http://blog.csdn.net/summersolstice/article/details/5154326
相关文章推荐
- mysql导入sql文件
- python安装mysql库
- AndroidStudio导出Jar包
- 动画(Animation) 、 高级动画(Core Animation)
- offload error: cannot find offload entry解决办法
- offload error: cannot find offload entry解决办法
- 实战c++中的vector系列--构造、operator=和assign区别
- 实战c++中的vector系列--构造、operator=和assign区别
- 关于基类析构函数的问题 http://bbs.csdn.net/topics/390543618
- 使用FreeImage写通用图像加载器
- Oracle执行计划
- win10 python nltk安装
- Mousetrap - Keyboard shortcuts in Javascript
- DOM 对象控制 HTML
- oracle视图
- pAdTy_4 构建有联系人和签署的应用程序
- UI06_UIPageControl
- Valid Sudoku
- HDU 1180 诡异的楼梯 BFS
- 周记——20151214