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. UVA 10859 - Placing Lampposts 树形DP、取双优值

                              Placing Lampposts As a part of the mission ‘Beautification of Dhaka City’, ...

  2. 0xC0000005;Access Violation(栈区空间很宝贵, linux上栈区空间默认为8M,vc6下默认栈空间大小为1M)

    写C/C++程序最怕出现这样的提示了,还好是在调试环境下显示出来的,在非调试状态就直接崩溃退出. 从上述汇编代码发现在取内存地址 eax+38h 的值时出错, 那说明这个地址非法呗, 不能访问, 一般 ...

  3. Linux 下安装apache2.4

    Linux 下安装apache2.4 下载,解压,配置安装! 好生麻烦! 安装一个apache,需要很多依赖!比如apr.apr-util.pcre等等. 这些依赖有可能还需要别的更多的依赖! 真心的 ...

  4. Python笔记(七)

    # -*-coding:utf-8-*- # Python 文件I/O # 打印到屏幕 #print 1234567 # 读取屏幕输入 #input_str=raw_input("Pleas ...

  5. Solidworks.2016.SP5下载安装破解图文教程

    安装此软件一定要断网安装!!!下载完成后解压文件,打开破解文件夹,双击文件夹中的SolidWorksSerialNumbers2016.reg进行注册表注册,如下图.   解压软件安装包(或者将软件安 ...

  6. SQL Server 汉字转拼音字母

    /* 汉字转拼音首字母 */ create function fun_getPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declar ...

  7. SQL Server 忘记登录账号解决方法

    [1] 停止SQL Server 服务 和 SQL Server Agent 服务 [2] 以管理员身份打开命令行,单用户模式启动服务.(在单用户模式下启动 SQL Server 可使计算机本地 Ad ...

  8. 2017.7.15清北夏令营精英班Day1解题报告

    成绩: 预计分数:20+10+40 实际分数:100+10+40. 一百三十多人的比赛全场rand7还水了个鼠标+键盘 unbelievable! 考试题目链接: https://www.luogu. ...

  9. java8 stream 流 例子

    Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader(" ...

  10. ndis6 how to drop packets

    In ndis6 how to drop packets? in FilterSendNetBufferLists: FILTER_RELEASE_LOCK(&pFilter->Lock ...