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