0

I need to translate colors in bitmap loaded to BufferedImage from RGB to YCbCr (luminance and 2 channels chrominance) and back after process.

I made it with functions used like rgb2ycbcr() in main method for each pixel, but it isn't so smart solution. I should use ColorSpace and ColorModel classes to get BufferedImage with correct color space. It would be more flexible method, but I don't know how to do that.

I'm lost and I need some tips. Can somebody help me?

4

1 回答 1

2

据我了解您的问题,您想要执行以下操作:

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

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

好吧,我查看了BufferedImage文档。似乎不存在改变ColorSpace曾经创建的 的方法BufferedImage

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

如果您只想围绕 RGB- 创建一个包装器BufferedImage,让您可以操纵此图像,就好像它是 YCbCr 图像一样,使用BufferedImage.

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

ColorConvertOp cco = new ColorConvertOp(new YCbCrColorSpace(), null);
BufferedImage ycbcrImage = cco.filter( oldRGBImage, null );

这需要您编写自己的ColorSpace类,或者您可以下载并使用此处提到的类。如果您只想加载 JPEG 图像,您应该使用预定义的类

于 2010-05-06T10:38:29.327 回答