// C++ Rahmenprogramm. Es liest ein PGM von stdin und schreibt nach stdout
// Die Funktion raining() ist das Herzstück :-)
// Das Progrmm benötigt libnetpbm ("apt-get install libnetpbm10-dev")
//
// Compilieren:
// c++ -Wall -O3 -libnetpbm -o stub stub.cc
//
extern "C"
{
#include <pgm.h>
}
#include <cstdio>
#include <vector>
using namespace std;
typedef vector< vector<unsigned int> > Array;
// to be defined
void raining(int w, int h, const Array& in, Array& out);
Array in, out;
int Width = 0;
int Height = 0;
gray maxval = 0;
// liest ein PGM von stdin und initialisiert 'in' und 'out'
void read_pgm()
{
gray** data = pgm_readpgm(stdin, &Width, &Height, &maxval);
fprintf(stderr, "(%dx%d) max=%d\n", Width, Height, maxval);
in.resize(Height);
out.resize(Height);
for(int y=0;y<Height;++y)
{
in[y].resize(Width);
out[y].resize(Width);
for(int x=0; x<Width; ++x)
{
in[y][x] = data[y][x];
}
}
pgm_freearray(data, Height);
}
// schreibt 'out' als PGM nach stdout
void write_pgm()
{
pgm_writepgminit(stdout, Width, Height, maxval, 0);
for(int y=0; y<Height; ++y)
{
pgm_writepgmrow(stdout, &out[y][0], Width, maxval, 0);
}
}
int main()
{
read_pgm();
raining(Width, Height, in, out);
write_pgm();
}
////////////////////////////////////////////////////////////////////////////
// Beispielfunktion
void raining(int w, int h, const Array& in, Array& out)
{
for(int y=0; y<h; ++y)
for(int x=0; x<w; ++x)
{
out[y][x] = in[y][x] * 5;
}
}
syntax highlighted by Code2HTML, v. 0.9.1