程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用GDI+輕松創建縮略圖,gdi創建縮略圖

使用GDI+輕松創建縮略圖,gdi創建縮略圖

編輯:C#入門知識

使用GDI+輕松創建縮略圖,gdi創建縮略圖


Gdi+ 還是相當好用的.  

 

1> Image保存圖像,需要一個CLSID的參數,它可以這樣獲得:

[cpp] view plaincopy
  1. int   GetEncoderClsid(const   WCHAR*   format,   CLSID*   pClsid)   
  2. {   
  3.     UINT     num   =   0;                     //   number   of   image   encoders   
  4.     UINT     size   =   0;                   //   size   of   the   image   encoder   array   in   bytes   
  5.     ImageCodecInfo*   pImageCodecInfo   =   NULL;   
  6.     GetImageEncodersSize(&num,   &size);   
  7.     if(size   ==   0)   
  8.         return   -1;     //   Failure   
  9.     pImageCodecInfo   =   (ImageCodecInfo*)(malloc(size));   
  10.     if(pImageCodecInfo   ==   NULL)   
  11.         return   -1;     //   Failure   
  12.     GetImageEncoders(num,   size,   pImageCodecInfo);   
  13.     for(UINT   j   =   0;   j   <   num;   ++j)   
  14.     {   
  15.         if(   wcscmp(pImageCodecInfo[j].MimeType,   format)   ==   0   )   
  16.         {   
  17.             *pClsid   =   pImageCodecInfo[j].Clsid;   
  18.             free(pImageCodecInfo);   
  19.             return   j;     //   Success   
  20.         }           
  21.     }   
  22.     free(pImageCodecInfo);   
  23.     return   -1;     //   Failure   
  24. }   

 

 

2> Image::Save的另外一個參數EncoderParameters可用於圖像的壓縮*(這是從網上抄下來的)

使用img/jpeg配合encoderParameters.Parameter[0].Value設置 可以大幅度的減小圖像文件所占磁盤空間

[cpp] view plaincopy
  1. // 保存到文件  
  2.     EncoderParameters encoderParameters;    
  3.     //構造編碼參數列表    
  4.     //數組中只包含一個EncoderParameter對象    
  5.     encoderParameters.Count = 1;    
  6.     encoderParameters.Parameter[0].Guid = EncoderQuality;    
  7.     //參數類型為LONG    
  8.     encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;    
  9.     //只設置一個參數    
  10.     encoderParameters.Parameter[0].NumberOfValues = 1;    
  11.     ULONG quality;    
  12.     //壓縮JPEG圖片質量為原來的80%    
  13.     quality = 80;    
  14.     encoderParameters.Parameter[0].Value = &quality;    

 

3> 關於縮略圖

我使用了一下Image的GetThumbnailImage,發現對於某些圖像效果很不理想,(顏色較鮮艷的縮略圖效果好點,但是對於那些色差不大整體又暗的圖像效果就差勁了). 這個時候使用Graphic配合Bitmap直接畫縮略尺寸的圖像效果挺好

[cpp] view plaincopy
  1. BOOL QImgProcess::CreateThumb( int cx ,QBuf &out)  
  2. {  
  3.     ASSERT(m_pImg != NULL);  
  4.     // 創建縮略圖  
  5.     int nWidth = m_pImg->GetWidth();  
  6.     if (cx >= nWidth)  
  7.     {  
  8.         return TRUE;  
  9.     }  
  10.     int nHeight = m_pImg->GetHeight();  
  11.     int nThumbHeight = nHeight * cx / m_pImg->GetWidth() ;  
  12.     Bitmap bitmap(cx, nThumbHeight, PixelFormat24bppRGB);    
  13.     Graphics graph(&bitmap);   
  14.     graph.DrawImage(m_pImg, Rect(0,0,cx,nThumbHeight));  
  15. ......  
  16. }  

 


cs3 怎創建縮略圖

以下內容僅供參考:

Win7系統的安裝、分區及優化

一、系統安裝

