Thomas Elsner created IMAGING-204: ------------------------------------- Summary: reading monochrome TIFF leads to unhandled exception Key: IMAGING-204 URL: https://issues.apache.org/jira/browse/IMAGING-204 Project: Commons Imaging Issue Type: Bug Components: Format: TIFF Affects Versions: 1.0 Reporter: Thomas Elsner
reading monochrome TIFF doesn't work. wrong function getSamplesAsBytes(bis, samples); Here with having 1 Bit per Pixel it returns value samples[0] = 255 instead of 1. Then photometricInterpreter.interpretPixel(imageBuilder, samples, x, y); has a problem public void interpretPixel(final ImageBuilder imageBuilder, final int[] samples, final int x, final int y) throws ImageReadException, IOException { imageBuilder.setRGB(x, y, indexColorMap[samples[0]]); } as the indexColorMaps only has two entries (black and white), but not 256 entries The same problem will occur as the colour does not have 8 Bit. The fix seems simple: In routine void getSamplesAsBytes(final BitInputStream bis, final int[] result) throws IOException { for (int i = 0; i < bitsPerSample.length; i++) { final int bits = bitsPerSample[i]; int sample = bis.readBits(bits); if (bits < 8) { final int sign = sample & 1; sample = sample << (8 - bits); // scale to byte. if (sign > 0) { sample = sample | ((1 << (8 - bits)) - 1); // extend to byte } }... if 'sign>0' don't fill up to 8 bits, but to 'bits' amount of '1'. I am not sure about other side effects, so I post this suggestion. -- This message was sent by Atlassian JIRA (v6.4.14#64029)