!7 module RecordGIFSpike > DynSingleFunctionWithPrintLog { double sleepBefore = 5, recordForSeconds = 10, frameRate = 10; void doIt ctex { // TODO: make cancellable runInterruptibly(voidfunc(Runnable interrupt) { temp AutoCloseable action = dm_currentAction("Will record GIF from screen", interrupt); print("Sleeping for " + sleepBefore + " before recording GIF..."); sleepSeconds(sleepBefore); call(action, 'setText, "Recording GIF"); Rect r = rect(screenWidth()/2-100, 0, 200, 100); GifSequenceWriter writer = null; long start = sysNow(); int delay = 200; File f = programFile("test.gif"); temp ImageOutputStream out = fileImageOutputStream(f); int delay = iround(1000/frameRate); int i = 0; while (elapsedMS(start) < toMS(recordForSeconds)) { BufferedImage img = shootScreenArea_possiblyBroken(r); if (writer == null) writer = GifSequenceWriter(out, img.getType(), delay, true); writer.writeToSequence(img); print("Wrote image " + (i+1)); sleepUntilSys(start+delay*(i+1)); } close(writer); print("Done writing " + fileInfo(f)); }); } }