2015-07-03 2 views
0
  1. Есть программа для Android, которая может обнаружить на экране pixel color и сделать событие click для этих координат x, y?Обнаружить цвет на экране для Android

  2. Что такое оптимальный алгоритм для определения цвета на некоторой области и получения координат пикселя (если программа не существует)?

Этот мир программы обнаружения цвета на площади 400x400 пикселей:

//Set aim color 
var rgb = 197137164; 

//Init x,y pixels 
var x = 0; 
var y = 0; 
var ex = 0; 

:myloop 
for(x; x<400; x++) 
{ 
    for(y;y<400;y++) 
    { 
     if(getcolor(x,y) == rgb) 
     { 
     RaiseEvent(x,y); 
     set ex = 1;   
     break; 
     } 
     if(ex == 1){break;} 
    }   
} 
sleep(10000); 
set x = 0; 
set y = 0; 
set ex = 0; 
goto myloop; 

Но этот алгоритм работает медленно, я думаю. Мне нужно оптимизировать этот алгоритм, но пока я не знаю, как это сделать. Есть идеи? Или какие-то программы уже существуют, и мне не нужно создавать велосипед?

ответ

0

EDIT: Попробуйте не получать каждый пиксель один за другим, вместо этого используйте метод getpixels() и итерации через пиксельный массив, это намного быстрее, чем пиксели на единицу.

Итак, когда у вас есть эта размерная матрица пикселей, вы можете проходить через нее.

Предположим, у вас есть 400x200 пикселей (80000). Таким образом, вы перебираете пиксели с циклом и проверяете цвет пикселей, соответствует ли он тем, который вы ищете. Нечто подобное:

var coordinate; 
for(int i=0; i<pixels.length;i++){ 
    if(pixel[i] == yourcolor){ 
     coordinate=i; 
     break; 
    } 
} 
var coordX = coordinate%400; //coordinate X = which column 
var coordY = coordinate/200; //coordinate Y = which row 

Таким образом, если соответствующий пиксель является четырёхсотым, это будет первым пикселем во втором ряду (как индексации от 0 -> 0-399 = первого ряда, 400-799 = второй ряд и т. д.).

Предыдущее предположение:

Я предполагаю, что это медленно, потому что он спит 10000 мс, удалите эту команду.

sleep(10000); 

Также я предлагаю не добавлять несколько команд в одну строку.

+0

Нет, сон (1000) для задержки при обнаружении цвета. Он выполняется только один раз. Например, вы нашли какой-то объект и нажмете на него, и вам нужно некоторое время ждать другого обнаружения. Вот почему есть сон (1000). – LifeGuard

+0

А ты прав, моя вина. – abbath

+0

Я редактировал со сном в другом месте, но это неважно. Просто для лучшего обзора, а не для оптимизации. – LifeGuard

Смежные вопросы