Название: Графические интерфейсы пользователя Java
Автор: Тимур Машнин
Издательство: Издательские решения
Жанр: Компьютеры: прочее
isbn: 9785005027429
isbn:
Прямая цветовая модель работает со значениями пикселей, которые представляют цвет RGB и альфа-информацию отдельно, которые упакованы для каждого пикселя в одно значение.
Модель индексированных цветов поддерживается 8-битными изображениями, содержащими не более 256 цветов.
Эта модель работает с картой цветов изображения, в которой хранятся и индексируются цвета, используемые в изображении.
Эта позволяет уменьшить размер файла изображения, при этом сохраняя качество изображения.
Вернемся к нашему примеру.
Помимо конструктора, класс ColorFilter реализует только один метод filterRGB, который является абстрактным методом, определенным в классе RGBImageFilter.
Метод filterRGB принимает три параметра: положение x и y пикселя внутри изображения и 32-битное (целочисленное) значение цвета.
Единственный параметр, которым вы занимаетесь, является значение цвета, rgb.
Стандартная цветовая модель RGB помещает красные, зеленые и синие компоненты в нижние 24 бита 32-битного значения цвета.
И каждый из них можно извлечь, сдвигая параметр rgb.
Эти отдельные компоненты хранятся в локальных переменных r, g и b.
Обратите внимание, что здесь каждый компонент цвета смещается только в том случае, если он не фильтруется.
Для фильтрованных цветов, компонент цвета установлен в 0.
Новые цветовые компоненты затем переносятся обратно в 32-битное значение цвета и возвращаются из метода filterRGB.
Обратите внимание, что альфа-компонент значения цвета не изменяется.
Для этого используется маска 0xff000000, потому что альфа-компонент находится в верхнем байте значения цвета.
Помимо обработки изображений, с помощью вставки фильтров изображений между производителем изображения и потребителем изображения,
Java поддерживает фильтрацию изображений с помощью интерфейса BufferedImageOp.
Метод filter интерфейса BufferedImageOp принимает объект BufferedImage как вход (исходное изображение) и выполняет обработку данных изображения, создавая другой объект BufferedImage (конечное изображение).
Напомним, что класс BufferedImage расширяет класс Image, обеспечивая доступ к буферу данных изображения.
Java 2D API предоставляет набор реализаций интерфейса BufferedImageOp.
AffineTransformOp – преобразует изображение геометрически.
ColorConvertOp – выполняет по-пиксельное преобразование цвета в исходном изображении.
ConvolveOp – выполняет свертку, математическую операцию, которая может использоваться для размытия, изменения резкости или другой обработки изображения.
LookupOp – изменяет отдельные составляющие цвета.
RescaleOp – изменяет интенсивность изображения.
Здесь показан пример применения фильтра RescaleOp, изменяющего интенсивность цвета.