Image2TiffArrayByte = pusty ArrayByte

Image2TiffArrayByte = pusty ArrayByte
M7
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
Potrzebuje przekonwertować Image do skompresowanego TIFFa, który w tej postaci ma wylądować w tablicy bajtów.

Kopiuj
BufferedImage image = ImageIO.read(new File("d:\\plik.jpg"));
TIFFImageWriteParam wp = new TIFFImageWriteParam(Locale.ENGLISH);
wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
wp.setCompressionType("LZW");
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIF").next();             
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios;
ios = ImageIO.createImageOutputStream(baos);
//ios = ImageIO.createImageOutputStream(new FileOutputStream("d:\\plik2.tiff"));
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null),wp);
byte[] ba;
ba=baos.toByteArray();
System.out.println(ba.length);

Niestety wynik działania powyższego kodu daje zerową długość tablicy bajtów "ba". Jeżeli odkomentuję linię, która zapisuje do pliku to plik się utworzy właściwie.
Ma ktoś pomysł jak to rozwiązać, bez zapisywania w systemie plików? A może coś źle robię z ByteArrayOutputStream?

M7
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
rozwiązanie jest następujące:

Kopiuj
BufferedImage image = ImageIO.read(new File("d:\\plik.jpg"));
TIFFImageWriteParam wp = new TIFFImageWriteParam(Locale.ENGLISH);
wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
wp.setCompressionType("LZW");
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIF").next();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(baos);
writer.setOutput(mcios);
writer.write(null, new IIOImage(image, null, null), wp);
mcios.flush();
byte[] ba;
ba = baos.toByteArray();
System.out.println(ba.length);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.