簡単なプログラム例

提供: Eospedia
2012年10月21日 (日) 09:08時点におけるAdmin (トーク | 投稿記録)による版

移動: 案内検索

基本的なメイン関数の書き方を示します。

Tool.c

#include "../inc/Tool.h"
#include "genUtil.h"
#include "mrcImage.h"

int
main(int argc, char* argv[])
{
    ToolInfo info;    // 引数からの情報を格納する構造体
    lToolInfo linfo;  // APIが必要とする情報を格納する構造体
    mrcImage in;      // 入力用[[mrcImage]]
    mrcImage out;     // 出力用[[mrcImage]]

    // プロトタイプとして提供される関数の3つ組み
    init0(&info);            // 初期値の設定
    argCheck(&info, argc, argv);    // 引数から値を受け渡す
    init1(&info);            // 引数の情報に応じた動き:ファイルの開閉など

    mrcFileRead(&in, info.In, "in main", 0);   // ファイルを読み込む

  lTool(&out, &in, &linfo, info.mode);       // inを処理して、outを作り出す。
                        // 一般にlで始まるものは、画像処理ライブラリ

    mrcFileRead(&out, info.Out, "in main", 0); // ファイルを書き出す
   
}


基本的な画像処理ライブラリの作り方を示します。ここではz軸方向に投影するプログラムの書き方を示しています。

lTool.c

#include "./lTool.h"
#include "genUtil.h"
#include "mrcImage.h"

void
lTool(mrcImage* out, mrcImage* in, lToolInfo* linfo, int status)
{
    mrcImageParaTypeReal x, y, z;    // ピクセル座標を表現する変数
    double src, dst;                     // 画素の値を格納

    out->Header = in->Header;        // 入力画像と出力画像の画像フォーマットを同じにする。
  out->HeaderN.z = 1;              // 例えば、z方向には1ピクセルぶんとする
    mrcInit(&out, NULL);             // 出力画像の記憶領域を確保

    for(z=0; z<in->HeaderN.z; z++){
    for(y=0; y<in->HeaderN.y; y++){
    for(x=0; x<in->HeaderN.x; x++){
        // 画素の値を手に入れます。
        mrcPixelDataGet(in,  x, y, z, &src, mrcPixelRePart, mrcPixelHowNearest);
        mrcPixelDataGet(out, x, y, 0, &dst, mrcPixelRePart, mrcPixelHowNearest);

        // 画素の値を足し合わせます。
        dst += src;

        // 新しい画素の値を設定します。
        mrcPixelDataSet(out, x, y, 0,  dst, mrcPixelRePart);
   } 
    }
    }
}