ppmライブラリー
#include <ppm.h>
cc ... -L/CG/lib -I/CG/include -lppm -lpgm -lpbm
typedef ... pixval;
pixval の値の範囲は 0 から PPM_MAXMAXVAL (整数値)までである。
#define PPM_MAXMAXVAL ...
typedef struct ... pixel;
extern pixval ppm_pbmmaxval;
ppm_pbmmaxval は PPM プログラムで PBM ファイルを
読み込む時に使用される PBM の最大値である。
通常値は 1 だが、プログラムによっては
それ以上の値にした方が良い場合がある。
#define PPM_FORMAT ...
#define RPPM_FORMAT ...
#define PPM_TYPE PPM_FORMAT
#define PPM_FORMAT_TYPE(int format)
format が ppm の時は PPM_TYPE、そうでない時は -1 を返す。
pixval PPM_GETR(pixel p)
pixval PPM_GETG(pixel p)
pixval PPM_GETB(pixel p)
void PPM_ASSIGN(pixel p, pixval red, pixval grn, pixval blu)
int PPM_EQUAL(pixel p, pixel q)
void PPM_DEPTH(pixel newp, pixel p, pixval oldmaxval, pixval newmaxval)
double PPM_LUMIN(pixel p)
pixel **ppm_allocarray(int cols, int rows)
pixel *ppm_allocrow( int cols )
void ppm_freearray( pixel **pixelrow, int rows )
ppm_freerow( pixelrow )
void ppm_readppminit( FILE *file, int *colsP, int *rowsP, pixval *maxvalP, int *formatP )
void ppm_readppmrow( FILE *file, pixel *pixelrow, int cols, pixval maxval, int format )
pixel ** ppm_readppm( FILE *file, int *colsP, int *rowsP, pixval *maxvalP )
void ppm_writeppminit( FILE *file, int cols, int rows, pixval maxval, int forceplain )
void ppm_writeppmrow( FILE *file, pixel *pixelrow, int cols, pixval maxval, int forceplain )
void ppm_writeppm( FILE *file, pixel **bits, int cols, int rows, pixval maxval, int forceplain )
pixel ppm_backgroundpixel(pixel **pixels, int cols, int rows)
実はこれらの中でppmを読む関数はこのまま
pgm,
pbmにも使える。
その時 PPM_GETR(),
PPM_GETG(),
PPM_GETB()には同じ値が入る。
pgmのばあいは 0 から PGM_MAXMAXVAL まで、pbmの場合は PBM_WHITE か PBM_BLACK である。
だから別々に作る必要はない。
PPMの読み込みと書き込み
#include <stdio.h>
#include <ppm.h>
main()
{
int x, y;
FILE *infile, *outfile;
int cols, rows, format;
pixval maxval, red, green, blue;
pixel *pixelrow, *outpixelrow;
infile = pm_openr("in.ppm");
ppm_readppminit( infile, &cols, &rows, &maxval, &format );
pixelrow = ppm_allocrow( cols );
outfile = pm_openw("out.ppm");
ppm_writeppminit( outfile, cols, rows, maxval, 0 );
outpixelrow = ppm_allocrow( cols );
for(y = 0; y < rows; y++)
{
ppm_readppmrow( infile, pixelrow, cols, maxval, format );
for(x = 0; x < cols; x++)
{
red = PPM_GETR(pixelrow[x]);
green = PPM_GETG(pixelrow[x]);
blue = PPM_GETB(pixelrow[x]);
/* red, green, blueに関する処理をここに入れる */
PPM_ASSIGN(outpixelrow[x], red, green, blue);
}
ppm_writeppmrow( outfile, pixelrow, cols, maxval, 0 );
}
ppm_freerow( outpixelrow );
ppm_freerow( pixelrow );
pm_close(outfile);
pm_close(infile);
}
(C) 1989, 1991 by Tony Hansen and Jef Poskanzer.