当前位置: 首页 > 编程笔记 >

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

蔡鸿骞
2023-03-14
本文向大家介绍C#使用GDI+创建缩略图实例,包括了C#使用GDI+创建缩略图实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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绘制雷达图的实例,包括了C# 使用GDI绘制雷达图的实例的使用技巧和注意事项,需要的朋友参考一下 最近项目要用C#实现画一个雷达图,搜了搜网上竟然找不到C#画雷达图的解决方案,那么自己实现一个吧 实现效果如下图: 代码如下: 把这个类粘贴到你的项目中,执行RadarDemo.Show();就会在你的根目录里生成雷达图了,为了方便理解怎么画出来的,我把画每一个步骤时的图

  • 本文向大家介绍java实现创建缩略图、伸缩图片比例生成的方法,包括了java实现创建缩略图、伸缩图片比例生成的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现创建缩略图、伸缩图片比例生成的方法。分享给大家供大家参考。具体实现方法如下: 该实例支持将Image的宽度、高度缩放到指定width、height,并保存在指定目录 通过目标对象的大小和标准(指定)大小计算出图片缩小的

  • 问题内容: 我想从用户上传的图像创建缩略图,以使图像看起来不被挤压。但也想要原始图像的副本。因此,我希望原始图像将原始图像发送到我的服务器,并创建一个拇指版本并将其发送到我的服务器,以便我可以为每个上传自己的图片。 我的用户表有2个表 我对编码的图像方面并不感到热衷,但这是到目前为止。 Imageupload.php media.profileimage.upload.php 不胜感激任何帮助或指

  • 问题内容: 我正在寻找一个Java库,该库可以获取PDF并从第一页创建缩略​​图(PNG)。 我已经看过JPedal了,但是它疯狂的许可费完全让人望而却步。目前,我正在使用iText处理PDF文件,但我相信它不会生成缩略图。我可以在命令行上使用类似Ghostscript之类的东西,但我希望尽可能将我的项目保留为全Java。 问题答案: PDF Renderer 是LGPL许可的纯Java库,它使此

  • 我正在尝试为一个大图像(8200x11800像素)创建一个缩略图,所以GD不是一个选项。我被告知Imagick将通过使用磁盘空间而不是ram内存来克服内存限制,因此我安装了它,并按照如下方式重写了mi脚本: 但我仍然得到没有消息,就像以前发生在GD内存不够时一样,任何想法?谢啦 BTW设置为512 MB,在这里您可以获取原始图像文件。

  • 本文向大家介绍ASP.NET创建动态缩略图的方法,包括了ASP.NET创建动态缩略图的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET创建动态缩略图的方法。分享给大家供大家参考。具体分析如下: 提示: 1. 导入 System.IO 2. 创建 类C lass "CreateThumbnails" or any class and place following func