0

動作しない非常に単純なコードがいくつかあります。

int[] manualPixels = new int[width * height * 3];
for (int index = 0; index < manualPixels.length; index++) {
    if (index % 3 == 2) {
        manualPixels[index] = 255;
    }
}
BufferedImage pixelImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    
pixelImage.setRGB(0, 0, width, height, manualPixels, 0, width);

ImageIO.write(pixelImage, "jpeg", tempFile);

これは、私が判断できる限り、ループ内のifステートメントで0、1、または2が使用されているかどうかに応じて、赤、緑、または青の画像を出力する必要があります。for問題は、その代わりに、どのピクセルを設定しても、常に青と黒のストライプが表示されることです。例えば:

ここに画像の説明を入力してください

私がここで間違っているいくつかの基本的なことがあるに違いないと確信しています、私はそれが何であるかを見ていないだけです。何か案は?

4

1 に答える 1

3

INT_RGBの最下位 3 オクテットにすべてのチャネルをパックしますint。これは、3 ピクセルごとに青に設定し、残りは黒のままにすることを意味します。(ただし、これはイメージと一致しません。生成後にコードを変更しましたか?)

代わりにこれを試してください:

int[] manualPixels = new int[width * height];
for (int index = 0; index < manualPixels.length; index++) {
    switch (index % 3) {
        case 0: manualPixels[index] = 0xFF0000; break; // red
        case 1: manualPixels[index] = 0x00FF00; break; // green
        case 2: manualPixels[index] = 0x0000FF; break; // blue
    }
}
于 2012-05-30T07:15:06.630 に答える