// グレイスケール画像を180度回転し,論理和による点対称画像を生成プログラム // プログラム名:ptr_symmetry.cpp #include "eps-header.hh" // 元画像(src)と,その画像を180度回転した画像の論理和をとり処理済画像(dst)に入れる関数 void symmetry( class image& src, // 元画像クラス(入力) class image& dst) // 処理済画像クラス(出力) { if (src.p == NULL) { printf("元画像がありません。"); return; } printf("\nグレイスケール画像の点対称画像を作成します。\n"); int nr_src_lines = src.get_nr_lines(); // 元画像のライン数 (縦の画素数) int nr_src_pixels = src.get_nr_pixels(); // 元画像のピクセル数 (横の画素数) int nr_dst_lines = nr_src_lines; int nr_dst_pixels = nr_src_pixels; dst.gmake(nr_dst_lines, nr_dst_pixels); // 処理済画像の配列を確保 for (int iy = 0; iy < nr_dst_lines; iy ++) { for (int ix = 0; ix < nr_dst_pixels; ix ++) { dst.p[iy][ix] = src.p[iy][ix] | src.p[nr_dst_lines - iy - 1][nr_dst_pixels - ix - 1]; } } } // プログラムの開始位置 int main() { class image src; // 元画像クラスを宣言 class image dst; // 処理済画像クラスを宣言 src.gload(); // 元画像をBMPファイルから読み込む // BMPファイルを指定したい場合は, // src.gload("パス付きBMPファイル名"); // とする。 // 元画像(src)と,その画像を180度回転した画像の論理和をとり処理済画像(dst)に入れる symmetry( src, // 元画像クラス(入力) dst); // 処理済画像クラス(出力) dst.gsave(); // 処理済画像をBMPファイルに保存する // BMPファイルを指定したい場合は, // dst.gsave("パス付きBMPファイル名"); // とする。 }