1、打开一张图
可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图
CxImage::CxImage(const char * filename, DWORD imagetype)
其中filename是需要打开的文件路径,imagetype是文件类型,支持的类型有:

  1. CXIMAGE_FORMAT_UNKNOWN,
  2. CXIMAGE_FORMAT_BMP,
  3. CXIMAGE_FORMAT_GIF,
  4. CXIMAGE_FORMAT_JPG,
  5. CXIMAGE_FORMAT_PNG,
  6. CXIMAGE_FORMAT_MNG,
  7. CXIMAGE_FORMAT_ICO,
  8. CXIMAGE_FORMAT_TIF,
  9. CXIMAGE_FORMAT_TGA,
  10. CXIMAGE_FORMAT_PCX,
  11. CXIMAGE_FORMAT_WBMP,
  12. CXIMAGE_FORMAT_WMF,
  13. CXIMAGE_FORMAT_J2K,
  14. CXIMAGE_FORMAT_JBG,
  15. CXIMAGE_FORMAT_JP2,
  16. CXIMAGE_FORMAT_JPC,
  17. CXIMAGE_FORMAT_PGX,
  18. CXIMAGE_FORMAT_PNM,
  19. CXIMAGE_FORMAT_RAS,

当然,这么多格式很难记住,我们可以通过如下函数来直接获得文件的格式

  1. int FindType(const CString& filename)
  2. {
  3. CString ext = filename.Right(filename.GetLength()-filename.ReverseFind('.')-1);
  4. int type = 0;
  5. if (ext == "bmp") type = CXIMAGE_FORMAT_BMP;
  6. #if CXIMAGE_SUPPORT_JPG
  7. else if (ext=="jpg"||ext=="jpeg") type = CXIMAGE_FORMAT_JPG;
  8. #endif
  9. #if CXIMAGE_SUPPORT_GIF
  10. else if (ext == "gif") type = CXIMAGE_FORMAT_GIF;
  11. #endif
  12. #if CXIMAGE_SUPPORT_PNG
  13. else if (ext == "png") type = CXIMAGE_FORMAT_PNG;
  14. #endif
  15. #if CXIMAGE_SUPPORT_MNG
  16. else if (ext=="mng"||ext=="jng") type = CXIMAGE_FORMAT_MNG;
  17. #endif
  18. #if CXIMAGE_SUPPORT_ICO
  19. else if (ext == "ico") type = CXIMAGE_FORMAT_ICO;
  20. #endif
  21. #if CXIMAGE_SUPPORT_TIF
  22. else if (ext=="tiff"||ext=="tif") type = CXIMAGE_FORMAT_TIF;
  23. #endif
  24. #if CXIMAGE_SUPPORT_TGA
  25. else if (ext=="tga") type = CXIMAGE_FORMAT_TGA;
  26. #endif
  27. #if CXIMAGE_SUPPORT_PCX
  28. else if (ext=="pcx") type = CXIMAGE_FORMAT_PCX;
  29. #endif
  30. #if CXIMAGE_SUPPORT_WBMP
  31. else if (ext=="wbmp") type = CXIMAGE_FORMAT_WBMP;
  32. #endif
  33. #if CXIMAGE_SUPPORT_WMF
  34. else if (ext=="wmf"||ext=="emf") type = CXIMAGE_FORMAT_WMF;
  35. #endif
  36. #if CXIMAGE_SUPPORT_J2K
  37. else if (ext=="j2k"||ext=="jp2") type = CXIMAGE_FORMAT_J2K;
  38. #endif
  39. #if CXIMAGE_SUPPORT_JBG
  40. else if (ext=="jbg") type = CXIMAGE_FORMAT_JBG;
  41. #endif
  42. #if CXIMAGE_SUPPORT_JP2
  43. else if (ext=="jp2"||ext=="j2k") type = CXIMAGE_FORMAT_JP2;
  44. #endif
  45. #if CXIMAGE_SUPPORT_JPC
  46. else if (ext=="jpc"||ext=="j2c") type = CXIMAGE_FORMAT_JPC;
  47. #endif
  48. #if CXIMAGE_SUPPORT_PGX
  49. else if (ext=="pgx") type = CXIMAGE_FORMAT_PGX;
  50. #endif
  51. #if CXIMAGE_SUPPORT_RAS
  52. else if (ext=="ras") type = CXIMAGE_FORMAT_RAS;
  53. #endif
  54. #if CXIMAGE_SUPPORT_PNM
  55. else if (ext=="pnm"||ext=="pgm"||ext=="ppm") type = CXIMAGE_FORMAT_PNM;
  56. #endif
  57. else type = CXIMAGE_FORMAT_UNKNOWN;
  58. return type;
  59. }

具体实例打开一幅图片:

  1. void CProDlg::OnBnClickedButton3()
  2. {
  3. CString strPicPath;
  4. CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("图片文件(*.jpg;*.jpeg;*.gif;,*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP||"));
  5. dlg.m_ofn.lpstrInitialDir=_T(".//");
  6. if(IDOK==dlg.DoModal())
  7. {strPicPath.Format(_T("%s"),dlg.GetPathName());}
  8. CString fileExt;
  9. int len=strPicPath.GetLength();
  10. for(int i=len-1;i>=0;i--)
  11. {if(strPicPath[i]=='.'){fileExt=strPicPath.Mid(i+1);break;}}
  12. fileExt.MakeLower();
  13. int type;
  14. if(fileExt!=_T(""))
  15. {type=FindType(strPicPath);}
  16. CxImage image;
  17. image.Load(strPicPath,type);
  18. //将整个控件调整为与图像同一尺寸
  19. GetDlgItem(IDC_PIC1)->SetWindowPos(NULL,0,0,300,300,SWP_NOMOVE);
  20. CRect zcRect;
  21. GetDlgItem(IDC_PIC1)->GetClientRect(&zcRect);
  22. CDC *pDC=GetDlgItem(IDC_PIC1)->GetDC();
  23. image.Draw(pDC->m_hDC,zcRect.left,zcRect.top,300,300);
  24. }

