Преобразовать значение r, g, b в одно пиксельное значение - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь получить доступ к пикселям изображения, используя метод getRGB (). Изображение, которое я использую для этой точки, является 8-битным изображением, то есть каждый пиксель представлен 8-битным, поэтому возможные значения 0-255. изображение, которое я использовал, было png 8-битным изображением, следовательно, типа 'type_byte_indexed'

if (type == BufferedImage.TYPE_BYTE_INDEXED) { 
    System.out.println("type.byte.indexed");
    System.out.print(h+"   "+w);    

    sourceImage.getRGB(0, 0, w, h, rgbs, 0, w); //rgbs is integer array

    for (i = 0; i <10; i++) {
        System.out.print("   "+rgbs[i]);  
     }
    System.out.println("rgbs len: " + rgbs.length); 
}

Вывод цикла for выглядит примерно так:

-12048344   -12174804   -12048344   -12174804   -12174804 .......

Я получаю из него компоненты r, g, b и сохраняю их в массиве:

    Color c=new Color(rgbs[i]);
    r=c.getRed();
    g=c.getGreen();
    b=c.getBlue();

Теперь, как мне снова объединить эти значения, чтобы я мог использовать метод setRGB? Как и для 24-битного изображения мы можем использовать

int rgb=65536*pixel[i]+256*pixel[i+1]+pixel[i+2];

1 Ответ

4 голосов
/ 28 февраля 2012

В документации четко указано, что возвращаемые значения находятся в ARGB-форме:

Возвращает массив целых пикселей в стандартной цветовой модели RGB (TYPE_INT_ARGB) и цветовом пространстве sRGB по умолчанию

Вы можете получить доступ к базовому буферу (который содержит индексированные пиксели) с помощью

byte[] data=((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(0);
...