CxImage动态加载图片(判断图片文件类型)
1、打开一张图
可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图
CxImage::CxImage(const char * filename, DWORD imagetype)
其中filename是需要打开的文件路径,imagetype是文件类型,支持的类型有:
- CXIMAGE_FORMAT_UNKNOWN,
- CXIMAGE_FORMAT_BMP,
- CXIMAGE_FORMAT_GIF,
- CXIMAGE_FORMAT_JPG,
- CXIMAGE_FORMAT_PNG,
- CXIMAGE_FORMAT_MNG,
- CXIMAGE_FORMAT_ICO,
- CXIMAGE_FORMAT_TIF,
- CXIMAGE_FORMAT_TGA,
- CXIMAGE_FORMAT_PCX,
- CXIMAGE_FORMAT_WBMP,
- CXIMAGE_FORMAT_WMF,
- CXIMAGE_FORMAT_J2K,
- CXIMAGE_FORMAT_JBG,
- CXIMAGE_FORMAT_JP2,
- CXIMAGE_FORMAT_JPC,
- CXIMAGE_FORMAT_PGX,
- CXIMAGE_FORMAT_PNM,
- CXIMAGE_FORMAT_RAS,
当然,这么多格式很难记住,我们可以通过如下函数来直接获得文件的格式
- int FindType(const CString& filename)
- {
- CString ext = filename.Right(filename.GetLength()-filename.ReverseFind('.')-1);
- int type = 0;
- if (ext == "bmp") type = CXIMAGE_FORMAT_BMP;
- #if CXIMAGE_SUPPORT_JPG
- else if (ext=="jpg"||ext=="jpeg") type = CXIMAGE_FORMAT_JPG;
- #endif
- #if CXIMAGE_SUPPORT_GIF
- else if (ext == "gif") type = CXIMAGE_FORMAT_GIF;
- #endif
- #if CXIMAGE_SUPPORT_PNG
- else if (ext == "png") type = CXIMAGE_FORMAT_PNG;
- #endif
- #if CXIMAGE_SUPPORT_MNG
- else if (ext=="mng"||ext=="jng") type = CXIMAGE_FORMAT_MNG;
- #endif
- #if CXIMAGE_SUPPORT_ICO
- else if (ext == "ico") type = CXIMAGE_FORMAT_ICO;
- #endif
- #if CXIMAGE_SUPPORT_TIF
- else if (ext=="tiff"||ext=="tif") type = CXIMAGE_FORMAT_TIF;
- #endif
- #if CXIMAGE_SUPPORT_TGA
- else if (ext=="tga") type = CXIMAGE_FORMAT_TGA;
- #endif
- #if CXIMAGE_SUPPORT_PCX
- else if (ext=="pcx") type = CXIMAGE_FORMAT_PCX;
- #endif
- #if CXIMAGE_SUPPORT_WBMP
- else if (ext=="wbmp") type = CXIMAGE_FORMAT_WBMP;
- #endif
- #if CXIMAGE_SUPPORT_WMF
- else if (ext=="wmf"||ext=="emf") type = CXIMAGE_FORMAT_WMF;
- #endif
- #if CXIMAGE_SUPPORT_J2K
- else if (ext=="j2k"||ext=="jp2") type = CXIMAGE_FORMAT_J2K;
- #endif
- #if CXIMAGE_SUPPORT_JBG
- else if (ext=="jbg") type = CXIMAGE_FORMAT_JBG;
- #endif
- #if CXIMAGE_SUPPORT_JP2
- else if (ext=="jp2"||ext=="j2k") type = CXIMAGE_FORMAT_JP2;
- #endif
- #if CXIMAGE_SUPPORT_JPC
- else if (ext=="jpc"||ext=="j2c") type = CXIMAGE_FORMAT_JPC;
- #endif
- #if CXIMAGE_SUPPORT_PGX
- else if (ext=="pgx") type = CXIMAGE_FORMAT_PGX;
- #endif
- #if CXIMAGE_SUPPORT_RAS
- else if (ext=="ras") type = CXIMAGE_FORMAT_RAS;
- #endif
- #if CXIMAGE_SUPPORT_PNM
- else if (ext=="pnm"||ext=="pgm"||ext=="ppm") type = CXIMAGE_FORMAT_PNM;
- #endif
- else type = CXIMAGE_FORMAT_UNKNOWN;
- return type;
- }
具体实例打开一幅图片:
- void CProDlg::OnBnClickedButton3()
- {
- CString strPicPath;
- CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("图片文件(*.jpg;*.jpeg;*.gif;,*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP||"));
- dlg.m_ofn.lpstrInitialDir=_T(".//");
- if(IDOK==dlg.DoModal())
- {strPicPath.Format(_T("%s"),dlg.GetPathName());}
- CString fileExt;
- int len=strPicPath.GetLength();
- for(int i=len-1;i>=0;i--)
- {if(strPicPath[i]=='.'){fileExt=strPicPath.Mid(i+1);break;}}
- fileExt.MakeLower();
- int type;
- if(fileExt!=_T(""))
- {type=FindType(strPicPath);}
- CxImage image;
- image.Load(strPicPath,type);
- //将整个控件调整为与图像同一尺寸
- GetDlgItem(IDC_PIC1)->SetWindowPos(NULL,0,0,300,300,SWP_NOMOVE);
- CRect zcRect;
- GetDlgItem(IDC_PIC1)->GetClientRect(&zcRect);
- CDC *pDC=GetDlgItem(IDC_PIC1)->GetDC();
- image.Draw(pDC->m_hDC,zcRect.left,zcRect.top,300,300);
- }
2、保存一张图
- bool CxImage::Save(LPCWSTR filename, DWORD imagetype=0)
参数和上面是一样的。
具体实例;
- void CProDlg::OnBnClickedButton1()
- { float scale=0.5;
- CxImage image,smallImg;
- CString fileName="d://1.jpg";
- CString fileExt;
- int len=fileName.GetLength();
- for(int i=len-1;i>=0;i--)
- {if(fileName[i]=='.'){fileExt=fileName.Mid(i+1);break;}}
- fileExt.MakeLower();
- int type;
- if(fileExt!=_T(""))
- {type=CxImage::GetTypeIdFromName(fileExt);}
- image.Load(fileName);
- image.Resample(image.GetWidth()*scale,image.GetHeight()*scale,1,&smallImg);
- smallImg.Save("d://2.jpg",type);
- }
3、得到图形数据,以便在OpenGL中使用材质
- BYTE* CxImage::GetBits(DWORD row = 0);
4、得到图形大小
- long GetSize();
5、得到图形高度和宽度
- DWORD CxImage::GetHeight();
- DWORD CxImage::GetWidth();
6、得到文件类型
- DWORD CxImage::GetType() const;
7、得到最后一个错误
- char* CxImage::GetLastError();
8、在界面中绘制出来
- long CxImage::Draw(HDC hdc, const RECT& rect, RECT* pClipRect=NULL)
HDC 绘图设备,rect 绘图的区域,确定绘图的左上角和右下角坐标。pClipRect,裁剪区域,一般可以和绘图区域一样大小,除非特殊需要。
CxImage动态加载图片(判断图片文件类型)的更多相关文章
- Java动态加载jar及class文件
经常碰到需要动态加载jar及class文件的场景.Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 一.动态加载ja ...
- bootstrap中的动态加载出来的图片轮播中的li标签中的class="active"的动态添加移除
//该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...
- APP动态加载轮播图片
如果APP里面的轮播图片是动态加载的话,那么你会发现他不会轮播(前提是mui框架),这里都是用的mui框架,动态加载的图片因为mui的js查不到html上面没有图片,所以就不会轮播,需要手动重置下轮播 ...
- 用JavaScript动态加载CSS和JS文件
本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...
- .NET Web后台动态加载Css、JS 文件,换肤方案
后台动态加载文件代码: //假设css文件:TestCss.css #region 动态加载css文件 public void AddCss() { HtmlGenericControl _CssFi ...
- JavaScript动态加载CSS和JS文件
var dynamicLoading = { css: function(path){ if(!path || path.length === 0){ throw new Error('argumen ...
- HTML练习二--动态加载轮播图片
接上一篇https://www.cnblogs.com/shuaimeng/p/11106655.html demo下载: https://pan.baidu.com/s/1dhvzHwTHKiguy ...
- JQuery 之 动态加载JS或JS文件
如果用jquery的append直接加载script标签的话,会报错的. 1.可以用 document.write() 实现加载动态JS代码. 2.可以用 getScript() 函数实现加载JS文件 ...
- 动态加载CSS,JS文件
var Head = document.getElementsByTagName('head')[0],style = document.createElement('style'); //文件全部加 ...
随机推荐
- 0x05 排序
说是排序结果就是各种奇技淫巧 中位数被坑多了久病成医,例题一题搞笑一题糖果传递(昨晚精神那么好效率还那么差) #include<cstdio> #include<iostream&g ...
- sklearn中的数据预处理----good!! 标准化 归一化 在何时使用
RESCALING attribute data to values to scale the range in [0, 1] or [−1, 1] is useful for the optimiz ...
- [POI 2007] 旅游景点
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1097 [算法] 首先,用Dijkstra算法求出2-k+1到每个点的最短路 然后,我 ...
- 【刷题笔记】LeetCode 606. Construct String from Binary Tree
题意 给一棵二叉树,把它转化为字符串返回.转化字符串的要求如下: 1. null 直接转化为 () ;(这个要求其实有点误导人~) 2. 子节点用 () 包裹起来:(这是我自己根据例子添加的要求) ...
- Swift 字符串的分割
componentsSeparatedByString 就是根据 传递的 一个字符,进行字符串的一个分割 // 分割字符串 - > let sourceArray = source.compon ...
- BZOJ 2120 带修莫队
思路: 暴力能过的 嘿嘿嘿 我是来练带修莫队的嗯 复杂度 O(n^5/3) //By SiriusRen #include <cmath> #include <cstdio> ...
- Linux中安装redis的phpredis扩展
下载phpredis扩展 http://pecl.php.net/package/redis wget http://pecl.php.net/get/redis-4.0.2.tgz 需要环境配置文件 ...
- SQL学习——基础语句(4)
前面感觉真的好乱,想哪,写哪.这里慢慢整理…… SQL Having 语句 还是前面的那两个表: grade表: student表: 我们需要查找这里的s_id下的gradeValue的和,这就要分组 ...
- 关于app夜间模式那点事
大半年没写过代码了 一直在忙一些其他的事情 这几天想起来看了一点 心惊肉跳的 发现好陌生 所以打算今后慢慢的拾起来 往深度和广度去发展 发现好久之前写的一个微博项目 有一个夜间模式的功能没有 ...
- 七天C#小结
从基础的理论知识,到最后一天,能够理解并且自己编写出一些经典的事例,自己期初觉得不会这么快,几乎是零基础的自己从什么都不会,到七天后能够独立思考并且编写出100多行的代码,自己还是有些欣慰的,从点到面 ...