diff --git a/src/main/java/org/mycore/imagetiler/MCRImage.java b/src/main/java/org/mycore/imagetiler/MCRImage.java index 587c7c7..4275122 100644 --- a/src/main/java/org/mycore/imagetiler/MCRImage.java +++ b/src/main/java/org/mycore/imagetiler/MCRImage.java @@ -316,7 +316,7 @@ protected static int getBufferedImageType(final ImageReader reader) throws IOExc private static BufferedImage convertIfNeeded(BufferedImage tile) { ColorModel colorModel = tile.getColorModel(); - boolean convertToGray = isFakeGrayScale(colorModel); + boolean convertToGray = isFakeGrayScale(colorModel) || colorModel.getNumColorComponents() == 1; int pixelSize = colorModel.getPixelSize(); int targetType = tile.getType(); if (convertToGray) { @@ -411,6 +411,10 @@ public static int getImageType(final ImageReader imageReader) throws IOException private static int getImageType(ColorModel colorModel) { int pixelSize = colorModel.getPixelSize(); if (pixelSize > 8) { + if (colorModel.getNumColorComponents() == 1) { + LOGGER.debug("Quite sure we should use TYPE_BYTE_GRAY for a pixel size of {}", pixelSize); + return BufferedImage.TYPE_BYTE_GRAY; + } LOGGER.debug("Quite sure we should use TYPE_INT_RGB for a pixel size of {}", pixelSize); return BufferedImage.TYPE_INT_RGB; } else if (pixelSize == 8) { @@ -720,7 +724,7 @@ private void writeImageIoTile(final ZipOutputStream zout, final BufferedImage ti } try (ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(zout)) { imgWriter.setOutput(imageOutputStream); - //tile = addWatermark(scaleBufferedImage(tile)); + //tile = addWatermark(scaleBufferedImage(tile)); final IIOImage iioImage = new IIOImage(tile, null, null); imgWriter.write(null, iioImage, imageWriteParam); } finally { diff --git a/src/test/java/org/mycore/imagetiler/MCRImageTest.java b/src/test/java/org/mycore/imagetiler/MCRImageTest.java index b80a8e1..1986a5c 100644 --- a/src/test/java/org/mycore/imagetiler/MCRImageTest.java +++ b/src/test/java/org/mycore/imagetiler/MCRImageTest.java @@ -89,6 +89,7 @@ public void setUp() { pics.put("1 pixel mega tile rest", "src/test/resources/BE_0681_0397.jpg"); pics.put("extra small", "src/test/resources/5x5.jpg"); pics.put("tiff 48 bit", "src/test/resources/tiff48.tif"); + pics.put("tiff 16 bit", "src/test/resources/tiff16.tif"); tileDir = Paths.get("target/tileDir"); System.setProperty("java.awt.headless", "true"); diff --git a/src/test/resources/tiff16.tif b/src/test/resources/tiff16.tif new file mode 100644 index 0000000..f45cb5d Binary files /dev/null and b/src/test/resources/tiff16.tif differ