mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
[Desktop] IIOException: Unsupported Image Type
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user