Нашёл старый пример эффекта размытия. При адаптации под Linux всплыли две проблемы: yabasic не умеет масштабировать шрифты (вместо огромной буквы рисует 10-пиксельную), а чтение экрана через getbit$ занимает минуты.
Решение:
Решение:
- Рисуем букву «B» вручную через fill rectangle и сразу заносим пиксели в массив (без чтения экрана).
- Используем двойной буфер (p и p_new), чтобы размытие шло ровно во все стороны.
- Добавили clear screen для работы inkey$ (выход по Esc).
Код: Выделить всё
width = 250 : height = 250
open window width, height
clear screen
backcolor 255,255,255
clear window
color 0,0,0
dim p(width, height), p_new(width, height)
for x = 0 to width-1
for y = 0 to height-1
p(x,y) = 255
next y
next x
sub draw_block(x1, y1, x2, y2)
fill rectangle x1, y1, x2, y2
for x = x1 to x2
for y = y1 to y2
p(x,y) = 0
next y
next x
end sub
// Рисуем букву "B"
draw_block(40, 30, 70, 220)
draw_block(70, 30, 140, 60)
draw_block(140, 30, 170, 90)
draw_block(140, 90, 170, 120)
draw_block(70, 120, 140, 150)
draw_block(70, 150, 160, 180)
draw_block(160, 150, 190, 200)
draw_block(160, 200, 190, 220)
draw_block(70, 220, 160, 240)
do
for x = 1 to width-2
for y = 1 to height-2
c = 0
c = c + p(x-1,y-1) + p(x,y-1) + p(x+1,y-1)
c = c + p(x-1,y) + p(x,y) + p(x+1,y)
c = c + p(x-1,y+1) + p(x,y+1) + p(x+1,y+1)
c = c / 9
p_new(x,y) = c
color c, c, c
dot x, y
next y
next x
for x = 1 to width-2
for y = 1 to height-2
p(x,y) = p_new(x,y)
next y
next x
pause 0.01
k$ = inkey$(0.001)
if k$ = "esc" or k$ = chr$(27) then
break
end if
loop
close window
end