libpgm

機能

pgmライブラリー

起動方法

    #include <pgm.h>
     cc ... -L/CG/lib -I/CG/include -lpgm -lpbm

説明

データの型

     typedef ... gray;     gray の値の範囲は 0 から PGM_MAXMAXVAL (整数値)までである。
     #define PGM_MAXMAXVAL ...
     extern gray pgm_pbmmaxval;
         pgm_pbmmaxval は、PGM プログラムで PBM ファイルを
         読み込む時に使用される PBM の最大値である。
         通常値は 1 だが、プログラムによってはそれ以上の
         値にした方が良い場合がある。
     #define PGM_FORMAT ...
     #define RPGM_FORMAT ...
     #define PGM_TYPE PGM_FORMAT
     #define PGM_FORMAT_TYPE(int format)
                           format が pgm の時は PGM_TYPE、そうでない時は -1 を返す。

PGMのメモリーマネージメント

gray **pgm_allocarray(int cols, int rows)
grayのcols個のメモリーをrows個アロケートする関数
gray *pgm_allocrow( int cols )
grayのcols個のメモリーをアロケートする関数
void pgm_freearray( gray **grayrow, int rows )
pgm_allocarray()でアロケートしたメモリーを解放する関数
pgm_freerow( gray *grayrow )
pgm_allocrow()でアロケートしたメモリーを解放する関数

PGMの初期化関数

void pgm_init( int *argc, char *argv[] );
PGMのプログラムは最初にかならずこの関数を呼ぶこと

PGMファイルを読む関数

void pgm_readpgminit( FILE *file, int *colsP, int *rowsP, gray *maxvalP, int *formatP )
PGMファイルからヘッダーを読む関数
void pgm_readpgmrow( FILE *file, gray *grayrow, int cols, gray maxval, int format )
PGMファイルから一行分データを読む関数
gray **pgm_readpgm( FILE *file, int *colsP, int *rowsP, gray *maxvalP )
PGMファイルから全部のデータを読む関数
返り値は各行のpixelデータの入った配列へのポインタの配列になっている。
この関数は pgm_readpgminit(), pgm_allocarray() and pgm_readpgmrow()を組み合わせたものである。
だからヘッダーを読み込まないで良い。

PGMファイルへ書き込む関数

void pgm_writepgminit( FILE *file, int cols, int rows, gray maxval, int forceplain )
PGMファイルへヘッダーを書き込む関数
forceplain が 0ならバイナリー、1ならアスキーでデータを書き込む。
void pgm_writepgmrow( FILE *file, gray *grayrow, int cols, gray maxval, int forceplain )
PGMファイルへ一行分のデータを書き込む関数
forceplain が 0ならバイナリー、1ならアスキーでデータを書き込む。
void pgm_writepgm(FILE *file, gray **bits, int cols, int rows, gray maxval, int forceplain )
PGMファイルへ全てのデータを書き込む関数
forceplain が 0ならバイナリー、1ならアスキーでデータを書き込む。
この関数はpgm_writepgminit() と pgm_writepgmrow()を組み合わせたものである。
だからヘッダーを書き込まないで良い。

使用例

PGMの読み込みと書き込み

#include <pgm.h>
main(int argc, char *argv[])
{
    int x, y;
    FILE *infile, *outfile;
    int cols, rows, format;
    gray maxval;
    gray *grayrow, *outgrayrow;

    pgm_init(&argc, argv);
    infile = pm_openr("in.pgm");
    pgm_readpgminit( infile, &cols, &rows, &maxval, &format );
    grayrow = pgm_allocrow( cols );
    outfile = pm_openw("out.pgm");
    pgm_writepgminit( outfile, cols, rows, maxval, 0 );
    outgrayrow = pgm_allocrow( cols );
    for(y = 0; y < rows; y++)
    {
	pgm_readpgmrow( infile, grayrow, cols, maxval, format );
	for(x = 0; x < cols; x++)
	{
	    /* grayrow[x]に関する処理 */
	    /* 結果は outgrayrow[x]に入れておく */
	}
	pgm_writepgmrow( outfile, grayrow, cols, maxval, 0 );
    }
    pgm_freerow( outgrayrow );
    pgm_freerow( grayrow );
    pm_close(outfile);
    pm_close(infile);
}

参照

プログラマー/バージョン

(C) 1989, 1991 by Tony Hansen and Jef Poskanzer.

Home | Contents
abe@injapan.net