Типа так:
MODULE Blur;
IMPORT Kernel, Out:=StdLog;
CONST
W = 640; W1 = 640 - 3;
H = 480; H1 = 480 - 3;
N = 13;
Frames = 1000;
TYPE
Plane = ARRAY W*3, H OF BYTE;
Plane1 = ARRAY W*H*3 OF INTEGER;
PROCEDURE Blur2DArray*;
VAR
time : LONGINT;
f, n : INTEGER;
x, y : INTEGER;
color : INTEGER;
a, b : POINTER TO Plane;
c1, c2, c3, c4: POINTER TO Plane1;
i: INTEGER;
BEGIN
NEW(a);
NEW(b);
NEW(c1); NEW(c2); NEW(c3); NEW(c4); i := 0;
time := Kernel.Time();
FOR y:=1 TO H-2 DO
FOR x:=1 TO W-2 DO
FOR color:=0 TO 2 DO
c1[i] := x*3+color;
c2[i] := (x-1)*3;
c3[i] := (x+1)*3;
c4[i] := y;
INC(i);
END
END
END;
FOR f:=1 TO Frames DO
FOR n:=1 TO N DO
(*FOR y:=1 TO H-2 DO
FOR x:=1 TO W-2 DO
FOR color:=0 TO 2 DO
b[x*3+color,y] :=
(a[x*3+color,y+1] +
a[x*3+color,y-1] +
a[(x-1)*3,y] +
a[(x+1)*3,y]) DIV 4;
END
END
END;*)
FOR i := 0 TO W1*H1*3 DO
x := c1[i];
y := c4[i];
b[x, y] := SHORT(SHORT((a[x, y+1] + a[x, y-1] + a[c2[i], y] + a[c3[i], y]) DIV 4));
END;
(*FOR y:=1 TO H-2 DO
FOR x:=1 TO W-2 DO
FOR color:=0 TO 2 DO
a[x*3+color,y] :=
(b[x*3+color,y+1] +
b[x*3+color,y-1] +
b[(x-1)*3,y] +
b[(x+1)*3,y]) DIV 4;
END
END
END*)
FOR i := 1 TO W1*H1*3 DO
x := c1[i];
y := c4[i];
a[x, y] := SHORT(SHORT((b[x, y+1] + b[x, y-1] + b[c2[i], y] + b[c3[i], y]) DIV 4));
END;
END
END;
Out.Real((Kernel.Time() - time)/1000)
END Blur2DArray;
(*Blur1DArray*)
END Blur.
было ~750 (версия с DIV 4)
стало ~440
Но у меня может быть гон. Ибо антивирус мелкомягкий работает.