web-dev-qa-db-fra.com

Image vs classe Bitmap

J'ai du mal à comprendre les différences entre la classe Image et la classe Bitmap. Maintenant, je sais que le Bitmap hérite du Image mais de ce que je comprends, les deux sont très similaires. Quelqu'un peut-il faire la lumière sur ce sujet s'il vous plaît?

64
user116864

La classe Bitmap est une implémentation de la classe Image. La classe Image est une classe abstraite;

La classe Bitmap contient 12 constructeurs qui construisent l'objet Bitmap à partir de différents paramètres. Il peut construire le Bitmap à partir d'un autre bitmap et l'adresse de chaîne de l'image.

Voir plus dans cet exemple complet .

64
Richard

C'est une clarification parce que j'ai vu des choses faites dans du code qui sont honnêtement déroutantes - je pense que l'exemple suivant pourrait aider les autres.

Comme d'autres l'ont déjà dit - Bitmap hérite de la classe Abstract Image

Résumé signifie que vous ne pouvez pas en créer une instance New ().

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

Mais vous pouvez faire ce qui suit:

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

Vous pouvez maintenant utiliser imgGood comme vous le feriez pour le même objet bitmap si vous aviez effectué les opérations suivantes:

    Bitmap bmpGood = new Bitmap(200,200);

La bonne chose ici est que vous pouvez dessiner l'objet imgGood en utilisant un objet 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);

Ici imgGood peut être any Objet Image - Bitmap, métafichier ou tout autre élément héritant d'Image!

37
David Carta

Image fournit un accès abstrait à une image arbitraire, il définit un ensemble de méthodes qui peuvent logiquement être appliquées à n'importe quelle implémentation d'Image. Ce n'est lié à aucun format d'image ou implémentation particulier. Bitmap est une implémentation spécifique à la classe abstraite image qui encapsule les fenêtres GDI objet bitmap. Bitmap est juste une implémentation spécifique à la classe abstraite Image qui relaie sur GDI = Objet bitmap.

Vous pouvez par exemple, créer votre propre implémentation dans le résumé Image, en héritant de la classe Image et en implémentant les méthodes abstraites.

Quoi qu'il en soit, ce n'est qu'une simple utilisation de base de OOP, cela ne devrait pas être difficile à attraper.

11
user88637