【发布时间】:2016-12-15 22:09:16
【问题描述】:
如果使用以下 Java 代码转换 linear RGB color space 中的源栅格,则在应用过滤器时会引发 java.awt.image.ImagingOpException: Unable to transform src image 错误(最后一行)。
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 版本和操作系统?由于
AffineTransformOp在后台使用本机代码,这可能会有所不同。我目前在 Windows 上使用 Java 8,并且可以重现您的异常。稍后,当我与 MBP 重聚时,将在 OS X 上尝试 Java 7/8。 ;-) -
@haraldK 在 Oracle JDK 8 的 Windows 10 上测试。
-
对于 OS X、Oracle Java 7、8 和 9ea 也是如此。
标签: java image-processing graphics2d