iioLoadFile()とiioMallocImageBuffer()の補足

Slides:



Advertisements
Similar presentations
プログラミング演習Ⅱ 課題 4 第 2 週 画像ファイル (ppm) の読み書き 画像データ用のメモリ確保・解放 1.
Advertisements

10: ファイル入出力 Linux にログインし、以下の講義ページ を開いておくこと teachers/w483692/CPR1/ C プログラミング入門 総機 1 ( 月 1) 1.
アルゴリズムと データ構造 第 3 回 基本的なデータ構造(2) : 配列 1. 前回の復習 アルゴリズムの計算量 最悪(最大)計算量 計算量の漸近的評価 (オーダ)  多項式時間アルゴリズム( polynomial time algorithm )  指数時間アルゴリズム( exponential.
1 全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える 処理後のデータを出力ファイルに書き出す 画像データ用に確保したメモリを解放.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
データ構造とアルゴリズム 第10回 mallocとfree
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング序論演習.
C言語 配列 2016年 吉田研究室.
第13回 プログラミングⅡ 第13回
第8回 プログラミングⅡ 第8回
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
ニュートン法の解の計算 情報電子工学系学科 電気電子工学コース・情報通信システム工学コース
プログラミング論 関数ポインタ と 応用(qsort)
Cプログラミング演習 中間まとめ2.
Cプログラミング演習 第6回 ファイル処理と配列.
プログラミング論 ファイル入出力
Cプログラミング演習.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Cプログラミング演習 第7回 メモリ内でのデータの配置.
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
プログラミング 4 記憶の割り付け.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
画像処理プログラムの説明.
プログラミング 3 構造体(2).
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
プログラミング論 ファイル処理 (中級編)
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング演習Ⅱ 課題4第3週 画像処理 (1) ビット演算子.
第7回 プログラミングⅡ 第7回
プログラミング論 ファイル入出力
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
第4回 ファイル入出力方法.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
簡易データベース 情報画像工学実験 I : 実験2 担当:関屋大雄(工学部1号棟515室)
Cプログラミング演習資料.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
ネットワーク・プログラミング Cプログラミングの基礎.
高度プログラミング演習 (11).
プログラミング演習Ⅱ 課題4第4週 画像処理 (2) 応用.
ファイル操作について (1).
モジュール分割.
C言語プログラミング・課題 ファイルを読み込んで、その内容を表示するプログラムを作成せよ。
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

iioLoadFile()とiioMallocImageBuffer()の補足 プログラミング演習Ⅱ 課題4第3週 iioLoadFile()とiioMallocImageBuffer()の補足

iioLoadFile() /* int iioLoadFile(IMAGE *pImage, const char *fname) 画像ファイルをオープンし, 適切なサイズの画像バッファを確保し IMAGE構造体に割り当てた後に, 画像バッファにデータをロードする. Image *pImage : IMAGE構造体へのポインタ const char *fname : 入力ファイル名 戻り値 : 0(ファイルのロード成功) 1(ファイルのロード失敗) */ { FILE *fpr; char lineBuffer[LINEMAX]; int i;

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

/* 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; freadを画像の行数分だけ繰り返す fwriteも使い方は同じ

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

iioMallocImageBuffer() void iioMallocImageBuffer(IMAGE *pImage) { int i; ←画像の行数だけ繰り返すループ変数 pImage->pBuffer = malloc(pImage->ysize*sizeof(PPIXEL)); ysize個のPPIXEL の配列を確保 malloc(ysize * sizeof(PPIXEL));

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

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

A B Bを開放 Aを開放 pImage->pBuffer for (i = 0; i < pImage->ysize; i++){ pImage->pBuffer[i] = malloc(pImage->xsize * sizeof(PIXEL)); free(pImage->pBuffer[i]); } Aを開放 free(pImage->pBuffer ); pImage->pBuffer A B