From c1fac78f3c9193bfcc18f449d81646fc5d0cce1b Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Mon, 16 Oct 2017 14:26:28 +0200 Subject: [PATCH] #383 PSD CMYK > 5 channels fix --- .../twelvemonkeys/imageio/plugins/psd/PSDImageReader.java | 6 +++--- .../twelvemonkeys/imageio/plugins/psd/PSDLayerMaskData.java | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java index b30b28d7..a0f7a6f6 100644 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java @@ -227,19 +227,19 @@ public final class PSDImageReader extends ImageReaderBase { if (header.channels == 4 && header.bits == 8) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, DataBuffer.TYPE_BYTE, false, false); } - else if (header.channels == 5 && header.bits == 8) { + else if (header.channels >= 5 && header.bits == 8) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3, 4}, new int[] {0, 0, 0, 0, 0}, DataBuffer.TYPE_BYTE, true, false); } else if (header.channels == 4 && header.bits == 16) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, DataBuffer.TYPE_USHORT, false, false); } - else if (header.channels == 5 && header.bits == 16) { + else if (header.channels >= 5 && header.bits == 16) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3, 4}, new int[] {0, 0, 0, 0, 0}, DataBuffer.TYPE_USHORT, true, false); } else if (header.channels == 4 && header.bits == 32) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, DataBuffer.TYPE_INT, false, false); } - else if (header.channels == 5 && header.bits == 32) { + else if (header.channels >= 5 && header.bits == 32) { return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3, 4}, new int[] {0, 0, 0, 0, 0}, DataBuffer.TYPE_INT, true, false); } diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerMaskData.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerMaskData.java index 28e27b9c..29985ef0 100755 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerMaskData.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerMaskData.java @@ -114,10 +114,9 @@ final class PSDLayerMaskData { if (dataLeft >= 2) { // Real Flags. Same as Flags information above. flags = pInput.readUnsignedByte(); - dataLeft--; // Real user mask background. 0 or 255. defaultColor = pInput.readUnsignedByte(); - dataLeft--; + dataLeft -= 2; } if (dataLeft >= 16) { // Rectangle enclosing layer mask: Top, left, bottom, right.