QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码
微像素首页 图像处理 图像优化 查看内容
订阅

文章

图像优化---GDI+进行图片处理时要注意的问题

发表时间:2015-9-18 10:21作者:bean 阅读(786) 评论: 0xingpacer来自: 微像素

导读: 转载一篇xingpacer的介绍GDI+的文章,希望大家喜欢~

 与GDI相比,GDI+要强大很多。对于Windows应用程序来说,用GDI是比较多的,也是比较熟练的,GDI+相对用的较少一点,但是现在GDI+的使用已经很普遍了。GDI+支持各种类型图片的处理,比如常见的bmp、jpg、gif、png等类型,特别是GDI+处理png图片时有很大的优势。有时我们需要将图片文件加载到内存中,然后进行UI的绘制,由于要支持多种类型的图片的载入,所以首先想到的是使用GDI+中的图片处理类Image或Bitmap。有时我们也需要将内存中的位图数据,保存成各种类型的图片文件,我们也要用到图片处理类Image或Bitmap。GDI+功能强大,但相对GDI而言,要难用很多,在使用的过程中也有很多需要注意的地方。下面结合本人在实际开发过程中遇到的问题,进行一些总结,以供参考。

        1、GDI+库的加载与卸载

        在程序初始化时,添加加载GDI+的代码:

  1. ULONG_PTR m_gdiplusToken;  
  2.   
  3. // 初始化GDI+  
  4. Gdiplus::GdiplusStartupInput gdiplusStartupInput;  
  5. Gdiplus::GdiplusStartup( &m_gdiplusToken, &gdiplusStartupInput, NULL );  

         在程序退出时,添加卸载GDI+的代码:

  1. // 释放GDI+资源  
  2. Gdiplus::GdiplusShutdown( m_gdiplusToken );  
          在使用GDI+中相关函数和结构时,尽量加上Gdiplus命名空间名,以防止与其他模块的代码因为字段的名称相同出现冲突。比如,GDI+库中定义GDI+函数执行结果的每句类型Status,定义如下所示。如果我们需要判断函数是否正确执行,应该将返回值和Gdiplus::Ok,而不是直接和Ok比较,注意这个加上Gdiplus命名空间名的好习惯。

  1. enum Status  
  2. {  
  3.     Ok = 0,  
  4.     GenericError = 1,  
  5.     InvalidParameter = 2,  
  6.     OutOfMemory = 3,  
  7.     ObjectBusy = 4,  
  8.     InsufficientBuffer = 5,  
  9.     NotImplemented = 6,  
  10.     Win32Error = 7,  
  11.     WrongState = 8,  
  12.     Aborted = 9,  
  13.     FileNotFound = 10,  
  14.     ValueOverflow = 11,  
  15.     AccessDenied = 12,  
  16.     UnknownImageFormat = 13,  
  17.     FontFamilyNotFound = 14,  
  18.     FontStyleNotFound = 15,  
  19.     NotTrueTypeFont = 16,  
  20.     UnsupportedGdiplusVersion = 17,  
  21.     GdiplusNotInitialized = 18,  
  22.     PropertyNotFound = 19,  
  23.     PropertyNotSupported = 20,  
  24. #if (GDIPVER >= 0x0110)  
  25.     ProfileNotFound = 21,  
  26. #endif //(GDIPVER >= 0x0110)  
  27. };  

最新评论

    联系我们
  • QQ:3243218172
  • 邮箱:3243218172@qq.com
  • QQ交流群:567648913
    手机扫描二维码