Как преобразовать byte [] в BufferedImage в Java?

Я отправляю эту ветку, потому что у меня есть некоторые трудности с изображениями на Java. Я хотел бы иметь возможность преобразовать изображение в массив byte [], а затем выполнить обратную операцию, чтобы я мог изменить RGB каждого пикселя, а затем создать новое изображение. Я хочу использовать это решение, потому что setRGB () и getRGB () из BufferedImage могут быть слишком медленными для больших изображений (поправьте меня, если я ошибаюсь).

Я прочитал несколько сообщений здесь, чтобы получить массив byte [] (такой как здесь) так, чтобы каждый пиксель представлялся 3 или 4 ячейками массива, содержащего значения красного, зеленого и синего (с дополнительным альфа-значением, когда имеется 4 ячейки), что довольно полезно и удобно для меня. Вот код, который я использую для получения этого массива (хранится в созданном мною классе PixelArray):

public PixelArray(BufferedImage image)
{
    width = image.getWidth();
    height = image.getHeight();
    DataBuffer toArray = image.getRaster().getDataBuffer();
    array = ((DataBufferByte) toArray).getData();
    hasAlphaChannel = image.getAlphaRaster() != null;
}

Моя большая проблема заключается в том, что я не нашел никакого эффективного способа преобразования этого массива byte [] в новое изображение, если бы я хотел преобразовать изображение (например, удалить сине-зеленые значения и оставить только красное). Я попробовал эти решения:

1) Создание объекта DataBuffer, затем создание SampleModel для окончательного создания WritableRaster, а затем BufferedImage (с дополнительными объектами ColorModel и Hashtable). Это не сработало, потому что у меня, по-видимому, нет всей необходимой информации (я понятия не имею, что такое конструктор Hashtable для BufferedImage ()).

2) Использование ByteArrayInputStream. Это не сработало, потому что ожидаемый с ByteArrayInputStream массив byte [] не имеет ничего общего с моим: он представляет каждый байт файла, а не каждый компонент каждого пикселя (с 3-4 байтами на каждый пиксель) ...

Может ли кто-нибудь помочь мне?

Ответы на вопрос(5)

Ваш ответ на вопрос