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 +7 -0
- data/.gitignore +2 -0
- data/.ruby-version +1 -0
- data/README.md +16 -0
- data/java-src/ImageSearch.class +0 -0
- data/java-src/ImageSearch.java +74 -0
- data/java-src/build.sh +3 -0
- data/lib/driver/driver.rb +93 -0
- data/lib/driver/mouse.rb +34 -0
- data/lib/driver/screen.rb +79 -0
- data/lib/screen_driver.rb +19 -0
- data/screen_driver.gemspec +16 -0
- data/target/ImageSearch.jar +0 -0
- metadata +56 -0
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
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
jruby-1.7.9
|
data/README.md
ADDED
|
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,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
|
data/lib/driver/mouse.rb
ADDED
|
@@ -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: []
|