1. 學期總成績公布 (2010/1/20 23:53 更新)
2. 作業八 (加分作業): 期末心得與檢討 ( 可加 1 ~ 3 分 )
3. 成績說明:
a. 出缺席成績佔總分 10 分, 缺席 1 次扣 1 分。
b. 上課互動成績佔總分 20 分, 互動紀錄 1 次可得 2 分。
c. 已經公布之作業成績, 若在上繳期限內有做更新,
請務必用 email 通知我重新評分, 否則就是以公布成績為準。
星期五, 1月 01, 2010
Week 16: RIFF & WAV Format
1. RIFF: Resource Interchange File Format ( 資源交換檔案標準 )
2. 如何在 C++ Builder 程式中, 播放一段 WAV 檔

3. AAC Audio
4. PCM: Pulse-code modulation ( 脈衝編碼調變 )
5. 作業七: 撰寫一個可以處理音訊的程式。
例如: 修改聲音大小的功能。
2. 如何在 C++ Builder 程式中, 播放一段 WAV 檔

3. AAC Audio
4. PCM: Pulse-code modulation ( 脈衝編碼調變 )
5. 作業七: 撰寫一個可以處理音訊的程式。
例如: 修改聲音大小的功能。
星期日, 12月 20, 2009
Week 15: Audio File Format
1. Audio File Format ( 音頻檔案格式 )
2. Apple's 數位音樂入門
從 CD 匯入音樂到 iTunes




I Dreamed There Was No War 1:37"
檔案格式 檔案大小
WAV 17,277,836 位元組
AIFF 17,280,112 位元組
Apple Lossless 8,175,810 位元組
MP3 2,354,555 位元組
AAC 1,591,708 位元組
3. 作業六: 請轉寫一個程式, 可以將 WAV 檔頭資料顯示出來。
( 可以將音訊波形顯示出來者尤佳 )
2. Apple's 數位音樂入門
從 CD 匯入音樂到 iTunes




I Dreamed There Was No War 1:37"
檔案格式 檔案大小
WAV 17,277,836 位元組
AIFF 17,280,112 位元組
Apple Lossless 8,175,810 位元組
MP3 2,354,555 位元組
AAC 1,591,708 位元組
3. 作業六: 請轉寫一個程式, 可以將 WAV 檔頭資料顯示出來。
( 可以將音訊波形顯示出來者尤佳 )
星期六, 12月 19, 2009
Week 14: GIF Format (2)
1. 範例程式講解
a. 彩色或灰階 BMP 影像之自動讀取
b. GIF 影像調色盤之讀取
2. 導讀 Wikipedia 之 GIF 條目: Graphics Interchange Format
3. 課程重要公告:
請同學於下週二 (12/22) 以前完成上傳作業 1~3 , 逾期後果請自行負責。
a. 彩色或灰階 BMP 影像之自動讀取
b. GIF 影像調色盤之讀取
2. 導讀 Wikipedia 之 GIF 條目: Graphics Interchange Format
3. 課程重要公告:
請同學於下週二 (12/22) 以前完成上傳作業 1~3 , 逾期後果請自行負責。
星期四, 12月 10, 2009
Week 13: GIF format (1)
1. 維基百科中的 GIF 影像格式:
a. 正體中文版資料
b. 英文版資料: Graphics Interchange Format
本週同學上課的情況很不錯, 主動提問非常踴躍,
所以有來上課的同學, 學期總分都加 1 分。
2. 第五個作業:
讀出 GIF 檔案中的調色盤資料, 並顯示出來。然後, 針對調色盤色彩之亮度做排序。


經過用明亮度排序後的調色盤:

a. 正體中文版資料
b. 英文版資料: Graphics Interchange Format
本週同學上課的情況很不錯, 主動提問非常踴躍,
所以有來上課的同學, 學期總分都加 1 分。
2. 第五個作業:
讀出 GIF 檔案中的調色盤資料, 並顯示出來。然後, 針對調色盤色彩之亮度做排序。


