RosettaCodeData/Task/Image-convolution/BBC-BASIC/image-convolution.bbc

47 lines
1.2 KiB
Plaintext

Width% = 200
Height% = 200
DIM out&(Width%-1, Height%-1, 2)
VDU 23,22,Width%;Height%;8,16,16,128
*DISPLAY Lena
OFF
DIM filter%(2, 2)
filter%() = -1, -1, -1, -1, 12, -1, -1, -1, -1
REM Do the convolution:
FOR Y% = 1 TO Height%-2
FOR X% = 1 TO Width%-2
R% = 0 : G% = 0 : B% = 0
FOR I% = -1 TO 1
FOR J% = -1 TO 1
C% = TINT((X%+I%)*2, (Y%+J%)*2)
F% = filter%(I%+1,J%+1)
R% += F% * (C% AND &FF)
G% += F% * (C% >> 8 AND &FF)
B% += F% * (C% >> 16)
NEXT
NEXT
IF R% < 0 R% = 0 ELSE IF R% > 1020 R% = 1020
IF G% < 0 G% = 0 ELSE IF G% > 1020 G% = 1020
IF B% < 0 B% = 0 ELSE IF B% > 1020 B% = 1020
out&(X%, Y%, 0) = R% / 4 + 0.5
out&(X%, Y%, 1) = G% / 4 + 0.5
out&(X%, Y%, 2) = B% / 4 + 0.5
NEXT
NEXT Y%
REM Display:
GCOL 1
FOR Y% = 0 TO Height%-1
FOR X% = 0 TO Width%-1
COLOUR 1, out&(X%,Y%,0), out&(X%,Y%,1), out&(X%,Y%,2)
LINE X%*2,Y%*2,X%*2,Y%*2
NEXT
NEXT Y%
REPEAT
WAIT 1
UNTIL FALSE