Author Topic: Есть алтернативный способ?  (Read 2316 times)

0 Members and 3 Guests are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Есть алтернативный способ?
« on: October 07, 2019, 03:08:01 PM »
Ребят, может я как-то по-сложному делаю все это? Может есть способ полегче и побыстрее? Этот кусок выполняется пол секунды - это долго...
Code: (clickermann) [Select]
FOR($y=19,$y<30)
   FOR($x=913,$x<947)
      $col = PXL ($x, $y)
      IF($col ! 16777087)
         PXLREPLACE($x, $y, $x, $y, $col, 0)
      END_IF
   END_CYC
END_CYC
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Есть алтернативный способ?
« Reply #1 on: October 07, 2019, 03:38:06 PM »
Quote
15:35:20 ===============  время выполнения  ===============
15:35:20 время выполнения тест 1 : 232 мс
15:35:20 
15:35:55 ===============  время выполнения  ===============
15:35:55 время выполнения тест 1 : 177 мс
15:35:55 
15:36:31 ===============  время выполнения  ===============
15:36:31 время выполнения тест 1 : 218 мс
15:36:31 
15:37:40 ===============  время выполнения  ===============
15:37:40 время выполнения тест 1 : 205 мс
15:37:40 
15:37:41 ===============  время выполнения  ===============
15:37:41 время выполнения тест 1 : 195 мс


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Есть алтернативный способ?
« Reply #2 on: October 07, 2019, 04:12:14 PM »
Можно всё вывернуть наоборот и попиксельно красить только цвет 16777087, а чёрный весь сразу.

Code: (clickermann) [Select]
SUB(print_timeaction, $actionnamet, $tt_search)
    LOGWRITE("время выполнения ", $actionnamet, " : ", $tt_search, " мс")
END_SUB

GETSCREEN
$timer1 = $_ms

SCANPXL($scan, 913,19, 946,29, 16777087)
PXLREPLACE(913,19, 946,29, -1, 0)
$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
    $x = $scan[$i]
    $y = $scan[$i+1]
    PXLREPLACE($x, $y, $x, $y, -1, 16777087)   
END_CYC
UNDEFINE($scan)

print_timeaction("тест 1", $_ms - $timer1)
SCREENSHOT

HALT

Quote
16:08:48 ===============  время выполнения  ===============
16:08:48 время выполнения тест 1 : 151 мс
16:08:48 
16:08:49 ===============  время выполнения  ===============
16:08:49 время выполнения тест 1 : 165 мс
16:08:49 
16:08:51 ===============  время выполнения  ===============
16:08:51 время выполнения тест 1 : 144 мс
16:08:51 
16:08:52 ===============  время выполнения  ===============
16:08:52 время выполнения тест 1 : 178 мс
16:08:52

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

Да, мы сначала тратимся на SCANPXL, но он выполняется быстро. Ещё на PXLREPLACE - он тоже быстро, т.к. на весь блок сразу.
И главное убираем из под двойного цикла PXL($x, $y) + IF
А если красить чёрным больше половины, то ещё и на попиксельном PXLREPLACE
« Last Edit: October 07, 2019, 04:33:22 PM by Vint »


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Есть алтернативный способ?
« Reply #3 on: October 07, 2019, 09:42:08 PM »
Quote
15:35:20 ===============  время выполнения  ===============
15:35:20 время выполнения тест 1 : 232 мс
15:35:20 
15:35:55 ===============  время выполнения  ===============
15:35:55 время выполнения тест 1 : 177 мс
15:35:55 
15:36:31 ===============  время выполнения  ===============
15:36:31 время выполнения тест 1 : 218 мс
15:36:31 
15:37:40 ===============  время выполнения  ===============
15:37:40 время выполнения тест 1 : 205 мс
15:37:40 
15:37:41 ===============  время выполнения  ===============
15:37:41 время выполнения тест 1 : 195 мс

Я понимаю, что у тебя быстрее ))) Если б я на хосте запускал, то у меня еще быстрее было бы )) А у меня, как всегда - все на виртуалках...)))
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Есть алтернативный способ?
« Reply #4 on: October 07, 2019, 11:19:34 PM »
Приоритет добавить попробуй.