私があなたの質問を理解したので、あなたは次のことをしたいと思います:
RGB画像をロード-> YCbCr画像を処理-> RGB画像を再度使用
そして、あなたは私たちがあなたを助けて、このプロセスを可能な限りシームレスにすることを望んでいます。->
何よりもまず、 (変換する)部分を回避する簡単な方法を提供してほしいと思います。
BufferedImage
さて、私はドキュメントを調べました。ColorSpace
一度作成したのを変更する方法がないようですBufferedImage
。
BufferedImage
事前定義されたを使用できるように、YCbCr色空間を使用して新しいを作成できますICC_ColorSpace
。次に、古い画像からColorSpace.fromRGB
YCbCr色空間にデータをコピーし、画像処理を行ってから、を介して再度変換しColorSpace.toRGB
ます。この方法では、既存の方法で処理する前後に画像を完全に変換する必要があります。ICC_ColorSpace
さらに、画像をYCbCr色空間に変換する方法を知っておく必要があります。そうしないと、どの配列インデックスが同じピクセルに対応しているかを知ることができません。
BufferedImage
YCbCr画像であるかのように、この画像を操作できるRGB-のラッパーを作成したいだけの場合は、。では不可能BufferedImage
です。
編集:使用の色空間を変換しBufferedImage
ますColorConvertOp
。コードは次のようになります。
ColorConvertOp cco = new ColorConvertOp(new YCbCrColorSpace(), null);
BufferedImage ycbcrImage = cco.filter( oldRGBImage, null );
これには、独自のクラスを作成するか、ここColorSpace
に記載されているクラスをダウンロードして使用する必要があります。JPEG画像をロードするだけの場合は、事前定義されたクラスを使用する必要があります。