2009-06-03 14 views
57

Mam problemy ze zrozumieniem różnic między klasą Image a klasą Bitmap. Teraz wiem, że Bitmap dziedziczy po Image, ale z tego, co rozumiem, oba są bardzo podobne. Czy ktoś może rzucić trochę światła na to?Image vs Bitmap class

+2

Passersby: jest lepsza odpowiedź w prawo [tutaj] (http://stackoverflow.com/a/19678330/3367144) – kdbanman

+2

Możliwy duplikat [Jaka jest różnica między System.Drawing.Image i System.Drawing.Bitmap ?] (http://stackoverflow.com/questions/19678195/what-is-the-difference-between-system-drawing-image-and-system-drawing-bitmap) –

Odpowiedz

57

Klasa Bitmap jest implementacją klasy Obraz. Klasa Obraz jest klasą abstrakcyjną;

Klasa Bitmap zawiera 12 konstruktorów, które konstruują obiekt Bitmap z różnych parametrów. Może tworzyć bitmapę z innej bitmapy i adres ciągów obrazu.

Zobacz więcej in this comprehensive sample.

+5

Myślę, że masz na myśli implementację abstrakcyjnego obrazu klasa. – kenny

11

Obraz zapewnia abstrakcyjny dostęp do dowolnego obrazu, definiuje zestaw metod, które można logicznie zastosować przy każdej implementacji obrazu. Nie jest związany z żadnym konkretnym formatem lub implementacją obrazu. Bitmap to specyficzna implementacja klasy abstrakcji obrazu, która zawiera obiekt bitmapowy Windows GDI. Bitmapa to specyficzna implementacja klasy abstrakcji obrazu, która jest przekazywana na obiekcie bitmapowym GDI.

Można na przykład utworzyć własną implementację do abstrakcji obrazu, dziedzicząc z klasy obrazu i wdrażając metody abstrakcyjne.

W każdym razie, jest to proste proste użycie OOP, nie powinno być trudne do złapania.

32

To jest wyjaśnienie, ponieważ widziałem rzeczy wykonane w kodzie, które są naprawdę mylące - myślę, że poniższy przykład może pomóc innym.

Jak mówili inni wcześniej - Bitmap dziedziczy po Streszczenie obrazu klasy

Streszczenie efektywnie oznacza, że ​​nie można utworzyć nowy() instancji niego.

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

Ale można wykonać następujące czynności:

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

Można teraz używać imgGood jak byś ten sam obiekt bitmapy jeśli zrobił, co następuje:

Bitmap bmpGood = new Bitmap(200,200); 

fajną rzeczą jest to, że możesz narysować obiekt imgGood przy użyciu obiektu Graphics obiektu

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

Tutaj imgGood może być dowolny obiekt Image - bitmapy, Metafile, lub cokolwiek innego, co dziedziczy z obrazka!