プログラミング演習3 - Cプログラミング -

Similar documents
「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

SXF 仕 様 実 装 規 約 版 ( 幾 何 検 定 編 ) 新 旧 対 照 表 2013/3/26 文 言 変 更 p.12(1. 基 本 事 項 ) (5)SXF 入 出 力 バージョン Ver.2 形 式 と Ver.3.0 形 式 および Ver.3.1 形 式 の 入 出 力 機 能 を

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

Taro-1-14A記載例.jtd

<4D F736F F D F4390B3208A948C E7189BB8CE F F8C668DDA97702E646F63>

している 5. これに 対 して 親 会 社 の 持 分 変 動 による 差 額 を 資 本 剰 余 金 として 処 理 した 結 果 資 本 剰 余 金 残 高 が 負 の 値 となるような 場 合 の 取 扱 いの 明 確 化 を 求 めるコメントが 複 数 寄 せられた 6. コメントでは 親

決 算 時 の 流 れ-1 1 年 間 の 仕 訳 入 力 が 終 了 したら 以 下 の 手 順 で 決 算 書 を 作 成 します Step1 精 算 表 を 印 刷 する 1.[F2 入 力 ]タブより 合 計 表 を 選 択 し 月 度 の 指 定 で 期 首 ~12ヶ 月 目 を 指 定

表紙

<4D F736F F D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A B E A2E646F63>

続 に 基 づく 一 般 競 争 ( 指 名 競 争 ) 参 加 資 格 の 再 認 定 を 受 けていること ) c) 会 社 更 生 法 に 基 づき 更 生 手 続 開 始 の 申 立 てがなされている 者 又 は 民 事 再 生 法 に 基 づき 再 生 手 続 開 始 の 申 立 てがなさ

立ち読みページ

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記

給 与 所 得 控 除 所 得 税 の 簡 易 給 与 所 得 表 により 給 与 所 得 の 金 額 を 求 めますが 控 除 額 の 計 算 については 次 のとおりです 給 与 等 の 収 入 金 額 給 与 所 得 控 除 額 180 万 円 以 下 の 場 合 180 万 円 を 超 え

