1

Тема: AHK: Анализ шкалы (PixelGetColor)

Здравствуйте! Нужна помощь!
Задача: Нужно анализировать состояния персонажа.
Средства мною использованные PixelGetColor.
Проблема: не однородность шкалы!
Пример шкал состояния персонажа.

http://s5.hostingkartinok.com/uploads/thumbs/2013/08/fc1d212c10001ebe96636156749ae5e2.png

Теперь немного подробнее: Был найдено 3 “Y” для каждой из шкал,  и 2 “X”.  X1 – начало шкалы, X2 – конец шкалы, Y1, Y2, Y3, Под ними скрываются те пиксели которые на протяжении всей шкалы являются не низменными ( X1<>---(Y1)---<>X2 = 0x152089 ) Все переменные координат являются константами!
Можно было бы применить самый простой вариант:


ConstColor := 0xF0F0F0
X1 := 25
X2 := 150
Y1 := 29
TmpX := X1
Loop
{
    PixelGetColor, TmpColor, %TmpX%, %Y1%
    if ( TmpColor != ConstColor || TmpX = X2 )
    {
        Break
    }
    TmpX++
}
LongScale := X2 - X1
TmpX := TmpX - X1
ScaleStats := TmpX / LongScale * 100
MsgBox, %ScaleStats%

Но на протяжение всей шкалы встречаются пробелы, которые делают невозможным применить данный способ.
Пишу здесь в надежде какого не будь креативного подхода к решению задачи!
Не принципиально использовать PixelGetColor, если конечно есть еще варианты для решения данной задачи.

2 (изменено: serzh82saratov, 2013-08-13 22:10:13)

Re: AHK: Анализ шкалы (PixelGetColor)

Может наводки с этой темы помогут http://forum.script-coding.com/viewtopi … 283#p74283.
Верхние три шкалы можно и по цифрам проверять.

Ну а вообще вырежи с каждой шкалы вертикальные куски шириной 1- 2 пикселя, и ImageSearch смотри последние найденные Х координаты.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Анализ шкалы (PixelGetColor)

2 момента.
1.Я не совсем понимаю как работает ImageSearch
2.X1--------X2 Допустим Х1, Х2 константы, а вот цифры между X1 и X2 Не факт что они будут всегда на одном и том же месте. То есть сейчас X1--123------X2, а потом, X1-------123--X2.

4

Re: AHK: Анализ шкалы (PixelGetColor)

Там всё просто. Задаёшь координаты прямоугольника в котором ищешь картинку. Сделай по аналогии примера в приведённой теме. Нашёл в координатах всей нужной шкалы вырезанный вертикальный отрезок цветной шкалы, начинаешь искать дальше в нём же со смещением по Х. Смотришь последний найденный по Х координате. Делишь его на общую длинну шкалы, и всё. Длинна шкалы хотя бы всегда постоянна?
Можно сделать от обратного, и искать в шкале первые куски незаполненной шкалы. Если они одного цвета, то так возможно проще.
С X1 и X2 я непонял, задавай какие надо каждый раз, в чём вопрос.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Анализ шкалы (PixelGetColor)

Попробую.....
X1, X2 константы.

6

Re: AHK: Анализ шкалы (PixelGetColor)

X1, X2 константы.

Я понял что это начало и конец шкалы. Но вопрос то в чём?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: Strongest, 2013-08-14 01:30:25)

Re: AHK: Анализ шкалы (PixelGetColor)

Есть цвет который на протяжении всей шкалы от X1 до X2 “Красный (0x1F1F1F)”  Y = 25, Но там где есть цифры по верх шкалы, невозможно корректно прочитать красный там цвет или нет. Промежуток от X1 до X2 это 100% . Вся красная шкала это 100%, но она прыгает, задача в том что бы в реальном времени читать шкалу, и узнавать на сколько % в данный момент она заполнена красным.

8

Re: AHK: Анализ шкалы (PixelGetColor)

Покопался, ответа не нашёл, зато нашёл наглядный пример того, как должно работать!
http://youtu.be/lJnWVbdqarc?t=2m55s

9 (изменено: serzh82saratov, 2013-08-14 17:15:15)

Re: AHK: Анализ шкалы (PixelGetColor)

зато нашёл наглядный пример того, как должно работать!

Ну так оно может с памятью процесса работает.

Но там где есть цифры по верх шкалы, невозможно корректно прочитать красный там цвет или нет.

Между цифрами же есть красный цвет.
Опять же там где цифры используй способ приведённый в моей ссылке.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Анализ шкалы (PixelGetColor)

Ну так оно может с памятью процесса работает.

