Différence entre l'image et BufferedImage en Java


Quelle est la différence entre Image et BufferedImage?

Puis-je créer une image tampon directement à partir d'une image source "image.png"?

Author: İsmet Alkan, 2010-10-15

3 answers

Si vous connaissez l'util de Java.List, la différence entre Image et BufferedImage est la même que la différence entre List et LinkedList.

Image est un concept générique et BufferedImage est la mise en œuvre concrète du concept générique; un peu comme BMW est une marque de voiture.

 18
Author: Alvin, 2010-10-15 19:05:36

Image est une classe abstraite. Vous ne pouvez pas instancier l'image directement. BufferedImage est un descendant, et vous pouvez instancier celui-ci. Donc, si vous comprenez les classes abstraites et l'héritage, vous comprendrez quand les utiliser.

Par exemple, si vous utilisiez plus d'un descendant d'Image, ils vont partager des propriétés communes, qui sont héritées de l'Image.

Si vous vouliez écrire une fonction qui prendrait l'un ou l'autre type de descendant comme paramètre, vous pourriez le faire quelque chose comme ceci:

function myFunction(Image myImage) {
  int i = myImage.getHeight();
  ...
}

Vous pouvez alors appeler la fonction en lui passant un BufferedImage ou un VolatileImage.

BufferedImage myBufferedImage;
VolatileImage myVolatileImage;
...
myFunction(myVolatileImage);
myFunction(myBufferedImage);

Vous ne convertirez pas une Image en BufferedImage car vous n'aurez jamais d'Image.

 13
Author: Marcus Adams, 2010-10-15 18:12:32

Quelle est la différence entre Image et BufferedImage?

Comme indiqué dans le tutoriel Oracle Java pour travailler avec des images

  • Le java.awt.La classe Image est la superclasse qui représente les images graphiques sous forme de tableaux rectangulaires de pixels.
  • Le java.awt.image.Classe BufferedImage, qui étend la classe Image pour permettre à l'application de fonctionner directement avec les données d'image (par exemple, récupérer ou configurer la couleur du pixel). Les applications peuvent directement construire des instances de cette classe.

La classe BufferedImage est une pierre angulaire de l'API d'imagerie en mode immédiat Java 2D. Il gère l'image en mémoire et fournit des méthodes pour stocker, interpréter et obtenir des données de pixels. Comme BufferedImage est une sous-classe d'Image, elle peut être rendue par les méthodes Graphics et Graphics2D qui acceptent un paramètre Image.

Un BufferedImage est essentiellement une Image avec un tampon de données accessible. Il est donc plus efficace pour travailler directement avec BufferedImage. Une image tampon a un modèle de couleur et un Raster de données d'image. Le ColorModel fournit une interprétation des couleurs des données de pixels de l'image.


Puis-je créer un BufferedImage directement à partir d'une image source "image.png"?

Bien sûr.

BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image"));
 7
Author: Paul Samsotha, 2014-06-27 04:50:29