1 (изменено: serzh82saratov, 2014-07-07 11:46:55)

Тема: AHK: Параметры команды ImageSearch

Немного загнался по мотивам этой темы, ибо было непонятно. Там требовался параметр variation:

*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.

Так как совсем от балды брать этот параметр наверное не правильно, а также утомительно, решил (для себя) сделать код его находящий:

+ открыть спойлер

Image = Безымянный.JPG
Search = Search.png


#SingleInstance Force 
#NoEnv
ListLines Off
SetBatchLines -1  
SetWorkingDir %A_ScriptDir%   

Image = Безымянный.JPG
Search = Search.png

Gui -DPIScale -Caption 
Gui Margin, 0, 0
Gui Add, Picture, vPicture, % Image
Gui Show, x0 y0

1::  
    n := GetVariation(0, 0, 1152, 748, 14, Search, 22, 13, "27429F")   
    Sleep 500
    For k, v in SeveralSearch(0, 0, 1152, 748, "*" n " " Search)
    {
        Click % v[1]+11 " " v[2]+6 
        Sleep 100
    }
    Return
    
GetVariation(x1, y1, x2, y2, Overlap, IsSearch, sW, sH, Bkg, n := 0)  {
    Found := 0
    Gui 2: -Caption +AlwaysOnTop +E0x08000000 +E0x20 +Lastfound -DPIScale  
    DllCall("Dwmapi\DwmIsCompositionEnabled", "UInt*", isEnabled)
    If isEnabled
    {
        Gui 2: Color, 000000
        WinSet, TransColor, 000000 250
    }
    Gui 2: Show, NA x0 y0 w%A_ScreenWidth% h%A_ScreenHeight% 
    
    Loop
    {
        ToolTip % n "`n" Found,1,1
        ImageSearch, mX, mY, x1, y1, x2, y2, *%n% %IsSearch% 
        If (n = 255)
            Break
        If (ErrorLevel && ++n)
            Continue 
        Gui 2: Add, Progress, % "x" mX " y" mY " w" sW " h" sH " BackgroundD" Bkg
        nRes := n, ++Found
        ToolTip % n "`n" Found,1,1
        If (Found = Overlap)
            Break 
        Sleep -1 
    }
    MsgBox, 262144, , % "Variation: " nRes 
    Gui 2: Destroy 
    ToolTip  
    Return nRes
}

2::
    For k, v in SeveralSearch(0, 0, 1152, 748, "*49 " Search)
    {
        Click % v[1]+11 " " v[2]+6 
        Sleep 100
    }
    Return
    
SeveralSearch(x1, y1, x2, y2, IsSearch)  {
    StartTime := A_TickCount
    xS := x1, prY := y2, ErrorCount := i := 0, coords := []
    Loop
    {
        ImageSearch, mX, mY, xS, y1, x2, y2, %IsSearch% 
        If (ErrorLevel && ++ErrorCount > 1)
            Break
        If (mY = "" || mY > prY)
            xS := x1, y1 := prY+1, prY := y2
        Else
            xS := mX+1, ErrorCount := 0, prY := mY, coords[++i] := [mX, mY] 
    }
    MsgBox % "Найдено: " coords.MaxIndex()
        . "`nЗа: " A_TickCount - StartTime "msec"
    Return coords
}

Esc::     
GuiEscape:
GuiClose:
    ExitApp 

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

Вспомнив также недавнюю тему, понял, что совет использовать там параметр variation, не совсем верный. Вырезать кусок из иконки где нет прозрачных областей, также не выдерживает критики. Есть мнение, что как раз для иконок предназначен TransN:

*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

2

Re: AHK: Параметры команды ImageSearch

Вроде все эти вопросы я уже разбирал, с некоторыми помогал на форуме. Предлагаю найти перевод этой статьи, а затем поставить задачу поконкретнее.

3

Re: AHK: Параметры команды ImageSearch

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

4

Re: AHK: Параметры команды ImageSearch

И возник вопрос, а как извлечь из иконки цвет, который задан в ней как прозрачный?

Ага, видимо сразу недопонял справку:

хелп пишет:

(однако, иконки не нужно эту опцию, потому что их прозрачность автоматически поддерживается).

Хорошо, если для иконок ненужно, то что значит это:

хелп пишет:

один цвет в изображении, который будет соответствовать любой цвет на экране. Чаще всего он используется для поиска PNG, GIF, TIF и файлы, которые имеют некоторые прозрачные области

Например есть PNG с прозрачными областями, какой цвет тут указывать?

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

5

Re: AHK: Параметры команды ImageSearch

Вопрос про ICO вроде как отпал сам собой, теперь непонятно с PNG. Возможно тут просто подойдёт любой цвет, которого нет в самом PNG... Если так, то непонятно почему.

ypppu пишет:

Предлагаю найти перевод этой статьи, а затем поставить задачу поконкретнее.

Не понимаю, какой статьи?
И что здесь можно более конкретизировать?

ТС пишет:

И возник вопрос, а как извлечь из иконки цвет, который задан в ней как прозрачный?

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

6 (изменено: ypppu, 2014-07-06 22:13:42)

Re: AHK: Параметры команды ImageSearch

Так-с... После последних "встрясок" поиск перестал находить тему AutoHotkey: проект перевода, ветка #2. В данном архиве имеется перевод:

  • CoordMode

  • PixelGetColor

  • PixelSearch

  • ImageSearch

  • Libraries of Functions

  • Continue

7 (изменено: serzh82saratov, 2014-07-07 08:36:39)

Re: AHK: Параметры команды ImageSearch

Перевод имеется, но на вопрос не отвечает.

