Иллюстрированный самоучитель по Java

Модель обработки прямым доступом

Чтобы отвлечься от способа хранения точек изображения, Raster может обращаться не к буферу DataBuffer, а к подклассам абстрактного класса SampieModei, рассматривающим не отдельные байты буфера, а составляющие (samples) цвета. В модели RGB – это красная, зеленая и синяя составляющие. В пакете java.awt.image есть пять подклассов класса SampleModei:

  • componentsampleModel – каждая составляющая цвета хранится в отдельном элементе массива DataBuffer;
  • BandedSampleModel – данные хранятся по составляющим, составляющие одного цвета хранятся обычно в одном массиве, a DataBuffer содержит двумерный массив: по массиву для каждой составляющей; данный класс расширяет класс ComponentsampieModel;
  • PixelInterleavedSampieModel – все составляющие цвета одного пиксела хранятся в соседних элементах единственного массива DataBuffer; данный Класс расширяет класс ComponentsampieModel;
  • MultiPixeiPackedSampieModel – цвет каждого пиксела содержит только одну составляющую, которая может быть упакована в один элемент массива DataBuffer;
  • singiePixelPackedSampleModel – все составляющие цвета каждого пиксела хранятся в одном элементе массива DataBuffer.

На рис. 15.5 представлена иерархия классов Java 2D, реализующая модель прямого доступа.

Итак, Java 2D создает сложную и разветвленную трехслойную систему DataBufferSampleModelRaster управления данными изображения Bufferedimage. Вы можете манипулировать точками изображения, используя их координаты в методах классов Raster или спуститься на уровень ниже и обращаться к составляющим цвета пиксела методами классов SampleModel. Если же вам надо работать с отдельными байтами, воспользуйтесь классами DataBuffer.

Иллюстрированный самоучитель по Java › Изображения и звук › Модель обработки прямым доступом
Рис. 15.5. Классы, реализующие модель прямого доступа

Применять эту систему приходится редко, только при создании своего способа преобразования изображения. Стандартные же преобразования выполняются очень просто.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.