Widzę, że wiele osób miało podobny problem, jednak nie mam jeszcze próbować znaleźć dokładnie tego, czego szukam.Java: BufferedImage do tablicy bajtów iz powrotem
Tak, mam metodę, która odczytuje obraz wejściowy i konwertuje go do tablicy bajtów:
File imgPath = new File(ImageName);
BufferedImage bufferedImage = ImageIO.read(imgPath);
WritableRaster raster = bufferedImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
Co ja teraz chcę zrobić, to przekonwertować go z powrotem do BufferedImage (mam aplikację, dla której Potrzebuję tej funkcjonalności). Zauważ, że "test" to tablica bajtów.
BufferedImage img = ImageIO.read(new ByteArrayInputStream(test));
File outputfile = new File("src/image.jpg");
ImageIO.write(img,"jpg",outputfile);
Jednak ta zwraca następującą wyjątek:
Exception in thread "main" java.lang.IllegalArgumentException: im == null!
To dlatego IMG BufferedImage jest zerowy. Myślę, że ma to coś wspólnego z faktem, że w mojej pierwotnej konwersji z BufferedImage na tablicę bajtową, informacje są zmieniane/tracone, aby dane nie mogły być już rozpoznane jako jpg.
Czy ktoś ma jakieś sugestie, jak rozwiązać ten problem? Byłbym bardzo doceniony.
Flush i blisko zrobi nic –
Czy istnieje szczególny powód, aby używać jpg tutaj? – hguser
A jeśli close() nie zrobił nic, to wywoływałoby samą flush() i konieczne byłoby wywołanie go * przed * doByteArray(), a nie po nim. – EJP