4 2 iio Load File iio Malloc Image

  • Slides: 11
Download presentation
プログラミング演習Ⅱ 課題4第 2週 iio. Load. File()と iio. Malloc. Image. Buffer()の補足 1

プログラミング演習Ⅱ 課題4第 2週 iio. Load. File()と iio. Malloc. Image. Buffer()の補足 1

/* ファイルオープン */ if ((fpr = fopen(fname, "rb")) == NULL) { perror(fname); return 1;

/* ファイルオープン */ if ((fpr = fopen(fname, "rb")) == NULL) { perror(fname); return 1; } "rb"は、read biinary /* ヘッダ部読み込み開始 */ fgets(line. Buffer, LINEMAX, fpr); if (strcmp(line. Buffer, "P 6n")) { // ERROR fclose(fpr); return 1; } fgets(line. Buffer, LINEMAX, fpr); /* コメント行の読み飛ばし */ while (line. Buffer[0] == '#') fgets(line. Buffer, LINEMAX, fpr); 3

iio. Save. File()の作り方 int iio. Save. File(IMAGE *p. Image, const char *fname) { FILE

iio. Save. File()の作り方 int iio. Save. File(IMAGE *p. Image, const char *fname) { FILE *fpw; ←ファイル出力用ファイルポインタ int i; ←画像の行数だけ繰り返すループ変数 /* ファイルオープン*/ ←iio. Load. Fileと同じ。但し、"rb"⇒"wb" fpr⇒fpw /* ヘッダ出力 */ fprintf(fpw, "P 6n%d %dn", p. Image->xsize, p. Image->ysize, p. Image->level); P 6 xsize ysize level /* 画像データをファイルへ出力 */ ←iio. Load. Fileと同じ。 但し、fread⇒fwrite fpr⇒fpw fclose(fpw); return 0; } 5

iio. Malloc. Image. Buffer() void iio. Malloc. Image. Buffer(IMAGE *p. Image) { int i;

iio. Malloc. Image. Buffer() void iio. Malloc. Image. Buffer(IMAGE *p. Image) { int i; ←画像の行数だけ繰り返すループ変数 p. Image->p. Buffer = malloc(p. Image->ysize*sizeof(PPIXEL)); ysize個のPPIXEL の配列を確保 malloc(ysize * sizeof(PPIXEL)); 6

for (i = 0; i < p. Image->ysize; i++){ p. Image->p. Buffer[i] = malloc(p.

for (i = 0; i < p. Image->ysize; i++){ p. Image->p. Buffer[i] = malloc(p. Image->xsize * sizeof(PIXEL)); } } p. Image->p. Buffer xsize個のPIXEL の配列を確保 malloc(xsize * sizeof(PIXEL)); 7

iio. Free. Image. Buffer()の作り方 void iio. Free. Image. Buffer(IMAGE *p. Image) { int i;

iio. Free. Image. Buffer()の作り方 void iio. Free. Image. Buffer(IMAGE *p. Image) { int i; ←画像の行数だけ繰り返すループ変数 方針:Bを開放してからAを開放する p. Image->p. Buffer A B 8

Bを開放 for (i = 0; i < p. Image->ysize; i++){ p. Image->p. Buffer[i] =

Bを開放 for (i = 0; i < p. Image->ysize; i++){ p. Image->p. Buffer[i] = malloc(p. Image->xsize * sizeof(PIXEL)); free( /* mallocで確保した 1行分のBの領域を解放*/ ); } Aを開放 free( /* mallocで確保したAの領域を解放*/ ); p. Image->p. Buffer A B 9