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

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

Подобно тому, как вместо класса Graphics система Java 2D использует его расширение Graphics2D, описанное в главе 9, вместо класса image в Java 2D употребляется его расширение – класс Bufferedimage. В конструкторе этого класса:

Bufferedlmage(int width, int height, int imageType)

…задаются размеры изображения и способ хранения точек – одна из констант:

  • TYPE_INT_RGB TYPE_4BYTE_ABRG TYPE_USHORT_565_RGB
  • TYPE_INT_ARGB TYPE_4BYTE_ABRG_PRE TYPE_USHORT_555_RGB
  • TYPE_INT_ARGB_PRE TYPE_BYTE_GRAY TYPE_USHORT_GRAY
  • TYPE_INT_BRG TYPE_BYTE_BINARY
  • TYPE_3BYTE_BRG TYPE_BYTE_INDEXED

Как видите, каждый пиксел может занимать 4 байта – INT, 4BYTE, или 2 байта – USHORT, или 1 байт – BYTE. Может использоваться цветовая модель RGB, или добавлена альфа-составляющая – ARGB, или задан другой порядок расположения цветовых составляющих – BRG, или заданы градации серого цвета – GRAY. Каждая составляющая цвета может занимать один байт, 5 битов или 6 битов.

Экземпляры класса Bufferedimage редко создаются конструкторами. Для их создания чаще обращаются к методам createimage () класса component с простым приведением типа:

Bufferedimage bi = (Bufferedlmage)createimage(width, height)

При этом экземпляр bi получает характеристики компонента: цвет фона и цвет рисования, способ хранения точек.

Расположение точек в изображении регулируется классом Raster или его подклассом WritableRaster. Эти классы задают систему координат изображения, предоставляют доступ к отдельным пикселам методами getPixel(), позволяют выделять фрагменты изображения методами getPixeis(). Класс WritableRaster дополнительно разрешает изменять отдельные пикселы методами setPixel () или целые фрагменты изображения методами setPixels () и setRect().

Начало системы координат изображения – левый верхний угол – имеет координаты (minX, minY), не обязательно равные нулю.

При создании экземпляра класса Bufferedimage автоматически формируется связанный с ним экземпляр класса WritableRaster.

Точки изображения хранятся в скрытом буффе, содержащем одномерный или двумерный массив точек. Вся работа с буфером осуществляется методами одного из классов DataBufferByte, DataBufferlnt, DataBufferShort, DataBufferushort в зависимости от длины данных.

Общие свойства этих классов собраны в их абстрактном суперклассе DataBuffer. В нем определены типы данных, хранящихся в буфере: TYPE_BYTE, TYPEJJSHORT, TYPE_INT, TYPEJJNDEFINED.

Методы класса DataBuffer предоставляют прямой доступ к данным буфера, но удобнее и безопаснее обращаться к ним методами классов Raster и WritableRaster.

При создании экземпляра класса Raster или класса WritableRaster создается экземпляр соответствующего подкласса класса DataBuffer.

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