Что нового

Игнорировать цвет

kopeheb

Новичок
Сообщения
17
Репутация
0
Доброго времени суток всем.
Я начинающий, уже месяц ищу решение одного вопроса. Но видимо то ли так и не смог подобрать правильный параметр поиску, то ли не мог узнать в искомом ответ(ы) на свой вопрос. И вот в отчаянии пришел к Вам за пинком или за обнимашками :-[
Суть вопроса:
Кликать все желтые метки с объектом в нем любого цвета, кроме красного.
[spoiler="История приведшия меня к вопросу]
Мне нужно кликать на желтые(цвет постоянный метки($ym) с объектами не важно какого цвета, кроме красного($rzz). После чего, на $ym будет постоянный цвет $rzz или $bzz. С реагированием на $bzz(синий) проблем нет, но до этого мне пришлось вытаскивать код цвета для каждого объекта(либо общий в которых отсутствовал $rzz). Захотелось упростить и сократить скрипт, тем, что-бы кликать по желтому($ym) где есть синее($bzz) игнорируя желтое($ym) в кортом есть красное($rzz)

Кажется так понятнее :-[
[/spoiler]

Код:
;координаты области где у меня для теста размещаются объекты красное в желтом и синее в желтом
$x1=21 
$y1=100
$x2=51
$y2=325

$ym = PixelSearch($x1,$y1,$x2,$y2, 0xFFFf00,1);желтое
$rzz = PixelSearch($x1,$y1,$x2,$y2, 0xff0000,1); красное
$bzz = PixelSearch($x1,$y1,$x2,$y2, 0x0000ff,1);синее

По теме наводящее...:
1)можно ли из двух переменных сделать одну?(например $red = $ym and $rzz; $blue = $ym and $bzz)
2)в моем описании красный и синий условные, а реальные красные и синие Zz имеют множество цветов, опять же вопрос аналогичный первому, можно ли все цвета (наверное)суммировать в какую то переменную?

Прошу прощения, если изложение вопроса показалось тягомотным. Потому долго и не решился публично его задать. Готов дополнить на осонове ваших вопорсов.
Мне почему то кажется, что ответ совсем прост, просто я так на него и не наткнулся :(
 

Вложения

  • 3_метки.jpg
    3_метки.jpg
    10.6 КБ · Просмотры: 6

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
if $red = $ym and $red = $rzz then
делаешь что надо
endif
 
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
Belfigor
делаешь что надо
что например?
P.S.
После перемещения в другую ветвь форума, мне надеяться вообще хоть на какие-то мысли?
Или удалить эту тему и сформулировать по другому? Объясните плиз :scratch:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если я правильно понимаю твой вопрос, тебе надо чтобы при комбинации двух цветов, выполнялось действие, сверху я и привел пример как это делается. Смотришь есть или нет один цвет, смотришь есть или нет другой цвет и дальше сравниваешь две переменные.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Belfigor, можно вопрос?
При каких параметрах $red, сравнение выдаст истину?
Код:
;координаты области где у меня для теста размещаются объекты красное в желтом и синее в желтом
$x1=21 
$y1=100
$x2=51
$y2=325

$ym = PixelSearch($x1,$y1,$x2,$y2, 0xFFFf00,1);желтое
$rzz = PixelSearch($x1,$y1,$x2,$y2, 0xff0000,1); красное
$bzz = PixelSearch($x1,$y1,$x2,$y2, 0x0000ff,1);синее

if $red = $ym and $red = $rzz then
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
;координаты области где у меня для теста размещаются объекты красное в желтом и синее в желтом
$x1=21
$y1=100
$x2=51
$y2=325

PixelSearch($x1,$y1,$x2,$y2, 0xFFFf00,1);желтое
If Not @error Then
	$ym = True
Else
	$ym = False
EndIf

PixelSearch($x1,$y1,$x2,$y2, 0xff0000,1); красное
If Not @error Then
	$rzz = True
Else
	$rzz = False
EndIf

PixelSearch($x1,$y1,$x2,$y2, 0x0000ff,1);синее
If Not @error Then
	$bzz = True
Else
	$bzz = False
EndIf

if $ym = True and $rzz = True then MsgBox(0,0,"Истина")



Добавлено:
Сообщение автоматически объединено:

можно и без Red
 
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
Это все понятно.
Обнаружить искомые цвета проблем нет.
Вопрос был, как реализовать MouseMove($ym[0],$ym[1]) в любой желтый прямоугольник НО НЕ на тот в котором находится $rzz(красный цвет(0xff0000))(на скриншоте YR.bmp)
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Belfigor сказал(а):
Код:
;координаты области где у меня для теста размещаются объекты красное в желтом и синее в желтом
$x1=21
$y1=100
$x2=51
$y2=325

PixelSearch($x1,$y1,$x2,$y2, 0xFFFf00,1);желтое
If Not @error Then
	$ym = True
Else
	$ym = False
EndIf

PixelSearch($x1,$y1,$x2,$y2, 0xff0000,1); красное
If Not @error Then
	$rzz = True
Else
	$rzz = False
EndIf

PixelSearch($x1,$y1,$x2,$y2, 0x0000ff,1);синее
If Not @error Then
	$bzz = True
Else
	$bzz = False
EndIf

if $ym = True and $rzz = True then MsgBox(0,0,"Истина")


Добавлено:
Сообщение автоматически объединено:

можно и без Red



В этом случаи, по условиям автора, всегда будет истина. Так как в этих координатах содержатся все цвета.

kopeheb, эти жёлтые квадраты всегда находятся на одном месте? Они всегда имеют одинаковый размер?
Если да, то ищите сперва левый-верхний угол жёлтого квадрата. А потом уже в его координатах ищите цвет. Если там есть красный, то продолжаете искать следующий жёлтый квадрат, если синий, то перемещаете мышку по найденым координатам.
Если жёлтые квадраты находятся в любом месте, но при этом фон одноцветный, то можно попытаться воспользоваться BmpSearch, примеры с её приминением есть на форуме.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
kopeheb сказал(а):
Это все понятно.
Обнаружить искомые цвета проблем нет.
Вопрос был, как реализовать MouseMove($ym[0],$ym[1]) в любой желтый прямоугольник НО НЕ на тот в котором находится $rzz(красный цвет(0xff0000))(на скриншоте YR.bmp)
Как и сказали выше, ищешь желтый прямоугольник, ищешь в нем красный, если нет красного то нажимаешь по координатам прямоугольника.
 
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
edyapd
эти жёлтые квадраты всегда находятся на одном месте? Они всегда имеют одинаковый размер?
Да
Если там есть красный, то продолжаете искать следующий жёлтый квадрат, если синий, то перемещаете мышку по найденым координатам.
ну вот я и не знаю как "пройти мимо" красного, как циклически это сделать. Кодом подскажите пжлста.
но при этом фон одноцветный, то можно попытаться воспользоваться BmpSearch
фон не всегда однотонный. и я не хотел бы прибегать в поиску картинки, ибо слишком не маленький код получается, для примера в других языках(юПилота,Кликерманн) поиск картинки реализуется в 2-3 строках при каком-либо требовании к *.bmp в папке с проектом во1х; во2х, длинный код для (чье имя нельзя называть в общей теме ;) ;D) уже давно написан, в котором поиск идет по всем искомым цветам, в заданных координатах для каждого любого цвета в желтом. Просто ко мне пришла мысль, что можно проще, искать не в каждом отдельном регионе а на общем пространстве(пусть на всем экране) при этом обходить красное в желтом. Т.е. имея три цвета(или сумму цветов для каждого из трех объекта)а именно желтый(цвет квадратика) нужный синий(в желтом квадратике) и не нужный, игнорируемый красный(в желтом квадратике).
Belfigor
Как и сказали выше, ищешь желтый прямоугольник, ищешь в нем красный, если нет красного то нажимаешь по координатам прямоугольника.
Не умею, но хочу научиться :-[

P.S. рискну процитировать себя, может это тоже полезно
По теме наводящее...:
1)можно ли из двух переменных сделать одну?(например $red = $ym and $rzz; $blue = $ym and $bzz)
2)в моем описании красный и синий условные, а реальные красные и синие Zz имеют множество цветов, опять же вопрос аналогичный первому, можно ли все цвета (наверное)суммировать в какую то переменную?

Спасибо
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kopeheb,
Так будет понятно?
Код:
#include <GUIConstantsEx.au3>

Opt('PixelCoordMode', 2)
Opt('MouseCoordMode', 2)

$hGui = GUICreate('Test', 99, 212)
For $i = 0 To 2
	GUICtrlCreatePic(@ScriptDir & '\' & $i + 1 & '.jpg', 33, 26 + $i * 26 * 2, 33, 26)
Next
$idBtn = GUICtrlCreateButton('Click', 11, 182, 77, 20)
GUISetState()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtn
			MouseMove(0, 0)
			MouseMove(99, 0)
			MouseMove(99, 78)
			MouseMove(0, 78)
			MouseMove(0, 0)
			Sleep(2000)
			$aCoord = PixelSearch(0, 0, 99, 78, 0xFFFF00, 3, 2, $hGui);желтое
			If Not @error Then
				PixelSearch(0, 0, 99, 78, 0xDD1700, 3, 2, $hGui);красное
				If @error Then
					ConsoleWrite('Нет красного' & @LF)
					MouseMove($aCoord[0], $aCoord[1])
				Else
					ConsoleWrite('Есть красный' & @LF)
				EndIf
			EndIf
			Sleep(2000)
			MouseMove(0, 56)
			MouseMove(99, 56)
			MouseMove(99, 134)
			MouseMove(0, 134)
			MouseMove(0, 56)
			Sleep(2000)
			$aCoord = PixelSearch(0, 56, 99, 134, 0xFFFF00, 3, 2, $hGui);желтое
			If Not @error Then
				PixelSearch(0, 56, 99, 134, 0xDD1700, 3, 2, $hGui);красное
				If @error Then
					ConsoleWrite('Нет красного' & @LF)
					MouseMove($aCoord[0], $aCoord[1])
				Else
					ConsoleWrite('Есть красный' & @LF)
				EndIf
			EndIf
			Sleep(2000)
			MouseMove(0, 108)
			MouseMove(99, 108)
			MouseMove(99, 186)
			MouseMove(0, 186)
			MouseMove(0, 108)
			Sleep(2000)
			$aCoord = PixelSearch(0, 108, 99, 186, 0xFFFF00, 3, 2, $hGui);желтое
			If Not @error Then
				PixelSearch(0, 108, 99, 186, 0xDD1700, 3, 2, $hGui);красное
				If @error Then
					ConsoleWrite('Нет красного' & @LF)
					MouseMove($aCoord[0], $aCoord[1])
				Else
					ConsoleWrite('Есть красный' & @LF)
				EndIf
			EndIf
	EndSwitch
WEnd
Прикрепленные картинки должны лежать рядом со скриптом.
 

Вложения

  • jpg.zip
    5.1 КБ · Просмотры: 4
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
madmasles Спасибо
протестировал, буду разбираться с телом :ok:

спасибо огромный, работает. Знал же что решение не сложное. Прост я путаюсь еще в проверках условий.
кстати заодно спасибо за пример размещения графики на форме.
Тему закрываю.
 
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
Доброго всем ...!
Не ругайте меня сильно, если я чтот нарушаю в правилах форума.
Хоть я и отметил эту тему решенной, хотелось бы продолжить по вопросу в первом посте:
По теме наводящее...:
1)можно ли из двух переменных сделать одну?(например $red = $ym and $rzz; $blue = $ym and $bzz)

изучал статью http://autoit-script.ru/index.php?topic=18429.0 и обнаружил что существует некая команда
Вроде там было что-то типа команды FFKeepColor($array), где $array - список цветов которые нужно оставить - все остальное отсеивается.
я подумал, что возможно это ответ на мой вопрос?
Уважаемый Belfigor не подскажите где можно почитать как это работает (FFKeepColor($array)) на доступном для чайника русском языке? 8)
хотел бы протестировать и придумать, как мне это могло пригодиться. Если есть готовый примерчик, было бы здорово.
Я пока не нашел, а только обсуждения французских коллег, но там я быстро запутался и ничего не понял :-[
Еще раз за ранее прошу прощения, если некорректно разместил этот пост.
Спасибо.
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
kopeheb [?]
где можно почитать как это работает (FFKeepColor($array)) на доступном для чайника русском языке?

Почитать можно, но не на русском. (ТУТ) :beer:
На русском вряд ли будет что-то, разве что новую тему создавать :scratch:
 
Автор
K

kopeheb

Новичок
Сообщения
17
Репутация
0
спасибо gloss буду разбираться какт :stars: :D
 
Верх