OSDN Git Service

mavenによるビルドに変更
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / graphics / ColorConvertedImageCachedLoader.java
1 package charactermanaj.graphics;\r
2 \r
3 import java.io.IOException;\r
4 \r
5 import charactermanaj.graphics.colormodel.ColorModel;\r
6 import charactermanaj.graphics.filters.ColorConvertParameter;\r
7 import charactermanaj.graphics.io.ImageCache;\r
8 import charactermanaj.graphics.io.ImageCachedLoader;\r
9 import charactermanaj.graphics.io.ImageLoader;\r
10 import charactermanaj.graphics.io.ImageResource;\r
11 import charactermanaj.graphics.io.LoadedImage;\r
12 \r
13 /**\r
14  * 画像リソースに対する色変換後の画像イメージを返します.<br>\r
15  * 一度読み込まれ色変換された画像は、画像ファイルの更新日が同一であり、且つ、色パラメータに変更がなければ\r
16  * 読み込み済みの画像イメージを返します.<br>\r
17  * @author seraphy\r
18  *\r
19  */\r
20 public class ColorConvertedImageCachedLoader extends ColorConvertedImageLoaderImpl {\r
21 \r
22         private ImageCache<ColorConvertedImageKey> caches = new ImageCache<ColorConvertedImageKey>();\r
23 \r
24         public ColorConvertedImageCachedLoader() {\r
25                 this(new ImageCachedLoader());\r
26         }\r
27 \r
28         public ColorConvertedImageCachedLoader(ImageLoader imageLoader) {\r
29                 super(imageLoader);\r
30         }\r
31 \r
32         @Override\r
33         public LoadedImage load(ImageResource file,\r
34                         ColorConvertParameter colorConvParam, ColorModel colorModel)\r
35                         throws IOException {\r
36                 if (file == null) {\r
37                         throw new IllegalArgumentException();\r
38                 }\r
39 \r
40                 ColorConvertParameter param;\r
41                 if (colorConvParam == null) {\r
42                         param = new ColorConvertParameter();\r
43                 } else {\r
44                         param = colorConvParam.clone();\r
45                 }\r
46                 ColorConvertedImageKey key = new ColorConvertedImageKey(param, file);\r
47 \r
48                 synchronized (caches) {\r
49                         LoadedImage loadedImage = caches.get(key);\r
50                         if (loadedImage == null) {\r
51                                 loadedImage = super.load(file, param, colorModel);\r
52                                 caches.set(key, loadedImage);\r
53                         }\r
54                         return loadedImage;\r
55                 }\r
56         }\r
57 \r
58         @Override\r
59         public void close() {\r
60             caches.clear();\r
61             super.close();\r
62         }\r
63 \r
64         public void unlockImages() {\r
65                 caches.unlockImages();\r
66         }\r
67 \r
68 }\r
69 \r
70 final class ColorConvertedImageKey {\r
71 \r
72         private final ColorConvertParameter colorConvParameter;\r
73 \r
74         private final ImageResource imageResource;\r
75 \r
76         private final long lastModified;\r
77 \r
78         private final int hashCode;\r
79 \r
80         public ColorConvertedImageKey(ColorConvertParameter colorConvParameter, ImageResource imageResource) {\r
81                 if (colorConvParameter == null || imageResource == null) {\r
82                         throw new IllegalArgumentException();\r
83                 }\r
84                 this.colorConvParameter = colorConvParameter;\r
85                 this.imageResource = imageResource;\r
86                 this.lastModified = imageResource.lastModified();\r
87                 this.hashCode = imageResource.hashCode()\r
88                                 ^ colorConvParameter.hashCode() ^ (int) this.lastModified;\r
89         }\r
90 \r
91         @Override\r
92         public int hashCode() {\r
93                 return this.hashCode;\r
94         }\r
95 \r
96         @Override\r
97         public boolean equals(Object obj) {\r
98                 if (obj == this) {\r
99                         return true;\r
100                 }\r
101                 if (obj != null && obj instanceof ColorConvertedImageKey) {\r
102                         ColorConvertedImageKey other = (ColorConvertedImageKey) obj;\r
103                         return lastModified == other.lastModified\r
104                                         && imageResource.equals(other.imageResource)\r
105                                         && colorConvParameter.equals(other.colorConvParameter);\r
106                 }\r
107                 return false;\r
108         }\r
109 }\r