3

画像バイト配列を読み取っていますが、画像は 16 ビット (r: 5、g: 6、b: 5) であり、BufferedImage に読み取りたいと考えています。

私は次のようなことを試しました:


int[] nBits = {5, 6, 5};
int[] bOffs = {0, 0, 0};
ColorModel colorModel = new ComponentColorModel(
        cs, nBits, false, false,
        Transparency.OPAQUE,
        DataBuffer.TYPE_BYTE);
WritableRaster raster = Raster.createInterleavedRaster(
        new DataBufferByte(screenBuffer,screenBuffer.length),
        foundWidth, foundHight,
        foundWidth * 2, 2,bOffs, null);

BufferedImage imgReconstructed = new BufferedImage(
        colorModel,raster,false,null);


私の問題は bandOffsets にあります。16 ビット イメージにどのように設定すればよいですか。それは正しい方法ですか?みんなありがとう

4

1 に答える 1

1

このcreateInterleavedRaster方法は、各データ要素が 1 つのバンド (つまり、赤、緑、または青) の色情報を含むサンプル モデルで画像を作成するために使用されます。各 16 ビット データ要素に 3 つのカラー バンドがすべて含まれるイメージが必要な場合は、createPackedRaster代わりにいずれかの方法を使用します。

これらのモデルでサポートされている唯一の 16 ビット データ型は unsigned short であるため、DataBufferUShortインスタンスを渡す必要があります。

現時点では、動作するコード サンプルをまとめるためのコンパイラにアクセスすることはできませんが、SinglePixelPackedSampleModel API ドキュメントは、scanlineStride とバンド マスクのパラメーターについて少し説明するのに役立ちます。必要に応じて、この回答を後で詳細に更新します。

于 2011-04-18T17:26:33.180 に答える