Using the data storage type defined on this page for raster images, read an image from a PPM file (binary P6 prefered).
(Read the definition of PPM file on Wikipedia.)

Task: Use write ppm file solution and grayscale image solution with this one in order to convert a color image to grayscale one.

$ include "seed7_05.s7i";
  include "draw.s7i";
  include "color.s7i";
 
const func PRIMITIVE_WINDOW: getPPM (in string: fileName) is func
  result
    var PRIMITIVE_WINDOW: aWindow is PRIMITIVE_WINDOW.value;
  local
    var file: ppmFile is STD_NULL;
    var string: line is "";
    var integer: width is 0;
    var integer: height is 0;
    var integer: x is 0;
    var integer: y is 0;
    var color: pixColor is black;
  begin
    ppmFile := open(fileName, "r");
    if ppmFile <> STD_NULL then
      if getln(ppmFile) = "P6" then
        repeat
          line := getln(ppmFile);
        until line = "" or line[1] <> '#';
        read(ppmFile, width);
        readln(ppmFile, height);
        aWindow := newPixmap(width, height);
        for y range 0 to pred(height) do
          for x range 0 to pred(width) do
            pixColor.redLight   := ord(getc(ppmFile));
            pixColor.greenLight := ord(getc(ppmFile));
            pixColor.blueLight  := ord(getc(ppmFile));
          end for;
        end for;
      end if;
      close(ppmFile);
    end if;
  end func;