Gdi+ 还是相当好用的.

1> Image保存图像,需要一个CLSID的参数,它可以这样获得:

  1. int   GetEncoderClsid(const   WCHAR*   format,   CLSID*   pClsid)
  2. {
  3. UINT     num   =   0;                     //   number   of   image   encoders
  4. UINT     size   =   0;                   //   size   of   the   image   encoder   array   in   bytes
  5. ImageCodecInfo*   pImageCodecInfo   =   NULL;
  6. GetImageEncodersSize(&num,   &size);
  7. if(size   ==   0)
  8. return   -1;     //   Failure
  9. pImageCodecInfo   =   (ImageCodecInfo*)(malloc(size));
  10. if(pImageCodecInfo   ==   NULL)
  11. return   -1;     //   Failure
  12. GetImageEncoders(num,   size,   pImageCodecInfo);
  13. for(UINT   j   =   0;   j   <   num;   ++j)
  14. {
  15. if(   wcscmp(pImageCodecInfo[j].MimeType,   format)   ==   0   )
  16. {
  17. *pClsid   =   pImageCodecInfo[j].Clsid;
  18. free(pImageCodecInfo);
  19. return   j;     //   Success
  20. }
  21. }
  22. free(pImageCodecInfo);
  23. return   -1;     //   Failure
  24. }

2> Image::Save的另外一个参数EncoderParameters可用于图像的压缩*(这是从网上抄下来的)

使用img/jpeg配合encoderParameters.Parameter[0].Value设置 可以大幅度的减小图像文件所占磁盘空间

  1. // 保存到文件
  2. EncoderParameters encoderParameters;
  3. //构造编码参数列表
  4. //数组中只包含一个EncoderParameter对象
  5. encoderParameters.Count = 1;
  6. encoderParameters.Parameter[0].Guid = EncoderQuality;
  7. //参数类型为LONG
  8. encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
  9. //只设置一个参数
  10. encoderParameters.Parameter[0].NumberOfValues = 1;
  11. ULONG quality;
  12. //压缩JPEG图片质量为原来的80%
  13. quality = 80;
  14. encoderParameters.Parameter[0].Value = &quality;

3> 关于缩略图

我使用了一下Image的GetThumbnailImage,发现对于某些图像效果很不理想,(颜色较鲜艳的缩略图效果好点,但是对于那些色差不大整体又暗的图像效果就差劲了). 这个时候使用Graphic配合Bitmap直接画缩略尺寸的图像效果挺好

  1. BOOL QImgProcess::CreateThumb( int cx ,QBuf &out)
  2. {
  3. ASSERT(m_pImg != NULL);
  4. // 创建缩略图
  5. int nWidth = m_pImg->GetWidth();
  6. if (cx >= nWidth)
  7. {
  8. return TRUE;
  9. }
  10. int nHeight = m_pImg->GetHeight();
  11. int nThumbHeight = nHeight * cx / m_pImg->GetWidth() ;
  12. Bitmap bitmap(cx, nThumbHeight, PixelFormat24bppRGB);
  13. Graphics graph(&bitmap);
  14. graph.DrawImage(m_pImg, Rect(0,0,cx,nThumbHeight));
  15. ......
  16. }

使用GDI+轻松创建缩略图的更多相关文章

  1. PHP 创建缩略图

    一.成比例缩小图像 <?php /* 创建缩略图 */ $file = __DIR__.'/button.png'; $scale = 0.5; // 比例 $image = ImageCrea ...

  2. Bootstrap Magic – 轻松创建自己的 Bootstrap 主题

    Bootstrap Magic 是一款基于 Bootstrap 和 AngularJS 的主题创建工具.您可以轻松地创建您自己的 Twitter Bootstrap 主题,可以立即看到你的内容变化.您 ...

  3. BeeFree - 在线轻松创建电子邮件消息

    Beefree 可以很容易地创建一个电子邮件消息,可以被用来发送企业简讯,宣布一个新产品,促进销售等.可以免费使用,您甚至不需要创建任何类型的帐户.您可以使用 Beefree 创建创新的,易于使用的电 ...

  4. php 使用GD库上传图片以及创建缩略图

    php 使用GD库上传图片以及创建缩略图   GD库是PHP进行图象操作一个很强大的库. 先在php.ini里增加一行引用:extension=php_gd2.dll 重启apache.做一个测试页 ...

  5. Win+PHP+IECapt完整实现网页批量截图并创建缩略图

    最近在开发一个本地互联网应用的项目,为了增加用户体验,需要在搜索结果左侧显示如图一所示的某个网站的缩略图效果,在网上不停地百度谷歌了一上午后,发现大多数实现少量截图还是可以的,如果大批量的截图总会在中 ...

  6. c# 创建缩略图

    /// <summary> /// 创建缩略图 /// </summary> /// <param name="srcFileName">< ...

  7. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  8. JavaScript with Image:创建缩略图

    当图片很大,直接把图片从Server下载到浏览器上看是一种很不明智的做法,浪费了服务器的资源,网络带宽和客户端的资源.所以,通常Server和Client之间会传输缩略图,只有当Client请求某张图 ...

  9. python创建缩略图和选择轮廓效果

    # -*- encoding:utf-8 -*- ''' 改变颜色 --- 颜色反转''' from PIL import Image nest = Image.open("D:\\tk.j ...

随机推荐

  1. java中数据类型及运算符的注意事项

    数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...

  2. 【转】iOS屏幕适配

    一.iOS屏幕适配发展历程 设备 适配技术 4及以前(iPad未出) 直接用代码计算 有了iPad autoResizing 有不同屏幕的iPhone后 autoLayout 有更多不同屏幕的iPho ...

  3. checkbox 选择一个checkbox,其他checkbox也会选择

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  4. ubuntu 13.10自定义启动顺序

    添加PPA sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt-get update sudo apt-get ...

  5. 给python类动态添加方法(method)

    群里有人问如何做到 def foo(): pass class Bar(object): pass Bar.set_instance_method(foo) b = Bar() b.foo() 这个其 ...

  6. git ignore已经checked in files

    对于untracked file, 可以使用.gitignore 对于已经checked in file,可以使用git update-index #隐藏 git update-index --ass ...

  7. Linux运维工程师面试

    一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?   2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? ...

  8. C# Thread多线程学习

    自我学习理解:一个程序中包括多个进程,每个进程包括多个线程,多个线程可同时做不同的事情(说是同时,但它是交换执行的,人感觉像是同时罢了). 优点:提高CPU的使用率. 线程同步:同步就是指一个线程要等 ...

  9. 在 lamp(centos)下配置二级 域名 、虚拟主机

    1.你得拥有一个泛域名解析的顶级域名,有一个独立的IP: 2.解析二级域名,如在万网中心里,记录类型为A, 主机记录即为要配的二级域名(如:增加两个:bbs.mydomain.com 和 www.my ...

  10. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...