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