def showImgWithLegend(width=None, height=None): """ This function shows the image and legend from current IDV window while in GUI mode. Optional arguments are width and height in pixels, they currently default to 600 and 400""" from java.util import Base64 ##only in java8 from javax.imageio import ImageIO from java.io import ByteArrayOutputStream from ucar.unidata.ui.ImageUtils import resize, toBufferedImage import java import java.awt.Robot as Robot import java.awt.Rectangle as Rectangle import java.awt.Toolkit as Toolkit from ucar.unidata.util import Misc VM = idv.getViewManager() VMC = VM.getContents() VMCC = VMC.getComponent( 1 ) # the view and legend ; 0 is left most part of view window with controls for perspective views siz = VMCC.getSize() loc = VMCC.getLocationOnScreen() gc = VMCC.getGraphicsConfiguration() loc.x -= gc.getBounds().x loc.y -= gc.getBounds().y robotx = Robot(gc.getDevice()) VM.toFront() Misc.sleep(250) img = robotx.createScreenCapture( Rectangle(loc.x, loc.y, siz.width, siz.height)) if width != None and height != None: img = toBufferedImage(resize(img, width, height)) bos = ByteArrayOutputStream() ImageIO.write(img, "png", Base64.getEncoder().wrap(bos)) data = bos.toString("UTF-8") return {"display": "image", "data": data}
def showImgWithFullWindow(width=None, height=None): """ This function shows the image from current IDV window while in GUI mode. optional arguments are width and height in pixels, they currently default to 600 and 400""" from java.util import Base64 ##only in java8 from javax.imageio import ImageIO from java.io import ByteArrayOutputStream from ucar.unidata.ui.ImageUtils import resize, toBufferedImage import java import java.awt.Robot as Robot import java.awt.Rectangle as Rectangle import java.awt.Toolkit as Toolkit from ucar.unidata.util import Misc VM = idv.getViewManager() myframe = VM.getDisplayWindow().getComponent() robotx = Robot(myframe.getGraphicsConfiguration().getDevice()) VM.toFront() #robotx.delay(250) Misc.sleep(350) pause() img = robotx.createScreenCapture( Rectangle(myframe.getX(), myframe.getY(), myframe.getWidth(), myframe.getHeight())) if width != None and height != None: img = toBufferedImage(resize(img, width, height)) bos = ByteArrayOutputStream() ImageIO.write(img, "png", Base64.getEncoder().wrap(bos)) data = bos.toString("UTF-8") return {"display": "image", "data": data}
def GetDotBoard(self, clock): #logging.debug("GetDotBoard") if exists("lost_message.png", 0.001): return -1 dotLoc = [] dotColor = [] dotLoc.append(self.clock.getCenter().offset(221, 475)) stepX = 96 stepY = 97 for i in range(1, 7): dotLoc.append(Location(dotLoc[i - 1].x + stepX, dotLoc[i - 1].y)) for i in range(0, 7): dotLoc.append(Location(dotLoc[i].x, dotLoc[i].y + stepY)) r = Robot() question_mark_count = 0 for i in range(0, 14): c = r.getPixelColor(dotLoc[i].x, dotLoc[i].y) # get the color object color = self._check_color(c) # 檢查該點的顏色 if color == "?": color = self._check_around(r, dotLoc[i].x, dotLoc[i].y) if color == "?": question_mark_count += 1 if question_mark_count > 3: #魂盤有太多沒辨識出來, 則跳過這次魂盤 return 0 dotColor.append(color) #crgb = ( c.getRed(), c.getGreen(), c.getBlue() ) # decode to RGB values #print dotColor[i] self.SetBoard(dotLoc, dotColor) return 1
def pixelColor(posX,posY): pixel = Robot().getPixelColor(posX,posY) r = pixel.getRed() g = pixel.getGreen() b = pixel.getBlue() color = '{:02x}{:02x}{:02x}'.format(r,g,b) return color
def find_monsters(self): # returns array of map_index position self.monsters = [] for cell in self.map_cells: point = self.map_pos_to_screen_point(cell) point_color = Robot().getPixelColor(point.getX(), point.getY()) if 30 < point_color.getRed() < 65: self.monsters.append(cell) point.highlight() return self.monsters
def run(title): gd = ij.gui.GenericDialog('Record Desktop') gd.addNumericField('Max. frames:', 50, 0) gd.addNumericField('Milisecond interval:', 300, 0) gd.addSlider('Start in (seconds):', 0, 20, 5) gd.showDialog() if gd.wasCanceled(): return n_frames = int(gd.getNextNumber()) interval = gd.getNextNumber() / 1000.0 # in seconds delay = int(gd.getNextNumber()) snaps = [] try: while delay > 0: ij.IJ.showStatus('Starting in ' + str(delay) + 's.') time.sleep(1) # one second delay -= 1 ij.IJ.showStatus('') ij.IJ.showStatus("Starting...") out.println("Starting...") # start capturing robot = Robot() box = Rectangle(ij.IJ.getScreenSize()) start = currentTimeMillis() / 1000.0 # in seconds last = start intervals = [] real_interval = 0 # Initial shot snaps.append(robot.createScreenCapture(box)) while len(snaps) < n_frames and last - start < n_frames * interval: now = currentTimeMillis() / 1000.0 # in seconds real_interval = now - last if real_interval >= interval: last = now snaps.append(robot.createScreenCapture(box)) intervals.append(real_interval) else: time.sleep(interval / 5) # time in seconds # Create stack out.println("End") awt = snaps[0] stack = ij.ImageStack(awt.getWidth(None), awt.getHeight(None), None) t = 0 for snap, real_interval in zip(snaps, intervals): stack.addSlice(str(ij.IJ.d2s(t, 3)), ij.ImagePlus('', snap).getProcessor()) snap.flush() t += real_interval ImagePlus("Desktop recording", stack).show() except Exception, e: print "Some error ocurred:" print e for snap in snaps: snap.flush()
def find_characters(self): # returns array of map_index position self.characters = [] for cell in self.map_cells: point = self.map_pos_to_screen_point(cell) point_color = Robot().getPixelColor(point.getX(), point.getY()) if 100 < point_color.getRed() < 260: if point_color.getBlue() < 80: self.characters.append(cell) point.highlight() return self.characters
def get_start_battle_positions(self): # incompleto start_position = [] for cell in self.map_cells: point = self.map_pos_to_screen_point(cell) point_color = Robot().getPixelColor(point.getX(), point.getY()) color = [point_color.getRed(), point_color.getBlue()] if 220 < color[0]: start_position.append(cell) my_team = "red" continue if 220 < color[1]: start_position.append(cell) return start_position
def checkColor(self, SCREEN): print" checkColor !!" i = Robot().createScreenCapture(Rectangle(SCREEN.getX(), SCREEN.getY(), self.patternW, self.patternH)) bColor = Color(200, 4, 4) pColor = Color(45, 48, 177) print"self.patternW:"+self.patternW+ " self.patternH:"+self.patternH for x in range(0, self.patternW): for y in range(0, self.patternH): print" color" print i.getRGB(x, y) if bColor == Color(i.getRGB(x, y)): return "B" if pColor == Color(i.getRGB(x, y)): return "P"
def save_screenshot_to(self, path): """Saves a screenshot to the specified file. The directory holding the file must exist or an exception is raised. """ path = os.path.abspath(path.replace('/', os.sep)) if not os.path.exists(os.path.dirname(path)): raise RuntimeError( "Directory '%s' where to save the screenshot does " "not exist" % os.path.dirname(path)) screensize = Toolkit.getDefaultToolkit().getScreenSize() rectangle = Rectangle(0, 0, screensize.width, screensize.height) image = Robot().createScreenCapture(rectangle) ImageIO.write(image, "jpg", File(path)) print "Screenshot saved to '%s'" % path return path
def get_map_info(self): count_index = 0 count_rows = 0 while count_rows < 40: count_columns = 0 while count_columns < 14: coord_x = self.get_column_position(count_columns, count_rows) coord_y = self.get_row_position(count_rows) + 10 pixel_color = Robot().getPixelColor( coord_x, coord_y) # get the color object color = [ pixel_color.getRed(), pixel_color.getGreen(), pixel_color.getBlue() ] #array [R,G,B] #print color[0],color[1],color[2] # 0 -> cells # 1 -> holes # 2 -> walls if 100 < color[0]: self.map.append(0) self.map_cells.append(count_index) elif color[0] <= 30: if color[2] > 50: self.map.append(0) self.map_cells.append(count_index) else: self.map.append(1) self.map_holes.append(count_index) elif 65 < color[0] <= 100: self.map.append(2) self.map_walls.append(count_index) elif 30 < color[0] <= 65: self.map.append(0) #monsters self.map_cells.append(count_index) count_index += 1 count_columns += 1 count_rows += 1
sc.setAutoWaitTimeout(timeout) sc.setROI(region) try: target = sc.find(image) click(target.getCenter()) return True except FindFailed: Debug.user("[clickImageInRegion] can't find %s" % message) return False #def excuteAutomation(automation): # automation.execute() from java.awt import Robot ControlLib_robot = Robot() def getColor(loc): return ControlLib_robot.getPixelColor(loc.x, loc.y) import time # log text to file with timestamp def logToFile(strMessage, strFileName=os.path.join(getBundlePath(), "log.txt")): localtime = time.localtime(time.time()) timestring = time.strftime('%Y/%m/%d %H:%M:%S') inp = open(strFileName, "a")
from java.awt import Robot robot = Robot() DirectionStr = sys.argv[1] # up=1 or down=-1 direction = -1 if DirectionStr == 'up': direction = 1 Kol = int(sys.argv[2]) keyDown(Key.CTRL) sleep(0.1) for x in range(0, Kol): robot.mouseWheel(direction) sleep(0.1) keyUp()
def healerColor(posX,posY,id): pixel = Robot().getPixelColor(posX,posY) if id == "life": return pixel.getRed() elif id == "mana": return pixel.getBlue() else: return 0
def _java_screenshot(self, path): size = Toolkit.getDefaultToolkit().getScreenSize() rectangle = Rectangle(0, 0, size.width, size.height) image = Robot().createScreenCapture(rectangle) ImageIO.write(image, 'jpg', File(path))
def run(title): gd = GenericDialog('Record Window') gd.addMessage( "Maximum number of frames to record.\nZero means infinite, interrupt with ESC key." ) gd.addNumericField('Max. frames:', 50, 0) gd.addNumericField('Milisecond interval:', 300, 0) gd.addSlider('Start in (seconds):', 0, 20, 5) frames = [] titles = [] for f in Frame.getFrames(): if f.isEnabled() and f.isVisible(): frames.append(f) titles.append(f.getTitle()) gd.addChoice('Window:', titles, titles[0]) gd.addCheckbox("To file", False) gd.showDialog() if gd.wasCanceled(): return n_frames = int(gd.getNextNumber()) interval = gd.getNextNumber() / 1000.0 # in seconds frame = frames[gd.getNextChoiceIndex()] delay = int(gd.getNextNumber()) tofile = gd.getNextBoolean() dir = None if tofile: dc = DirectoryChooser("Directory to store image frames") dir = dc.getDirectory() if dir is None: return # dialog canceled snaps = [] borders = None executors = Executors.newFixedThreadPool(1) try: while delay > 0: IJ.showStatus('Starting in ' + str(delay) + 's.') time.sleep(1) # one second delay -= 1 IJ.showStatus('Capturing frame borders...') bounds = frame.getBounds() robot = Robot() frame.toFront() time.sleep(0.5) # half a second borders = robot.createScreenCapture(bounds) IJ.showStatus("Recording " + frame.getTitle()) # Set box to the inside borders of the frame insets = frame.getInsets() box = bounds.clone() box.x = insets.left box.y = insets.top box.width -= insets.left + insets.right box.height -= insets.top + insets.bottom start = System.currentTimeMillis() / 1000.0 # in seconds last = start intervals = [] real_interval = 0 i = 1 fus = None if tofile: fus = [] # 0 n_frames means continuous acquisition while 0 == n_frames or (len(snaps) < n_frames and last - start < n_frames * interval): now = System.currentTimeMillis() / 1000.0 # in seconds real_interval = now - last if real_interval >= interval: last = now img = snapshot(frame, box) if tofile: fus.append( executors.submit( Saver(i, dir, bounds, borders, img, insets))) # will flush img i += 1 else: snaps.append(img) intervals.append(real_interval) else: time.sleep(interval / 5) # interrupt capturing: if IJ.escapePressed(): IJ.showStatus("Recording user-interrupted") break # debug: #print "insets:", insets #print "bounds:", bounds #print "box:", box #print "snap dimensions:", snaps[0].getWidth(), snaps[0].getHeight() # Create stack stack = None if tofile: for fu in snaps: fu.get() # wait on all stack = VirtualStack(bounds.width, bounds.height, None, dir) files = File(dir).list(TifFilter()) Arrays.sort(files) for f in files: stack.addSlice(f) else: stack = ImageStack(bounds.width, bounds.height, None) t = 0 for snap, real_interval in zip(snaps, intervals): bi = BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_INT_RGB) g = bi.createGraphics() g.drawImage(borders, 0, 0, None) g.drawImage(snap, insets.left, insets.top, None) stack.addSlice(str(IJ.d2s(t, 3)), ImagePlus('', bi).getProcessor()) t += real_interval snap.flush() bi.flush() borders.flush() ImagePlus(frame.getTitle() + " recording", stack).show() IJ.showStatus('Done recording ' + frame.getTitle()) except Exception, e: print "Some error ocurred:" print e.printStackTrace() IJ.showStatus('') if borders is not None: borders.flush() for snap in snaps: snap.flush()
#(at your option) any later version. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. # #You should have received a copy of the GNU General Public License #along with this program. If not, see <http://www.gnu.org/licenses/>. from java.awt import Robot, Toolkit from java.awt.event import InputEvent from java.awt.MouseInfo import getPointerInfo from .base import PyMouseMeta r = Robot() class PyMouse(PyMouseMeta): def press(self, x, y, button = 1): button_list = [None, InputEvent.BUTTON1_MASK, InputEvent.BUTTON3_MASK, InputEvent.BUTTON2_MASK] self.move(x, y) r.mousePress(button_list[button]) def release(self, x, y, button = 1): button_list = [None, InputEvent.BUTTON1_MASK, InputEvent.BUTTON3_MASK, InputEvent.BUTTON2_MASK] self.move(x, y) r.mouseRelease(button_list[button]) def move(self, x, y): r.mouseMove(x, y)
def getListColor(SCREEN): #pass a Region and get pixel (r,g,b) i = Robot().createScreenCapture( Rectangle(SCREEN.getX(), SCREEN.getY(), SCREEN.getW(), SCREEN.getH())) c = Color(i.getRGB(0, 0)) return c.getRed(), c.getGreen(), c.getBlue()