經過用明亮度排序後的調色盤:

星期四, 12月 03, 2009
Week 12: BMP format (4)
1. 講解範例程式 DMC-2009F-SP04.txt
範例程式中, 我們使用了 TBitmap::ScanLine 這個 property, 存放著 Bitmap 某一橫列的色彩值在記憶體中存放的起始指標, 有了這個指標, 我們就可以直接在記憶體中直接存取, 修改影像內容。
2. 請同學將範例程式 DMC-2009F-SP04.txt 改成可以讀取影像寬度可以不是 4 的倍數的彩色影像。
BMP format 在儲存影像時, 把每一橫列所需的byte數都對齊為 4 的倍數。假設, 一張 24-bit 彩色影像的寬度為 250, 每一橫列所需之記憶體為 250 * BitCount / 8 = 750, 那麼在存成 bmp 檔時, 每一行最後會補上 2 bytes, 一共需要 752 bytes。
3. 範例程式 DMC-2009F-SP05.txt
4. 請同學將範例程式 DMC-2009F-SP05.txt 改成可以讀取灰階 bmp 影像 or 彩色 bmp 影像。
同學可以藉由檔頭資料中的 iBitCount 來判斷所讀取的影像是彩色影像或是灰階影像, 如果是灰階影像, 必須增加一個灰階調色盤給影像元件 imOriginal, 這樣才可以正確顯示出來。
灰階影像與灰階調色盤, 請參考範例程式 DMC-2009F-SP03.txt
範例程式中, 我們使用了 TBitmap::ScanLine 這個 property, 存放著 Bitmap 某一橫列的色彩值在記憶體中存放的起始指標, 有了這個指標, 我們就可以直接在記憶體中直接存取, 修改影像內容。
2. 請同學將範例程式 DMC-2009F-SP04.txt 改成可以讀取影像寬度可以不是 4 的倍數的彩色影像。
BMP format 在儲存影像時, 把每一橫列所需的byte數都對齊為 4 的倍數。假設, 一張 24-bit 彩色影像的寬度為 250, 每一橫列所需之記憶體為 250 * BitCount / 8 = 750, 那麼在存成 bmp 檔時, 每一行最後會補上 2 bytes, 一共需要 752 bytes。
3. 範例程式 DMC-2009F-SP05.txt
4. 請同學將範例程式 DMC-2009F-SP05.txt 改成可以讀取灰階 bmp 影像 or 彩色 bmp 影像。
同學可以藉由檔頭資料中的 iBitCount 來判斷所讀取的影像是彩色影像或是灰階影像, 如果是灰階影像, 必須增加一個灰階調色盤給影像元件 imOriginal, 這樣才可以正確顯示出來。
灰階影像與灰階調色盤, 請參考範例程式 DMC-2009F-SP03.txt
星期四, 11月 26, 2009
星期三, 11月 18, 2009
Week 09: BMP format (3)
第四個作業 (Homework 4):
請讀取一張 BMP 影像, 並將其影像內容顯示於 C++ Builder 的影像元件之中。
範例程式: DMC-2009F-SP04.txt
說明:
這個範例程式已經成功地解決同學們在課堂上, 如果沒有把 fseek 加入到迴圈中, 無法正確讀取影像內容的問題, 經過實驗發現, fread 從檔案中成功讀取資料後, 確實會自動將指標移到下一筆資料, 不需要我們用 fseek 指令設定; 然而, fread 會讀取失敗(傳回值為 0 ), 是因為在開啟檔案時, 必須設定開啟模式為"rb"。
因此, 如果要用上面的範例程式讀取一張彩色影像, 其寬度不是 4 的倍數時, 就會發生錯誤的情況。
以下是一張影像寬度為 250 的影像。

用本範例程式讀取出來的結果。

