Преобразование значений RGB в Integer
Итак, в BufferedImage
вы получаете одно целое число, которое имеет значения RGB, представленные в нем. До сих пор я использовал следующее, чтобы получить из него значения RGB:
// rgbs is an array of integers, every single integer represents the
// RGB values combined in some way
int r = (int) ((Math.pow(256,3) + rgbs[k]) / 65536);
int g = (int) (((Math.pow(256,3) + rgbs[k]) / 256 ) % 256 );
int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256);
И пока это работает.
Мне нужно сделать выяснить, как получить целое число, поэтому я могу использовать BufferedImage.setRGB()
, потому что он принимает тот же тип данных, который он мне дал.
Ответы
Ответ 1
Я думаю, что код выглядит примерно так:
int rgb = red;
rgb = (rgb << 8) + green;
rgb = (rgb << 8) + blue;
Кроме того, я считаю, что вы можете получить отдельные значения, используя:
int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
Ответ 2
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
Если вы знаете, что ваши значения r, g и b никогда не будут > 255 или < 0 вам не нужен & 0x0ff
Дополнительно
int red = (rgb>>16)&0x0ff;
int green=(rgb>>8) &0x0ff;
int blue= (rgb) &0x0ff;
Нет необходимости в мультипликации.
Ответ 3
int rgb = new Color(r, g, b).getRGB();
Ответ 4
если r, g, b = 3 целых значений от 0 до 255 для каждого цвета
затем
rgb = 65536 * r + 256 * g + b;
единственное значение rgb представляет собой составное значение r, g, b, объединенное для всего 16777216 возможных оттенков.
Ответ 5
Чтобы получить индивидуальные значения цвета, вы можете использовать цвет как следующий для пикселя (x, y).
import java.awt.Color;
import java.awt.image.BufferedImage;
Color c = new Color(buffOriginalImage.getRGB(x,y));
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
Приведенное выше даст вам целые значения красного, зеленого и синего в диапазоне от 0 до 255.
Чтобы установить значения из RGB, вы можете сделать это:
Color myColour = new Color(red, green, blue);
int rgb = myColour.getRGB();
//Change the pixel at (x,y) ti rgb value
image.setRGB(x, y, rgb);
Обратите внимание, что вышеизложенное изменяет значение одного пикселя. Поэтому, если вам нужно изменить значение целого изображения, вам может потребоваться перебрать изображение, используя два для циклов.