OSDN Git Service

dmg作成バージョンの取得方法の修正
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / graphics / io / ImageLoaderImpl.java
1 package charactermanaj.graphics.io;\r
2 \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
10 \r
11 import javax.imageio.ImageIO;\r
12 \r
13 \r
14 /**\r
15  * 画像を読み取ります.<br>\r
16  * @author seraphy\r
17  */\r
18 public class ImageLoaderImpl implements ImageLoader {\r
19 \r
20         /**\r
21          * ロガー\r
22          */\r
23         private static final Logger logger = Logger.getLogger(ImageLoaderImpl.class.getName());\r
24         \r
25         /**\r
26          * 画像リソースからBufferedImageを返します.<br>\r
27          * 返される形式はARGBに変換されています.<br>\r
28          * @param imageResource 画像リソース\r
29          * @throws IOException 読み取りに失敗した場合、もしくは画像の形式が不明な場合\r
30          */\r
31         public LoadedImage load(ImageResource imageResource) throws IOException {\r
32                 if (imageResource == null) {\r
33                         throw new IllegalArgumentException();\r
34                 }\r
35 \r
36                 BufferedImage img;\r
37                 InputStream is = imageResource.openStream();\r
38                 try {\r
39                         img = ImageIO.read(is);\r
40 \r
41                 } finally {\r
42                         is.close();\r
43                 }\r
44                 if (img == null) {\r
45                         logger.log(Level.WARNING, "unsuppoted image: " + imageResource);\r
46                         throw new IOException("unsupported image");\r
47                 }\r
48                 \r
49                 // ARGB形式でなければ変換する.\r
50                 img = convertARGB(img);\r
51                 \r
52                 long lastModified = imageResource.lastModified();\r
53 \r
54                 if (logger.isLoggable(Level.FINE)) {\r
55                         logger.log(Level.FINE, "load image: " + imageResource + " ;lastModified=" + new Timestamp(lastModified));\r
56                 }\r
57                 return new LoadedImage(img, lastModified);\r
58         }\r
59         \r
60         /**\r
61          * イメージがARGB形式でなければ、ARGB形式に変換して返す.<br>\r
62          * そうでなければ、そのまま返す. \r
63          * @param image イメージ\r
64          * @return ARGB形式のイメージ\r
65          */\r
66         protected BufferedImage convertARGB(BufferedImage image) {\r
67                 if (image == null) {\r
68                         throw new IllegalArgumentException();\r
69                 }\r
70                 int typ = image.getType();\r
71                 if (typ == BufferedImage.TYPE_INT_ARGB) {\r
72                         return image;\r
73                 }\r
74                 // ARGB形式でなければ変換する.\r
75                 BufferedImage img2 = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);\r
76                 Graphics g = img2.getGraphics();\r
77                 try {\r
78                         g.drawImage(image, 0, 0, null);\r
79                 } finally {\r
80                         g.dispose();\r
81                 }\r
82                 return img2;\r
83         }\r
84 }\r