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. }  
  • 相关阅读:
    Makefile学习
    c语言中sprintf的语法
    word排版-先插入页码,再插入分页符
    word2007或2010插入或删除分隔符
    word中在插入空白页_例如,为了打印,在封面后面插入一页空白页
    在word中,整篇文章想要在每一章另起一页
    word2010如何在指定页面开始插入页码
    拨打美国国际长途
    Shell脚本之break,continue,和exit区别
    3.6.1 子串
  • 原文地址:https://www.cnblogs.com/rr163/p/4015993.html
Copyright © 2011-2022 走看看