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

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

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

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). Это нене работает, потому что я, очевидно, нене имею всей информации, которая мне нужна (я понятия не имею, чтоs конструктор Hashtable для BufferedImage ()).

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

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

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

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