2009-06-03 16 views
57

Ich habe Probleme, die Unterschiede zwischen der Image-Klasse und der Bitmap-Klasse zu verstehen. Nun, ich weiß, dass die Bitmap von der Image erbt, aber von dem, was ich verstehe, sind beide sehr ähnlich. Kann jemand bitte etwas Licht darauf werfen?Bild und Bitmap-Klasse

+2

Passanten: Es gibt eine bessere Antwort richtig [hier] (http://stackoverflow.com/a/19678330/3367144) – kdbanman

+2

Mögliche Duplikate von [Was ist der Unterschied zwischen System.Drawing.Image und System.Drawing.Bitmap ?] (http://stackoverflow.com/questions/19678195/what-ist-the-difference-between-system-drawing-image-and-system-drawing-bitmap) –

Antwort

57

Die Bitmap-Klasse ist eine Implementierung der Image-Klasse. Die Image-Klasse ist eine abstrakte Klasse.

Die Bitmap-Klasse enthält 12 Konstruktoren, die das Bitmap-Objekt aus verschiedenen Parametern erstellen. Es kann die Bitmap aus einer anderen Bitmap und die String-Adresse des Bildes erstellen.

Weitere Informationen in this comprehensive sample.

+5

Ich denke, du meinst eine Implementierung des abstrakten Bildes Klasse. – kenny

11

Image bietet einen abstrakten Zugriff auf ein beliebiges Bild, es definiert eine Reihe von Methoden, die logischerweise auf jede Implementierung von Image angewendet werden können. Es ist nicht an ein bestimmtes Bildformat oder eine Implementierung gebunden. Bitmap ist eine spezifische Implementierung für die abstrakte Image-Klasse, die Windows-GDI-Bitmap-Objekte kapselt. Bitmap ist nur eine spezifische Implementierung für die abstrakte Klasse "Image", die auf dem GDI-Bitmap-Objekt weiterleitet.

Sie könnten zum Beispiel Ihre eigene Implementierung zum Image-Abstract erstellen, indem Sie von der Image-Klasse erben und die abstrakten Methoden implementieren.

Wie auch immer, dies ist nur eine einfache Grundanwendung von OOP, es sollte nicht schwer zu fangen sein.

32

Dies ist eine Klarstellung, weil ich Dinge im Code getan habe, die ehrlich verwirrend sind - ich denke, das folgende Beispiel könnte anderen helfen.

Wie andere gesagt haben, bevor - Bitmap erbt von der abstrakten Bild Klasse

Abstrakt effektiv bedeutet, dass Sie eine neue() Instanz nicht erstellen können.

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

Aber können Sie wie folgt vorgehen:

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

Sie jetzt imgGood wie würden Sie das gleiche Bitmap-Objekt verwenden können, wenn Sie das folgende getan hatte:

Bitmap bmpGood = new Bitmap(200,200); 

Die nette Sache hier ist, Sie können das imgGood Objekt mit einem Graphics Objekt

zeichnen Bitmap, Metafile, oder irgendetwas anderes, das von Bild erbt -
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); 

Hier imgGood kann jedes Image-Objekt sein!