Преобразовать значения RGB в целое число - PullRequest
45 голосов
/ 26 января 2011

Таким образом, в 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(), потому что он использует тот же тип данных, что и мне.

Ответы [ 5 ]

84 голосов
/ 26 января 2011

Я думаю, что код выглядит примерно так:

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;
26 голосов
/ 26 января 2011
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);

Если вы знаете, что ваши значения r, g и b никогда не превышают> 255 или <0, вам не нужны & 0x0ff </p>

Дополнительно

int red = (rgb>>16)&0x0ff;
int green=(rgb>>8) &0x0ff;
int blue= (rgb)    &0x0ff;

Нет необходимостидля умножения.

20 голосов
/ 11 мая 2011
int rgb = new Color(r, g, b).getRGB();
19 голосов
/ 26 января 2011

если r, g, b = 3 целых значения от 0 до 255 для каждого цвета

тогда

rgb = 65536 * r + 256 * g + b;

единственное значение rgb является составным значением r, g, b, объединенным в общей сложности 16777216 возможных оттенков.

3 голосов
/ 28 августа 2017

Чтобы получить отдельные значения цвета, вы можете использовать цвет, как показано ниже для пикселя (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);

Обратите внимание, что вышеизложенное меняет значение одного пикселя. Так что, если вам нужно изменить значение всего изображения, вам может понадобиться перебрать изображение, используя два цикла for.

...