linear RGB color spaceのソースラスタを次のJavaコードを使用して変換すると、フィルタが適用されたとき(最終行)にjava.awt.image.ImagingOpException: Unable to transform src image
エラーがスローされます。リニアRGB空間でのアフィン変換
ColorModel linearRGBColorModel = new DirectColorModel(
ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB), 32,
0xff0000, 0xff00, 0xff, 0xff000000, true, DataBuffer.TYPE_INT);
WritableRaster srcRaster = linearRGBColorModel.createCompatibleWritableRaster(100, 100);
WritableRaster dstRaster = linearRGBColorModel.createCompatibleWritableRaster(200, 200);
BufferedImage srcImage = new BufferedImage(linearRGBColorModel, srcRaster, false, null);
BufferedImage dstImage = new BufferedImage(linearRGBColorModel, dstRaster, false, null);
AffineTransform aff = new AffineTransform();
aff.scale(2.0, 2.0);
AffineTransformOp op = new AffineTransformOp(aff, null);
op.filter(srcImage, dstImage);
代わりにColorSpace.CS_sRGB
を使用すると、正常に動作します。
実際には、グレーのぼかし線で画像を操作します。そのようなソースの変換はJDKの機能が欠けているのでしょうか、それとも全く意味がありませんか?
とにかく、ピクセルをsRGBに再計算し、その後変換を行う予定です。
使用しているJavaのバージョンとOSは何ですか? AffineTransformOpはフードの下でネイティブコードを使用するので、これは違いをもたらすかもしれません。私は現在Windows上でJava 8を使用しており、例外を再現することができます。後でOS XでJava 7/8を試してみると、私はMBPと再会します。 ;-) – haraldK
@haraldK Oracle JDK 8のWindows 10でテスト済み。 –
OS X、Oracle Java 7,8および9eaと同じです。 – haraldK