1 package charactermanaj.graphics.io;
\r
3 import java.awt.Graphics;
\r
4 import java.awt.image.BufferedImage;
\r
5 import java.io.IOException;
\r
6 import java.io.InputStream;
\r
7 import java.sql.Timestamp;
\r
8 import java.util.logging.Level;
\r
9 import java.util.logging.Logger;
\r
11 import javax.imageio.ImageIO;
\r
18 public class ImageLoaderImpl implements ImageLoader {
\r
23 private static final Logger logger = Logger.getLogger(ImageLoaderImpl.class.getName());
\r
26 * 画像リソースからBufferedImageを返します.<br>
\r
27 * 返される形式はARGBに変換されています.<br>
\r
28 * @param imageResource 画像リソース
\r
29 * @throws IOException 読み取りに失敗した場合、もしくは画像の形式が不明な場合
\r
31 public LoadedImage load(ImageResource imageResource) throws IOException {
\r
32 if (imageResource == null) {
\r
33 throw new IllegalArgumentException();
\r
37 InputStream is = imageResource.openStream();
\r
39 img = ImageIO.read(is);
\r
45 logger.log(Level.WARNING, "unsuppoted image: " + imageResource);
\r
46 throw new IOException("unsupported image");
\r
50 img = convertARGB(img);
\r
52 long lastModified = imageResource.lastModified();
\r
54 if (logger.isLoggable(Level.FINE)) {
\r
55 logger.log(Level.FINE, "load image: " + imageResource + " ;lastModified=" + new Timestamp(lastModified));
\r
57 return new LoadedImage(img, lastModified);
\r
61 * イメージがARGB形式でなければ、ARGB形式に変換して返す.<br>
\r
64 * @return ARGB形式のイメージ
\r
66 protected BufferedImage convertARGB(BufferedImage image) {
\r
67 if (image == null) {
\r
68 throw new IllegalArgumentException();
\r
70 int typ = image.getType();
\r
71 if (typ == BufferedImage.TYPE_INT_ARGB) {
\r
75 BufferedImage img2 = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
\r
76 Graphics g = img2.getGraphics();
\r
78 g.drawImage(image, 0, 0, null);
\r