1

クラスを使用PixelGrabberして、2 値のビットマップのピクセル配列を取得します。しかし、1 つの問題が発生します。2 つの値のイメージ (白または黒) です。ビットマップのこれらのピクセルを int 配列に格納しました。配列のこれらの要素は 1 (白) または 0 (黒) であってはなりませんが、私のコード白は-1、黒は-16777216です。理由を知っている人はいますか?

ここで、単純にforループを使用して -1 と -16777216 を 1 と 0 に変更したいと思います。

4

1 に答える 1

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 リファレンスは、これを適切に行う方法の良い例を示しています。あなたの質問の-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 リファレンスに従ってください。

于 2011-12-22T03:37:38.233 に答える