1. 程式人生 > >C#使用GDI+創建縮略圖實例

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

.com pan fff line 文本消息 adding 文件 事件交互 otto

本文實例講述了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(#, &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+創建縮略圖實例

本文地址: http://www.paobuke.com/develop/c-develop/pbk23446.html






相關內容

技術分享圖片C#中foreach循環對比for循環的優勢和劣勢技術分享圖片C#連接到sql server2008數據庫的實例代碼技術分享圖片C#使用Redis的基本操作技術分享圖片C#開發微信門戶及應用(3) 文本消息和圖文消息應答
技術分享圖片C#微信公眾號開發 微信事件交互技術分享圖片解決安裝VS2008無法更改默認路徑的問題技術分享圖片C# 設計模式系列教程-代理模式技術分享圖片驗證碼的三個常見漏洞和修復方法

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