Я с начало тоже это подумал, что берест из памяти, но состояния персонажа было 100%, просто шкала закрывалась другим окном игры на половину, и программа реагировала, как будто шкала была изменена, а это говорит о том, что всё-таки по пиксельное чтение с экрана.

Между цифрами же есть красный цвет.

Он как бы красный, но после каждой цифры по разному красный, из за разных сочетаний цифр невозможно угадать какой именно цвет будет после цифры (оттенков красного очень много), что делать невозможным сравнения цветов. Был найден цвет, который один и тот же до цифр и после цифр по одним и тем же координатам  XY.

Опять же там где цифры используй способ приведённый в моей ссылке.

Мне кажется что этот вариант нельзя использовать для анализа в данном случаи, так как этот процесс будет занимать очень много времени (нахождение двух шестизначных цифр), а реагировать на изменения нужно практически мгновенна. Даже если анализировать шкалу просто по 1 пикселю, получается долго, для ускорения работы я применял счетчик не j++, а j+=10, пусть не совсем точно, за то мгновенно.

Долго думал над решением проблемы, подумал если пойти от обратно, то есть читать шкалу не на сколько заполнена, а на сколько она пуста, под красным цветом шкалы скрывается серый цвет, но он где то на 30% прозрачен то есть цвет будет всегда разным, но всегда остается темным, то есть контрастность между полной и пустой шкалой очень сильно выражена. Идея в том что бы сравнивать как то так, что бы выглядела: “Если цвет не ярче определенного цвета” Вот только как, фантазии не хватает.

11

Re: AHK: Анализ шкалы (PixelGetColor)

Можно попробовать способом от обратного. Вырезать квадратик 1х1 или 2х2 в пнг. Применить ImageSearch, и баловатся с параметрами:

*n (variation): Specify for n a number between 0 and 255 (inclusive) to indicate the allowed number of shades of variation in either direction for the intensity of the red, green, and blue components of each pixel's color. For example, *2 would allow two shades of variation. This parameter is helpful if the coloring of the image varies slightly or if ImageFile uses a format such as GIF or JPG that does not accurately represent an image on the screen. If you specify 255 shades of variation, all colors will match. The default is 0 shades.

*TransN: This option makes it easier to find a match by specifying one color within the image that will match any color on the screen. It is most commonly used to find PNG, GIF, and TIF files that have some transparent areas (however, icons do not need this option because their transparency is automatically supported). For GIF files, *TransWhite might be most likely to work. For PNG and TIF files, *TransBlack might be best. Otherwise, specify for N some other color name or RGB value (see the color chart for guidance, or use PixelGetColor in its RGB mode). Examples: *TransBlack, *TransFFFFAA, *Trans0xFFFFAA.

Думаю скорость должна быть в порядке, т.к. нужно только первое совпадение.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Анализ шкалы (PixelGetColor)

Блин, это же меняет дело.... Сделай отпишу ))
Спс огромное!

13 (изменено: Strongest, 2013-08-15 16:49:10)

Re: AHK: Анализ шкалы (PixelGetColor)

Выражаю огромною благодарность за помощь serzh82saratov!
Расскажу на словах как у меня получилось, а ниже выложу код.
Был вырезан 1 пиксель шкалы (красный) который означал наполненность шкалы. По координатам XY производится сканирование от X1 до X2 на предмет нахождения вырезанного мною цвета, в диапазоне 20 оттенков, с шагом в 10 пикселей (для ускорения работы). Когда программа первый раз натыкается на не «красный» пиксель (возможно это только в 2 случаях либо наткнулся на цифры по верх шкалы, либо шкала пуста). Запускается новый цикл на предмет  нахождение того же «красного» пикселя, но в новом цикле ведется учет ErrorLevel, сколько раз подряд пиксель не «красный». Опытным путем было выяснено, что максимальная ширина 1 цифры не может быть длинней  чем 9 пикселей. И если 9 пикселей подряд не «красные» программой это интерпретируется как все таки наткнулись не на цифру, а шкала пустая!
Код:


X1 := 29
X2 := 179
Y1 := 77
TmpX := X1 - 10
ErrorColor := 0
Loop
{
    TmpX += 10
    ImageSearch, OVX, OVY, %TmpX%, %Y1%, %TmpX%, %Y1%, *20 PHC.PNG
    if ( ErrorLevel )
    {    
        Loop 9
        {
            TmpX++
            ImageSearch, OVX, OVY, %TmpX%, %Y1%, %TmpX%, %Y1%, *20 PHC.PNG
            if ( ErrorLevel )
            {
                ErrorColor++
            }
            else
            {
                ErrorColor := 0
                Break
            }
        }
        if ( ErrorColor >= 9 )
        {
            TmpX -= 10
            Break
        }
    }
}
LongScale := X2 - X1
TmpX := TmpX - X1
ScaleStats := TmpX / LongScale * 100
MsgBox, %ScaleStats%

