Image2TiffArrayByte = pusty ArrayByte

0

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

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?

0

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

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);

1 użytkowników online, w tym zalogowanych: 0, gości: 1