請讀取一張 BMP 影像, 並將其影像內容顯示於 C++ Builder 的影像元件之中。
範例程式: DMC-2009F-SP04.txt
說明:
這個範例程式已經成功地解決同學們在課堂上, 如果沒有把 fseek 加入到迴圈中, 無法正確讀取影像內容的問題, 經過實驗發現, fread 從檔案中成功讀取資料後, 確實會自動將指標移到下一筆資料, 不需要我們用 fseek 指令設定; 然而, fread 會讀取失敗(傳回值為 0 ), 是因為在開啟檔案時, 必須設定開啟模式為"rb"。
imBMP = fopen(OpenDialog1->FileName.c_str(), "rb");然而, 這個程式還沒有處理 bmp 在儲存處理影像時, 把每一橫列所需的byte數都對齊為 4 的倍數的狀況。假設, 一張 24-bit 彩色影像的寬度為 250, 每一橫列所需之記憶體為 250 * BitCount / 8 = 750, 那麼在存成 bmp 檔時, 每一行最後會補上 2 bytes, 一共需要 752 bytes。
因此, 如果要用上面的範例程式讀取一張彩色影像, 其寬度不是 4 的倍數時, 就會發生錯誤的情況。
以下是一張影像寬度為 250 的影像。

用本範例程式讀取出來的結果。

