private void checkChanges(ScreenImage img) { if (Settings.UseImageFinder) { if (_lastImageMat.empty()) { _lastImageMat = Image.createMat(img.getImage()); return; } ImageFinder f = new ImageFinder(_lastImageMat); f.setMinChanges(_minChanges); org.opencv.core.Mat current = Image.createMat(img.getImage()); if (f.hasChanges(current)) { // TODO implement ChangeObserver: processing changes Debug.log(3, "ChangeObserver: processing changes"); } _lastImageMat = current; } else { if (_lastImgMat == null) { _lastImgMat = Image.convertBufferedImageToMat(img.getImage()); return; } FindInput fin = new FindInput(); fin.setSource(_lastImgMat); Mat target = Image.convertBufferedImageToMat(img.getImage()); fin.setTarget(target); fin.setSimilarity(_minChanges); FindResults results = Vision.findChanges(fin); try { callChangeObserver(results); } catch (AWTException e) { Debug.error("EventMgr: checkChanges: ", e.getMessage()); } _lastImgMat = target; } }
@Override public ScreenImage capture(Rectangle rect) { Debug.log(5, "capture: " + rect); BufferedImage ret = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = ret.createGraphics(); for (int i = 0; i < Screen.getNumberScreens(); i++) { Rectangle scrBound = Screen.getBounds(i); if (scrBound.intersects(rect)) { Rectangle inter = scrBound.intersection(rect); Debug.log(5, "scrBound: " + scrBound + ", inter: " + inter); int ix = inter.x, iy = inter.y; inter.x -= scrBound.x; inter.y -= scrBound.y; ScreenImage img = robots[i].captureScreen(inter); g2d.drawImage(img.getImage(), ix - rect.x, iy - rect.y, null); } } g2d.dispose(); return new ScreenImage(rect, ret); }