当前位置: 移动技术网 > IT编程>开发语言>c# > C#使用GDI+创建缩略图实例

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例讲述了c#使用gdi+创建缩略图的方法,分享给大家供大家参考。具体方法分析如下: c#的gdi+还是相当好用的。创建缩略图步骤如下: 1. image保存图像,

本文实例讲述了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#程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网