zoukankan      html  css  js  c++  java
  • 使用GDI+轻松创建缩略图

    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. }  
  • 相关阅读:
    Java的native关键字---JAVA下调用其他语言的关键词
    JAVA关键词synchronized的作用
    Ubuntu下安装android studio的时候,无法进入图形界面--/usr/lib/jdk1.8.0_60/jre/lib/i386/libawt_xawt.so: libXtst.so.6: 无法打开共享对象文件: 没有那个文件或目录
    安装XP和Ubuntu双系统问题——Ubuntu安装时无法识别原有系统
    耗时又繁重的SQL诊断优化,以后就都交给数据库自治服务DAS吧!
    阿里云发布政企安全加速解决方案 加码助力政企信息化安全
    Nacos 权限控制介绍及实战
    资深技术专家崮德在阿里管理研发团队的实践和思考
    容灾切换必备——全局流量管理介绍
    MaxCompute管家详解--管家助力,轻松玩转MaxCompute
  • 原文地址:https://www.cnblogs.com/rr163/p/4015993.html
Copyright © 2011-2022 走看看