read images getrgb example java image bufferedimage

images - Diferencia entre la imagen y BufferedImage en Java



java bufferedimage getrgb (3)

¿Cuál es la diferencia entre Image y BufferedImage?

¿Puedo crear una imagen almacenada directamente desde una fuente de imagen "image.png"?


¿Cuál es la diferencia entre Image y BufferedImage ?

Como se indica en el tutorial de Oracle Java para trabajar con imágenes

  • La clase java.awt.Image es la superclase que representa imágenes gráficas como matrices rectangulares de píxeles.
  • La clase java.awt.image.BufferedImage, que amplía la clase de imagen para permitir que la aplicación funcione directamente con datos de imagen (por ejemplo, recuperar o configurar el color de píxel). Las aplicaciones pueden construir directamente instancias de esta clase.

La clase BufferedImage es una piedra angular de la API de imágenes de modo inmediato Java 2D. Administra la imagen en la memoria y proporciona métodos para almacenar, interpretar y obtener datos de píxeles. Dado que BufferedImage es una subclase de Imagen, se puede representar mediante los métodos Graphics y Graphics2D que aceptan un parámetro de Imagen.

Un BufferedImage es esencialmente una imagen con un búfer de datos accesible. Por lo tanto, es más eficiente trabajar directamente con BufferedImage. Un BufferedImage tiene un ColorModel y un ráster de datos de imagen. El ColorModel proporciona una interpretación en color de los datos de píxeles de la imagen.

¿Puedo crear una imagen BufferedImage directamente desde una fuente de imagen "image.png"?

Por supuesto.

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


La imagen es una clase abstracta. No puedes instanciar la imagen directamente. BufferedImage es un descendiente, y puedes instanciarlo. Entonces, si entiendes clases abstractas y herencia, entenderás cuándo usar cada una.

Por ejemplo, si estaba usando más de un descendiente de imágenes, compartirán algunas propiedades comunes, que se heredan de la imagen.

Si desea escribir una función que tome algún tipo de descendiente como parámetro, podría hacer algo como esto:

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

A continuación, puede llamar a la función pasándole un BufferedImage o un VolatileImage.

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

No convertirás una imagen en una imagen almacenada porque nunca tendrás una imagen.


Si está familiarizado con la utilidad.List de Java, la diferencia entre Image y BufferedImage es la misma que la diferencia entre List y LinkedList.

La imagen es un concepto genérico y BufferedImage es la implementación concreta del concepto genérico; Algo así como BMW es una marca de un automóvil.