14

Re: AHK: Анализ шкалы (PixelGetColor)

Пожалуйста.
Ещё для увеличения скорости используй:

SetBatchLines -1 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15 (изменено: Strongest, 2013-08-15 19:51:53)

Re: AHK: Анализ шкалы (PixelGetColor)

После нескольких часов тестов стало понятно, что все гениальное просто!!!
Работает как часы, быстро надежно!



SetBatchLines -1 
FontColor := "Lime"
CustomColor = EEAA00
Gui, +AlwaysOnTop +LastFound
Gui, Color, %CustomColor%
Gui, Font, s18
Gui, Add, Text, vMyText c%FontColor%, XXXXXX
WinSet, TransColor, %CustomColor% 150
Gui, -Caption 

Gui, Show
GoSub ScanScale
Return

ScanScale:
    Loop
    {
        X1 := 29
        X2 := 179
        Y1 := 77
        TmpX := X2
        Loop
        {
            ImageSearch, OVX, OVY, %TmpX%, %Y1%, %TmpX%, %Y1%, *20 PHC.PNG
            if ( !ErrorLevel || TmpX = X1 )
            {
                Break
            }
            TmpX -= 2
        }
        LongScale := X2 - X1
        TmpX := TmpX - X1
        ScaleStats := TmpX / LongScale * 100
        GuiControl,, MyText, %ScaleStats%
    }
    Return

16

Re: AHK: Анализ шкалы (PixelGetColor)

Ну вот видишь, теперь и ты можешь выложить свой ролик на ютуб

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Анализ шкалы (PixelGetColor)

Вся беда в том что, теперь редактировать весь скрипт, причем изменен алгоритм кардинально, а значит и вес код придется кардинально менять а это более 20 000 строк )

18

Re: AHK: Анализ шкалы (PixelGetColor)

более 20 000 строк

Ничего себе

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Анализ шкалы (PixelGetColor)

Ничего себе

Ну пишу уже пол года наверно, программа работает но мало функциональности, вот и дописываю, выравниваю потихоньку.
Еще есть такой вопросик, может есть у кого профиль синтаксиса AHK для notepad++, ну или хотя бы подскажите, как сделать что бы можно было сворачивать в коде функции, как на С {}.

20 (изменено: serzh82saratov, 2013-08-15 23:58:06)

Re: AHK: Анализ шкалы (PixelGetColor)

может есть у кого профиль синтаксиса AHK для notepad++

В аттаче что то такое.

как сделать что бы можно было сворачивать в коде функции, как на С {}.

А это уже сам, там вроде как, всё слишком просто, если захотеть.
Вобще тут где то тема была, извини, но не найду и не разложу по полкам енто.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: Анализ шкалы (PixelGetColor)

Огромное спасибо и на этом.

22 (изменено: serzh82saratov, 2013-08-21 18:25:58)

Re: AHK: Анализ шкалы (PixelGetColor)

Кстати может лучше использовать PixelSearch? Там параметр Variation есть, может подойти.

PixelSearch, OVX, OVY, %TmpX%, %Y1%, %TmpX%, %Y1%, 0xF0F0F0, 20, Fast RGB
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: AHK: Анализ шкалы (PixelGetColor)

Да, нужно попробывать.... Возможно даже быстрее будет. Спасибо!

24

Re: AHK: Анализ шкалы (PixelGetColor)

Когда-то столкнулся с такой же проблемой.
Городить огород не хотелось.
Рассудил, что неравномерность окраса шкалы должна быть цикличной - на манер текстуры.
Недолгое изучение шкалы не только подтвердило догадку, но и показало, что имеются преобладающие оттенки, пикселы с цветом которых повторяются даже внутри цикла.
Все это позволило использовать PixelSearch с поиском преобладающего оттенка, начиная с незаполненного края шкалы. Погрешность вышла пренебрежимо малой.
С тех пор многократно приходилось решать ту же задачу и указанный метод всегда работал.

Ходит Спесь, надуваючись, С боку на бок переваливаясь. Ростом-то Спесь аршин с четвертью, Шапка-то на нём во целу сажень, Пузо-то его всё в жемчуге, Сзади-то у него раззолочено... Идет Спесь, видит: на небе радуга; Повернул Спесь во другую сторону: Не пригоже-де мне нагибатися!
А. К. Толстой