screen_driver 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96999ab1bddeacdc835526a1b094a1159dc12265
4
+ data.tar.gz: bee98f1f03e166b3a235924b40f0e87072dfede8
5
+ SHA512:
6
+ metadata.gz: c5a25a0caf2af5e84a7a42133139cd4dcf3758d8ce71eeadd520966b3e6731136901a9cbc2a798d75ae89208249db155985c1e03c9a27f032ca23b1aecd78f9f
7
+ data.tar.gz: 099576cc6b7f7e79c836ad258d85148d2d170b22b1712b9c53291f159cb16099062a3d871f7f01fe81f7ede4489eec21a1b085f71befd7030551e65193731f09
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ *.swp
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ jruby-1.7.9
data/README.md ADDED
@@ -0,0 +1,16 @@
1
+ Screen Driver Gem
2
+ =============
3
+
4
+ To use :
5
+ ```ruby
6
+ require 'java'
7
+ require 'screen_driver'
8
+
9
+ @driver = ScreenDriver::Driver.new
10
+
11
+ if (@driver.find("yourimage.png"))
12
+ puts "good"
13
+ else
14
+ puts "bad"
15
+ end
16
+ ```
Binary file
@@ -0,0 +1,74 @@
1
+ import java.awt.image.BufferedImage;
2
+ import javax.imageio.ImageIO;
3
+ import java.io.ByteArrayOutputStream;
4
+
5
+ public class ImageSearch {
6
+
7
+ private int x;
8
+ private int y;
9
+
10
+ public byte[] byte_array(BufferedImage image) {
11
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
12
+ try {
13
+ ImageIO.write(image, "png", os);
14
+ return os.toByteArray();
15
+ } catch (Exception e) {
16
+ return null;
17
+ }
18
+ }
19
+
20
+ public void searchImage(BufferedImage img1, BufferedImage img2) {
21
+ int w = img2.getWidth();
22
+ int h = img2.getHeight();
23
+ this.x=-1;
24
+ this.y=-1;
25
+
26
+ int firstpix = img2.getRGB(0, 0);
27
+ int midpix = img2.getRGB(w/2, h/2);
28
+ byte[] b2 = this.byte_array(img2);
29
+ byte[] b1;
30
+ BufferedImage find;
31
+ for (int x=0; x<img1.getWidth()-w; x++){
32
+ for (int y=0; y<img1.getHeight()-h; y++){
33
+ if (firstpix == img1.getRGB(x, y) && midpix == img1.getRGB(x+w/2, y+h/2)){
34
+ find = img1.getSubimage(x, y, w, h);
35
+ b1 = this.byte_array(find);
36
+
37
+ if (java.util.Arrays.equals(b1, b2)){
38
+ this.x = x+w/2;
39
+ this.y = y+h/2;
40
+ break;
41
+ }
42
+
43
+ }
44
+ }
45
+ }
46
+
47
+ }
48
+
49
+ public int getX(){
50
+ return x;
51
+ }
52
+
53
+ public int getY(){
54
+ return y;
55
+ }
56
+
57
+ public int[][] rgbArray(BufferedImage image) {
58
+ int w = image.getWidth();
59
+ int h = image.getHeight();
60
+ int rgb[][] = new int[w][h];
61
+ for (int x=0; x<w; x++) {
62
+ for (int y=0; y<h; y++) {
63
+ rgb[x][y] = image.getRGB(x, y);
64
+ }
65
+ }
66
+
67
+ return rgb;
68
+ }
69
+
70
+ public ImageSearch() {
71
+
72
+ }
73
+
74
+ }
data/java-src/build.sh ADDED
@@ -0,0 +1,3 @@
1
+ javac *.java
2
+ jar cvf ImageSearch.jar *.class
3
+ mv *.jar ../target/
@@ -0,0 +1,93 @@
1
+ module ScreenDriver
2
+ class Driver
3
+
4
+ def initialize
5
+ @screen = Screen.new
6
+ @mouse = Mouse.new
7
+ end
8
+
9
+ def screen_to_file(filename)
10
+ ss = @screen.screenshot
11
+ @screen.put_image(ss, filename)
12
+ end
13
+
14
+ def sub_screen_to_file(filename, x, y, w, h)
15
+ ss = @screen.screenshot
16
+ sub = ss.getSubimage(x, y, w, h)
17
+ @screen.put_image(sub, filename)
18
+
19
+ end
20
+
21
+ def find(image)
22
+ ss = @screen.screenshot
23
+ srch = @screen.get_image(image)
24
+ is = ImageSearch.new
25
+ is.searchImage(ss, srch)
26
+ puts "#{is.getX} #{is.getY}"
27
+ if (is.getX < 0 || is.getY < 0)
28
+ return false
29
+ else
30
+ return true
31
+ end
32
+ end
33
+
34
+ def move_mouse(image)
35
+ screenshot = @screen.screenshot
36
+ srch = @screen.get_image(image)
37
+ is = ImageSearch.new
38
+ is.searchImage(screenshot, srch)
39
+ if (is.getX >= 0 && is.getY >= 0)
40
+ @mouse.mouse_move(is.getX, is.getY)
41
+ end
42
+
43
+ end
44
+
45
+
46
+ def left_click(image)
47
+ screenshot = @screen.screenshot
48
+ srch = @screen.get_image(image)
49
+ is = ImageSearch.new
50
+ is.searchImage(screenshot, srch)
51
+ if (is.getX >= 0 && is.getY >= 0)
52
+ @mouse.left_click(is.getX, is.getY)
53
+ end
54
+
55
+ end
56
+
57
+ def doubleclick(image)
58
+ screenshot = @screen.screenshot
59
+ srch = @screen.get_image(image)
60
+ is = ImageSearch.new
61
+ is.searchImage(screenshot, srch)
62
+ if (is.getX >= 0 && is.getY >= 0)
63
+ @mouse.double_click(is.getX, is.getY)
64
+ end
65
+ end
66
+
67
+ #Gets an array of RGB values. Slower than the convert function.
68
+
69
+ def get_arr(image)
70
+ img = @screen.get_image(image)
71
+ @screen.img_to_rgb_array(img)
72
+ end
73
+
74
+ # Converts an image into an array of RGB values
75
+
76
+ def convert(image)
77
+ ib = @screen.get_image(image)
78
+ is = ImageSearch.new
79
+ is.rgbArray(ib)
80
+ end
81
+
82
+ # Search function will allow you to search for a images within image files.
83
+
84
+ def search(img1, img2)
85
+ i1 = @screen.get_image(img1)
86
+ i2 = @screen.get_image(img2)
87
+ is = ImageSearch.new
88
+ #is.rgbArray(ib)
89
+ is.searchImage(i1, i2)
90
+ return is.getX, is.getY
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,34 @@
1
+
2
+ module ScreenDriver
3
+ class Mouse
4
+
5
+ def mouse_move(x, y)
6
+ mouse = Robot.new
7
+ mouse.mouseMove(x, y)
8
+ end
9
+
10
+ def left_click(x, y)
11
+ mouse = Robot.new
12
+ mouse.mouseMove(x,y)
13
+ mouse.mousePress(InputEvent::BUTTON1_MASK);
14
+ mouse.mouseRelease(InputEvent::BUTTON1_MASK);
15
+ #Java 7+ Only
16
+ #mouse.mousePress(InputEvent::BUTTON1_DOWN_MASK);
17
+ #mouse.mouseRelease(InputEvent::BUTTON1_DOWN_MASK);
18
+ end
19
+
20
+ def double_click(x, y)
21
+ mouse = Robot.new
22
+ mouse.mouseMove(x, y)
23
+ mouse.mousePress(InputEvent::BUTTON1_MASK);
24
+ mouse.mouseRelease(InputEvent::BUTTON1_MASK);
25
+ mouse.mousePress(InputEvent::BUTTON1_MASK);
26
+ mouse.mouseRelease(InputEvent::BUTTON1_MASK);
27
+ #Java 7+ Only
28
+ #mouse.mousePress(InputEvent::BUTTON1_DOWN_MASK);
29
+ #mouse.mouseRelease(InputEvent::BUTTON1_DOWN_MASK);
30
+ #mouse.mousePress(InputEvent::BUTTON1_DOWN_MASK);
31
+ #mouse.mouseRelease(InputEvent::BUTTON1_DOWN_MASK);
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,79 @@
1
+ module ScreenDriver
2
+ class Screen
3
+
4
+ def initialize
5
+
6
+ end
7
+
8
+ def screenshot
9
+ toolkit = Toolkit::getDefaultToolkit()
10
+ screen_size = toolkit.getScreenSize()
11
+ rect = Rectangle.new(screen_size)
12
+ robot = Robot.new
13
+ image = robot.createScreenCapture(rect)
14
+ conv = BufferedImage.new(image.getWidth, image.getHeight, BufferedImage::TYPE_USHORT_565_RGB)
15
+ conv.getGraphics().drawImage(image, 0, 0, nil);
16
+ put_image(conv, "conv.png")
17
+ return conv
18
+ end
19
+
20
+ def search_image(i1, i2)
21
+ w2=i2.getWidth
22
+ h2=i2.getHeight
23
+ firstpx=i2.getRGB(0,0)
24
+ midpx=i2.getRGB(w2/2, h2/2)
25
+ lastpx=i2.getRGB(w2-1, h2-1)
26
+ b2 = byte_array(i2)
27
+ (0..i1.getWidth-w2).each do |x|
28
+ (0..i1.getHeight-h2).each do |y|
29
+ if (i1.getRGB(x+w2/2, y+h2/2) == midpx && i1.getRGB(x,y) == firstpx)
30
+ find = i1.getSubimage(x, y, w2, h2)
31
+ #puts x.to_s + " " + y.to_s + " " + i1.getRGB(x, y).to_s
32
+ b1 = byte_array(find)
33
+
34
+ if (java::util::Arrays.equals(b1, b2))
35
+ #puts "Images are Equal"
36
+ return x+w2/2, y+h2/2
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ #puts "BOOOOO No Find"
43
+ return -1, -1
44
+ end
45
+
46
+ def img_to_rgb_array(image)
47
+ w=image.getWidth-1
48
+ h=image.getHeight-1
49
+ arr=[]
50
+ (0..w).each do |x|
51
+ tmp=[]
52
+ (0..h).each do |y|
53
+ tmp.push(image.getRGB(x,y))
54
+ end
55
+ arr.push(tmp)
56
+ end
57
+ end
58
+
59
+ def get_image(filename)
60
+ file = java::io::File.new(filename)
61
+ buf = ImageIO::read(file)
62
+ conv = BufferedImage.new(buf.getWidth, buf.getHeight, BufferedImage::TYPE_USHORT_565_RGB)
63
+ conv.getGraphics().drawImage(buf, 0, 0, nil);
64
+ return conv
65
+ # return ImageIO::read(file)
66
+ end
67
+
68
+ def byte_array(image)
69
+ os = ByteArrayOutputStream.new
70
+ ImageIO::write(image, "png", os)
71
+ return os.toByteArray()
72
+ end
73
+
74
+ def put_image(image, filename)
75
+ file = java::io::File.new(filename)
76
+ ImageIO::write(image, "png", file)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,19 @@
1
+ require "java"
2
+
3
+ java_import 'java.awt.Dimension'
4
+ java_import 'java.awt.Rectangle'
5
+ java_import 'java.awt.Robot'
6
+ java_import 'java.awt.Toolkit'
7
+ java_import 'java.awt.event.InputEvent'
8
+ java_import 'java.awt.event.KeyEvent'
9
+ java_import 'java.awt.image.BufferedImage'
10
+ java_import 'javax.imageio.ImageIO'
11
+ java_import 'java.awt.image.BufferedImage'
12
+ java_import 'java.io.ByteArrayOutputStream'
13
+
14
+ require "ImageSearch.jar"
15
+ import 'ImageSearch'
16
+
17
+ require "driver/screen.rb"
18
+ require "driver/mouse.rb"
19
+ require "driver/driver.rb"
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'screen_driver'
6
+ s.version = '0.0.0'
7
+ s.date = '2014-04-26'
8
+ s.summary = "Screen Driver Gem"
9
+ s.description = "This gem allows you to search the screen for specific images and perform Key or Mouse events."
10
+ s.authors = ["Ben Harrington"]
11
+ s.email = 'ben@harringtonweb.com'
12
+ s.files = `git ls-files`.split("\n")
13
+ s.homepage = ''
14
+ s.license = ''
15
+ s.require_paths = ["lib", "target"]
16
+ end
Binary file
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: screen_driver
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Harrington
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This gem allows you to search the screen for specific images and perform Key or Mouse events.
14
+ email: ben@harringtonweb.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - .gitignore
20
+ - .ruby-version
21
+ - README.md
22
+ - java-src/ImageSearch.class
23
+ - java-src/ImageSearch.java
24
+ - java-src/build.sh
25
+ - lib/driver/driver.rb
26
+ - lib/driver/mouse.rb
27
+ - lib/driver/screen.rb
28
+ - lib/screen_driver.rb
29
+ - screen_driver.gemspec
30
+ - target/ImageSearch.jar
31
+ homepage: ''
32
+ licenses:
33
+ - ''
34
+ metadata: {}
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ - target
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project:
52
+ rubygems_version: 2.1.9
53
+ signing_key:
54
+ specification_version: 4
55
+ summary: Screen Driver Gem
56
+ test_files: []