2011-12-22 3 views
1

Я использую класс PixelGrabber, чтобы получить массив пикселов двузначного битового массива. Но возникает одна проблема: двухзначное изображение (белое или черное), я сохранил эти пиксели растрового изображения в массиве int, эти элементы массива не должны быть 1 (белый) или 0 (черный), но в моем код Я считаю, что белый -1, а черный - -16777216. Кто-нибудь знает, почему?двухзначное растровое изображение, белый - 1, черный - 0 в java?

Теперь я хотел бы просто использовать for цикл, чтобы изменить -1 и -16777216 до 1 и 0.

ответ

3

Я предполагаю, что вы используете PixelGrabber(ImageProducer ip, int x, int y, int w, int h, int[] pix, int off, int scansize) конструктор, в этом случае, что вы» Возвращение - это целочисленный массив значения RGB для каждого пикселя.

Потому что он возвращается как значение RGB - вам нужно отделить значения, чтобы дать вам истинное значение RGB. Например, RGB (255,255,255) - белый, а RGB (0,0,0) - черный. API Reference дает хороший пример того, как это сделать должным образом. С -16777216 номером в вашем вопросе, я провел простой тест, который показывает, что это на самом деле черный:

public class Main { 

    public static void main(String[] args) { 
     int pixel = -16777216; 

     int alpha = (pixel >> 24) & 0xff; 
     int red = (pixel >> 16) & 0xff; 
     int green = (pixel >> 8) & 0xff; 
     int blue = (pixel  ) & 0xff; 

     System.out.println(alpha); 
     System.out.println(red); 
     System.out.println(green); 
     System.out.println(blue); 


    } 
} 

Печатает: 255, 0, 0, 0

Следуйте ссылку API связанный выше, например, код того, как правильно обрабатывать пиксельные данные.

+0

привет, отлично, я знаю это сейчас. Спасибо. Я действительно использовал constuctor PixelGrabber (ImageProducer ip, int x, int y, int w, int h, int [] pix, int off, int scansize) .and I знаю, где я был не прав. Я думал, что массив int хранит индекс палитры RGB в растровом формате, хорошо, это неправильно, int array хранит данные RGB напрямую, даже если изображение является двузначным изображением, если я получаю пиксели через класс PixelGrabber .oh, поэтому, если я использую Class Image, чтобы получить изображение, нет mater, в каком формате он будет, это будет «объект изображения java», нет mater, удерживающего нижний формат изображения - файловую, информационную, палитру RGB, данные изображения? – cooba