powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с проблемкой !!!
11 сообщений из 11, страница 1 из 1
Помогите с проблемкой !!!
    #38511109
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Мне нужно знать цвет пикселей изображения монитора (размер изображения 700х500 пикселей) и если есть мне нужный цвет пикселя то он выдает мне его координаты. Я использую клас Robot, и его метод getPixelColor(х, у), но он очеьм медленный, делает проверку изображения за 20 секунд (примрно). А мне нужно чтоб проверка осуществялась раза 4 за секунду, ведь изображение постоянно меняеться.
Может ктото знает как ускорить можна этот процес???
Можна ли разбить условно это изоброжение на части и выполнить проверку одновременно во всех частях?
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511112
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохраняй копию экрана через createScreenCapture()
И работай уже с BufferedImage.getRGB()
Для массовой обработки там можно целый сегмент получать, а не по одному пикселю.
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511475
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Чтото у меня не получаеть реализовать этот метод createScreenCapture().
Вот что у меня получилось:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
 
 
 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(100, 100, 999, 710);
	                        BufferedImage img=robot.createScreenCapture(rec);  
	                        robot.mouseMove(50,100);
	                        robot.delay(200);
	                        for (int i =50; i <= 350; i++) {
	                            for (int j = 270; j <= 400; j++) {
	                            	robot.mouseMove(i, j);
	                                Color c1 = new Color(img.getRGB(i, j));
	                                Color col = new Color(121, 133, 145);
	                          
	                                System.out.print("Color print: Red="+c1.getRed()+" Green="+c1.getGreen()+" Blue="+c1.getBlue());
	                                System.out.print(" "+i + " " + j);
	                                System.out.println();
	                                if (c1.equals(col)) {
	                                    System.out.print(i + " " + j + "Yes ");
	                                    robot.mouseMove(i, j);
	                                    robot.delay(500);
	                                } else {
	                                    System.out.print("No found ");
	                                }
	                            }
	                        }
	                        System.out.println("End cykle");
	                       robot.mouseMove(500, 600);
	                    }
	                }).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();
	    }
	}


Если есть нелепые ошибки прошу меня извинить, я начинаюший программист.
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511541
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andruxai,
мне кажется, что
Код: java
1.
Color c1 = new Color(img.getRGB(i, j));

не тоже самое что
авторцелый сегмент получать, а не по одному пикселю
и для какой цели там
Код: java
1.
Color col = new Color(121, 133, 145);
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511549
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не заметил, что там дальше сравнение с
Код: java
1.
Color col = new Color(121, 133, 145);
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вам важна скорость, то на кой черт на каждый пиксель создавать 2 новых экземпляра Color?
Работайте напрямую с int значением.
Если что-то не получается попробуйте воспользоваться пошаговой отладкой, которая реализована во всех современных Java IDE.
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511587
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я все исправил, println тормозил весь процесс. Убрав его все просто летает.
Не подскажите как сделать чтобы проверка осуществлялась о двух местах одновременно?
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511589
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запускать два потока? Каждый для своей секции?
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511680
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С поиском цвета уже разобрался. Появилаь другая проблема, как только программа находит нужный цвет она дольжна кликнуть раз мышкой по этому пикселю, а она все время кликает туда. В чем может бить ошибка?
Код программы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
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();
	    }
	}
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511687
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя получается что-то типа рекурсии. Ты нашёл роботом пиксел кликнул и надо поставить
флажок о том что процесс закончен. А у тебя на любой ActionEvent робот запускается снова.
...
Рейтинг: 0 / 0
Помогите с проблемкой !!!
    #38511915
Andruxai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал заново createScreenCapture после каждого выполненого условия. Я хотел сделать так чтоб программа постоянно сканировала монитор и если находила то что нада, автоматически кликала по нём, добал вечный цыкл но программа работает только до тех пор пока я не нажму на мышку, как только кликнул мышью программу выбрасывает в самый конец и она только выводит "End cykle". А так находит правильно все пиксели .
Код программы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
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();
	    }
	}
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с проблемкой !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]