|
@@ -7,6 +7,7 @@ import java.io.FileInputStream;
|
|
|
import java.io.FileNotFoundException;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
+import java.util.HashMap;
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
|
@@ -14,34 +15,51 @@ public class Util {
|
|
|
|
|
|
/**
|
|
|
* 30x30 pixel FileNotFound Icon, which can be shown without using I/O operations
|
|
|
+ * a red cross.
|
|
|
*/
|
|
|
- static private Image defaultImage = createDefaultImage();
|
|
|
-
|
|
|
- /**
|
|
|
- * creates the default Image
|
|
|
- * @return 30x30 Image, showing a red cross
|
|
|
+ static private BufferedImage defaultImage;
|
|
|
+ /*
|
|
|
+ * Save nothing: Reload every image whenever requested.
|
|
|
+ * Save external: Only save images that were found as external file.
|
|
|
+ * Save raw: Save all non-scaled images.
|
|
|
+ * Save everything: self-explanatory.
|
|
|
*/
|
|
|
- private static Image createDefaultImage() {
|
|
|
- BufferedImage def = new BufferedImage(30,30,BufferedImage.TYPE_BYTE_INDEXED);
|
|
|
+ private static final byte SAVE_NOTHING=0, /*SAVE_EXTERNAL=1,*/ SAVE_RAW=2, SAVE_EVERYTHING=4,
|
|
|
+ SAVE_MODE=SAVE_EVERYTHING;
|
|
|
+ private static HashMap<String, Image> imgStorage;
|
|
|
+
|
|
|
+ static{
|
|
|
+ /*
|
|
|
+ * creates the default Image
|
|
|
+ */
|
|
|
+ defaultImage = new BufferedImage(30,30,BufferedImage.TYPE_BYTE_INDEXED);
|
|
|
for(int x = 0; x < 30; x++)
|
|
|
for(int y = 0; y < 30; y++){
|
|
|
if(x == 29 || y == 29)
|
|
|
//Border Bottom/Left -> Light Grey
|
|
|
- def.setRGB(x, y, 13158600);
|
|
|
+ (defaultImage).setRGB(x, y, 13158600);
|
|
|
else if(x == 0 || y == 0)
|
|
|
//Border Top/Right -> Dark Grey
|
|
|
- def.setRGB(x, y, 6316128);
|
|
|
+ (defaultImage).setRGB(x, y, 6316128);
|
|
|
else if((x == y || x == 31 - y) && 6 < x && x < 25)
|
|
|
//Red Cross in the middle
|
|
|
- def.setRGB(x, y, 13107200);
|
|
|
+ (defaultImage).setRGB(x, y, 13107200);
|
|
|
else //all other Pixels are white
|
|
|
- def.setRGB(x, y, 16777215);
|
|
|
-
|
|
|
+ (defaultImage).setRGB(x, y, 16777215);
|
|
|
}
|
|
|
- return def;
|
|
|
+ if(SAVE_MODE!=SAVE_NOTHING)imgStorage=new HashMap<String, Image>();
|
|
|
}
|
|
|
|
|
|
static Image loadImage(Object origin, String url, int w, int h, int scale){
|
|
|
+ if(SAVE_MODE==SAVE_EVERYTHING){
|
|
|
+ String key=url+"?"+w+"?"+h+"?"+scale;
|
|
|
+ if(imgStorage.containsKey(key))return(imgStorage.get(key));
|
|
|
+ else{
|
|
|
+ Image img=loadImage(origin,url).getScaledInstance(w, h, scale);
|
|
|
+ imgStorage.put(key, img);
|
|
|
+ return img;
|
|
|
+ }
|
|
|
+ }
|
|
|
return loadImage(origin,url).getScaledInstance(w, h, scale);
|
|
|
}
|
|
|
|
|
@@ -50,6 +68,21 @@ public class Util {
|
|
|
}
|
|
|
|
|
|
static Image loadImage(Object origin, String url){
|
|
|
+ if(SAVE_MODE!=SAVE_NOTHING){
|
|
|
+ if(imgStorage.containsKey(url))return imgStorage.get(url);
|
|
|
+ else{
|
|
|
+ Image img;
|
|
|
+ try {
|
|
|
+ img= ImageIO.read(loadStream(origin, url));
|
|
|
+ } catch (IOException e) {
|
|
|
+ System.err.println("Warning: '" + url + "' loading failed!");
|
|
|
+ e.printStackTrace();
|
|
|
+ return defaultImage;
|
|
|
+ }
|
|
|
+ imgStorage.put(url, img);
|
|
|
+ return img;
|
|
|
+ }
|
|
|
+ }
|
|
|
try {
|
|
|
return ImageIO.read(loadStream(origin, url));
|
|
|
} catch (IOException e) {
|
|
@@ -60,6 +93,7 @@ public class Util {
|
|
|
}
|
|
|
|
|
|
static InputStream loadStream(Object origin, String url){
|
|
|
+ System.out.println("Resource loaded!");
|
|
|
InputStream o=origin.getClass().getResourceAsStream(url);
|
|
|
if(o!=null)return o;
|
|
|
else{
|