如何使用BufferedImage和YCbCr色彩空间?

时间:2010-05-06 09:27:16

标签: java colors bufferedimage

我需要将加载到BufferedImage的位图中的颜色从RGB转换为YCbCr(亮度和2通道色度)并在处理后返回。

我在每个像素的main方法中使用了像rgb2ycbcr()这样的函数,但它不是那么聪明的解决方案。我应该使用ColorSpace和ColorModel类来获得具有正确颜色空间的BufferedImage。这将是更灵活的方法,但我不知道该怎么做。

我迷路了,我需要一些提示。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

我理解你的问题,你想要做以下事情:

加载RGB图像 - > 处理YCbCr图像 - > 再次使用RGB图像

您希望我们为您提供帮助,使此过程尽可能无缝。首先,您希望我们为您提供一种避免->(转换)部分的简单方法。

我看了BufferedImage documentation。看起来似乎没有办法改变曾经创建的ColorSpace的{​​{1}}。

您可以创建一个带有YCbCr色彩空间的新BufferedImage,以便您可以使用预定义的ICC_ColorSpace。然后,您可以通过BufferedImage将旧图像中的数据复制到YCbCr颜色空间,进行图像处理,然后通过ColorSpace.fromRGB再次转换。此方法要求您通过现有方法在处理之前和之后完全转换图像。此外,您必须知道ColorSpace.toRGB如何将图像转换为YCbCr色彩空间。否则你无法知道哪个数组索引对应于同一个像素。

如果您只想在RGB周围创建一个包装器 - ICC_ColorSpace,可让您操作此图像,就像它是YCbCr图像一样,BufferedImage无法实现。

编辑: 要转换BufferedImage使用ColorConvertOp的颜色空间。代码看起来像这样:

BufferedImage

这要求您编写自己的ColorConvertOp cco = new ColorConvertOp(new YCbCrColorSpace(), null); BufferedImage ycbcrImage = cco.filter( oldRGBImage, null ); 课程,或者您可以下载并使用提到的here课程。如果您只想加载JPEG图像,则应使用predefined classes