3

次のコードでピクセルを分析しようとしています

    BufferedImage image;
    try {
        image = ImageIO.read(new File(fileName));
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }

    final byte[] pixels = ((DataBufferByte)         
    image.getRaster().getDataBuffer()).getData();final int pixelLength = 4;
        for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) {
            byte alpha = pixels[pixel];
            byte blue = pixels[pixel + 1];
            byte green = pixels[pixel + 2];
            byte red = pixels[pixel + 3];
            //analyze colors
            col++;
            if (col == width) {
                col = 0;
                row++;
            }
        }

Im の最も単純な例では、2 つのピクセルを含む画像があり、1 つは透過性があり、もう 1 つは透過性がありません。

ピクセル 1: 透明度のある赤

HEX: FF0000, Alpha 140, (RGB: 255, 0, 0)

Pixel 2: 透明度のないターコイズ

HEX: 7FFFD8, Aplha  255, (RGB: 127, 255, 216)

上記のピクセル配列には次の値があります[-116, 0, 0, -1, -1, -40, -1, 127] 。各ピクセルには、a、b、g、r の順序で 4 バイトがあります (私はそう思います)。

だから私の質問は、上記の結果から、私が使用した0〜255の値を取得するにはどうすればよいですか:)

4

1 に答える 1

1

私が質問を理解したかどうかはわかりません...しかし、ここに私の理解に基づいた簡単な答えがあります。

2 の補数の説明に入ることなく、配列全体を調べて、次の規則を使用して変換できます。

  • 値がゼロ未満の場合は、256 を加算します
  • 値が 0 以上の場合は、そのままにしておきます

これは役に立ちますか?

于 2013-04-07T10:38:25.217 に答える