Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.
Вот мой вариант, при увеличении радиуса с 1 до максимального быстродействие падает лишь вдвое, да и на маленьких радиусах работает побыстрее. Ограничение - радиус должен быть меньше половины меньшего размера картинки. Загрузка из файла и вывод на экран - только для примера.
Код интересный - натолкнул на мысль, как ускорить мой фильтр
Но кроме ограничения в радиусе у него есть ещё один, куда более серьёзный недостаток - качество. Он делает не пятно, а скорее "затирку". Проект бегло просмотрел, так что причину пока не скажу.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
Это билинейная фильтрация, качество соответственное. Попробуй применять фильтр дважды подряд, скорость все равно будет высокой, а внешне результат изменится.
Но главное было - показать смысл задумки, что значение фильтра можно не вычислять для каждой точки заново, а лишь вносить поправку, используя уже вычисленное значение предыдущей точки.