星期四, 11月 05, 2009
Week 08: BMP Format (2)
// 宣告一個資料型態 BMP_Header_TYPE,
// 其結構為 BMP 檔頭中, 有關 File Information 的部分
typedef struct {
unsigned char ucTyte[2]; // 固定為 'BM', 用以辨認是否為 DIB
unsigned char ucFileSize[4]; // 檔案長度
short sReserved1; // 固定為 0 , 保留未用
short sReserved2; // 固定為 0 , 保留未用
unsigned char ucOffset[4]; // 儲存圖像資料到檔頭的距離
} BMP_Header_TYPE;
// 宣告一個變數 Header[1], 其型態為剛剛宣告的 BMP_Header_TYPE
BMP_Header_TYPE Header[1];
// 宣告一個資料型態 BitmapInfoHeader_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Bitmap Information 的部分
typedef struct {
unsigned char ucSize[4]; // 宣告圖像基本資料的大小 ( = 40 )
unsigned char ucWidth[4]; // 圖像的寬度, 以 pixel 為單位
unsigned char ucHeight[4]; // 圖像的高度, 以 pixel 為單位
unsigned char ucPlanes[2]; // 固定存入 1
unsigned char ucBitCount[2]; // 宣告每個 pixel 需要多少 bit 儲存
unsigned char ucCompression[4];
// 宣告圖像壓縮方式, 可能的值有 3 種 : 0, 1, 2
unsigned char ucImageSize[4];
// 影像大小, 以 Byte 為單位 ( W*H*BitCount / 8 )
unsigned char ucXPixelsPerMeter[4];
// 宣告圖像在 X 方向於 1 公尺有多少 pixel ,
unsigned char ucYPixelsPerMeter[4];
// 宣告圖像在 Y 方向於 1 公尺有多少 pixel ,
unsigned char ucUsedColor[4];
// 宣告圖像資料實際用到的顏色數目 ( 0表示用光 )
unsigned char ucImportantColor[4];
// 宣告調色盤中, 多少顏色在顯示時是重要的
} BitmapInfoHeader_TYPE;
// 宣告一個變數 BitmapInfoHeader[1],
// 其型態為剛剛宣告的 BitmapInfoHeader_TYPE
BitmapInfoHeader_TYPE BitmapInfoHeader[1];
// 宣告一個資料型態 Palette_COLOR_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Palette 的部分
typedef struct {
Byte bBlue;
Byte bGreen;
Byte bRed;
Byte bReserved;
} Palette_COLOR_TYPE;
// 宣告 256 個變數 PaletteColors[256] 用來儲存調色盤的顏色,
// 型態為剛宣告的 Palette_COLOR_TYPE
Palette_COLOR_TYPE PaletteColors[256];
// 宣告 2 個變數; 儲存檔案結束控制碼
unsigned char ucFileEnd[2]; // 檔案的最後有 2 個 byte 的 0
參考程式
// 其結構為 BMP 檔頭中, 有關 File Information 的部分
typedef struct {
unsigned char ucTyte[2]; // 固定為 'BM', 用以辨認是否為 DIB
unsigned char ucFileSize[4]; // 檔案長度
short sReserved1; // 固定為 0 , 保留未用
short sReserved2; // 固定為 0 , 保留未用
unsigned char ucOffset[4]; // 儲存圖像資料到檔頭的距離
} BMP_Header_TYPE;
// 宣告一個變數 Header[1], 其型態為剛剛宣告的 BMP_Header_TYPE
BMP_Header_TYPE Header[1];
// 宣告一個資料型態 BitmapInfoHeader_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Bitmap Information 的部分
typedef struct {
unsigned char ucSize[4]; // 宣告圖像基本資料的大小 ( = 40 )
unsigned char ucWidth[4]; // 圖像的寬度, 以 pixel 為單位
unsigned char ucHeight[4]; // 圖像的高度, 以 pixel 為單位
unsigned char ucPlanes[2]; // 固定存入 1
unsigned char ucBitCount[2]; // 宣告每個 pixel 需要多少 bit 儲存
unsigned char ucCompression[4];
// 宣告圖像壓縮方式, 可能的值有 3 種 : 0, 1, 2
unsigned char ucImageSize[4];
// 影像大小, 以 Byte 為單位 ( W*H*BitCount / 8 )
unsigned char ucXPixelsPerMeter[4];
// 宣告圖像在 X 方向於 1 公尺有多少 pixel ,
unsigned char ucYPixelsPerMeter[4];
// 宣告圖像在 Y 方向於 1 公尺有多少 pixel ,
unsigned char ucUsedColor[4];
// 宣告圖像資料實際用到的顏色數目 ( 0表示用光 )
unsigned char ucImportantColor[4];
// 宣告調色盤中, 多少顏色在顯示時是重要的
} BitmapInfoHeader_TYPE;
// 宣告一個變數 BitmapInfoHeader[1],
// 其型態為剛剛宣告的 BitmapInfoHeader_TYPE
BitmapInfoHeader_TYPE BitmapInfoHeader[1];
// 宣告一個資料型態 Palette_COLOR_TYPE ,
// 其結構為 BMP 檔頭中, 有關 Palette 的部分
typedef struct {
Byte bBlue;
Byte bGreen;
Byte bRed;
Byte bReserved;
} Palette_COLOR_TYPE;
// 宣告 256 個變數 PaletteColors[256] 用來儲存調色盤的顏色,
// 型態為剛宣告的 Palette_COLOR_TYPE
Palette_COLOR_TYPE PaletteColors[256];
// 宣告 2 個變數; 儲存檔案結束控制碼
unsigned char ucFileEnd[2]; // 檔案的最後有 2 個 byte 的 0
參考程式
星期四, 10月 29, 2009
Week 07: BMP Format (1)
1. 本週所要練習的題目是如何從BMP檔案中讀出相關的圖片資料 ?
BMP Format (BMP檔案格式 )
2. 同學如果不確定從檔案中讀取出來的資料正不正確, 可以用 PSPad 這個文書編輯器來檢視檔案的原始內容:

3. 範例程式: 用結構 struct 的方式, 一次讀入一大堆資料 ...
DMC-2009F-SP02.txt
4. 第三個作業(homework 3) :
請讀取 BMP 影像的檔頭資料, 然後將其顯示出來。
BMP Format (BMP檔案格式 )
2. 同學如果不確定從檔案中讀取出來的資料正不正確, 可以用 PSPad 這個文書編輯器來檢視檔案的原始內容:

