[Desktop] IIOException: Unsupported Image Type

This commit is contained in:
Anthony Calosa
2021-04-28 22:12:09 +08:00
parent 202ddd8157
commit 0134d343b2

View File

@@ -1,10 +1,15 @@
package forge; package forge;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.Raster;
import java.io.File; import java.io.File;
import java.io.IOException; import java.util.Iterator;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
@@ -29,11 +34,44 @@ final class ImageLoader extends CacheLoader<String, BufferedImage> {
} }
try { try {
return ImageIO.read(file); return ImageIO.read(file);
} } catch (Exception e) {
catch (IOException ex) { try {
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " "); //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; 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;
}
} }