Util.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package ui.view;
  2. import java.awt.Image;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import javax.imageio.ImageIO;
  10. public class Util {
  11. /**
  12. * 30x30 pixel FileNotFound Icon, which can be shown without using I/O operations
  13. */
  14. static private Image defaultImage = createDefaultImage();
  15. /**
  16. * creates the default Image
  17. * @return 30x30 Image, showing a red cross
  18. */
  19. private static Image createDefaultImage() {
  20. BufferedImage def = new BufferedImage(30,30,BufferedImage.TYPE_BYTE_INDEXED);
  21. for(int x = 0; x < 30; x++)
  22. for(int y = 0; y < 30; y++){
  23. if(x == 29 || y == 29)
  24. //Border Bottom/Left -> Light Grey
  25. def.setRGB(x, y, 13158600);
  26. else if(x == 0 || y == 0)
  27. //Border Top/Right -> Dark Grey
  28. def.setRGB(x, y, 6316128);
  29. else if((x == y || x == 31 - y) && 6 < x && x < 25)
  30. //Red Cross in the middle
  31. def.setRGB(x, y, 13107200);
  32. else //all other Pixels are white
  33. def.setRGB(x, y, 16777215);
  34. }
  35. return def;
  36. }
  37. static Image loadImage(Object origin, String url, int w, int h, int scale){
  38. return loadImage(origin,url).getScaledInstance(w, h, scale);
  39. }
  40. static Image loadImage(Object origin, String url, int w, int h){
  41. return loadImage(origin,url,w,h, Image.SCALE_SMOOTH);
  42. }
  43. static Image loadImage(Object origin, String url){
  44. try {
  45. return ImageIO.read(loadStream(origin, url));
  46. } catch (IOException e) {
  47. //System.err.println("Warning: '" + url + "' loading failed!");
  48. e.printStackTrace();
  49. return defaultImage;
  50. }
  51. }
  52. static InputStream loadStream(Object origin, String url){
  53. InputStream o=origin.getClass().getResourceAsStream(url);
  54. if(o!=null)return o;
  55. else{
  56. //System.out.println("Loading of \""+url+"\" as local resource failed.\nWill attempt to load as File.");
  57. boolean rootSymbol=false; //Whether url starts with a / or \
  58. switch(url.charAt(0)){ //So we can make sure to construct res/path correctly.
  59. case '/':case '\\':rootSymbol=true;
  60. }
  61. try {
  62. //I am checking, whether the requested File is an internal resource.
  63. //If it is, res/url has to be used, otherwise url.
  64. //Mixed separators might cause problems. Will fix later.
  65. File f=new File(url);
  66. if(!f.exists()/*||!f.getAbsolutePath().equals(url)*/)url="res"+(rootSymbol?"":"/")+url;
  67. return new FileInputStream(url);
  68. } catch (FileNotFoundException e1) {
  69. e1.printStackTrace();
  70. }
  71. return null;
  72. }
  73. }
  74. }