!7 sclass LiveWebCam > DynSCP { transient WebcamPanel panel; int fpsLimit = -1; void enhanceFrame(Container f) { internalFramePopupMenuItem(f/JInternalFrame, "Set FPS...", r { final JTextField tf = jtextfield(str(fpsLimit)); showFormTitled("Set FPS Limit", "FPS Limit (-1 for no limit, 0 for no updates):", tf, rThread { setFPSLimit(parseInt(gtt(tf))) }); }); } JComponent visualize2() { ret jcenteredbutton("Start", rThread startIt); } void startIt { selectWebCam(voidfunc(Webcam cam) { cam.setViewSize(WebcamResolution.VGA.getSize()); final WebcamPanel panel = new WebcamPanel(cam, false); LiveWebCam.this.panel = panel; bindToComponent(panel, null, r { panel.stop() }); updateFPSLimitInPanel(); setComponent(panel); dm_packFrame(); }); } BufferedImage getImage() { ret imageFromWebcamPanel(panel); } void setFPSLimit(int limit) { setField(fpsLimit := limit); updateFPSLimitInPanel(); } void updateFPSLimitInPanel { setModuleName((fpsLimit >= 0 ? fpsLimit + " FPS - " : "") + "Live WebCam"); if (panel == null) ret; panel.stop(); if (fpsLimit == 0) ret; // TODO - want to keep last image there anyway panel.setFPSDisplayed(fpsLimit < 0); if (fpsLimit > 0) panel.setFPSLimit(fpsLimit); panel.setFPSLimited(fpsLimit > 0); panel.start(); } }