2009-06-03 17 views
57

Tengo problemas para entender las diferencias entre la clase Image y la clase Bitmap. Ahora, sé que el Bitmap hereda del Image pero por lo que entiendo ambos son muy similares. ¿Alguien puede arrojar algo de luz sobre esto, por favor?Imagen vs clase de mapa de bits

+2

Transeúntes: hay una respuesta mejor aquí [aquí] (http://stackoverflow.com/a/19678330/3367144) – kdbanman

+2

Posible duplicado de [Cuál es la diferencia entre System.Drawing.Image y System.Drawing.Bitmap ?] (http://stackoverflow.com/questions/19678195/what-is-the-difference-between-system-drawing-image-and-system-drawing-bitmap) –

Respuesta

57

La clase Bitmap es una implementación de la clase Image. La clase de imagen es una clase abstracta;

La clase Bitmap contiene 12 constructores que construyen el objeto Bitmap a partir de diferentes parámetros. Puede construir el mapa de bits a partir de otro mapa de bits y la dirección de cadena de la imagen.

Ver más in this comprehensive sample.

+5

Creo que te refieres a una implementación de la imagen abstracta clase. – kenny

11

La imagen proporciona un acceso abstracto a una imagen arbitraria, define un conjunto de métodos que pueden aplicarse de forma lógica en cualquier implementación de la Imagen. No está limitado a ningún formato de imagen o implementación particular. Bitmap es una implementación específica de la clase abstracta de imágenes que encapsula el objeto de mapa de bits GDI de Windows. Bitmap es solo una implementación específica de la clase abstracta de imagen que retransmite en el objeto de mapa de bits de GDI.

Podría, por ejemplo, crear su propia implementación para el resumen de la imagen, heredando de la clase Image e implementando los métodos abstractos.

De todos modos, este es solo un simple uso básico de OOP, no debería ser difícil de atrapar.

32

Esto es una aclaración porque he visto cosas hechas en código que son honestamente confusas, creo que el siguiente ejemplo podría ayudar a otros.

Como otros han dicho antes - Bitmap hereda de la imagen abstracta clase

Resumen significa, efectivamente, no se puede crear una instancia nueva() de él.

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

Pero puede hacer lo siguiente:

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

ahora se puede utilizar imgGood como lo haría el mismo objeto de mapa de bits si se hubiera hecho lo siguiente:

Bitmap bmpGood = new Bitmap(200,200); 

El Lo bueno aquí es que puedes dibujar el objeto imgGood usando un objeto Graphics

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

Aquí imgGood puede ser cualquier objeto imagen - Mapa de bits, metarchivo, o cualquier otra cosa que se hereda de imagen!

Cuestiones relacionadas