「簡単なプログラム例」の版間の差分
提供: Eospedia
(ページの作成:「基本的なメイン関数の書き方を示します。 <pre> Tool.c #include "genUtil.h" #include "mrcImage.h" int main(int argc, char* argv[]) { ToolInfo inf...」) |
|||
行4: | 行4: | ||
Tool.c | Tool.c | ||
+ | #include "../inc/Tool.h" | ||
#include "genUtil.h" | #include "genUtil.h" | ||
#include "mrcImage.h" | #include "mrcImage.h" | ||
行10: | 行11: | ||
main(int argc, char* argv[]) | main(int argc, char* argv[]) | ||
{ | { | ||
− | ToolInfo info | + | ToolInfo info; // 引数からの情報を格納する構造体 |
− | lToolInfo linfo | + | lToolInfo linfo; // APIが必要とする情報を格納する構造体 |
− | mrcImage in; | + | mrcImage in; // 入力用[[mrcImage]] |
− | mrcImage out; | + | mrcImage out; // 出力用[[mrcImage]] |
− | init0(&info); | + | // プロトタイプとして提供される関数の3つ組み |
− | argCheck(&info, argc, argv); | + | init0(&info); // 初期値の設定 |
− | init1(&info); | + | argCheck(&info, argc, argv); // 引数から値を受け渡す |
+ | init1(&info); // 引数の情報に応じた動き:ファイルの開閉など | ||
− | mrcFileRead(&in, info.In, "in main", 0); | + | mrcFileRead(&in, info.In, "in main", 0); // ファイルを読み込む |
− | lTool(&out, &in, &linfo, info.mode); | + | lTool(&out, &in, &linfo, info.mode); // inを処理して、outを作り出す。 |
+ | // 一般にlで始まるものは、画像処理ライブラリ | ||
− | mrcFileRead(&out, info.Out, "in main", 0); | + | mrcFileRead(&out, info.Out, "in main", 0); // ファイルを書き出す |
+ | } | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | 基本的な画像処理ライブラリの作り方を示します。ここではz軸方向に投影するプログラムの書き方を示しています。 | ||
+ | |||
+ | <pre> | ||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | } | ||
} | } | ||
</pre> | </pre> |
2012年10月21日 (日) 09:06時点における版
基本的なメイン関数の書き方を示します。
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); } } } }