if (iccpNode instanceof IIOMetadataNode) {
IIOMetadataNode imn = (IIOMetadataNode) iccpNode;
byte[] prof = (byte[]) imn.getUserObject();
String comp = imn.getAttribute("compressionMethod");
if ("deflate".equalsIgnoreCase(comp)) {
Inflater decompresser = new Inflater();
decompresser.setInput(prof);
byte[] result = new byte[100];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
boolean failed = false;
while (!decompresser.finished() && !failed) {
try {
int resultLength = decompresser.inflate(result);
bos.write(result, 0, resultLength);
if (resultLength == 0) {
// this means more data or an external dictionary is
// needed. Both of which are not available, so we
// fail.
log.debug("Failed to deflate ICC Profile");
failed = true;
}
} catch (DataFormatException e) {
log.debug("Failed to deflate ICC Profile", e);
failed = true;
}
}
decompresser.end();
try {
iccProf = ColorProfileUtil.getICC_Profile(bos.toByteArray());
} catch (IllegalArgumentException e) {
log.debug("Failed to interpret embedded ICC Profile", e);
iccProf = null;