// テキストファイル(Complex Text形式)のデータからグレイスケール画像を作成するプログラム // プログラム名:cpx2bmp.cpp #include "eps-header.hh" #include "fft-header.hh" // テキストファイル(Complex Text形式)のデータからグレイスケール画像を作成する関数 void cpx2bmp( class image& output) // 出力画像クラス { printf("\nテキストファイル(Complex Text形式)のデータからグレイスケール画像を作成します。\n"); class fourier data; // 高速フーリエ変換クラスの宣言 data.cpx_load(); // テキストファイル(Complex Text形式)からデータを入力 printf("%sのデータを読み込みました。\n", (data.get_complex_type() == COMPLEX_SPACE) ? "空間領域" : "周波数領域"); int nr_lines = data.get_nr_lines(); int nr_pixels = data.get_nr_pixels(); output.gmake(nr_lines, nr_pixels); // 出力画像の配列を確保 int input_num = 0; int output_switch = OUTPUT_REAL; printf("\n出力するデータ (0: 実数部,1: 虚数部,2: 振幅,3: パワー値,4: デシベル値,5: 位相) "); char linebuf[MAX_FILENAME_LEN]; fgets(linebuf, MAX_FILENAME_LEN - 1, esp_in); sscanf(linebuf, "%d", &input_num); switch (input_num) { case 0: output_switch = OUTPUT_REAL; break; case 1: output_switch = OUTPUT_IMAGE; break; case 2: output_switch = OUTPUT_AMP; break; case 3: output_switch = OUTPUT_POWER; break; case 4: output_switch = OUTPUT_DB; break; case 5: output_switch = OUTPUT_PHASE; break; defalut: printf("選択数値以外が入力されました。0とします。\n"); output_switch = OUTPUT_REAL; break; } data.MakeImage( output_switch, FREQ_SPACE_SHUFFLING_OFF, OUTPUT_SCALE_ON, output.p); } // プログラムの開始位置 int main() { class image output; // 振幅等の画像クラスを宣言 // テキストファイル(Complex Text形式)のデータからグレイスケール画像を作成する関数 cpx2bmp( output ); printf("\nグレイスケール画像として出力します。\n"); output.gsave(); // 出力画像をBMPファイルに保存する // BMPファイルを指定したい場合は, // output.gsave("パス付きBMPファイル名"); // とする。 }