2010-10-15 5 views

Répondre

16

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

L'image est un concept générique et BufferedImage est l'implémentation concrète du concept générique; un peu comme BMW est une marque de voiture.

13

L'image est une classe abstraite. Vous ne pouvez pas instancier Image directement. BufferedImage est un descendant, et vous pouvez l'instancier. Donc, si vous comprenez les classes abstraites et l'héritage, vous comprendrez quand les utiliser. Par exemple, si vous utilisiez plusieurs descendants Image, ils partageront des propriétés communes héritées de Image.

Si vous voulez écrire une fonction qui prendrait soit sorte de descendant en tant que paramètre que vous pourriez faire quelque chose comme ceci:

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

Vous pouvez ensuite appeler la fonction en la faisant passer un BufferedImage ou un VolatileImage. Vous ne convertirez pas une image en BufferedImage car vous n'aurez jamais d'image.

7

Quelle est la différence entre Image et BufferedImage?

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

  • La classe java.awt.Image est la superclasse qui représente des images graphiques sous forme de tableaux rectangulaires de pixels.
  • La classe java.awt.image.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 définir 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 pixel. Puisque BufferedImage est une sous-classe de Image, il peut être rendu par les méthodes Graphics et Graphics2D qui acceptent un paramètre Image.

Une image tamponnée est essentiellement une image avec un tampon de données accessible. Il est donc plus efficace de travailler directement avec BufferedImage. Un BufferedImage a un ColorModel et un raster de données d'image. Le ColorModel fournit une interprétation de la couleur des données de pixel de l'image.


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

Bien sûr.

BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image"));