1 package charactermanaj.graphics;
3 import java.io.IOException;
5 import charactermanaj.graphics.colormodel.ColorModel;
6 import charactermanaj.graphics.filters.ColorConvertParameter;
7 import charactermanaj.graphics.io.ImageCache;
8 import charactermanaj.graphics.io.ImageCachedLoader;
9 import charactermanaj.graphics.io.ImageLoader;
10 import charactermanaj.graphics.io.ImageResource;
11 import charactermanaj.graphics.io.LoadedImage;
14 * 画像リソースに対する色変換後の画像イメージを返します.<br>
15 * 一度読み込まれ色変換された画像は、画像ファイルの更新日が同一であり、且つ、色パラメータに変更がなければ
16 * 読み込み済みの画像イメージを返します.<br>
20 public class ColorConvertedImageCachedLoader extends ColorConvertedImageLoaderImpl {
22 private ImageCache<ColorConvertedImageKey> caches = new ImageCache<ColorConvertedImageKey>();
24 public ColorConvertedImageCachedLoader() {
25 this(new ImageCachedLoader());
28 public ColorConvertedImageCachedLoader(ImageLoader imageLoader) {
33 public LoadedImage load(ImageResource file,
34 ColorConvertParameter colorConvParam, ColorModel colorModel)
37 throw new IllegalArgumentException();
40 ColorConvertParameter param;
41 if (colorConvParam == null) {
42 param = new ColorConvertParameter();
44 param = colorConvParam.clone();
46 ColorConvertedImageKey key = new ColorConvertedImageKey(param, file);
48 synchronized (caches) {
49 LoadedImage loadedImage = caches.get(key);
50 if (loadedImage == null) {
51 loadedImage = super.load(file, param, colorModel);
52 caches.set(key, loadedImage);
64 public void unlockImages() {
65 caches.unlockImages();
70 final class ColorConvertedImageKey {
72 private final ColorConvertParameter colorConvParameter;
74 private final ImageResource imageResource;
76 private final long lastModified;
78 private final int hashCode;
80 public ColorConvertedImageKey(ColorConvertParameter colorConvParameter, ImageResource imageResource) {
81 if (colorConvParameter == null || imageResource == null) {
82 throw new IllegalArgumentException();
84 this.colorConvParameter = colorConvParameter;
85 this.imageResource = imageResource;
86 this.lastModified = imageResource.lastModified();
87 this.hashCode = imageResource.hashCode()
88 ^ colorConvParameter.hashCode() ^ (int) this.lastModified;
92 public int hashCode() {
97 public boolean equals(Object obj) {
101 if (obj != null && obj instanceof ColorConvertedImageKey) {
102 ColorConvertedImageKey other = (ColorConvertedImageKey) obj;
103 return lastModified == other.lastModified
104 && imageResource.equals(other.imageResource)
105 && colorConvParameter.equals(other.colorConvParameter);