Javaで画像を処理するのが難しいので、このスレッドを投稿します。画像をbyte[]配列に変換してから逆の操作を実行できるようにしたいので、各ピクセルのRGBを変更して、新しい画像を作成できます。BufferedImageのsetRGB()とgetRGB()は、巨大な画像には遅すぎる可能性があるため、このソリューションを使用したいと思います(間違っている場合は修正してください)。
ここでいくつかの投稿を読んでbyte[]配列(ここなど)を取得し、各ピクセルが赤、緑、青の値を含む配列の3つまたは4つのセルで表されるようにします(追加のアルファ値がある場合は4セルです)、これは私にとって非常に便利で使いやすいです。この配列を取得するために使用するコードは次のとおりです(作成したPixelArrayクラスに格納されています):
public PixelArray(BufferedImage image)
{
width = image.getWidth();
height = image.getHeight();
DataBuffer toArray = image.getRaster().getDataBuffer();
array = ((DataBufferByte) toArray).getData();
hasAlphaChannel = image.getAlphaRaster() != null;
}
私の大きな問題は、画像を変換したい場合(たとえば、青/緑の値を削除して赤の値のみを保持する場合)、このbyte[]配列を新しい画像に変換する効率的な方法が見つからないことです。私はそれらの解決策を試しました:
1)DataBufferオブジェクトを作成し、次にSampleModelを作成して、最後にWritableRasterを作成し、次にBufferedImageを作成します(追加のColorModelおよびHashtableオブジェクトを使用)。必要な情報がすべて揃っていないため、機能しませんでした(BufferedImage()コンストラクターのHashtableが何であるかわかりません)。
2)ByteArrayInputStreamを使用します。ByteArrayInputStreamで期待されるbyte[]配列は私のものとは関係がないため、これは機能しませんでした。ファイルの各バイトを表し、各ピクセルの各コンポーネントではありません(各ピクセルに3〜4バイト)...
誰かが私を助けてもらえますか?