87 lines
1.8 KiB
Plaintext
87 lines
1.8 KiB
Plaintext
VAL INT width IS 512:
|
|
VAL INT height IS 512:
|
|
|
|
PROTOCOL maybe.image
|
|
CASE
|
|
nothing
|
|
just ; [height][width]BYTE
|
|
:
|
|
|
|
INT FUNCTION add.pixel(VAL INT kw, x, y, p.x, p.y, pixel)
|
|
VAL INT d.x IS x - p.x:
|
|
VAL INT d.y IS y - p.y:
|
|
VAL INT d IS (d.x*d.x) + (d.y*d.y):
|
|
INT r:
|
|
VALOF
|
|
IF
|
|
d = 0
|
|
r := pixel * kw
|
|
TRUE
|
|
r := (pixel * kw) / d
|
|
RESULT r
|
|
:
|
|
|
|
PROC blur.image(VAL INT kw, [height][width]BYTE img)
|
|
VAL INT kw.half IS kw / 2:
|
|
SEQ y = 0 FOR height
|
|
SEQ x = 0 FOR width
|
|
INITIAL INT sum IS 0:
|
|
INITIAL INT c IS 0:
|
|
SEQ
|
|
SEQ j = 0 FOR kw
|
|
VAL INT p.y IS (y + j) - kw.half:
|
|
IF
|
|
(p.y < 0) OR (p.y >= height)
|
|
SKIP
|
|
TRUE
|
|
SEQ i = 0 FOR kw
|
|
VAL INT p.x IS (x + i) - kw.half:
|
|
IF
|
|
(p.x < 0) OR (p.x >= width)
|
|
SKIP
|
|
TRUE
|
|
SEQ
|
|
sum := sum + add.pixel(kw, x, y, p.x, p.y, INT img[p.y][p.x])
|
|
c := c + 1
|
|
INITIAL INT n IS sum / c:
|
|
SEQ
|
|
IF
|
|
n > 255
|
|
n := 255
|
|
TRUE
|
|
SKIP
|
|
img[y][x] := BYTE n
|
|
:
|
|
|
|
PROC element(CHAN maybe.image in?)
|
|
[height][width]BYTE img:
|
|
INITIAL BOOL cont IS TRUE:
|
|
WHILE cont
|
|
SEQ
|
|
in ? CASE
|
|
nothing
|
|
cont := FALSE
|
|
just ; img
|
|
blur.image(9, img)
|
|
:
|
|
|
|
PROC server(VAL INT frames, CHAN maybe.image out!)
|
|
SEQ
|
|
SEQ i = 0 FOR frames
|
|
[height][width]BYTE img:
|
|
SEQ
|
|
SEQ y = 0 FOR height
|
|
SEQ x = 0 FOR width
|
|
img[y][x] := 128
|
|
out ! just ; img
|
|
out ! nothing
|
|
:
|
|
|
|
PROC main()
|
|
VAL INT frames IS 8:
|
|
CHAN maybe.image c:
|
|
PAR
|
|
element(c?)
|
|
server(frames, c!)
|
|
:
|