gpt4 book ai didi

java - 线性 RGB 空间中的仿射变换

转载 作者:行者123 更新时间:2023-11-30 02:42:57 28 4
gpt4 key购买 nike

如果源栅格位于 linear RGB color space使用以下 Java 代码进行转换,应用过滤器时(最后一行)会引发 java.awt.image.ImagingOpException: Unable totransform 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,然后再进行转换。

最佳答案

并不是真正解释为什么您的代码不起作用*,但至少您可以轻松解决该问题。而不是过滤 BufferedImage:

op.filter(srcImage, dstImage);

...您可以过滤Raster:

op.filter(srcRaster, dstRaster);

这将产生相同的结果(与在 sRGB 颜色空间中的两个图像上使用 filter(BufferedImage, BufferedImage) 一样)。

只要色彩空间和光栅布局相同,色彩空间的类型并不重要。

<小时/>

*) 我坚信这是一个 Java (JRE) 错误,应该向 Oracle/OpenJDK 报告。

关于java - 线性 RGB 空间中的仿射变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119873/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com