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

 更新时间:2014年10月11日 15:58:43   投稿:shichen2014  
这篇文章主要介绍了C#使用GDI+创建缩略图实例,是C#程序设计中非常实用的技巧,需要的朋友可以参考下

本文实例讲述了C#使用GDI+创建缩略图的方法,分享给大家供大家参考。具体方法分析如下:

C#的Gdi+还是相当好用的。创建缩略图步骤如下:

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

复制代码 代码如下:
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设置 可以大幅度的减小图像文件所占磁盘空间

复制代码 代码如下:
// 保存到文件 
    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直接画缩略尺寸的图像效果挺好

复制代码 代码如下:
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#程序设计有所帮助。

相关文章

  • C#简单查询SQLite数据库是否存在数据的方法

    C#简单查询SQLite数据库是否存在数据的方法

    这篇文章主要介绍了C#简单查询SQLite数据库是否存在数据的方法,涉及C#调用SQLite组件及针对SQLite数据库基本的连接、查询、关闭等使用技巧,需要的朋友可以参考下
    2016-07-07
  • C#禁用双击窗体图标关闭窗体的方法

    C#禁用双击窗体图标关闭窗体的方法

    这篇文章主要介绍了C#禁用双击窗体图标关闭窗体的方法,通过对窗体参数的简单设置实现C#禁用双击窗体图标关闭窗体的功能,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • C#实现判断文件夹存在与否并创建文件夹的方法

    C#实现判断文件夹存在与否并创建文件夹的方法

    这篇文章主要介绍了C#实现判断文件夹存在与否并创建文件夹的方法,涉及C#针对文件及目录的判断与创建操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • c#中Linq to Sql 增删除的实例

    c#中Linq to Sql 增删除的实例

    c#中Linq to Sql 增删除的实例,需要的朋友可以参考一下
    2013-05-05
  • 利用C#/VB.NET实现将PDF转为Word

    利用C#/VB.NET实现将PDF转为Word

    众所周知,PDF 文档支持特长文件,集成度和安全可靠性都较高,可有效防止他人对 PDF 内容进行更改,所以在工作中深受大家喜爱。本文将分为两部分介绍如何以编程的方式将 PDF 转换为 Word,需要的可以参考一下
    2022-12-12
  • C#基础继承和多态详解

    C#基础继承和多态详解

    C#基础继承和多态详解,需要的朋友可以参考一下
    2013-03-03
  • C# wpf实现任意控件更多拖动功能

    C# wpf实现任意控件更多拖动功能

    这篇文章主要为大家详细介绍了C# wpf如何实现任意控件(包括窗口)更多拖动功能,文中的示例代码讲解详细,有兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C#利用VS中插件打包并发布winfrom程序

    C#利用VS中插件打包并发布winfrom程序

    这篇文章主要为大家详细介绍了C#利用VS中插件打包并发布winfrom程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C#实现鼠标裁剪图像功能

    C#实现鼠标裁剪图像功能

    这篇文章主要为大家详细介绍了C#实现鼠标裁剪图像功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • c#动态调用Webservice的两种方法实例

    c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下
    2013-08-08

最新评论