Разница между изображением и BufferedImage в Java - PullRequest
22 голосов
/ 15 октября 2010

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

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

Ответы [ 3 ]

23 голосов
/ 15 октября 2010

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

Изображение - это общая концепция, а BufferedImage - конкретная реализация общей концепции;вроде как БМВ - это марка автомобиля.

15 голосов
/ 15 октября 2010

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

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

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

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

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

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

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

10 голосов
/ 06 января 2014

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

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

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

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

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


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

Конечно.

BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...