!747
!image classes
!FrameWithImages

m {
  static int g = 8;
  static RGBImage img;
  
  !include #1000522 // helper functions
  !include #1000898 // exitOnFrameClose
  
  p {
    img = loadImage("#1000326");
    int w = img.getWidth(), h = img.getHeight();
    RGBImage img2 = new RGBImage(img.getWidth(), img.getHeight(), Color.white);
    for (int y = g; y < h-g; y += g)
      for (int x = g; x < w-g; x += g) {
        double d = calcDiffs(x, y);
        paintBlock(img2, new RGB(d), x, y);
      }
    showImage(img2);
  }
  
  static double calcDiffs(int x, int y) {
    RGB col = img.getPixel(x, y);
    return (pixelDiff(img.getPixel(x, y-g), col)
      +pixelDiff(img.getPixel(x-g, y), col)
      +pixelDiff(img.getPixel(x+g, y), col)
      +pixelDiff(img.getPixel(x, y+g), col))/4;
  }
  
  static void paintBlock(RGBImage img, RGB col, int x, int y) {
    for (int yy = 0; yy < g; yy++)
      for (int xx = 0; xx < g; xx++)
        img.setPixel(x+xx, y+yy, col);
  }
}