!7 !include once #1025225 // Shared IntegralImage sclass Screenshot { LongRange timeTaken; // (timestamp start shooting, timestamp end shooting) long processingDone; // timestamp int screenNr; Rect screenRect; // can be null (=whole screen) BufferedImage image; RGBImage rgbImage; // made on demand IntegralImage integralImage; int getWidth() { ret bufferedImageWidth(image); } int getHeight() { ret bufferedImageHeight(image); } synchronized RGBImage rgbImage() { if (rgbImage == null) rgbImage = RGBImage(image); ret rgbImage; } } cmodule StreamOfScreenshots > DynFlexibleRateTimerAndEnabled { transient Screenshot lastScreenshot; start { timer.setRunnableAndStart(r takeScreenshot); } void takeScreenshot enter { if (!enabled) ret with lastScreenshot = null; new Screenshot ss; long timeTaken = now(); ss.image = shootScreen2(); ss.timeTaken = longRange(timeTaken, now()); ss.integralImage = IntegralImage(ss.image); ss.processingDone = now(); printWithDate("Screenshot (" + ss.getWidth() + "*" + ss.getHeight() + ") taken in " + ss.timeTaken.length() + " ms, integral image made in " + (ss.processingDone-ss.timeTaken.end) + " ms"); lastScreenshot = ss; vmBus_send newScreenshotInStream(this, ss); } }