Introduction of small tools
From EosPedia
First, show how to write basic main function.
Tool.c #include "../inc/Tool.h" #include "genUtil.h" #include "mrcImage.h" int main(int argc, char* argv[]) { ToolInfo info; // struct that stores information from argument lToolInfo linfo; // struct that stores information for API mrcImage in; // [[mrcImage]] as input mrcImage out; // [[mrcImage]] as output // 3 function set that are provided as prototype. init0(&info); // Initial Setting argCheck(&info, argc, argv); // Pass the value from argument. init1(&info); // Work depending on argument information: e.g. file open or close mrcFileRead(&in, info.In, "in main", 0); // File read lTool(&out, &in, &linfo, info.mode); // Process "in", and Create "out". // Generally, function whose first letter is "l" is image process library. mrcFileWrite(&out, info.Out, "in main", 0); // File write }
Next, show how to write basic image process library. Here, show how to write the program that performs projection along z axis.
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; // Variable that expresses pixel coordinates double src, dst; // Store the value of pixel out->Header = in->Header; // Make same format of output image as input image. out->HeaderN.z = 1; // For Example, deal as 1 pixel data about along z axis. mrcInit(&out, NULL); // Secure the memory region for output image. for(z=0; z<in->HeaderN.z; z++){ for(y=0; y<in->HeaderN.y; y++){ for(x=0; x<in->HeaderN.x; x++){ // Get the value of pixel. mrcPixelDataGet(in, x, y, z, &src, mrcPixelRePart, mrcPixelHowNearest); mrcPixelDataGet(out, x, y, 0, &dst, mrcPixelRePart, mrcPixelHowNearest); // Add the value of pixel. dst += src; // Set a new value of pixel. mrcPixelDataSet(out, x, y, 0, dst, mrcPixelRePart); } } } }