libpbm

機能

pbmライブラリー

起動方法

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

説明

データの型

     typedef ... bit;              bitの値は必ず PBM_WHITE か PBM_BLACK である。
     #define PBM_WHITE ...
     #define PBM_BLACK ...
     #define PBM_FORMAT ...
     #define RPBM_FORMAT ...
     #define PBM_TYPE PBM_FORMAT
     #define PBM_FORMAT_TYPE(f)    fがpbmの時はPBM_TYPE、そうでない時は-1を返す。

キーワード・マッチング関数

int pm_keymatch( char* str, char* keyword, int minchars )
文字列がキーワードの中にあるかどうか判定する関数
文字列 str が、キーワード keyword と部分的にマッチするかどうか判定する。
最低何文字マッチしているかを minchars で表す。

メッセージ関数

void pm_message( char *fmt, ... )
メッセージを表示する関数
printf() のようなメッセージ表示関数。
void pm_error( char *fmt, ... )
エラーメッセージを表示する関数
printf() と同じような形式でメッセージを表示をして、プログラムを終了( exit )する。
void pm_usage( char *usage )
プログラムの使い方を表示する関数

汎用ファイル関数

FILE *pm_openr( char *name )
ファイルを読み込み用にオープンする関数。
オープンする時にエラーのチェックも行なわれる。
nameが "-" の場合は標準入力になる。
FILE *pm_openw( char *name )
ファイルを書き込み用にオープンする関数。
オープンする時にエラーのチェックも行なわれる。
nameが "-" の場合は標準入力になる。
void pm_close( FILE *f )
ファイルをクローズする関数。
クローズする時にエラーのチェックも行なわれる。

PBMの初期化関数

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

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

bit **pbm_allocarray(int cols, int rows)
bitのcols個のメモリーをrows個アロケートする関数
bit *pbm_allocrow( int cols )
bitのcols個のメモリーをアロケートする関数
void pbm_freearray( bitrow, rows )
pbm_allocarray()でアロケートしたメモリーを解放する関数
void pbm_freerow( bitrow )
pbm_allocrow()でアロケートしたメモリーを解放する関数

PBMファイルを読む関数

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

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

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

使用例

PBMの読み込みと書き込み

#include <pbm.h>

main(int argc, char *argv[])
{
    int x, y;
    FILE *infile, *outfile;
    int cols, rows, format;
    bit *bitrow, *outbitrow;

    pbm_init(&argc, argv);
    infile = pm_openr("in.pbm");
    pbm_readpbminit( infile, &cols, &rows, &format );
    bitrow = pbm_allocrow( cols );
    outfile = pm_openw("out.pbm","w");
    pbm_writepbminit( outfile, cols, rows, 0 );
    outbitrow = pbm_allocrow( cols );
    for(y = 0; y < rows; y++)
    {
        pbm_readpbmrow( infile, bitrow, cols, format );
        for(x = 0; x < cols; x++)
        {
            /* bitrow[x]に関する処理 */
            /* 結果はoutbitrow[x]に入れておく */
        }
        pbm_writepbmrow( outfile, outbitrow, cols, 0 );
    }
    pbm_freerow( outbitrow );
    pbm_freerow( bitrow );
    pm_close(outfile);
    pm_close(infile);
}

参照

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

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

Home | Contents
abe@injapan.net