2、保存一张图

  1. bool CxImage::Save(LPCWSTR filename, DWORD imagetype=0)

参数和上面是一样的。

具体实例;

  1. void CProDlg::OnBnClickedButton1()
  2. { float scale=0.5;
  3. CxImage image,smallImg;
  4. CString fileName="d://1.jpg";
  5. CString fileExt;
  6. int len=fileName.GetLength();
  7. for(int i=len-1;i>=0;i--)
  8. {if(fileName[i]=='.'){fileExt=fileName.Mid(i+1);break;}}
  9. fileExt.MakeLower();
  10. int type;
  11. if(fileExt!=_T(""))
  12. {type=CxImage::GetTypeIdFromName(fileExt);}
  13. image.Load(fileName);
  14. image.Resample(image.GetWidth()*scale,image.GetHeight()*scale,1,&smallImg);
  15. smallImg.Save("d://2.jpg",type);
  16. }

3、得到图形数据,以便在OpenGL中使用材质

  1. BYTE* CxImage::GetBits(DWORD row = 0);

4、得到图形大小

  1. long GetSize();

5、得到图形高度和宽度

  1. DWORD CxImage::GetHeight();
  2. DWORD CxImage::GetWidth();

6、得到文件类型

  1. DWORD CxImage::GetType() const;

7、得到最后一个错误

  1. char* CxImage::GetLastError();

8、在界面中绘制出来

  1. long CxImage::Draw(HDC hdc, const RECT& rect, RECT* pClipRect=NULL)

HDC 绘图设备,rect 绘图的区域,确定绘图的左上角和右下角坐标。pClipRect,裁剪区域,一般可以和绘图区域一样大小,除非特殊需要。

CxImage动态加载图片(判断图片文件类型)的更多相关文章

  1. Java动态加载jar及class文件

    经常碰到需要动态加载jar及class文件的场景.Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 一.动态加载ja ...

  2. bootstrap中的动态加载出来的图片轮播中的li标签中的class="active"的动态添加移除

    //该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...

  3. APP动态加载轮播图片

    如果APP里面的轮播图片是动态加载的话,那么你会发现他不会轮播(前提是mui框架),这里都是用的mui框架,动态加载的图片因为mui的js查不到html上面没有图片,所以就不会轮播,需要手动重置下轮播 ...

  4. 用JavaScript动态加载CSS和JS文件

    本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...

  5. .NET Web后台动态加载Css、JS 文件,换肤方案

    后台动态加载文件代码: //假设css文件:TestCss.css #region 动态加载css文件 public void AddCss() { HtmlGenericControl _CssFi ...

  6. JavaScript动态加载CSS和JS文件

    var dynamicLoading = { css: function(path){ if(!path || path.length === 0){ throw new Error('argumen ...

  7. HTML练习二--动态加载轮播图片

    接上一篇https://www.cnblogs.com/shuaimeng/p/11106655.html demo下载: https://pan.baidu.com/s/1dhvzHwTHKiguy ...

  8. JQuery 之 动态加载JS或JS文件

    如果用jquery的append直接加载script标签的话,会报错的. 1.可以用 document.write() 实现加载动态JS代码. 2.可以用 getScript() 函数实现加载JS文件 ...

  9. 动态加载CSS,JS文件

    var Head = document.getElementsByTagName('head')[0],style = document.createElement('style'); //文件全部加 ...

随机推荐

  1. C9---include,编译

    //main.c //include基本概念 //include是预处理指令,翻译之前会替换,编译之前左的处理,#都是预处理指令,翻译时候会添加别的内容进来. #include <stdio.h ...

  2. caioj1497&&bzoj3125: CITY

    震惊!bzoj居然又被苏大佬D飞了... 这题煞笔模板题好吧. 然而bzojAC caiojWA%40??? 好强啊 今天早上发现是m打成n了囧 #include<cstdio> #inc ...

  3. bzoj3715: [PA2014]Lustra(乱搞)

    3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...

  4. struts2学习之基础笔记6

    第十一章 Struts 2的国际化 1 国际化简介 http协议,request_locale值 Locale类àà封装类request_locale值       ResourcesBandleàà ...

  5. 一个vue的全局提示框组件

    <template> <!-- 全局提示框 --> <div v-show="visible" class="dialog-tips dia ...

  6. Five Invaluable Techniques to Improve Regex Performance

    Regular expressions are powerful, but with great power comes great responsibility. Because of the wa ...

  7. Codeforces 993C. Careful Maneuvering(详细注解)

    解题思路 -100和+100是没有用的,只要知道左边的飞船轴和右边的飞船轴离y轴一样近即可.为简单起见,我们将左边的轴设为-1,右边的设为1. 某个点能摧毁的飞船一定是因为有两个飞船关于这个点对称.即 ...

  8. day09-1 列表,元祖的内置方法

    目录 列表类型的内置方法 作用 定义方式 方法 优先掌握 需要掌握 储存一个值or多个值 有序or无序?(有序:有索引, 无序:无索引) 可变or不可变(可变:值变id不变,不可变:值变id也变) 元 ...

  9. C# 鼠标左右手切换

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

  10. Label,PushButton,ToolButton 实现动态图片按钮,Label显示gif动画

    .h文件 public: explicit event(QWidget *parent = 0); ~event(); QImage image; QLabel *label; QLabel *lab ...