169it科技资讯


当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-11-04

本文实例讲述了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#实现通过模板自动创建Word文档的方法

     本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧。分享给大家供大家参考。具体实现方法如下: 引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示具体的步骤:   第一步,制作模板   1.新建一个文档,设置文档内容。 2.在相应位置插入书签;将鼠标定位到要插入书签的位置,点击“插入”>“书签”,弹出对话框,输入书签名......


    ▪C#中Response.Write常见问题汇总

     本文实例汇总了C#中Response.Write的常见问题,分享给大家供大家参考之用。具体分析如下: 问题一: Response.Write 后连接Response.Redirect ,则Response.Write无法显示,直接跳转入Response.Redirect 的页面。 解决方式: Response.Write("<script languge='javascript'>alert('成功修改'); window.location.href='index.aspx'</script>"); 如果,script内容中含有变量,那么解决方法是: string a=当前的记录变量; 500){this.resized=true;this.style.width=500;}" align=top>Response.Write("<script language=......


    ▪C#中多态、重载、重写区别分析

     本文实例总结了C#中多态、重载与重写的概念与区别。对于初学C#的朋友来说有不错的参考价值。分享给大家供大家参考。具体分析如下: 重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。 格式如下: 1.在基类中: public virtual void myMethod() { } 2.在子类中: public override void myMethod() { } 重写以后,用基类对象和子类对象访问myMethod()......


 
最新技术文章:
    ▪C#通过IComparable实现ListT.sort()排序

     本文实例讲述了C#通过IComparable实现ListT.sort()排序的方法,分享给大家供大家参考之用。具体方法如下: 通常来说,List<T>.sort()可以实现对T的排序,比如List<int>.sort()执行后集合会按照int从小到大排序。如果T是一个自定义的Object,可是我们想按照自己的方式来排序,那该怎么办呢,其实可以用过IComparable接口重写CompareTo方法来实现。流程如下: 一、第一步我们申明一个类Person但是要继承IComparable接口: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestIC......


    ▪C#实现对Json字符串处理实例

     本文实例讲述了C#实现对Json字符串处理方法,分享给大家供大家参考。具体分析如下: 一般对于web应用开发人员来说对Json字符串都会很熟悉,其实在很多请求我们返回的都是Json字符串。那对于C#代码如何处理Json字符串呢,.Net封装了一个类叫做JavaScriptSerializer[MSDN Library 链接:http://msdn.microsoft.com/en-us/library/ee191864(v=vs.110).aspx];这个类提供了一个方法。 下面这个是在快递100往抓取的一个圆通的快递信息。对于我们有用的信息是快递时间,快递状况。那我该如何来做。  ......


    ▪Winform实现抓取web页面内容的方法

     本文以一个非常简单的实例讲述了Winform实现抓取web页面内容的方法,代码简洁易懂,非常实用!分享给大家供大家参考。 具体实现代码如下: WebRequest request = WebRequest.Create("http://1.bjapp.sinaapp.com/play.php?a=" + PageUrl); WebResponse response = request.GetResponse(); Stream resStream = response.GetResponseStream(); StreamReader sr = new StreamReader(resStream, System.Text.Encoding.UTF8); string htmlinfo = sr.ReadToEnd(); resStream.Close(); sr.Close(); 感兴趣的朋友可以测试运行或改进本文实例。希望本文所述对大家C#程序设计的学习有所帮助。 ......


 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号