Разница между изображением и BufferedImage в Java

в чем разница между изображением и BufferedImage?

могу ли я создать BufferedImage непосредственно из источника изображения " изображение.png"?

3 ответов


Если вы знакомы с util Java.Список, разница между изображением и BufferedImage такая же, как разница между списком и LinkedList.

Image-это общая концепция, а BufferedImage-конкретная реализация общей концепции; вроде BMW-это марка автомобиля.


Image-абстрактный класс. Вы не можете создать экземпляр изображения напрямую. BufferedImage является потомком, и вы можете создать его экземпляр. Поэтому, если вы понимаете, абстрактные классы и наследование, вы поймете, когда использовать каждый.

например, если вы использовали более одного потомка изображения, они будут иметь некоторые общие свойства, которые наследуются от Image.

Если вы хотите написать функцию, которая будет принимать любой вид потомка в качестве параметр вы можете сделать что-то вроде этого:

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

затем вы можете вызвать функцию, передав ей BufferedImage или VolatileImage.

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

вы не будете преобразовывать изображение в BufferedImage, потому что у вас никогда не будет изображения.


в чем разница между Image и BufferedImage?

как указано в учебнике Oracle Java для работы с изображениями

  • java.ОУ.Класс Image-это суперкласс, представляющий графические изображения в виде прямоугольных массивов пикселей.
  • java.ОУ.изображение.BufferedImage класс, который расширяет класс изображения, чтобы позволить приложению работать непосредственно с данными изображения (например, получение или настройка пикселя цвет.) Приложения могут непосредственно создавать экземпляры этого класса.

класс BufferedImage является краеугольным камнем API визуализации немедленного режима JAVA 2D. Он управляет изображением в памяти и предоставляет методы для хранения, интерпретации и получения пиксельных данных. Поскольку BufferedImage является подклассом изображения, он может быть отображен методами Graphics и Graphics2D, которые принимают параметр изображения.

BufferedImage по существу является изображением с доступным буфером данных. Поэтому более эффективно работать непосредственно с bufferedimage. BufferedImage имеет цветовую модель и растр данных изображения. ColorModel обеспечивает цветовую интерпретацию пиксельных данных изображения.


могу ли я создать BufferedImage непосредственно из источника изображения " изображение.png"?

конечно.

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