国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#使用GDI+創建縮略圖實例

2020-01-24 02:22:34
字體:
來源:轉載
供稿:網友

本文實例講述了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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 翁牛特旗| 双鸭山市| 东宁县| 宜川县| 汶川县| 肇州县| 修武县| 恩施市| 河西区| 太康县| 襄垣县| 甘德县| 织金县| 娱乐| 天柱县| 邮箱| 吉木萨尔县| 四会市| 仁布县| 湘乡市| 龙游县| 石城县| 德昌县| 辽阳县| 兴和县| 肇东市| 镇坪县| 井冈山市| 库尔勒市| 嘉义县| 元阳县| 岳普湖县| 彭水| 桃园市| 阿图什市| 邹平县| 义乌市| 普洱| 洱源县| 岳西县| 乌兰察布市|