ОФФ:
Может действительно перевести в html и добавить на этот сайт, а то я думаю, что даже посвящённым в наличие этих файлов в формате doc, всё равно не очень удобно их использовать.

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

8

Re: AHK: Параметры команды ImageSearch

как извлечь из иконки цвет, который задан в ней как прозрачный?

*TransN: Эта опция упрощает поиск. Укажите в пределах изображения один цвет, который на экране может принимать любое значение. Используется, как правило, для поиска изображений формата PNG, GIF и TIF, имеющих прозрачные участки (для значков эта опция не требуется, так как их прозрачность определяется автоматически). Для файлов GIF скорее всего сработает *TransWhite. Для файлов PNG и TIF – *TransBlack. Иначе укажите в качестве N другое название цвета или значение в формате RGB (см. таблицу цветов или используйте команду PixelGetColor в режиме RGB). Примеры: *TransBlack, *TransFFFFAA, *Trans0xFFFFAA.

Но этот параметр имеет смысл, когда только один цвет задан как полностью прозрачный (ибо бывают изображения с разной степенью прозрачности для отдельных пикселей). В противном случае *TransN не поможет, тогда в ход идёт *n (диапазон оттенков).

Лично я определяю прозрачный цвет просто: открываю файл в программе Paint.

9

Re: AHK: Параметры команды ImageSearch

(для значков эта опция не требуется, так как их прозрачность определяется автоматически).

Это я уже понял из гугл перевода.

Лично я определяю прозрачный цвет просто: открываю файл в программе Paint.

А где в Paint такое посмотреть? На примере аттача расскажите пожалуйста.

В противном случае *TransN не поможет, тогда в ход идёт *n (диапазон оттенков).

Например эта картинка ведь может быть на чёрном, а потом на белом фоне. Тогда понадобится большое значение *n, что не только сильно  увеличит время поиска, но и может приводить ко множеству ложных совпадений, в зависимоти от фона.

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

10

Re: AHK: Параметры команды ImageSearch

Вот, я его переделал немного для наглядности. Открывать в paint.

11

Re: AHK: Параметры команды ImageSearch

Лично я определяю прозрачный цвет просто

Всё равно не ясно.

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

12

Re: AHK: Параметры команды ImageSearch

Всё равно не ясно.

Вот снимок экрана. На моём примере, приведённом выше, имеются области красного цвета и зелёного цвета. На оба этих цвета я установил 100% прозрачность. Но при открытии файла в программе mspaint.exe (Windows XP) становится видно, что цвета, на которые задана прозрачность - это красный и зелёный.

13

Re: AHK: Параметры команды ImageSearch

У меня в Win7 не показывает.
Только через WMP.

14 (изменено: serzh82saratov, 2014-07-10 10:43:53)

Re: AHK: Параметры команды ImageSearch

ypppu
Хорошо, давайте сначала. Есть PNG, с несколькими полностью прозрачными цветами, и несколькими полупрозрачными. Как мне все эти цвета заменить на один, и сделать его соответственно единственным прозрачным, который возможно использовать в *TransN?

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

15

Re: AHK: Параметры команды ImageSearch

serzh82saratov пишет:

ypppu
с несколькими полностью прозрачными цветами

  Так не бывает.

16

Re: AHK: Параметры команды ImageSearch

Я не в курсе, но у ypppu точно бывает:

ypppu пишет:


Вот снимок экрана. На моём примере, приведённом выше, имеются области красного цвета и зелёного цвета. На оба этих цвета я установил 100% прозрачность. Но при открытии файла в программе mspaint.exe (Windows XP) становится видно, что цвета, на которые задана прозрачность - это красный и зелёный.

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

17

Re: AHK: Параметры команды ImageSearch

serzh82saratov пишет:

ypppu
Хорошо, давайте сначала. Есть PNG, с несколькими полностью прозрачными цветами, и несколькими полупрозрачными. Как мне все эти цвета заменить на один, и сделать его соответственно единственным прозрачным, который возможно использовать в *TransN?

Я новым Paint практически не пользовался. А в старом это делается так: берём инструмент "заливка" и заливаем все области, которые должны быть прозрачными, каким-нибудь цветом. Сохраняем. Затем открываем картинку в более продвинутом редакторе (для меня это MS Photo Editor) и задаём прозрачность для нужного цвета (цветов).

18 (изменено: Alectric, 2014-07-10 19:31:48)

Re: AHK: Параметры команды ImageSearch

Может так будет понятней...

Справа отображены "слои": внизу - альфа канал (прозрачность), сверху видны красный и зеленый цвета.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

19 (изменено: Alectric, 2014-07-10 19:39:52)

Re: AHK: Параметры команды ImageSearch

А так выглядят изменения в альфа канале (серый цвет - полу-прозрачность).

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

20

Re: AHK: Параметры команды ImageSearch

Это всё уже понятно. Тут вопрос как "одним движением" заменить все такие пиксели, а не заливать каждый серый и чёрный пиксель (указанный в альфа канале) в рисунке, который может быть где нибудь в середине картинки, и всё это может походить на мелкое решето.

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

21

Re: AHK: Параметры команды ImageSearch

Про частичную прозрачность не могу подсказать - нужно уметь пользоваться какой-нибудь программой. А в Paint одним движением - могу, если один цвет имеет 100% прозрачность.

22

Re: AHK: Параметры команды ImageSearch

если один цвет имеет 100% прозрачность

Если так, то уже и движения ненужны, всё ведь и так, в том виде который требуется.

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

23

Re: AHK: Параметры команды ImageSearch

В общем ответ на вопрос получен?

как извлечь из иконки цвет, который задан в ней как прозрачный?

24

Re: AHK: Параметры команды ImageSearch

Ну если в "ручном" режиме, то да.

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