getRGB()
метод возвращает единственный интервал. Как я могу получить индивидуально красные, зеленые и синие цвета все как значения между 0 и 255?
Класс Java Color может выполнять преобразование:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
Вам понадобится базовая двоичная арифметика, чтобы разделить его:
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(Или, возможно, наоборот, я, честно говоря, не могу вспомнить, документация не дает мне мгновенного ответа)
Пиксель представлен 4-байтовым (32-битным) целым числом, например:
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
Итак, чтобы получить отдельные цветовые компоненты, вам просто понадобится немного двоичной арифметики:
int rgb = getRGB(...);
int red = (rgb >> 16) & 0x000000FF;
int green = (rgb >>8 ) & 0x000000FF;
int blue = (rgb) & 0x000000FF;
Это действительно то, что java.awt.Color
методы класса выполняют:
553 /**
554 * Returns the red component in the range 0-255 in the default sRGB
555 * space.
556 * @return the red component.
557 * @see #getRGB
558 */
559 public int getRed() {
560 return (getRGB() >> 16) & 0xFF;
561 }
562
563 /**
564 * Returns the green component in the range 0-255 in the default sRGB
565 * space.
566 * @return the green component.
567 * @see #getRGB
568 */
569 public int getGreen() {
570 return (getRGB() >> 8) & 0xFF;
571 }
572
573 /**
574 * Returns the blue component in the range 0-255 in the default sRGB
575 * space.
576 * @return the blue component.
577 * @see #getRGB
578 */
579 public int getBlue() {
580 return (getRGB() >> 0) & 0xFF;
581 }
Для простых манипуляций с цветом вы можете использовать
bufImg.getRaster().getPixel(x,y,outputChannels)
outputChannels - это массив для хранения выбранного пикселя. Его длина зависит от фактического количества каналов вашего изображения. Например, изображение RGB имеет 3 канала; а изображение RGBA имеет 4 канала.
Этот метод имеет 3 типа вывода: int, float и double. Чтобы получить диапазон значений цвета от 0 до 255, ваш фактический параметр outputChannels должен быть массивом int [].