Что нового

Какой алгоритм использует функция PixelChecksum?

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Что-то я не пойму как эта функция работает. Левая, верхняя, правая, нижняя сторона прямоугольника... только относительно чего эти координаты? И если не трудно, разжуйте относительно опции PixelCoordMode :smile: Я понял что 0 - это координаты экрана, а вот 1 и 2 активного окна понятно менее ясно. %( Как мне объяснить AutoIT какую именно область в активном окне мне нужно засуммировать? ))

Спасибо за ответ! :IL_AutoIt_1:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
PixelCoordMode (если я не ошибаюсь)
0 = relative coords to the defined window ( координаты относительно наружной части окна )
1 = absolute screen coordinates (default) (абсолютные координаты относительно монитора)
2 = relative coords to the client area of the defined window (координаты относительно внутренней части окна)



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

Отсчёт координат rectangle в функциях:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Спасибо, алгоритм я понял, построение треугольника ведется по двум точкам: верхней левой и нижней правой. Теперь осталось разобраться с рабочей областью окна. Вот беру я изображение (вложено к этому сообщению). Делаю копию с другим именем файла. Открываю эти два файла графическим редактором Paint. И собственно запускаю скрипт вот с таким кодом:

Код:
dim $jpg1, $jpg2
AutoItSetOption("PixelCoordMode", 2)
WinActivate("sss.jpg - Paint", "")
$jpg1 = PixelChecksum(35, 35, 80, 80)
WinActivate("закрыли.jpg - Paint", "")
$jpg2 = PixelChecksum(35, 35, 80, 80)

If $jpg1 = $jpg2 Then 
	MsgBox(0, "Внимание!", "Контрольная сумма графических участков совпадает!") 
Else 
	MsgBox(0, "Внимание!", "Контрольная сумма графических участков не совпадает!") 
	EndIf

Самое интересное, что я не знаю как мне указать что подсчитывать сумму пикселов надо на самом изображение и не, например, панели инструментов окна Paint. )))) Стоит мне в одном из окон поменять цвет карандаша (например на красный) как тут же сумма перестает совпадать ))) А мне надо сумму пикселов на рисунке посчитать. Как быть???

Еще раз спасибо!
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Поставь обязательно команду
Код:
WinWaitActive("sss.jpg - Paint", "")

И
Код:
WinWaitActive("закрыли.jpg - Paint", "")

С помощью Au3Info найди точки начала рисунка (верхний левый угол) и конца (нижний правый)
Вычисли смещение и подставь эти данные в PixelChecksum
Рисунки должны быть одинаковы по масшабу и не должно быть ни каких выделеных областей.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kalisnik [?]
Стоит мне в одном из окон поменять цвет карандаша (например на красный) как тут же сумма перестает совпадать )))
Ну конечно :smile: Функция PixelChecksum ведь тем и занимается, что сравнивает сумму пикселей выбранного участка.
Поэтому любое изменении на контрольном участке, приведёт к изменению контрольной суммы.
Какова ваша цель? Отследить изменение надписи на изображение?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
А я еще проверяю четыре угла с помощью MouseMove( x, y , 20) с паузой, чтобы не ошибиться.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Kalisnik
не брезгуем брать код в тэги [autoit][/autoit] (или нажав соответствующую кнопку -
autoit.gif
)
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Все! Разобрался! :laugh:
Ну и еще раз: Спасибо, спасибо, спасибо!!!! )))))


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

Kaster сказал(а):
Kalisnik
не брезгуем брать код в тэги [autoit][/autoit] (или нажав соответствующую кнопку -
autoit.gif
)
А зачем его брать в эти тэги? 0_о
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett сказал(а):
Kalisnik [?]
Стоит мне в одном из окон поменять цвет карандаша (например на красный) как тут же сумма перестает совпадать )))
Ну конечно :smile: Функция PixelChecksum ведь тем и занимается, что сравнивает сумму пикселей выбранного участка.
Поэтому любое изменении на контрольном участке, приведёт к изменению контрольной суммы.
Какова ваша цель? Отследить изменение надписи на изображение?
Да, именно надписи вообще... а в данном рисунке, я просто хотел сравнить суммы левого верхнего угла, где начиналась светлая область ))) И этого я добился вот таким кодом:
Код:
dim $jpg1, $jpg2
AutoItSetOption("PixelCoordMode", 2)
WinActivate("sss.jpg - Paint", "")
WinWaitActive("sss.jpg - Paint", "")
$jpg1 = PixelChecksum(100, 90, 156, 140)
WinActivate("закрыли.jpg - Paint", "")
WinWaitActive("закрыли.jpg - Paint",  "")
$jpg2 = PixelChecksum(100, 90, 156, 140)

If $jpg1 = $jpg2 Then 
	MsgBox(0, "Внимание!", "Контрольная сумма графических участков совпадает!") 
Else 
	MsgBox(0, "Внимание!", "Контрольная сумма графических участков не совпадает!") 
	EndIf

))))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Kalisnik
Предупреждение
Последнее китайское предупреждение
 
Верх