#define _CRT_SECURE_NO_DEPRECATE #include // for malloc #include // for FILE #include // for strcmp #include "img_io.h" #define LINEMAX 100 /* int iioLoadFile(IMAGE *pImage, const char *fname) 画像ファイルをオープンし, 適切なサイズの画像バッファを確保し IMAGE構造体に割り当てた後に, 画像バッファにデータをロードする. Image *pImage : IMAGE構造体へのポインタ const char *fname : 入力ファイル名 戻り値 : 0(ファイルのロード成功) 1(ファイルのロード失敗) */ int iioLoadFile(IMAGE *pImage, const char *fname) { FILE *fpr; char lineBuffer[LINEMAX]; int i; /* ファイルオープン */ if ((fpr = fopen(fname, "rb")) == NULL) { perror(fname); return 1; } /* ヘッダ部読み込み開始 */ fgets(lineBuffer, LINEMAX, fpr); if (strcmp(lineBuffer, "P6\n")) { // ERROR fclose(fpr); return 1; } fgets(lineBuffer, LINEMAX, fpr); /* コメント行の読み飛ばし */ while (lineBuffer[0] == '#') fgets(lineBuffer, LINEMAX, fpr); /* IMAGE構造体のメンバ変数に,画像の幅,高さをセット.*/ sscanf(lineBuffer, "%d %d\n", &pImage->xsize, &pImage->ysize); fgets(lineBuffer, LINEMAX, fpr); /* IMAGE構造体のメンバ変数に,画像の最大輝度をセット.*/ sscanf(lineBuffer, "%d", &pImage->level); /* ヘッダ部読み込み終了 */ /* バッファ用メモリ確保 */ iioMallocImageBuffer(pImage); /* バッファに画像データを格納 */ for (i = 0; i < pImage->ysize; i++){ fread(pImage->pBuffer[i], sizeof(PIXEL), pImage->xsize, fpr); } /* ファイルクローズ */ fclose(fpr); return 0; } /* int iioSaveFile(IMAGE *pImage, const char *fname) 出力ファイルをオープンし, 画像バッファのデータを書き出す. Image *pImage : IMAGE構造体へのポインタ const char *fname : 出力ファイル名 戻り値 : 0(ファイルのセーブ成功) 1(ファイルのセーブ失敗) */ int iioSaveFile(IMAGE *pImage, const char *fname) { // 以下にコードを書く. // 適宜,ローカル変数を用意すること. /* ファイルオープン */ /* ヘッダ出力 */ /* 画像データをファイルへ出力 */ /* ファイルクローズ */ return 0; } /* void iioMallocImageBuffer(IMAGE *pImage) 画像データを格納するためのバッファメモリを確保する. Image *pImage : IMAGE構造体へのポインタ 戻り値 : なし */ void iioMallocImageBuffer(IMAGE *pImage) { int i; pImage->pBuffer = malloc(pImage->ysize*sizeof(PPIXEL)); for (i = 0; i < pImage->ysize; i++){ pImage->pBuffer[i] = malloc(pImage->xsize * sizeof(PIXEL)); } } /* void iioFreeImageBuffer(IMAGE *pImage) IMAGE構造体に用意されている画像データを格納するためのメモリを解放する. Image *pImage : IMAGE構造体へのポインタ 戻り値 : なし */ void iioFreeImageBuffer(IMAGE *pImage) { // 以下にコードを書く. // 適宜,ローカル変数を用意すること. }