Как я понял ваш вопрос, вы хотите сделать следующее:
Загрузка изображения RGB -> обработка изображения YCbCr -> Повторное использование изображения RGB
И вы хотите, чтобы мы помогли вам сделать этот процесс максимально бесшовным. Прежде всего, вы хотите, чтобы мы предоставили вам простой способ избежать ->
(конвертирования) деталей.
Ну, я заглянул в BufferedImage
документацию . Кажется, будто не существует способа изменить ColorSpace
некогда созданного BufferedImage
.
Вы можете создать новый BufferedImage
с цветовым пространством YCbCr, для которого вы можете использовать предопределенный ICC_ColorSpace
. Затем вы копируете данные из старого изображения, возможно, через ColorSpace.fromRGB
в цветовое пространство YCbCr, выполняете обработку изображения и затем снова конвертируете через ColorSpace.toRGB
. Этот метод требует от вас полностью преобразовать изображение до и после обработки с помощью существующих методов. Кроме того, вы должны знать, как ICC_ColorSpace
преобразует ваше изображение в цветовое пространство YCbCr. В противном случае вы не можете знать, какие индексы массива соответствуют одному и тому же пикселю.
Если вы просто хотите создать оболочку вокруг RGB- BufferedImage
, которая позволяет вам манипулировать этим изображением, как если бы это было изображение YCbCr, это невозможно с BufferedImage
.
EDIT:
Для преобразования цветового пространства в BufferedImage
используйте ColorConvertOp
. Код будет выглядеть примерно так:
ColorConvertOp cco = new ColorConvertOp(new YCbCrColorSpace(), null);
BufferedImage ycbcrImage = cco.filter( oldRGBImage, null );
Для этого вам нужно либо написать свой собственный класс ColorSpace
, либо вы можете скачать и использовать упомянутые классы здесь . Если вы просто хотите загрузить изображение JPEG, вам следует использовать предопределенные классы .