sclass PNGFile extends Concept { S pngPath; // program ID + "/" + file name Rect r; // optional, rectangle that was shot *() {} // for persistance *(S *pngPath) {} ifclass RGBImage *(RGBImage img) { this(img.getBufferedImage()); } endif File pngFile() { if (pngPath == null) { pngPath = _programID() + "/" + id + ".png"; change(); } ret prepareFile(new File(javaxDataDir(), pngPath)); } ifndef Android PNGFile(BufferedImage img) { savePNG(pngFile(), img); } BufferedImage loadImage() { ret loadImage2(pngFile()); } BufferedImage getImage() { ret loadImage(); } BufferedImage getImageSafe() { pcall { ret loadImage(); } null; } S md5() { pcall { ret md5OfBufferedImage(getImage()); } ret "-"; } endifndef bool hasImage() { ret pngFile().exists(); } }