Как преобразовать 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 байтами на каждый пиксель) ...
Может ли кто-нибудь помочь мне?