2009-06-03 11 views
57

Ho difficoltà a comprendere le differenze tra la classe Image e la classe Bitmap. Ora, so che il Bitmap eredita dal Image ma da quello che ho capito entrambi sono molto simili. Qualcuno può far luce su questo per favore?Classe Image vs Bitmap

+2

Passanti: c'è una risposta migliore a destra [qui] (http://stackoverflow.com/a/19678330/3367144) – kdbanman

+2

Possibile duplicato di [Qual è la differenza tra System.Drawing.Image e System.Drawing.Bitmap ?] (http://stackoverflow.com/questions/19678195/what-is-the-difference-between-system-drawing-image-and-system-drawing-bitmap) –

risposta

57

La classe Bitmap è un'implementazione della classe Image. La classe Image è una classe astratta;

La classe Bitmap contiene 12 costruttori che costruiscono l'oggetto Bitmap da diversi parametri. Può costruire Bitmap da un'altra bitmap e l'indirizzo stringa dell'immagine.

Visualizza altro in this comprehensive sample.

+5

Penso che intendi un'implementazione dell'immagine astratta classe. – kenny

11

Immagine fornisce un accesso astratto a un'immagine arbitraria, definisce un insieme di metodi che possono essere applicati in modo logico a qualsiasi implementazione di Image. Non è limitato a nessun particolare formato di immagine o implementazione. Bitmap è un'implementazione specifica per la classe astratta dell'immagine che incapsula l'oggetto bitmap GDI di Windows. Bitmap è solo un'implementazione specifica per la classe abstract Image che viene inoltrata sull'oggetto bitmap GDI.

È possibile ad esempio creare la propria implementazione nell'estrazione dell'immagine, ereditando dalla classe Image e implementando i metodi astratti.

In ogni caso, questo è solo un semplice utilizzo di base di OOP, non dovrebbe essere difficile da catturare.

32

Questo è un chiarimento perché ho visto le cose fatte nel codice che sono onestamente confuse - penso che il seguente esempio potrebbe aiutare gli altri.

Come altri hanno già detto prima - Bitmap eredita dalla astratta Immagine classe

astratta significa in modo efficace non è possibile creare un'istanza di New() di esso.

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

Ma è possibile effettuare le seguenti operazioni:

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

è ora possibile utilizzare imgGood come si farebbe lo stesso oggetto bitmap se si fosse realizzato il seguente:

Bitmap bmpGood = new Bitmap(200,200); 

Il bella cosa qui è che puoi disegnare l'oggetto imgGood usando un oggetto Grafica

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); 

Qui imgGood può essere qualsiasi oggetto Immagine - Bitmap, Metafile, o qualsiasi altra cosa che eredita da immagine!