(* Last edited on 1999-03-11 01:17:22 by stolfi *)

MODULE Pixel3x3Window;
 
IMPORT PGMImageFilter;

PROCEDURE Get(
    x, y: INT; 
    READONLY imBuf: PGMImageFilter.PixelBuffer;
    NX, NY: NAT; 
    VAR p: T;
    noPixel: Pixel := LAST(NAT);
  ) =
  BEGIN
    WITH NB = NUMBER(imBuf) DO
      <* ASSERT NB >= MIN(NY, 3) *>
      FOR dy := -1 TO +1 DO
        WITH ym = y + dy, yr = ym MOD NB DO
          FOR dx := -1 TO +1 DO
            WITH xm = x + dx, xr = xm DO
              IF ym >= 0 AND ym < NY AND xm >= 0 AND xm < NX THEN
                p[dy,dx] := imBuf[yr,xr]
              ELSE
                p[dy,dx] := noPixel
              END
            END
          END
        END
      END
    END
  END Get;

BEGIN 
END Pixel3x3Window.
