• 使用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. }  
  • 相关阅读:
    Sharding-JDBC多数据源动态切换
    U 盘安装 CentOS 7 时出现 No Caching mode page found 问题的解决
    sudo 密码直接添加到命令行以方便实现脚本自动化
    Python3 Windows 虚拟环境的若干问题
    20 张图让你彻底弄懂 HTTPS 原理!
    全网写得最好的分库分表之 Sharding-JDBC 中间件介绍
    以为线程池很简单,结果第一道题就被干趴下了!
    以为线程池很简单,没想到第一问就被干趴下了
    分布式事务,看这篇就够了!
    我是一个线程池
  • 原文地址:https://www.cnblogs.com/rr163/p/4015993.html
Copyright © 2020-2023  润新知