diff --git a/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReader.java b/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReader.java index 331348b9..6ff96a19 100755 --- a/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReader.java +++ b/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReader.java @@ -160,13 +160,15 @@ public final class BMPImageReader extends ImageReaderBase { } } - // There might be more entries in the color map, but we ignore these for reading - int mapSize = Math.min(colors.length, 1 << header.getBitCount()); + if (colors.length > 0) { + // There might be more entries in the color map, but we ignore these for reading + int mapSize = Math.min(colors.length, 1 << header.getBitCount()); - // Compute bits for > 8 bits (used only for meta data) - int bits = header.getBitCount() <= 8 ? header.getBitCount() : mapSize <= 256 ? 8 : 16; + // Compute bits for > 8 bits (used only for meta data) + int bits = header.getBitCount() <= 8 ? header.getBitCount() : mapSize <= 256 ? 8 : 16; - colorMap = new IndexColorModel(bits, mapSize, colors, 0, false, -1, DataBuffer.TYPE_BYTE); + colorMap = new IndexColorModel(bits, mapSize, colors, 0, false, -1, DataBuffer.TYPE_BYTE); + } } } diff --git a/imageio/imageio-bmp/src/test/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderTest.java b/imageio/imageio-bmp/src/test/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderTest.java index c426d7ee..76a495b3 100755 --- a/imageio/imageio-bmp/src/test/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderTest.java +++ b/imageio/imageio-bmp/src/test/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderTest.java @@ -108,7 +108,8 @@ public class BMPImageReaderTest extends ImageReaderAbstractTest new TestData(getClassLoaderResource("/bmp/blauesglas_24.bmp"), new Dimension(301, 331)), new TestData(getClassLoaderResource("/bmp/blauesglas_32.bmp"), new Dimension(301, 331)), new TestData(getClassLoaderResource("/bmp/blauesglas_32_bitmask888.bmp"), new Dimension(301, 331)), - new TestData(getClassLoaderResource("/bmp/blauesglas_32_bitmask888_reversed.bmp"), new Dimension(301, 331)) + new TestData(getClassLoaderResource("/bmp/blauesglas_32_bitmask888_reversed.bmp"), new Dimension(301, 331)), + new TestData(getClassLoaderResource("/bmp/24bitpalette.bmp"), new Dimension(320, 200)) ); } diff --git a/imageio/imageio-bmp/src/test/resources/bmp/24bitpalette.bmp b/imageio/imageio-bmp/src/test/resources/bmp/24bitpalette.bmp new file mode 100644 index 00000000..aacdea1a Binary files /dev/null and b/imageio/imageio-bmp/src/test/resources/bmp/24bitpalette.bmp differ