2009-06-03 44 views
57

我無法理解Image類和Bitmap類之間的差異。現在,我知道Bitmap繼承自Image,但從我所瞭解的兩者都非常相似。任何人都可以對此有所瞭解嗎?圖片與位圖類

+2

路人:有一個更好的答案權利[這裏](http://stackoverflow.com/a/19678330/3367144) – kdbanman 2015-10-07 22:02:27

+2

可能重複的[System.Drawing.Image和System.Drawing.Bitmap之間有什麼區別?](http://stackoverflow.com/questions/19678195/what-is-the-difference-between-system-drawing-image-and-system-drawing-bitmap) – 2016-02-22 15:18:33

回答

57

Bitmap類是Image類的實現。 Image類是一個抽象類;

Bitmap類包含12個構造函數,它們根據不同的參數構造Bitmap對象。它可以從另一個位圖構建位圖,以及圖像的字符串地址。

查看更多in this comprehensive sample

11

圖像提供對任意圖像的抽象訪問,它定義了一組方法,可以在邏輯上應用於Image的任何實現。它不受限於任何特定的圖像格式或實現。位圖是封裝窗口GDI位圖對象的圖像抽象類的特定實現。位圖只是圖像抽象類的一個特定實現,它在GDI位圖對象上進行中繼。

例如,您可以通過從Image類繼承並實現抽象方法來爲Image抽象創建自己的實現。

無論如何,這只是OOP的一個簡單的基本用法,它不應該很難被捕獲。

32

這是一個澄清,因爲我已經看到了在代碼中完成的事情,這些代碼實際上令人困惑 - 我認爲以下示例可能有助於其他代碼。

正如其他人之前說的 - 位圖從抽象圖片

摘要有效地意味着你不能創建一個新的()實例繼承。

Image imgBad1 = new Image();  // Bad - won't compile 
    Image imgBad2 = new Image(200,200); // Bad - won't compile 

你可以做到以下幾點:

Image imgGood; // Not instantiated object! 
    // Now you can do this 
    imgGood = new Bitmap(200, 200); 

您現在可以使用imgGood,你會相同的位圖對象,如果你做了以下內容:

Bitmap bmpGood = new Bitmap(200,200); 

的這裏的好東西是你可以使用圖形對象

來繪製imgGood對象
Graphics gr = default(Graphics); 
    gr = Graphics.FromImage(new Bitmap(1000, 1000)); 
    Rectangle rect = new Rectangle(50, 50, imgGood.Width, imgGood.Height); // where to draw 
    gr.DrawImage(imgGood, rect); 

這裏imgGood可以任何 Image對象 - 位圖,圖元文件,或其他任何東西,從圖像會繼承!