0

画像ファイルを処理して Image オブジェクトとして返そうとしていますが、public static BufferedImage getImageFromArray(int[] data, int columns, int rows) を呼び出すと、次のコードで ArrayIndexOutOfBoundsException が発生します。

「data」という名前の配列に次のピクセルの色が格納されています。

[255,6,65,78,99,100,25,0,45,66,88,190,88,76,50]

次のようなテキスト ファイルからこれを解析しました。

255, 6, 65, 78, 99
100, 25, 0, 45, 66
88, 190, 88, 76, 50 

現在、 BufferedImageを使用してこのデータから画像を生成しようとしていますが、これでレンガの壁にぶつかっています。上記のテーブル構造に基づいて、列と行がこれに渡されます。

    public static BufferedImage getImageFromArray(int[] data, int columns, int rows) {
    BufferedImage image = new BufferedImage(columns, rows, BufferedImage.TYPE_INT_RGB);
    WritableRaster raster = (WritableRaster) image.getData();
    raster.setPixels(0,0, columns, rows, data);
    image.setData(raster);
    return image;
}

raster.setPixels 呼び出しを実行すると、OOB 例外が発生します。これには、欠落している別の配列または値が必要ですか?

4

1 に答える 1

2

これが私が見つけた解決策です。タイプRGBには3つのバンドが必要です...したがって、機能する配列を作成するには:

private int[] imageArray(String fullFilePath, int rows, int columns) throws Exception{
    int picRows = rows;
    int picColumns = columns;
    data = getPixelData(fullFilePath);

    //3 bands in TYPE_INT_RGB
    int NUM_BANDS = 3;
    int[] arrayImage = new int[picRows * picColumns * NUM_BANDS];

    for (int i = 0; i < picRows; i++)
    {
        for (int j = 0; j < picColumns; j++) {
            for (int band = 0; band < NUM_BANDS; band++)
                for (int k = 0; k < data.length; k++)
                    arrayImage[((i * picRows) + j)*NUM_BANDS + band] = data[k];
        }
    }
    return arrayImage;
}
于 2012-11-01T02:29:53.280 に答える