1、使用PQ8.05中文版刪除所有分區。
2、安裝前斷開網絡,選擇自定義安裝系統,在分區界面下,按“Shift+F10”,使用“Diskpart”進行分區。
3、桌面-計算機-屬性-設備管理器-顯示適配器-更新驅動程序軟件-手動查找並安裝“顯卡驅動”程序軟件-重啟計算機。
4、開啟超級管理員賬戶,注銷計算機-登錄“Administrator”賬戶-以管理員身份運行“導入ACER證書”和“導入旗艦版KEY”,注銷Administrator賬戶,禁用Administrator賬戶,
5、在“控制面板”進行一些必要的設置及磁盤碎片整理後,安裝雨過天晴電腦保護系統(去掉開機啟動項)。
6、手動安裝系統升級補丁及江民殺毒軟件後,創建保護系統進度(命名為:江民殺毒軟件)。
7、安裝必要的軟件,創建保護系統進度(命名為:系統應用程序)。
 

怎使用GDI+繪制圖形可按規定路徑前進?

C# GDI+編程之基礎篇
一、關於GDI+
從本質上來看,GDI+為開發者提供了一組實現與各種設備(例如監視器,打印機及其它具有圖形化能力但不及涉及這些圖形細節的設備)進行交互的庫函數。GDI+的本質在於,它能夠替代開發人員實現與例如顯示器及其它外設的交互;而從開發者角度來看,要實現與這些設備的直接交互卻是一項艱巨的任務。
下圖1展示了GDI+在開發人員與上述設備之間起著重要的中介作用。其中,GDI+為我們“包辦”了幾乎一切—從把一個簡單的字符串“HelloWorld”打印到控制台到繪制直線,矩形甚至是打印一個完整的表單等。

圖1.GDI+擔當著重要的中介作用
那麼,GDI+是如何工作的呢?為了弄清這個問題,讓我們來分析一個示例—繪制一條線段。實質上,一條線段就是一個從一個開始位置(X0,Y0)到一個結束位置(Xn,Yn)的一系列像素點的集合。為了畫出這樣的一條線段,設備(在本例中指顯示器)需要知道相應的設備坐標或物理坐標。
然而,開發人員不是直接告訴該設備,而是調用GDI+的drawLine()方法,然後,由GDI+在內存(即“視頻內存”)中繪制一條從點A到點B的直線。GDI+讀取點A和點B的位置,然後把它們轉換成一個像素序列,並且指令監視器顯示該像素序列。簡言之,GDI+把設備獨立的調用轉換成了一個設備可理解的形式;或者實現相反方向的轉換。
至此,我們已經簡單了解了GDI+的工作機理。現在,讓我們開始探討如何實現一些基本的圖像操作。
二、圖像操作—縮略圖,縮放與保存
在本文示例中,我們將實現如下的任務:
1. 創建縮略圖。
2. 縮放一個加載的圖像。
3. 保存一個操作中的圖像。
a) 創建縮略圖

縮略圖是圖像的濃縮版本。典型情況下,一幅縮略圖圖像的尺寸為80×200像素。在GDI+中,一個圖像的縮略圖可以通過使用Image類的GetThumbnailImage()方法來創建。其函數原型如下:

public Image GetThumbnailImage (

int thumbWidth,

int thumbHeight,

GetThumbnailImageAbort callback,

IntPtr callbackData

)

第一個參數相應於縮略圖的寬度;第二個參數相應於生成的縮略圖的高度;第三個參數是一個Image.GetThumbnailImageAbort委托。在 GDI+ 1.0 版中不使用此委托。即便如此,也必須創建一個委托並在該參數中傳遞對此委托的引用。第四個參數同樣沒有使用,但是也需要提供以實現兼容性。注意,第四個參數必須為IntPtr.Zero。
如果前兩個參數(也就是寬度和高度)都為0的話,那麼,GDI+返回一個嵌入式縮略圖。否則,使用系統定義尺寸創建該縮略圖。例如,如果img是一個圖像類的實例,並且使用的寬度和高度都是系統定義的,創建一個縮略圖的語句應該如下所示:

Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);

在此,thumbNailImage包含返回的縮略圖,而tnCallback是一個相應於Image.GetThumbnailImageAbort的函數,其定義如下:

//必須調用它,但是沒有使用

style='font-size:10.0pt;font-family:Verdana'>publ......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved