From 0134d343b2f6e4bab83ca82e10d02e80cd5175d7 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 28 Apr 2021 22:12:09 +0800 Subject: [PATCH] [Desktop] IIOException: Unsupported Image Type --- .../src/main/java/forge/ImageLoader.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/ImageLoader.java b/forge-gui-desktop/src/main/java/forge/ImageLoader.java index 870be8f97e3..3f60cee722c 100644 --- a/forge-gui-desktop/src/main/java/forge/ImageLoader.java +++ b/forge-gui-desktop/src/main/java/forge/ImageLoader.java @@ -1,10 +1,15 @@ package forge; +import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; +import java.awt.image.ColorConvertOp; +import java.awt.image.Raster; import java.io.File; -import java.io.IOException; +import java.util.Iterator; import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; import com.google.common.cache.CacheLoader; @@ -29,11 +34,44 @@ final class ImageLoader extends CacheLoader { } try { return ImageIO.read(file); - } - catch (IOException ex) { - BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " "); + } catch (Exception e) { + try { + //Find a suitable ImageReader + Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); + ImageReader reader = null; + while (readers.hasNext()) { + reader = (ImageReader) readers.next(); + if (reader.canReadRaster()) { + break; + } + } + //Stream the image file (the original CMYK image) + ImageInputStream input; + input = ImageIO.createImageInputStream(file); + if (input == null) { + System.err.println("ImageIO.createImageInputStream return null"); + return null; + } + reader.setInput(input); + //Read the image raster + Raster raster = reader.readRaster(0, null); + //Create a new RGB image + BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); + //Fill the new image with the old raster + bi.getRaster().setRect(raster); + BufferedImage colorConverted = colorConvert(bi); + return colorConverted; + } catch (Exception ex) { + BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " "); + } } } return null; } + private static BufferedImage colorConvert(BufferedImage img) { + BufferedImage bufferedImage = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_3BYTE_BGR); + bufferedImage.getGraphics().drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null); + bufferedImage = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB), null).filter(img, bufferedImage); + return bufferedImage; + } }