Подтвердить что ты не робот

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

4b9b3361

Ответ 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);

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