if (imageType.getBitsPerPixel() == 32) {
imageData = Rle24Compression.decompress(
imageType.getWidth(), imageType.getHeight(),
imageElement.data);
} else {
throw new ImageReadException("Short image data but not a 32 bit compressed type");
}
} else {
imageData = imageElement.data;
}
final ImageBuilder imageBuilder = new ImageBuilder(imageType.getWidth(),
imageType.getHeight(), true);
switch (imageType.getBitsPerPixel()) {
case 1:
decode1BPPImage(imageType, imageData, imageBuilder);
break;
case 4:
decode4BPPImage(imageType, imageData, imageBuilder);
break;
case 8:
decode8BPPImage(imageType, imageData, imageBuilder);
break;
case 32:
decode32BPPImage(imageType, imageData, imageBuilder);
break;
default:
throw new ImageReadException("Unsupported bit depth " + imageType.getBitsPerPixel());
}
if (maskElement != null) {
if (maskType.getBitsPerPixel() == 1) {
apply1BPPMask(maskElement.data, imageBuilder);
} else if (maskType.getBitsPerPixel() == 8) {
apply8BPPMask(maskElement.data, imageBuilder);
} else {
throw new ImageReadException("Unsupport mask bit depth " + maskType.getBitsPerPixel());
}
}
result.add(imageBuilder.getBufferedImage());
}