Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: keydaci on June 12, 2013, 02:24:20 PM
-
Подскажите плиз скрипт который в прямоугольной области подсчитывает колв-во пикселей одинакового цвета.
т.е. в логе должно быть сколько цветов и кол-во пикселей этих цветов, что то типа
цвет хххххх - 43 пиксела
цвет yyyyyy - 12 писелов
цвет zzzzzz - 33 пиксела, и т.д.
к примеру область у нас (761,294) и (794,311)
$x=761
$y=294
MOVE($x,$y)//встаем в левый верхний угол
FOR($x, $x < 794)// пробегаемся до правого нижнего угла
FOR($y, $y < 311)
GETSCREEN
$clr = PXL($x,$y)//получаем код текущего пиксела
....... //много полезного кода, до которого я еще не допетрил ))
END_CYC
END_CYC
Я так понимаю, получив код цвета пикселя, этот код надо сравнить с предыдущем(предыдущими кодами) кодом, и если не совпадают, то делаем новую переменную счетчика и присваиваем ему один. А если совпадают, то единицу прибавляем счетчику этого цвета. С возрастанием вариаций цвета надо сравнивать со всеми этими вариациями.... как то так.
-
Рукалицо. Есть же функция PXLCOUNT!!!
$color = 255
GOSUB(подсчет цветов)
$color = 15723239
GOSUB(подсчет цветов)
$color = 11444631
GOSUB(подсчет цветов)
HALT
SUB (подсчет цветов)
GETSCREEN
$count = PXLCOUNT(761,294, 794,311, $color)
LOGWRITE ("Цвет: ", $color, " - ", $count, " пиксел")
END_SUB
-
отлчино, это подсчет известных цветов, а как сделать чтоб он сам искал цвета пикселов и считал их количество? причем не известно сколько будет цветов, чтоб он сам анализировал цвет каждого пиксела в прямоугольной области, и если такой цвет уже есть - прибавлял к уже существующему коунту, а если нету, то создавал новый счет и прибавлял этот цвет к нему?
-
Ды никак, там в области может быть сотни тысяч цветов а массивов в кликере нет. Зачем тебе это нужно? Может для нахождения уникального цвета?
Для этого есть специальная программка Unique Colors Search
http://crapware.aidf.org/forum/index.php?topic=42.msg572#msg572 (http://crapware.aidf.org/forum/index.php?topic=42.msg572#msg572)
Там на офф сайте все подробно описано как ей пользоваться
-
Написать то можно подобное, но и правда, нахрена?
И работать оно будет не быстро, особенно если область большая.
-
Нарезал около сотни картинок, размер макс 50х50, собрал в группы - т.е. в группе однотипных надо будет в последствии находить нужную. В ручную искать код цвета, подсчитать кол.во пикселей этого цвета, затем находить этот же код цвета на другой картинке подсчитать сколько таких пикселей на этой картинке, сравнивать чтоб не совпало кол.во пикселей... долго и утомительно. Думал объединить однотипные в одну большую, и просто смещать зону анализа, и в итоге получить по каждой картинке базу ее цветов и кол.во пикселей, чтоб затем знать с какими цветовыми кодами работать в последствии для нахождения нужной картинки.
Например самый простой случай (http://www.irim.md/images/tonik/icicle_belt.bmp) и (http://www.irim.md/images/tonik/sansha.bmp)
-
Размял мозги.
Предупреждал, работает не быстро.
Положить рядом с скриптом файл Find.txt, в нём будут результаты.
В логе по окончании количество найденных цветов.
// задаём область
$x1=600
$y1=340
$x2=609
$y2=349
TFCLEAR("Find.txt",0)
$color_find=0
LOGCLEAR
MOVE($_xmax,$_ymax)
WAITMS(50)
GETSCREEN
$y=$y1-1
FOR($y, $y < $y2)
$x=$x1-1
FOR($x, $x < $x2)
$clr = PXL($x,$y) //получаем цвет текущего пиксела
GOSUB(проверка)
END_CYC
END_CYC
LOGWRITE ("Найдено цветов: ",$color_find)
HINTPOPUP("Подсчёт окончен")
HALT
SUB(проверка)
$no_new=0
$i=0
FOR($i, $i<INT(TFCOUNT("Find.txt")))
//LOGWRITE ("i ",$i)
$cut=TFREAD("Find.txt",$i)
$color=INT(STRCUT2($cut,1,STRPOS($cut,":")-1))
//LOGWRITE ("cut ",$cut)
//LOGWRITE ("color ",$color)
IF($clr=$color)
$number=INT(STRCUT2($cut,STRPOS($cut,":")+1,99999))
IF(INT(TFCOUNT("Find.txt"))=1)
TFCLEAR("Find.txt",0)
TFWRITE("Find.txt",STRCONCAT($color,":",$number+1))
ELSE
TFDELETE("Find.txt",$i)
TFWRITE("Find.txt",STRCONCAT($color,":",$number+1),$i)
END_IF
$i=9999999 // прерываем поиск
$no_new=1
WAITMS(3)
END_IF
END_CYC
IF($no_new=0)
INC($color_find)
//LOGWRITE ("color_find ",$color_find)
TFWRITE("Find.txt",STRCONCAT($clr,":1"))
END_IF
END_SUB
-
спасибо огромное! То что медленно работает, не беда - это всего лишь как "инструмент" для анализа картинок, т.е. в основной скрипт я его не включу. Просто для предварительного анализа картинок и нахождения группы уникальных пикселей, с которыми уже можно дальше работать! И наверное даже можно этот скрипт добавить в шапку - как анализатор картинок!
П.С. еще момент, анализировать картинку надо непосредственно в приложении для которого пишем скрипт, т.к. если открывать ее например в фотошопе, или в др. граф. редакторе, то получаются немного другие результаты! И даже если ее открывать в редакторе - анализировать - закрвать редактор - опять открывать и анализировать, то получаются немного другие результаты, как по кол.ву цветов так и по кол.ву пикселей в общем!
-
Дело не в фотошопе и не редакторе. Значит в самой программе картинка меняется. Если не меняется можно делать по скриншоту, делал так сотню раз.
Картинка часто меняется если используется антиалиазинг элементов. С текстом это чаще всего. Во флэше и не обязательно с текстом. АА считается там на лету, что там за алгоритм, что он на одних и тех же исходниках даёт разные результаты я не знаю.
-
Использую только этот скрипт - для анализа картинок - и выдает разные результаты
-
Не знаю. Я проверял, у меня одни выдавал. Бывает косяк... Я для ускорения мало задержек проставил. Если мышью активно не юзать и не грузить процессор - считает правильно. Если что-то подтормаживает, не всё записывает в файл. Делает пропуски. Подобавляй задержек.
-
В первой твоеё картинке примере выдаёт стабильно 50 цветов.
Цвета такие:
684042:293
1340948:1
6333024:1
946958:1
4493892:2
1997854:30
12047799:32
5282128:2
11259563:2
11062440:4
8829062:2
2326307:6
10865573:1
11456686:1
10733987:2
4034109:1
1143825:2
12376252:4
2654760:2
749579:6
1012495:1
12113592:1
2982957:1
4362562:1
946702:1
815372:1
5085005:1
10931110:1
12638912:1
9748884:1
3442740:1
1209618:2
2523174:2
2457637:2
1932061:1
12244922:1
749835:1
1078032:2
12310459:1
4428099:1
1866524:1
5413458:2
11325356:2
11193770:2
8829318:3
7055723:1
4165439:1
10668450:2
11390893:1
4230976:1
-
Еще раз спасибо, да проблема была в задержках и соответственно в пропусках.
Получился отличный инструмент для анализа картинок!