源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#使用GDI+创建缩略图实例

  • 时间:2021-06-13 00:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#使用GDI+创建缩略图实例
本文实例讲述了C#使用GDI+创建缩略图的方法,分享给大家供大家参考。具体方法分析如下: C#的Gdi+还是相当好用的。创建缩略图步骤如下: 1. Image保存图像,需要一个CLSID的参数,它可以这样获得:
[u]复制代码[/u] 代码如下:
int   GetEncoderClsid(const   WCHAR*   format,   CLSID*   pClsid)   {       UINT     num   =   0;                     //   number   of   image   encoders       UINT     size   =   0;                   //   size   of   the   image   encoder   array   in   bytes       ImageCodecInfo*   pImageCodecInfo   =   NULL;       GetImageEncodersSize(&num,   &size);       if(size   ==   0)           return   -1;     //   Failure       pImageCodecInfo   =   (ImageCodecInfo*)(malloc(size));       if(pImageCodecInfo   ==   NULL)           return   -1;     //   Failure       GetImageEncoders(num,   size,   pImageCodecInfo);       for(UINT   j   =   0;   j   <   num;   ++j)       {           if(   wcscmp(pImageCodecInfo[j].MimeType,   format)   ==   0   )           {               *pClsid   =   pImageCodecInfo[j].Clsid;               free(pImageCodecInfo);               return   j;     //   Success           }               }       free(pImageCodecInfo);       return   -1;     //   Failure   }
2. Image::Save的另外一个参数EncoderParameters可用于图像的压缩*(这是从网上抄下来的) 使用img/jpeg配合encoderParameters.Parameter[0].Value设置 可以大幅度的减小图像文件所占磁盘空间
[u]复制代码[/u] 代码如下:
// 保存到文件      EncoderParameters encoderParameters;        //构造编码参数列表        //数组中只包含一个EncoderParameter对象        encoderParameters.Count = 1;        encoderParameters.Parameter[0].Guid = EncoderQuality;        //参数类型为LONG        encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;        //只设置一个参数        encoderParameters.Parameter[0].NumberOfValues = 1;        ULONG quality;        //压缩JPEG图片质量为原来的80%        quality = 80;        encoderParameters.Parameter[0].Value = &quality;
3. 关于缩略图 我使用了一下Image的GetThumbnailImage,发现对于某些图像效果很不理想,(颜色较鲜艳的缩略图效果好点,但是对于那些色差不大整体又暗的图像效果就差劲了). 这个时候使用Graphic配合Bitmap直接画缩略尺寸的图像效果挺好
[u]复制代码[/u] 代码如下:
BOOL QImgProcess::CreateThumb( int cx ,QBuf &out)  {      ASSERT(m_pImg != NULL);      // 创建缩略图      int nWidth = m_pImg->GetWidth();      if (cx >= nWidth)      {          return TRUE;      }      int nHeight = m_pImg->GetHeight();      int nThumbHeight = nHeight * cx / m_pImg->GetWidth() ;      Bitmap bitmap(cx, nThumbHeight, PixelFormat24bppRGB);        Graphics graph(&bitmap);       graph.DrawImage(m_pImg, Rect(0,0,cx,nThumbHeight));  ......  }
希望本文所述对大家的C#程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部