2010-10-15 36 views

Respuesta

16

Si está familiarizado con el util.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; tipo de como BMW es una marca de un coche.

13

La imagen es una clase abstracta. No puedes crear una instancia de la imagen directamente. BufferedImage es un descendiente, y puedes crear una instancia de ese. Entonces, si comprende las clases abstractas y la herencia, comprenderá cuándo usar cada una.

Por ejemplo, si estaba utilizando más de un descendiente de imagen, van a compartir algunas propiedades comunes, que se heredan de la imagen.

Si quería escribir una función que tome uno u otro tipo de descendiente como un parámetro que podría hacer algo como esto:

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

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

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

No convertirá una imagen en una Imagen Buffered porque nunca tendrá una Imagen.

7

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

Como se indica en el tutorial de Java de Oracle 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.
  • 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 en el modo inmediato de Java 2D. Gestiona la imagen en la memoria y proporciona métodos para almacenar, interpretar y obtener datos de píxeles. Como BufferedImage es una subclase de Image, puede renderizarse mediante los métodos Graphics y Graphics2D que aceptan un parámetro Image.

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


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

Sure.

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