2 県 公 立 高 校 の 合 格 者 は このように 決 まる (1) 選 抜 の 仕 組 み 選 抜 の 資 料 選 抜 の 資 料 は 主 に 下 記 の3つがあり 全 高 校 で 使 用 する 共 通 の ものと 高 校 ごとに 決 めるものとがあります 1 学 力 検 査 ( 国 語 数

t検定

(3) 小 単 元 の 指 導 と 評 価 の 計 画 小 単 元 第 11 章 税 のあらまし の 指 導 と 評 価 の 計 画 ( 四 次 確 定 申 告 制 度 抜 粋 ) 関 心 意 欲 態 度 思 考 判 断 技 能 表 現 知 識 理 解 小 単 元 の 評 価 規 準 税 に 関 す

H28記入説明書(納付金・調整金)8

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

PowerPoint プレゼンテーション

(Microsoft PowerPoint -

第1章 簿記の一巡

PowerPoint プレゼンテーション

目 次 1. ログイン/ログアウト 1.1 ログインする p ログアウトする p.3 2. 受 講 一 覧 画 面 p.4 3. 授 業 ページの 閲 覧 3.1 授 業 ページへの 遷 移 p 授 業 資 料 を IT s class.からダウンロードする p

返還同意書作成支援 操作説明書

目 次 目 次 1 ログイン ログアウト ログインする...1 ログイン 画 面 が 表 示 されないときは?... 1 初 めてログインするときのパスワードは?... 2 初 期 パスワードを 忘 れてしまったときは?... 2 変 更 したパスワードを 忘 れてしまったときは?.

( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加

目 次 必 ずお 読 みください 接 続 方 法 WEB ブラウザ 操 作 方 法 閲 覧 用 PC で 直 接 ZERO 本 体 と 接 続 する 場 合 各 ページについて 発 電 状 況 画 面 表 示... 3

Taro-2220(修正).jtd

Ⅰ 調 査 の 概 要 1 目 的 義 務 教 育 の 機 会 均 等 その 水 準 の 維 持 向 上 の 観 点 から 的 な 児 童 生 徒 の 学 力 や 学 習 状 況 を 把 握 分 析 し 教 育 施 策 の 成 果 課 題 を 検 証 し その 改 善 を 図 るもに 学 校 におけ

医療費控除の入力編

PowerPoint Presentation

Microsoft Word - tb01.doc

< C835B D348B89838F C E786477>

「給与・年金の方」からの確定申告書作成編

HYEC.ORGにおけるWinSCPの設定方法

1. 機 能 概 要 CADデータ(DXF 形 式 )を 変 換 し EXCELに 図 形 として 表 示 します CADでのレイヤー 毎 に 表 示 / 非 表 示 や 線 分 の 属 性 ( 色 太 さ 等 )を 指 定 でき さらに 作 成 する 図 面 の 範 囲 大 きさを 指 定 できま

Microsoft Word - 第3章.doc

Microsoft Word - 203MSWord2013

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ

後期高齢者医療制度

スライド 1

01_07_01 データのインポート_エクスポート_1

1-1 一覧画面からの印刷

注 雇 促 進 税 制 と 本 制 度 のどちらかを 利 する 可 能 性 があるが あらかじめどちらの 制 度 を 利 するか 判 断 できない という 場 合 雇 促 進 税 制 の 事 前 届 出 ( 雇 促 進 計 画 の 提 出 )をした 上 で 申 告 の 際 にどちらを 利 するかご

店舗用マニュアル

4 応 募 者 向 けメニュー 画 面 が 表 示 されます 応 募 者 向 けメニュー 画 面 で [ 交 付 内 定 時 の 手 続 を 行 う] [ 交 付 決 定 後 の 手 続 を 行 う]をクリックします 10

DN6(R04).vin

目 次 1.はじめに 書 式 の 説 明 表 紙 スケジュール 組 入 れ 基 準 併 用 禁 止 薬 併 用 注 意 薬 同 種 同 効 薬 医 師 モニタリング..

N 一 般 の 住 宅 について 控 除 の 対 象 となる 借 入 金 は 平 成 26 年 4 月 平 成 31 年 6 月 30 日 までの 入 居 の 場 合 は4,000 万 円 ( 平 成 26 年 3 月 までの 入 居 の 場 合 は2,000 万 円 )までとなります 建 物 や

静岡駅前「葵タワー」が出来るまで

1.2. ご 利 用 環 境 推 奨 ブラウザ Internet Explorer Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7

2016 年 度 情 報 リテラシー 三 科 目 合 計 の 算 出 関 数 を 用 いて 各 教 科 の 平 均 点 と 最 高 点 を 求 めることにする この2つの 計 算 は [ホーム]タブのコマ ンドにも 用 意 されているが 今 回 は 関 数 として 作 成 する まず 表 に 三 科

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

富士山チェックリスト

PowerPoint プレゼンテーション

R4財務対応障害一覧

Gmail 利用者ガイド

Microsoft Word - 311Tools_END

国 税 クレジットカード 納 付 の 創 設 国 税 のクレジットカード 納 付 については マイナンバー 制 度 の 活 用 による 年 金 保 険 料 税 に 係 る 利 便 性 向 上 に 関 するアクションプログラム( 報 告 書 ) においてその 導 入 の 方 向 性 が 示 されている

目 次 JAVIS Appli の 基 本 機 能... 3 JAVIS Appli について... 3 音 声 確 認 機 能 JAVIS Appli( 有 償 版 )の 機 能... 4 音 声 で 読 みの 確 認 をする... 4 辞 書 機 能... 5 単 語 を 登 録 する... 5

Ver 改 訂 日 付 改 訂 内 容 1

Lecture3

[Q1] 復 興 特 別 所 得 税 の 源 泉 徴 収 はいつから 行 う 必 要 があるのですか 平 成 25 年 1 月 1 日 から 平 成 49 年 12 月 31 日 までの 間 に 生 ずる 所 得 について 源 泉 所 得 税 を 徴 収 する 際 復 興 特 別 所 得 税 を 併

untitled

新 生産管理システム ご提案書 2002年10月15日 ムラテック情報システム株式会社

目 次 電 子 申 請 を 使 用 した 申 請 の 流 れ 1ページ 申 請 書 ( 概 算 保 険 料 申 告 書 )の 作 成 2ページ 作 成 した 申 請 書 の 送 信 31ページ 状 況 照 会 電 子 納 付 を 行 う 62ページ 返 送 書 類 の 取 得 75ページ お 問 い

給 与 所 得 控 除 控 除 額 の 計 算 については 次 のとおりです 給 与 等 の 収 入 金 額 給 与 所 得 控 除 額 180 万 円 以 下 の 場 合 180 万 円 を 超 え 360 万 円 以 下 の 場 合 360 万 円 を 超 え 660 万 円 以 下 の 場 合

Box-Jenkinsの方法

(1)1オールゼロ 記 録 ケース 厚 生 年 金 期 間 A B 及 びCに 係 る 旧 厚 生 年 金 保 険 法 の 老 齢 年 金 ( 以 下 旧 厚 老 という )の 受 給 者 に 時 効 特 例 法 施 行 後 厚 生 年 金 期 間 Dが 判 明 した Bは 事 業 所 記 号 が

計算式の取り扱い

電子申告簡易マニュアル【所得税実践編】

情報処理技能検定試験 表計算2級 手順書

目 次 ルール1 決 算 書 には2 人 の 主 役 がいる! (1) 貸 借 対 照 表 (BS) P4 (2) 損 益 計 算 書 (PL) P5 ルール2 BSには3つの 家 と6つの 部 屋! (1)BSの3つの 家 と6つの 部 屋 P6 (2) 資 産 ( 流 動 資 産 固 定 資 産

Microsoft PowerPoint - 特別徴収制度説明会資料(県央版.pptx

PowerPoint プレゼンテーション

事務連絡

測量士補 重要事項「写真地図作成」

入 札 参 加 資 格 申 請 システム 操 作 マニュアル 入 札 参 加 資 格 の 資 格 有 効 ( 変 更 ) 日 を 迎 えると 追 加 届 の 登 録 ができるようになります ( 入 札 参 加 資 格 申 請 の 定 時 受 付 では いずれかの 申 請 先 団 体 から 入 札 参

1. 前 払 式 支 払 手 段 サーバ 型 の 前 払 式 支 払 手 段 に 関 する 利 用 者 保 護 等 発 行 者 があらかじめ 利 用 者 から 資 金 を 受 け 取 り 財 サービスを 受 ける 際 の 支 払 手 段 として 前 払 式 支 払 手 段 が 発 行 される 場 合

研究者情報データベース

1. 表 から 値 を 抽 出 する 説 明 1.1. 表 から 値 を 抽 出 するための 関 数 について 説 明 します LOOKUP VLOOKUP HLOOKUP 関 数 は 検 索 値 に 対 応 する 値 を 検 索 値 を 含 む 一 覧 表 から 抽 出 し てくれる 関 数 です

目 次 1. Web メールのご 利 用 について Web メール 画 面 のフロー 図 Web メールへのアクセス ログイン 画 面 ログイン 後 (メール 一 覧 画 面 ) 画 面 共 通 項 目

2 / 11 ページ 第 5 講 ビジネスメールの 作 法 Active! Mail を 起 動 し ログインしておきましょう 5-1 ビジネスメールのルールとマナー ビジネスメールのルールとマナーを 確 認 しましょう 宛 先 やCC BCCを 使 い 分 ける 本 文 の 内 容 が 一 目 で

設定フロー ★印は必須の設定です

かんたんQR

GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの 方 のみ 操 作 可

特 別 徴 収 制 度 とは 市 県 民 税 の 納 め 方 のひとつです 従 業 員 の 市 県 民 税 を 事 業 主 が 毎 月 給 与 から 天 引 きし 従 業 員 に 代 わって 市 に 納 める 制 度 です 所 得 税 の 源 泉 徴 収 に 対 応 するものが 市 県 民 税 では

従業員の個人住民税の特別徴収を実施していない事業者の方へ

2 課 題 管 理 ( 科 学 研 究 費 補 助 金 ) 画 面 が 表 示 されます 補 助 事 業 期 間 終 了 後 欄 の[ 入 力 ] をクリックします [ 入 力 ]ボタンが 表 示 されていない 場 合 には 所 属 する 研 究 機 関 の 事 務 局 等 へお 問 い 合 わせく

全設健発第     号

<4D F736F F D F B B838082F090DD927582B782E995FB96405F E646F6378>

<4D F736F F D204D46834E A6D92E8905C8D905F93B193FC819593FA8E9F95D C5292E646F63>

平成16年度

kyoukai.indd

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

目 次 1.ログイン 方 法 P2 2.ログアウト 方 法 P3 3. 基 本 設 定 変 更 サイトネーム スローガンの 設 定 P10~11 カラーバリエーションの 選 択 P12 メニュースタイル 色 の 設 定 P12 4.トップページの 画 像 編 集 画 像 の 変 更 P13~14 T

Microsoft PowerPoint - 雇保氏名変更.pptx

U/Cサーバ 業務システム間転送プログラムインターフェース仕様書

Microsoft Word - 03accessデータベース演習レジメ.doc

提 出 書 類 ア 財 産 形 成 年 金 貯 蓄 の 非 課 税 適 用 確 認 申 告 書 ( 積 立 終 了 から2ヶ 月 以 内 に 提 出 厳 守 ) 記 入 例 参 照 イ 財 産 形 成 年 金 貯 蓄 者 の 退 職 等 申 告 書 記 入 例 参 照 年 金 財 形 提 出 書 類

Transcription:

プログラミング 演 習 3 - 集 中 講 義 版 - 2 日 目 資 料 & 課 題 花 泉 弘

この 回 の 目 標 1. 画 像 ファイルの 構 造 を 知 る 2. 画 像 ファイル(バイナリファイル)を 読 み 込 む 読 み 込 みには1 日 目 に 作 成 したreadcharline( ) を 使 用 します 3. 画 像 を 作 成 して 出 力 する 4. 読 み 込 んだ 画 像 データを 処 理 できる 画 像 上 の 座 標 (ラインとカラム)で 画 素 を 指 定 して 濃 度 値 を 得 る 指 定 された 領 域 の 画 素 濃 度 の 平 均 値 をR,G,Bごとに 求 める

高 さ(height) 1. 画 像 ファイルの 中 身 を 知 る その1 白 黒 画 像 のイメージ: 画 素 が 並 んでいる それぞれの 画 素 は 濃 淡 値 を 持 つ 0~255 (データは1byte/ 画 素 ) 幅 (width) カラー 画 像 の 場 合 は 三 原 色 の 組 合 せで 色 を 表 すため 白 黒 画 像 の 3 枚 分 の 容 量 が 必 要 になる カラー 画 像 では 白 黒 画 像 の 画 素 1 個 に 対 して 対 応 する RGB 各 成 分 合 わせて3つ 分 の 数 値 が 連 続 して 記 録 されている (RGBの 順 ) これらの 数 値 を 画 素 濃 度 と 呼 びます それぞれ 赤 緑 青 の 波 長 帯 (spectral band)における 観 測 値 なので これ らの 画 像 を3バンドデータと 呼 んだり バンド 数 は3である な どと 言 います センサによっては 可 視 から 近 赤 外 までN 個 の 波 長 帯 で 観 測 するものもあり これらはNバンドデータと 呼 ばれ ます これらの 情 報 がファイルに 記 録 されている 画 像 の 情 報 ヘッダー 情 報 : 画 像 のサイズ( 幅 と 高 さ)や1 画 素 のビット 数 バンド 数 (カラー 3 白 黒 1) データ 本 体 : 幅 高 さ バンド 数 分 のバイナリデータ(テキストではない)

2. 画 像 ファイルの 構 造 を 知 る その2 pnm ファイルとよばれる 種 類 の 画 像 を 例 にとって ファイルの 構 造 を 見 ていきます pnm ファイルには pgm ファイル ppm ファイル pbmファイルがあります pgm ファイル: 白 黒 画 像 で1 画 素 を8ビット(0~255 0x00 ~ 0xff)で 表 す 拡 張 子 は.pgm ppm ファイル:カラー 画 像 で3バンド 8ビット/ 画 素 拡 張 子 は.ppm pbm ファイル:2 値 画 像 1ビット/ 画 素 拡 張 子 は.pbm 構 造 :ファイルの 初 めにヘッダー 部 (テキストデータ)があり 続 いて 画 像 データ(バイナリデータ)が 順 に 詰 まっている ヘッダー 部 画 像 データ (1024 x 768 x 3 bytes) マジックナンバー 6:ppm, 5:pgm, 4:pbm width height P6 1024 768 255 画 素 値 の 最 大 値 この 例 では 1 byte/pixel

3. 画 像 ファイルの 構 造 を 知 る その3 pmmファイルは pnmファイル 形 式 を 拡 張 して 3つを 超 えた 数 の 観 測 波 長 帯 (バンド)の 画 像 を 同 じ 形 式 で 取 り 扱 えるようにしたもので マジックナンバーは0 次 の 行 に 画 像 の 幅 高 さ バンド 数 が 入 り 最 後 に 濃 度 の 最 大 値 が 書 かれています ヘッダー 部 画 像 データ (1024 x 768 x 4 bytes) width height band P0 1024 768 4 255 画 素 値 の 最 大 値 この 例 では 1 byte/pixel

例 題 2-1 画 像 ファイル(pnm)の 構 造 を 確 認 しなさい 1では 確 認 してみましょう ブラウザを 使 って 好 きな 画 像 をダウンロードしてください 以 前 ダウンロードしたものがあれば それで 構 いません 2ダウンロードしたものが.jpg ファイルであれば pnm ファイルに 変 換 します 3 画 像 の 入 っているディレクトリに 移 動 5 変 換 には convert を 用 います 4 画 像 を 確 認.jpg ファイルです 拡 張 子 で 区 別 6 確 認 します.ppm と.pgm ファイルができて いることがわかります 7 画 像 も 見 てみます *pnm ファイルとは ppm, pgm, pbm ファイルの 総 称 です

例 題 2-1 つづき 1 less コマンドを 使 います 2 y を 入 力 します 3ヘッダー 部 が 確 認 できました マジックナンバーの 違 いに 注 意 4 q を 入 力 して 終 了 します

4. 画 像 ファイル(バイナリファイル)を 読 み 込 む 画 像 ファイルのオープンには fopen()を 用 います ここでは バイナリファイルを 扱 うので fopen(file.ppm, rb ) のように b を 追 加 して 指 定 します テキストファイルは r だったわけですが 違 いがわかりますか? r: 入 力 時 は r, n n へ 変 換 (ファイルへの) 出 力 時 には n r, n への 変 換 rb: 何 もしない の 違 いがあります ヘッダー 部 (テキスト) 画 像 データ(バイナリ) (1024 768 3 bytes) pnm/pmm 形 式 の 画 像 ファイルは 左 図 の ように 最 初 にテキストデータがあり その 後 ろにバイナリデータがあります 方 針 : テキストデータに 関 しては 行 末 の n に 着 目 し その 内 容 から 読 み 込 むべき 後 半 の 画 像 データの 個 数 を 知 り その 個 数 分 バッファに 蓄 える 注 意 : 画 素 データはunsigned char 型 の 配 列 に 代 入 します ( 関 数 等 の 宣 言 もchar 型 からunsigned char 型 へ 変 更 )

例 題 2-2 画 像 データのヘッダー 部 を 読 み 込 む 作 成 した readcharline() を 使 って pnm/pmm ファイルのヘッダー 部 を 読 んでみましょう 指 定 したバイト 数 を 読 み 込 むだけでなく 1ライン 分 のデータも 読 めることがわかります あとで 画 像 を 読 むので 配 列 は 大 きめに bを 追 加 して ここは3 限 定 で pmm と ppmの 違 いが わかりますか? チェック 用 の main 文 ex202/main_charline.c

さて ここまでの 処 理 で pnm/pmm 画 像 のヘッダー 部 を 文 字 列 と して 読 み 込 むことができました ただ 文 字 列 のままでは 使 えま せんのでそれらを 数 値 として 認 識 することが 必 要 です Cでは keyboard からの 入 力 用 の 関 数 として scanf( %d, &k); を 用 意 していますが それと 同 様 にバッファからの 読 み 取 りには sscanf(buf, %d, &k); が 使 えます pnm/pmm 画 像 をから3 回 続 けて1 行 分 読 み 取 ることを 考 えます buf には 文 字 列 としてそれぞれの 回 の 読 み 込 みに 対 して 例 えば P6 1024 768 255 が 入 るので 1 回 目 に1 行 分 読 み 取 ったところで buf[0] == P が 真 なら pnm/pmm であることがわかり さらに buf[1] == 6 が 真 なら ppm 画 像 で band = 3 であることがわかり buf[1] == 5 が 真 なら pgm 画 像 で band = 1 とわかります また buf[1] == 0 が 真 なら pmm 画 像 なので 未 決 ということで 仮 にband = 0 としておきます

2 回 目 に1 行 分 読 み 取 ったところで band > 0 が 真 ならすでに pnm 画 像 であることがわかっているので sscanf(buf, %d%d, &width, &height); とすることで width = 1024, height = 768 といった 具 合 にint 型 の 変 数 width と height に 数 値 を 格 納 することができます 同 様 に band == 0 が 真 であれば sscanf(buf, %d%d%d, &width, &height, &band); とすることで width, height に 加 えて band にも 正 しい 値 が 入 ります 3つの 値 がそろったら 続 けて 3 回 目 に1 行 分 読 み 取 ります その 時 の 値 が255であれば 1 画 素 1バイトでこの 画 像 が 構 成 されていることがわかります なお この 値 は65535 のこともあり この 場 合 は 1 画 素 2バイトで 構 成 されて いることになります 当 然 画 像 を 読 み 込 むバッファもunsigned char ではなくて unsigned short int になります 話 を 戻 します 3つの 値 がそろったら 読 み 込 むべき 画 素 数 は width * height * band のように 求 めることができます この 値 を 設 定 すれば buf に 画 像 データを 読 み 込 むことができます

例 題 2-3 画 像 データを 読 み 込 む 結 局 のところ pnm/pmm ファイルを 読 み 込 むには テキスト 部 を 読 み 込 んで ファイルの 種 類 (pgm/ppm/pmm)を 判 別 し(pgm/ppmの 場 合 はバンド 数 がわかる) 画 像 の 幅 と 高 さ(とpmmの 場 合 は バンド 数 )を 知 る 濃 度 の 最 大 値 も 知 る 求 めた 幅 高 さ バンド 数 の 情 報 から 連 続 して 必 要 なバイト 数 分 だけデータを 読 み 込 む という 流 れで 画 像 を 読 み 込 むことができる これまでは char *buf だったもの int readimage(char *imagefile, unsigned char *img, int *width, int *height, int *band) を 作 成 しなさい 仕 様 は 以 下 の 通 り main 側 からは k = readimage(filename, img, &width, &height, &band); のように 用 いる 以 下 演 習 題 ごとにディレクトリを 区 別 して( 例 えば ex202 など)に 作 成 すること *imagefile : 画 像 ファイルの 名 前 が 格 納 された 配 列 *img : 画 像 を 格 納 するバッファ( 大 きめに 確 保 しておく; これまでは *buf であった) *width, *height, *band : 画 像 の 幅 高 さ バンド 数 戻 り 値 : 正 常 読 み 取 りはEXIT_SUCCESS 異 常 はEXIT_FAILURE(ファイルが 存 在 しない pnm/pmmでない 読 み 込 みエラー( 個 数 分 だけデータがない))

例 題 2-3( 続 き) 画 像 ファイルの 読 み 込 み ここは unsigned char で ex203/readimage.c 負 数 を 与 えて1 行 目 を 読 む 4 行 目 を 読 む 2 行 目 を 読 む 正 数 を 与 えて 画 素 数 分 読 む

例 題 2-3( 続 き) 動 作 確 認 ( 画 像 を 表 示 させてみる) ex203/imgout.c 使 い 方 $ imgout mountain.ppm xv - & で 画 像 が 表 示 されたらOK.

いかがですか? 無 事 画 像 は 出 力 されましたか? ここまでで 一 応 は 画 像 を 読 み 込 むことができるようになりました 例 題 2-3 では 画 像 の 出 力 の 仕 方 についても 少 し 書 いてあったの ですが 後 ほど 詳 しく 見 ていきます まず ちょっと 不 便 なところが 残 っているreadimage( )をもう 少 し 便 利 にすることを 考 えます 不 便 な 点 とは readimage( ) を 呼 んで width, height, band を 知 る 前 に 画 像 を 読 み 込 むための 配 列 の 大 きさを 決 定 しなければなら ない 点 です width, height, band を 知 ってから 配 列 を 設 定 すること ができれば すごくすっきりするはずです ということで 動 的 なメモリ 確 保 を 行 ってみましょう

5. 動 的 なメモリ 領 域 の 割 り 当 て 読 み 込 んだ 画 素 データを 格 納 する 配 列 を 動 的 に 作 成 するには malloc( )や calloc( ) を 用 い ます 画 素 濃 度 を 格 納 する 配 列 (ポインタ)を img とすると img = calloc( 割 り 当 てる 要 素 数, 1 要 素 あたりのバイト 数 ) か もしくは img = malloc( 必 要 バイト 数 ) のように 用 います これらの 例 では 要 素 数 =width * height * band で 1 要 素 あたりの バイト 数 は sizeof(unsigned char) で 求 めます malloc( ) の 必 要 バイト 数 はそれらの 積 になり ます どちらも 成 功 すると 割 り 当 てられたメモリ 領 域 の 先 頭 アドレスが img に 格 納 され 失 敗 すると NULL が 格 納 されます calloc( ) の 場 合 には メモリは 全 ビット0にクリアされます malloc( ) の 場 合 は 何 もしないので 以 前 の 内 容 が 残 ったままになっています calloc( ) や malloc( ) で 割 り 当 てられたメモリ 領 域 が 不 要 になった 場 合 は free( ) で 開 放 します プログラムが 終 了 すると 自 動 的 にfree( ) が 行 われるので 特 に 意 識 する 必 要 はあり ません 以 下 のように 用 います unsinged char 型 のポインタ If((img = calloc(width * height * band, sizeof(unsigned char))) == NULL){//メモリの 割 り 当 て fprintf(stderr, memory allocation error n ); return (NULL); //これを 含 む 関 数 の 戻 り 値 がunsigned char 型 のポインタなのでNULLを 返 す } 何 かの 処 理 free(img); //メモリの 解 放 ( 通 常 は 意 識 しなくてもよい)

例 題 2-4 ファイル 名 を 与 えてポインタで 受 ける 演 習 2-3 では 画 像 の 大 きさを 想 定 して main 側 で 大 き 目 の 配 列 を 用 意 していましたが ここでは width, height, band が 得 られた 後 に 動 的 に 配 列 用 のメモリを 確 保 します さっそく calloc( ) を 使 ってみましょう せっかくなので readimage( ) を 改 造 していきます 改 造 前 ( 例 題 2-3) int readimage(char *imagefile, unsigned char *img, int *width, int *height, int *band) を 作 成 main 側 からは k = readimage(filename, img, &width, &height, &band); のように 用 いる 改 造 後 ( 名 前 もreadimage2( )に 変 更 ) unsigned char *readimage2(char *imagefile, int *width, int *height, int *band) を 作 成 main 側 からは unsigned char *img; の 宣 言 をした 後 img = readimage2(filename, &width, &height, &band); のように 用 いる ファイル 名 を 与 えて 幅 高 さ バンド 数 と 共 に 画 像 本 体 を 受 け 取 る 形 になり 非 常 にすっきりする

例 題 2-4 ( 続 き) 画 像 ファイルの 読 み 込 み (すっきり 版 ) ex204/readimage2.c j 個 の unsigned char 領 域 ( 合 計 j バイト)を 確 保

例 題 2-4 ( 続 き) 動 作 確 認 ( 画 像 を 表 示 させてみる) ex204/imgout2.c 使 い 方 $ imgout2 mountain.ppm xv - & で 画 像 が 表 示 されたらOK.

例 題 2-5 さらに 一 般 化 する(#で 始 まる 行 の 読 み 飛 ばし) pnm/pmm ファイルには 場 合 によっては 下 の 例 のようにコメントが 付 加 されるので コメントをスキップするように 改 造 する(ex205 に readimage3()として 作 成 する) 変 更 点 :1 行 分 データを 読 んでみて バッファの 先 頭 が#なら 読 み 飛 ばす

例 題 2-5 ( 続 き) # 行 の 読 み 飛 ばし ex205/readimage3.c do while 文 で 行 頭 が#の 場 合 に 読 み 飛 ばす

例 題 2-5 ( 続 き) 動 作 確 認 ( 画 像 を 表 示 させてみる) ex205/imgout3.c 使 い 方 $ imgout3 mountain.ppm xv - & で 画 像 が 表 示 されたらOK.

6.ここまで 作 成 してきた 画 像 読 み 込 み 関 数 の 簡 単 なまとめ readimage( ): 関 数 にファイル 名 を 渡 す 関 数 側 でファイルをオープンし 読 み 取 った 画 像 のサイズ 情 報 に 基 づいて main 側 で 定 義 した 配 列 に 画 素 濃 度 を 格 納 して 戻 る readimage2( ) 関 数 にファイル 名 を 渡 す 関 数 側 でファイルをオープンし 読 み 取 った 画 像 のサイズ 情 報 に 基 づいて 関 数 側 で 画 素 濃 度 を 格 納 する 配 列 にメモリを 動 的 に 割 り 当 て その 配 列 の ポインタを 戻 す readimage3( ) 関 数 にファイル 名 を 渡 し 関 数 側 でファイルをオープンする 画 像 のサイズ 情 報 を 読 み 取 る 際 に 画 像 ヘッダー 部 の#を 読 み 飛 ばす 関 数 側 で 画 素 濃 度 を 格 納 する 配 列 に 動 的 にメモリを 割 り 当 てその 配 列 のポインタを 戻 すところは readimage2( ) と 同 じ readimage2( ) 以 降 では 画 素 濃 度 を 格 納 する 配 列 を 動 的 に 作 成 していますが malloc( )や calloc( ) を 用 います 画 素 濃 度 を 格 納 する 配 列 (ポインタ)を img とすると img = calloc( 割 り 当 てる 要 素 数, 1 要 素 あたりのバイト 数 ) / img = malloc( 必 要 バイト 数 ) のように 用 います これらの 例 では 要 素 数 =width * height * band で 1 要 素 あたりの バイト 数 は sizeof(unsigned char) で 求 めます malloc( ) の 必 要 バイト 数 はその 積 になります どちらも 成 功 すると 割 り 当 てられたメモリ 領 域 の 先 頭 アドレスが img に 格 納 され 失 敗 する と NULL が 格 納 されます calloc( ) の 場 合 に 限 り メモリは 全 ビット0にクリアされます

7. 画 像 ファイルの 出 力 これまで 何 気 なく 画 像 を 出 力 してきましたが 読 み 込 んだ 画 像 ファイルや 処 理 した 結 果 を 画 像 として 表 示 させたり ファイルとして 保 存 する 方 法 として 以 下 の3つの 手 法 を 試 してみ ます 1. 標 準 出 力 に 書 き 出 す( 今 まで 使 っていたもので リダイレクトを 使 って ファイルに 保 存 し たり パイプを 使 って 表 示 ソフトへ 流 し 込 んだりできます) 2.ファイルをオープンして 書 き 出 す 3.popen()を 使 って 表 示 ソフトへ 直 接 送 り 込 む 1. 標 準 出 力 に 書 き 出 す imgout は 次 ページ 参 照 リダイレクト いろいろに 使 えて 便 利 だが ファイルは1 個 しか 出 力 できない ファイルが 生 成 パイプ ソースは 次 ページ

例 題 2-6 標 準 出 力 に 書 き 出 す この 内 容 をex206/imgout4.c に 保 存 し $ gcccomp imgout4 上 で 作 ったものを 早 速 使 っています メモリの 開 放 を 忘 れずに ただし この 例 の ようにすぐに 終 了 するのであれば 不 要 です 次 の 2,3の 例 でも 同 様 です この 部 分 が 出 力 部 4 4 動 作 確 認

例 題 2-7 ファイルをオープンして 書 き 出 す ex207/imgout5.c に 保 存 ファイルをオープン printf() が fprintf(fp, ) になっただけ 動 作 確 認 ファイルクローズ

例 題 2-8 popen()を 使 って 表 示 ソフトへ 直 接 送 り 込 む ex208/imgout6.c に 保 存 慣 れないと 感 じがつかめ ないかもしれませんが 大 変 便 利 なものです 動 作 確 認 コマンドをオープンする 形 です その 他 は fopen()と 変 わりません ただし 画 像 が 出 たら 処 理 はそこで ストップしています xvを 終 了 させ ないと 次 に 進 みません

height 8. 画 像 データの 処 理 - 画 素 データへのアクセスー y.. unsigned char *img, *pa, *pb, *pc, *pd; int I, j, k, width, height, band;. img = readimage3(. 1 2 x 4 (xs, ys) width * band 3 6 5 (xe, ye) 左 のような 宣 言 と 画 像 の 読 み 込 みを 行 った とすると 読 み 込 まれ 画 像 データは 左 下 の ようになっている (xs, ys) (xe, ye) で 決 まる 矩 形 領 域 内 の 画 素 へのアクセスを 考 える ポインタ img は 画 像 データの 開 始 点 を 保 持 しているので 別 の 変 数 を 使 用 する 3 種 類 のポインタを 使 用 する pa : 初 期 値 が2ysで ループが 回 るたびに 次 の 行 4へ 移 動 する(+= width * band) pb : 3(2+band * xs)から 始 まり band 数 ずつ 進 む 3の 次 は5に 移 動 する(+= band) pc : pb 3から 始 まり band の 数 だけ 増 分 1で 移 動 する3 の 次 は6(+= 1) pa = img + ys * width * band; // 初 期 値 pa += width * band; // 増 分 pb = pa + xs * band; // 初 期 値 pb += band; // 増 分 pc = pb; // 初 期 値 pc++; // 増 分

例 題 2-9 画 像 ファイル 入 力 し ネガポジ 変 換 した 画 像 を 表 示 させなさい ある 画 素 の 濃 度 (ピクセルの 持 つ 値 )をd とするとき ネガポジ 変 換 はその 画 素 の 濃 度 を255 d とすることである 画 素 値 のアクセスは3 重 ループを 用 いる for( i = 0; i < height; i++){ //line 数 に 対 するループ for( j = 0; j < width; j++ ){ //column 数 に 対 するループ for( k = 0; k < band; k++){ //band 数 に 対 するループ ここに 処 理 の 手 続 きを 書 く } } }

例 題 2-9 ( 続 き) stdout へ 出 力 する 方 法 で 行 います ex209/nega.c 動 作 確 認 画 像 全 体 なので i = 0, j = 0 かつ i < height, j < width (xs, ys) (xe, ye) の 矩 形 領 域 なら i = ys, j = xs かつ i <= ye, j <= xe

height この 部 分 は 非 常 に 重 要 なので もう 一 度 ポインターの 設 定 法 とプログラム 上 で それらがどのようにふるまうのかを 確 認 してください 画 像 全 体 矩 形 領 域 i = ys i <= ye J = xs j <= xe 1 x width * band y 2 4 3 (xs, ys) 6 5 (xe, ye) 3 種 類 のポインタを 使 用 する pa : 初 期 値 が2ysで ループが 回 るたびに 次 の 行 4へ 移 動 する(+= width * band) pb : 3(2+band * xs)から 始 まり band 数 ずつ 進 む 3の 次 は5に 移 動 する(+= band) pc : pb 3から 始 まり band の 数 だけ 増 分 1で 移 動 する3 の 次 は6(+= 1) pa = img + ys * width * band; // 初 期 値 pa += width * band; // 増 分 pb = pa + xs * band; // 初 期 値 pb += band; // 増 分 pc = pb; // 初 期 値 pc++; // 増 分

本 日 の 課 題 ここまでで 画 像 の 入 出 力 とそれぞれの 画 素 へのアクセス 方 法 が 分 かったと 思 います それを 前 提 として 以 下 の 課 題 に 取 り 組 んで ください 2-1. 一 様 な 色 の 画 像 を 生 成 し 表 示 させてください 画 像 のサイズと 色 はコマンドラインから 与 えるものとしてください $ singlecolor width height red green blue のような 感 じで 使 うことを 想 定 しています red, green, blueは 0~255の 値 をとります 2-2.サイズは 自 由 でよいので 画 像 の 中 に 円 ( 中 心 位 置 (xc, yc)を 指 定 する) 四 角 形 ( 左 上 と 右 下 の 座 標 (xs, ys) (xe, ye)を 指 定 する) 三 角 形 (3つの 頂 点 の 座 標 (x1, y1), (x2,y2), (x3, y3)を 指 定 する) を 何 個 か 描 いてください 色 は 指 定 するか もしくはそこだけ ネガにするのもありです