52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
# Dirty implementation
|
|
# Only P3 format, an image is a list of 3 matrices (r, g, b)
|
|
# Max color is always 255
|
|
WriteImage := function(name, img)
|
|
local f, r, g, b, i, j, maxcolor, nrow, ncol, dim;
|
|
f := OutputTextFile(name, false);
|
|
r := img[1];
|
|
g := img[2];
|
|
b := img[3];
|
|
dim := DimensionsMat(r);
|
|
nrow := dim[1];
|
|
ncol := dim[2];
|
|
maxcolor := 255;
|
|
WriteLine(f, "P3");
|
|
WriteLine(f, Concatenation(String(ncol), " ", String(nrow), " ", String(maxcolor)));
|
|
for i in [1 .. nrow] do
|
|
for j in [1 .. ncol] do
|
|
WriteLine(f, Concatenation(String(r[i][j]), " ", String(g[i][j]), " ", String(b[i][j])));
|
|
od;
|
|
od;
|
|
CloseStream(f);
|
|
end;
|
|
|
|
PutPixel := function(img, i, j, color)
|
|
img[1][i][j] := color[1];
|
|
img[2][i][j] := color[2];
|
|
img[3][i][j] := color[3];
|
|
end;
|
|
|
|
GetPixel := function(img, i, j)
|
|
return [img[1][i][j], img[2][i][j], img[3][i][j]];
|
|
end;
|
|
|
|
NewImage := function(nrow, ncol, color)
|
|
local r, g, b;
|
|
r := color[1] + NullMat(nrow, ncol);
|
|
g := color[2] + NullMat(nrow, ncol);
|
|
b := color[3] + NullMat(nrow, ncol);
|
|
return [r, g, b];
|
|
end;
|
|
|
|
# Reproducing the example from Wikipedia
|
|
black := [ 0, 0, 0 ];
|
|
g := NewImage(2, 3, black);
|
|
PutPixel(g, 1, 1, [255, 0, 0]);
|
|
PutPixel(g, 1, 2, [0, 255, 0]);
|
|
PutPixel(g, 1, 3, [0, 0, 255]);
|
|
PutPixel(g, 2, 1, [255, 255, 0]);
|
|
PutPixel(g, 2, 2, [255, 255, 255]);
|
|
PutPixel(g, 2, 3, [0, 0, 0]);
|
|
WriteImage("example.ppm", g);
|