欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 10:39:40
本文实例讲述了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#程序设计有所帮助。

上一篇:

下一篇: