1

すべてのピクセルを新しい BufferedImage オブジェクトにコピーせずに、既存の BufferedImage オブジェクトの色空間を変更することは可能ですか? そのための方法が見つかりませんでしたが、もしかしたら見つけられなかったのでしょうか?色空間を BufferedImage.TYPE_4BYTE_ABGR から BufferedImage.TYPE_BYTE_BINARY に変更したいと思います。

4

1 に答える 1

2

いいえ。

Java Docから:

TYPE_4BYTE_ABGR
3 バイトと 1 バイトのアルファに格納された青、緑、赤の 8 ビット RGBA カラー コンポーネントでイメージを表します。

TYPE_BYTE_BINARY
不透明なバイトパックの 1、2、または 4 ビット イメージを表します。

ピクセルのサイズが異なります - 4B と 1B。Java 構造体オブジェクトで画像のメタデータを変更できたとしても、ピクセル サイズが異なるため、その場では機能しません(*)。

(*) 新しいバッファは小さいため、理論的には、同じバッファを含む新しいイメージを作成することでメモリを再利用できるはずです (ただし、完全には使用されていません)。バッファ内の配置順にピクセルを反復し、それらの色空間を変更し (ARGB->強度)、ソース ピクセル /4 があった場所にそれらを書き込む
独自のループを記述する必要があります。 使用してみてください。このコンストラクターを使用してバッファーを再利用します。
BufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable properties)

于 2012-05-06T16:04:13.390 に答える