Author Topic: SCREENSHOTEX сравнение  (Read 2674 times)

0 Members and 1 Guest are viewing this topic.

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
SCREENSHOTEX сравнение
« on: June 05, 2019, 05:04:00 PM »
можно ли сравнить между собой несколько .bmp файла сделанных с помощию команды  SCREENSHOTEX?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SCREENSHOTEX сравнение
« Reply #1 on: June 05, 2019, 06:33:18 PM »
Стандартными средствами нет.
А зачем? Если совпадение полное то используется подсчет CRC суммы области и сравниваются уже хэши без всяких скриншотов.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: SCREENSHOTEX сравнение
« Reply #2 on: June 05, 2019, 10:30:39 PM »
Стандартными средствами можно... но сложно.



FREADDATA (path, $arr, [start], [count] ) . Читаем файлы побайтово, исключив все данные о файле (те что в начале вписаны), а сверять только пиксельные данные. Тут даже и процент совпадения можно прикрутить  ;)

Можно какнибудь полегче, сравнивыть сумму тех самых байт которые получаем с помощью FREADDATA.
« Last Edit: June 05, 2019, 10:59:08 PM by dramster »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SCREENSHOTEX сравнение
« Reply #3 on: June 06, 2019, 06:58:09 AM »
Я имел ввиду, что просто функции или команды для этого нет.
Так можно, да, но скорость... Хоть и получили функцию чтения байтов, скорость работы с массивами не даст нам делать сравнения быстро.
Лучше автору и не упоминать о такой возможности, он скорее всего, как всегда, пытается микроскопом гвозди забивать и требует всё более новых и дорогих моделей. При этом не разобравшись в базовых простейших действиях.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: SCREENSHOTEX сравнение
« Reply #4 on: June 06, 2019, 09:58:02 PM »
Так можно, да, но скорость... Хоть и получили функцию чтения байтов, скорость работы с массивами не даст нам делать сравнения быстро.
Да, скорость храмает, я даже проверил на фрагментах 100х100. Переборка массива с таким количеством байт выполняется примерно 30сек.  С мелкими картинками конечно будет быстрее, но всеже.

Пробовал методом суммы всех байт и операторами типа xor, разницы нет, все время уходит именно на перебор элементов.

Мой эксперимент:

делаю три картинки в одной и той же области, чтоб одна из них отличалась от двух других.
Code: (clickermann) [Select]
FOR($a=0,$a<3)
   $scr = DIALOGBOX (strconcat("создать ",$a,".bmp ?"), 0)
   GETSCREEN
   SCREENSHOTFIX (0, 0, 100, 100, strconcat($a,".bmp"))
   
END_CYC

halt

далее суммирую все байты каждой из картинок по очереди:

Code: (clickermann) [Select]
FREADDATA ("0.bmp", $arr_0)
FOR($a=0,$a<arrsize($arr_0))
$sum_0 = $sum_0 + $arr_0[$a]
END_CYC
print($sum_0) // 3582040


FREADDATA ("1.bmp", $arr_1)
FOR($a=0,$a<arrsize($arr_1))
$sum_1 = $sum_1 + $arr_1[$a]
END_CYC
print($sum_1) // 3582040


FREADDATA ("2.bmp", $arr_2)
FOR($a=0,$a<arrsize($arr_2))
$sum_2 = $sum_2 + $arr_2[$a]
END_CYC
print($sum_2) // 9379120

// видим, что третья картика отличается от первых двух

//на всю проверку трех картинок 100х100 уходит 93 секунды
halt