C#使用GDI+創(chuàng)建縮略圖實(shí)例
本文實(shí)例講述了C#使用GDI+創(chuàng)建縮略圖的方法,分享給大家供大家參考。具體方法分析如下:
C#的Gdi+還是相當(dāng)好用的。創(chuàng)建縮略圖步驟如下:
1. Image保存圖像,需要一個(gè)CLSID的參數(shù),它可以這樣獲得:
{
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的另外一個(gè)參數(shù)EncoderParameters可用于圖像的壓縮*(這是從網(wǎng)上抄下來的)
使用img/jpeg配合encoderParameters.Parameter[0].Value設(shè)置 可以大幅度的減小圖像文件所占磁盤空間
EncoderParameters encoderParameters;
//構(gòu)造編碼參數(shù)列表
//數(shù)組中只包含一個(gè)EncoderParameter對(duì)象
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
//參數(shù)類型為L(zhǎng)ONG
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
//只設(shè)置一個(gè)參數(shù)
encoderParameters.Parameter[0].NumberOfValues = 1;
ULONG quality;
//壓縮JPEG圖片質(zhì)量為原來的80%
quality = 80;
encoderParameters.Parameter[0].Value = &quality;
3. 關(guān)于縮略圖
我使用了一下Image的GetThumbnailImage,發(fā)現(xiàn)對(duì)于某些圖像效果很不理想,(顏色較鮮艷的縮略圖效果好點(diǎn),但是對(duì)于那些色差不大整體又暗的圖像效果就差勁了). 這個(gè)時(shí)候使用Graphic配合Bitmap直接畫縮略尺寸的圖像效果挺好
{
ASSERT(m_pImg != NULL);
// 創(chuàng)建縮略圖
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));
......
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#程序調(diào)用C++動(dòng)態(tài)庫(kù)(dll文件)遇到的坑及解決
這篇文章主要介紹了C#程序調(diào)用C++動(dòng)態(tài)庫(kù)(dll文件)遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
winform中的ListBox和ComboBox綁定數(shù)據(jù)用法實(shí)例
這篇文章主要介紹了winform中的ListBox和ComboBox綁定數(shù)據(jù)用法,實(shí)例分析了將集合數(shù)據(jù)綁定到ListBox和ComboBox控件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
C#中調(diào)用命令行cmd開啟wifi熱點(diǎn)的實(shí)例代碼
最近想在win7上開啟wifi熱點(diǎn),于是就弄出下面這個(gè)小東西,里面涉及如何在控制臺(tái)上輸入命令,分享一下。首先在VS中創(chuàng)建一個(gè)window窗口,然后創(chuàng)建兩個(gè)四個(gè)button,兩個(gè)輸入框2013-04-04
C#實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)庫(kù)數(shù)據(jù)到Excel文件
利用C#編程語(yǔ)言的強(qiáng)大特性和豐富的.NET庫(kù)支持,開發(fā)人員可以高效地完成從數(shù)據(jù)庫(kù)到Excel文件的數(shù)據(jù)遷移,下面就跟隨小編一起學(xué)習(xí)一下具體操作吧2024-12-12
如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑
項(xiàng)目中少不了讀取或設(shè)置文件路徑的功能,如何才能對(duì)輸入的路徑是否合法進(jìn)行判斷呢?下面這篇文章主要給大家介紹了關(guān)于C#利用正則表達(dá)式判斷是否是有效的文件及文件夾路徑的相關(guān)資料,需要的朋友可以參考下2022-04-04

