Oberon-2
<*+ MAIN *>
MODULE Blur;
IMPORT Out;
CONST
W = 640; W1 = 640 - 3;
H = 480; H1 = 480 - 3;
N = 13;
Frames = 100;
TYPE
INTEGER = LONGINT;
Plane = ARRAY W*3, H OF SHORTINT;
VAR
a, b : Plane;
PROCEDURE Blur2DArray*;
VAR
f, n : INTEGER;
x, y : INTEGER;
color : INTEGER;
BEGIN
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 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
END
END;
END Blur2DArray;
BEGIN
Blur2DArray;
Out.String("Done");
END Blur.
Oberon-07/11
MODULE Blur;
IMPORT dt := DateTime, In, Out, RTL;
CONST
W = 640; W1 = 640 - 3;
H = 480; H1 = 480 - 3;
N = 13;
Frames = 1;
TYPE
Plane = ARRAY W*3, H OF CHAR;
VAR
a, b: Plane;
time: LONGREAL;
PROCEDURE Blur2DArray*;
VAR
f, n : INTEGER;
x, y : INTEGER;
color : INTEGER;
BEGIN
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] := CHR((ORD(a[x*3+color,y+1])+ORD(a[x*3+color,y-1])+ORD(a[(x-1)*3,y])+ORD(a[(x+1)*3,y])) DIV 4);
END
END
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] := CHR((ORD(b[x*3+color,y+1])+ORD(b[x*3+color,y-1])+ORD(b[(x-1)*3,y])+ORD(b[(x+1)*3,y])) DIV 4);
END
END
END
END
END;
END Blur2DArray;
BEGIN
In.Open;
Out.Open;
time := dt.Now();
Blur2DArray;
Out.FixReal(LONG(FLT(Frames))/((dt.Now() - time) * 86400.D0), 20, 5);
In.Ln;
END Blur.
Oberon-07M
MODULE Blur;
IMPORT c := Console;
CONST
W = 640; W1 = 640 - 3;
H = 480; H1 = 480 - 3;
N = 13;
Frames = 10;
TYPE
Plane = ARRAY W*3, H OF CHAR;
VAR
a, b : Plane;
time : INTEGER;
PROCEDURE ["Kernel32.dll", "GetTickCount", 0] GetTickCount(): INTEGER;
PROCEDURE Blur2DArray*;
VAR
f, n : INTEGER;
x, y : INTEGER;
color : INTEGER;
BEGIN
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] := CHR((ORD(a[x*3+color,y+1])+ORD(a[x*3+color,y-1])+ORD(a[(x-1)*3,y])+ORD(a[(x+1)*3,y])) DIV 4);
END
END
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] := CHR((ORD(b[x*3+color,y+1])+ORD(b[x*3+color,y-1])+ORD(b[(x-1)*3,y])+ORD(b[(x+1)*3,y])) DIV 4);
END
END
END
END
END;
END Blur2DArray;
BEGIN
time := GetTickCount();
Blur2DArray;
time := GetTickCount() - time;
c.Int(time); c.Ln;
END Blur.
Dephi
program Blur;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
CONST
W = 640; W1 = 640 - 3;
H = 480; H1 = 480 - 3;
NN = 13;
Frames = 10;
TYPE
Plane = ARRAY [0..W*3-1, 0..H-1] OF BYTE;
VAR
a, b : Plane;
PROCEDURE Blur2DArray;
VAR
f, n : INTEGER;
x, y : INTEGER;
color : INTEGER;
i: INTEGER;
BEGIN
FOR f:=1 TO Frames DO BEGIN
FOR n:=1 TO NN DO BEGIN
FOR y:=1 TO H-2 DO BEGIN
FOR x:=1 TO W-2 DO BEGIN
FOR color:=0 TO 2 DO BEGIN
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 y:=1 TO H-2 DO BEGIN
FOR x:=1 TO W-2 DO BEGIN
FOR color:=0 TO 2 DO BEGIN
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
END
END;
END;
var t: Cardinal;
begin
try
t := GetTickCount;
Blur2DArray;
t := GetTickCount - t;
Write((Frames/t*1000):20:5);
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.