Author Topic: Запись картинки в массив и последующее ее сравнение.  (Read 1989 times)

0 Members and 1 Guest are viewing this topic.

lojjjol

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Можно ли сделать снимок участка экрана и записать его в массив, чтоб потом этот массив сравнивать с другими участками?
Сохранять кусочек скриншота на диск - не вариант. Именно нужно сделанный снимок запихивать в переменную/массив.

Реально ли вообще такое и как осуществить?
Заранее благодарен за ответ.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
В переменную нельзя. Только через сохранение изображения.

И не имеет смысла, т.к. функций поиска с массивом данных в переменной (картинкой) у нас нет.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Все куда проще.

Функцией SCREENSHOTFIX сохраняем снимок в файл с определенным именем, при повторных сохранениях файл будет переписываться.
Code: (clickermann) [Select]
GETSCREEN
SCREENSHOTFIX(100,100, 150,150, "Image1.bmp", 0)

Затем ищем картинку где нужно.
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Image1.bmp", -1, 100) // Потом ищем его
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Можно ли сделать снимок участка экрана и записать его в массив, чтоб потом этот массив сравнивать с другими участками?
Сохранять кусочек скриншота на диск - не вариант. Именно нужно сделанный снимок запихивать в переменную/массив.

Реально ли вообще такое и как осуществить?
Заранее благодарен за ответ.

Ну как вариант, можно записать в массив хешсумму и сравнивать ее с хешсуммами других участков экрана (но тут должны быть точные координаты). А что именно делать планируете?

lojjjol

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
То, что я "умышленно отказываюсь понимать", во-первых, утверждение изначально ложное.
Во-вторых, прискорбно, что вы, опытный пользователь данного софта, не понимаете одной простой вещи:
Не все пользователи данного кликера обязаны со старту, в первые дни использования, осознать весь функционал и программные возможности рассматриваемой среды разработки.

Вариант с подсчетом контрольной суммы пикселей решает задачу намного проще, чем попытки запихивания целого изображения в массив, верно. До поднятия этой темы я не догадывался, что такая функция есть и как она работает.
Исходя из этого выплыло использование ограничивающего и конкретизирующего "Именно...".

Подсказка была как раз, но то как вы это донесли - так себе.
А так, спасибо, данный вопрос я для себя решил.

Итог:
Если в скрипте нужна функция сравнения участков изображения на разность (не совпадение) или, сказать точнее, детектирование изменения изображения на экране, на базовом уровне это можно осуществить с помощью контрольных сумм, например PXLXOR и PXLXСRС..

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

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

lojjjol

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Да, наверняка лучший из вариантов.
Спасибо)

Можно ли сделать снимок участка экрана и записать его в массив, чтоб потом этот массив сравнивать с другими участками?
Сохранять кусочек скриншота на диск - не вариант. Именно нужно сделанный снимок запихивать в переменную/массив.

Реально ли вообще такое и как осуществить?
Заранее благодарен за ответ.

Ну как вариант, можно записать в массив хешсумму и сравнивать ее с хешсуммами других участков экрана (но тут должны быть точные координаты). А что именно делать планируете?

lojjjol

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Спасибо, наверняка из за непонятной формулировки вопроса было трудно понять, для каких целей это нужно было. Лучшим из вариантов оказался вариант использования контрольных сумм. Но еще раз спасибо за внимание к теме )

Все куда проще.

Функцией SCREENSHOTFIX сохраняем снимок в файл с определенным именем, при повторных сохранениях файл будет переписываться.
Code: (clickermann) [Select]
GETSCREEN
SCREENSHOTFIX(100,100, 150,150, "Image1.bmp", 0)

Затем ищем картинку где нужно.
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Image1.bmp", -1, 100) // Потом ищем его
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

lojjjol

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Верно. Спасибо за ответ )
Удовлетворительный вариант решения проблемы - через контрольные суммы.

В переменные записываем контрольные суммы и их сравниваем.

В переменную нельзя. Только через сохранение изображения.

И не имеет смысла, т.к. функций поиска с массивом данных в переменной (картинкой) у нас нет.