3. 範例程式: 用結構 struct 的方式, 一次讀入一大堆資料 ...
DMC-2009F-SP02.txt
4. 第三個作業(homework 3) :
請讀取 BMP 影像的檔頭資料, 然後將其顯示出來。
Week 06: File Access
1.本週所要練習的指令是 C 語言中關於檔案存取的指令:
a. fopen
b. fclose
c. fseek
d. fread
e. fwrite
2. 範例程式:
DMC-2009F-SP01.txt
a. fopen
b. fclose
c. fseek
d. fread
e. fwrite
2. 範例程式:
DMC-2009F-SP01.txt
星期四, 10月 15, 2009
星期五, 10月 02, 2009
Week 03: 如何在影像物件上畫線?
1. 本週程式示範:
a. OpenImageDialog,
b. ColorDialog
c. MoveTo(); LineTo();
d. Image1->Canvas->Pen->Color
e. Image1->Canvas->Pen->Width
2. 有關在影像上繪圖的相關資料, 請同學參考課本 § 11-5 繪圖功能
類別 Canvas
3. 第一個作業: 請完成本週課堂上所練習之程式, 並將程式執行結果秀到 Homework Show @ DMC 作業部落格中, 並寫上程式撰寫心得。
a. OpenImageDialog,
b. ColorDialog
c. MoveTo(); LineTo();
d. Image1->Canvas->Pen->Color
e. Image1->Canvas->Pen->Width
2. 有關在影像上繪圖的相關資料, 請同學參考課本 § 11-5 繪圖功能
類別 Canvas
3. 第一個作業: 請完成本週課堂上所練習之程式, 並將程式執行結果秀到 Homework Show @ DMC 作業部落格中, 並寫上程式撰寫心得。
星期四, 9月 17, 2009
Week 01: 本課程的評分原則
1. 本課程的主要目標是培養同學具備以下之基本能力:
a. 了解各種多媒體資料的基本儲存格式,
b. 撰寫簡單程式來處理與分析各種多媒體資料。
2. 本課程 98 學年度的評分原則如下:
a. C++ Builder 程式撰寫作業共 7 次 ( 70% )
b. 學習態度 ( 30% )
點名未到者(包含遲到者), 一次扣 1 分, 以 10 分為限。
上課睡覺 or 玩電玩 (電腦遊戲, 掌上遊戲機, 手機遊戲) 一次扣一分。
上課學習認真, 互動良好者, 一次加一分, 以 20 分為限。
所以原則上, 每位同學目前有 10 分的基本分。
3. 教科書: C++ Builder 6 完全攻略

定價 690 元, 團購價 25% OFF,518 500 元
已向上奇科技(與金禾圖書合併), 預計下週三會寄 35 本到資工系辦公室。
上奇科技聯絡業務: 林金穎 小姐
4. 作業繳交部落格 Homework Show @ DMC
請修課同學在本篇文章中, 留下學號與 email , 我會發共同作者的邀請信給你, 讓你有權限可以在作業部落格繳交作業。
a. 了解各種多媒體資料的基本儲存格式,
b. 撰寫簡單程式來處理與分析各種多媒體資料。
2. 本課程 98 學年度的評分原則如下:
a. C++ Builder 程式撰寫作業共 7 次 ( 70% )
b. 學習態度 ( 30% )
點名未到者(包含遲到者), 一次扣 1 分, 以 10 分為限。
上課睡覺 or 玩電玩 (電腦遊戲, 掌上遊戲機, 手機遊戲) 一次扣一分。
上課學習認真, 互動良好者, 一次加一分, 以 20 分為限。
所以原則上, 每位同學目前有 10 分的基本分。
3. 教科書: C++ Builder 6 完全攻略
定價 690 元, 團購價 25% OFF,
已向上奇科技(與金禾圖書合併), 預計下週三會寄 35 本到資工系辦公室。
上奇科技聯絡業務: 林金穎 小姐
4. 作業繳交部落格 Homework Show @ DMC
請修課同學在本篇文章中, 留下學號與 email , 我會發共同作者的邀請信給你, 讓你有權限可以在作業部落格繳交作業。
訂閱:
文章 (Atom)