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

作者:shichen2014 时间:2023-02-21 01:57:16 

本文实例讲述了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#,GDI+,缩略图
0
投稿

猜你喜欢

  • java实现监听u盘示例分享

    2023-10-20 02:14:05
  • java中多线程与线程池的基本使用方法

    2023-06-23 15:24:09
  • 3种C# 加载Word的方法

    2021-06-05 21:06:41
  • Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)

    2022-08-11 11:03:29
  • Android实现记住用户名和密码功能

    2023-10-06 13:02:07
  • Android WebView 不支持 H5 input type="file" 解决方法

    2022-08-30 21:07:08
  • 浅谈Java中注解Annotation的定义、使用、解析

    2021-07-29 04:07:52
  • 在Android界面上显示和获取Logcat日志输出的方法

    2023-02-19 20:02:19
  • Android—基于微信开放平台v3SDK开发(微信支付填坑)

    2023-05-20 09:04:02
  • Servlet 过滤器详细介绍

    2021-10-21 13:51:57
  • java并发包JUC同步器框架AQS框架原文翻译

    2022-08-22 22:17:23
  • 如何利用java实现生成PDF文件

    2023-03-31 16:25:36
  • java mybatis框架配置详解

    2023-11-25 08:09:16
  • 学习Android自定义Spinner适配器

    2022-12-15 01:28:31
  • Java编程调用微信分享功能示例

    2022-10-16 06:39:49
  • Java实现简单通讯录管理系统

    2022-06-28 01:15:54
  • Android SQLite数据库增删改查操作的案例分析

    2022-06-06 02:55:03
  • C++实现哈夫曼编码

    2022-07-20 20:39:01
  • 基于WPF实现面包屑控件的示例代码

    2021-12-19 12:34:33
  • idea启动springmvc项目时报找不到类的解决方法

    2023-11-09 16:51:04
  • asp之家 软件编程 m.aspxhome.com