Я использую com.sun.media.imageioimpl.plugins.tiff.TIFFPackBitsCompressor, чтобы попытаться закодировать массив байтов tiff, который у меня есть, с помощью PackBits. Я не знаком с этим классом и не нашел много примеров того, как его использовать. Но, следуя javadoc, я получаю NPE каждый раз, когда пытаюсь кодировать свои данные. Насколько я вижу, ни одно из моих значений не равно нулю. На данный момент я пробовал эти тесты с несколькими значениями, но ниже моя последняя итерация:
TIFFPackBitsCompressor pack = new TIFFPackBitsCompressor();
//bImageFromConvert is a 16-bit BufferedImage with all desired data.
short[] bufferHolder = ((DataBufferUShort) bImageFromConvert.getRaster().getDataBuffer()).getData();
//Since bImageFromConvert is 16-bits, the short array isn't the right length.
//The below conversion handles tihs issue
byte[] byteBuffer = convertShortToByte(bufferHolder);
//I'm not entirely sure what this int[] in the parameters should be.
//For now, it is a test int[] array containing all 1s
int[] testint = new int[byteBuffer.length];
Arrays.fill(testint, 1);
//0 offset. dimWidth = 1760, dimHeight = 2140. Not sure what that last param is supposed to be in layman's terms.
//npe thrown at this line.
int testOut = pack.encode(byteBuffer, 0, dimWidth, dimHeight, testint, 1);
Есть ли у кого-нибудь понимание того, что происходит? Кроме того, если возможно, кто-нибудь знает лучший способ кодировать мои файлы TIFF с помощью PackBits в программе Java?
Дайте мне знать, если есть что-нибудь, чтобы прояснить мой вопрос.
Спасибо!
TIFFImageWriter
), когда вы указываете PackBits в качестве типа сжатия в файлеImageWriteParam
. Вы также можете передать экземпляр компрессора в параметре, если вы сначала приведете его кTIFFImageWriteParam
, но это более полезно для пользовательских сжатий, не известных плагину. - person Harald K   schedule 30.03.2017