1 package charactermanaj.graphics;
\r
3 import java.io.IOException;
\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
14 * 画像リソースに対する色変換後の画像イメージを返します.<br>
\r
15 * 一度読み込まれ色変換された画像は、画像ファイルの更新日が同一であり、且つ、色パラメータに変更がなければ
\r
16 * 読み込み済みの画像イメージを返します.<br>
\r
20 public class ColorConvertedImageCachedLoader extends ColorConvertedImageLoaderImpl {
\r
22 private ImageCache<ColorConvertedImageKey> caches = new ImageCache<ColorConvertedImageKey>();
\r
24 public ColorConvertedImageCachedLoader() {
\r
25 this(new ImageCachedLoader());
\r
28 public ColorConvertedImageCachedLoader(ImageLoader imageLoader) {
\r
33 public LoadedImage load(ImageResource file,
\r
34 ColorConvertParameter colorConvParam, ColorModel colorModel)
\r
35 throws IOException {
\r
37 throw new IllegalArgumentException();
\r
40 ColorConvertParameter param;
\r
41 if (colorConvParam == null) {
\r
42 param = new ColorConvertParameter();
\r
44 param = colorConvParam.clone();
\r
46 ColorConvertedImageKey key = new ColorConvertedImageKey(param, file);
\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
59 public void close() {
\r
64 public void unlockImages() {
\r
65 caches.unlockImages();
\r
70 final class ColorConvertedImageKey {
\r
72 private final ColorConvertParameter colorConvParameter;
\r
74 private final ImageResource imageResource;
\r
76 private final long lastModified;
\r
78 private final int hashCode;
\r
80 public ColorConvertedImageKey(ColorConvertParameter colorConvParameter, ImageResource imageResource) {
\r
81 if (colorConvParameter == null || imageResource == null) {
\r
82 throw new IllegalArgumentException();
\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
92 public int hashCode() {
\r
93 return this.hashCode;
\r
97 public boolean equals(Object obj) {
\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