Страница 1 из 1
Помогите с проблемкой !!!
Добавлено: 24 дек 2013, 13:51
andruxa
Всем привет. Мне нужно знать цвет пикселей изображения монитора (размер изображения 700х500 пикселей) и если есть мне нужный цвет пикселя то он выдает мне его координаты. Я использую клас Robot, и его метод getPixelColor(х, у), но он очеьм медленный, делает проверку изображения за 20 секунд (примрно). А мне нужно чтоб проверка осуществялась раза 4 за секунду, ведь изображение постоянно меняеться.
Может ктото знает как ускорить можна этот процес???
Можна ли разбить условно это изоброжение на части и выполнить проверку одновременно во всех частях?
Re: Помогите с проблемкой !!!
Добавлено: 24 дек 2013, 15:53
somewhere
Специально для множественных запросов к экранным пикселям создана функция из того же класса: createScreenCapture
Re: Помогите с проблемкой !!!
Добавлено: 24 дек 2013, 18:05
andruxa
somewhere писал(а):Специально для множественных запросов к экранным пикселям создана функция из того же класса: createScreenCapture
С поиском цвета уже разобрался. Появилаь другая проблема, как только программа находит нужный цвет она дольжна кликнуть раз мышкой по этому пикселю, а она все время кликает туда. В чем может бить ошибка?
Код программы:
Код: Выделить всё
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
class myFrame extends JFrame {
private Robot robot;
public myFrame() {
setTitle("Test");
JPanel panel = new JPanel();
try {
robot = new Robot();
} catch (AWTException ex) {
}
JButton bt1 = new JButton("Start");
panel.add(bt1);
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Start");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Start in thread");
Rectangle rec = new Rectangle(0, 0, 1023, 767);
BufferedImage img=robot.createScreenCapture(rec);
for (int i =50; i <= 950; i++) {
for (int j = 150; j <= 566; j++) {
Color c1 = new Color(img.getRGB(i, j));
Color col=new Color(245,253,250);
if (c1.getBlue()<180&c1.getRed()>(col.getRed())) {
robot.mouseMove(i, j);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(2500);
}
}
}
System.out.println("End cykle");
}
}).start();
}
});
Container pane = getContentPane();
pane.add(panel);
pack();
}
}
public class Test {
public static void main(String[] args) {
myFrame frame = new myFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
Re: Помогите с проблемкой !!!
Добавлено: 25 дек 2013, 02:18
andruxa
С поиском цвета уже разобрался. Появилаь другая проблема, как только программа находит нужный цвет она дольжна кликнуть раз мышкой по этому пикселю, а она все время кликает туда. В чем может бить ошибка?
Код программы:
Код: Выделить всё
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
class myFrame extends JFrame {
private Robot robot;
public myFrame() {
setTitle("Test");
JPanel panel = new JPanel();
try {
robot = new Robot();
} catch (AWTException ex) {
}
JButton bt1 = new JButton("Start");
panel.add(bt1);
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Start");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Start in thread");
Rectangle rec = new Rectangle(0, 0, 1023, 767);
BufferedImage img=robot.createScreenCapture(rec);
for (int i =50; i <= 950; i++) {
for (int j = 150; j <= 566; j++) {
Color c1 = new Color(img.getRGB(i, j));
Color col=new Color(245,253,250);
if (c1.getBlue()<180&c1.getRed()>(col.getRed())) {
robot.mouseMove(i, j);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(2500);
}
}
}
System.out.println("End cykle");
}
}).start();
}
});
Container pane = getContentPane();
pane.add(panel);
pack();
}
}
public class Test {
public static void main(String[] args) {
myFrame frame = new myFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
Re: Помогите с проблемкой !!!
Добавлено: 25 дек 2013, 12:14
andruxa
Сделал заново createScreenCapture после каждого выполненого условия. Я хотел сделать так чтоб программа постоянно сканировала монитор и если находила то что нада, автоматически кликала по нём, добал вечный цыкл но программа работает только до тех пор пока я не нажму на мышку, как только кликнул мышью программу выбрасывает в самый конец и она только выводит "End cykle". А так находит правильно все пиксели .
Код программы:
Код: Выделить всё
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
class myFrame extends JFrame {
private Robot robot;
public myFrame() {
setTitle("Test");
JPanel panel = new JPanel();
try {
robot = new Robot();
} catch (AWTException ex) {
}
JButton bt1 = new JButton("Start");
panel.add(bt1);
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Start");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Start in thread");
Rectangle rec = new Rectangle(0, 0, 1023, 767);
BufferedImage img=robot.createScreenCapture(rec);
for(; ;) {
l1: for (int i =50; i <= 950; i++) {
for (int j = 150; j <= 566; j++) {
Color c1 = new Color(img.getRGB(i, j));
Color col=new Color(245,253,250);
if (c1.getBlue()<180&c1.getRed()>(col.getRed())) {
robot.mouseMove(i, j);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(2500);
img=robot.createScreenCapture(rec);
break l1;
}
}
}
System.out.println("End cykle");
}}
}).start();
}
});
Container pane = getContentPane();
pane.add(panel);
pack();
}
}
public class Test {
public static void main(String[] args) {
myFrame frame = new myFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
Re: Помогите с проблемкой !!!
Добавлено: 25 дек 2013, 12:15
andruxa
somewhere писал(а):Специально для множественных запросов к экранным пикселям создана функция из того же класса: createScreenCapture
Сделал заново createScreenCapture после каждого выполненого условия. Я хотел сделать так чтоб программа постоянно сканировала монитор и если находила то что нада, автоматически кликала по нём, добал вечный цыкл но программа работает только до тех пор пока я не нажму на мышку, как только кликнул мышью программу выбрасывает в самый конец и она только выводит "End cykle". А так находит правильно все пиксели .
Код программы:
Код: Выделить всё
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
class myFrame extends JFrame {
private Robot robot;
public myFrame() {
setTitle("Test");
JPanel panel = new JPanel();
try {
robot = new Robot();
} catch (AWTException ex) {
}
JButton bt1 = new JButton("Start");
panel.add(bt1);
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Start");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Start in thread");
Rectangle rec = new Rectangle(0, 0, 1023, 767);
BufferedImage img=robot.createScreenCapture(rec);
for(; ;) {
l1: for (int i =50; i <= 950; i++) {
for (int j = 150; j <= 566; j++) {
Color c1 = new Color(img.getRGB(i, j));
Color col=new Color(245,253,250);
if (c1.getBlue()<180&c1.getRed()>(col.getRed())) {
robot.mouseMove(i, j);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(2500);
img=robot.createScreenCapture(rec);
break l1;
}
}
}
System.out.println("End cykle");
}}
}).start();
}
});
Container pane = getContentPane();
pane.add(panel);
pack();
}
}
public class Test {
public static void main(String[] args) {
myFrame frame = new myFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}