Автор Тема: Есть алтернативный способ?  (Прочитано 169 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Hito

  • Герой форума
  • *****
  • Сообщений: 936
    • Просмотр профиля
Есть алтернативный способ?
« : Октябрь 07, 2019, 03:08:01 pm »
Ребят, может я как-то по-сложному делаю все это? Может есть способ полегче и побыстрее? Этот кусок выполняется пол секунды - это долго...
Код: Clickermann
  1. FOR($y=19,$y<30)
  2.   FOR($x=913,$x<947)
  3.      $col = PXL ($x, $y)
  4.      IF($col ! 16777087)
  5.         PXLREPLACE($x, $y, $x, $y, $col, 0)
  6.      END_IF
  7.   END_CYC
  8. END_CYC
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3339
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Есть алтернативный способ?
« Ответ #1 : Октябрь 07, 2019, 03:38:06 pm »
Цитировать
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

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3339
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Есть алтернативный способ?
« Ответ #2 : Октябрь 07, 2019, 04:12:14 pm »
Можно всё вывернуть наоборот и попиксельно красить только цвет 16777087, а чёрный весь сразу.

Код: Clickermann
  1. SUB(print_timeaction, $actionnamet, $tt_search)
  2.    LOGWRITE("время выполнения ", $actionnamet, " : ", $tt_search, " мс")
  3. END_SUB
  4.  
  5. GETSCREEN
  6. $timer1 = $_ms
  7.  
  8. SCANPXL($scan, 913,19, 946,29, 16777087)
  9. PXLREPLACE(913,19, 946,29, -1, 0)
  10. $scan_size = ARRSIZE($scan)
  11. FOR($i=0, $i < $scan_size, 2)
  12.    $x = $scan[$i]
  13.    $y = $scan[$i+1]
  14.    PXLREPLACE($x, $y, $x, $y, -1, 16777087)    
  15. END_CYC
  16. UNDEFINE($scan)
  17.  
  18. print_timeaction("тест 1", $_ms - $timer1)
  19. SCREENSHOT
  20.  
  21. HALT

Цитировать
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
« Последнее редактирование: Октябрь 07, 2019, 04:33:22 pm от Vint »


Hito

  • Герой форума
  • *****
  • Сообщений: 936
    • Просмотр профиля
Re: Есть алтернативный способ?
« Ответ #3 : Октябрь 07, 2019, 09:42:08 pm »
Цитировать
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

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3339
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Есть алтернативный способ?
« Ответ #4 : Октябрь 07, 2019, 11:19:34 pm »
Приоритет добавить попробуй.