顯示具有 sample program 標籤的文章。 顯示所有文章
顯示具有 sample program 標籤的文章。 顯示所有文章

星期四, 12月 30, 2010

Week 16: 程式實作 - GIF 檔案處理 (2)

1. 範例程式講解 (2)

本範例程式可以讀取與顯示 GIF 影像檔案中的調色盤。

  DMC-SP-GIF.c

顯示的方式為使用一個影像元件, 然後用 FillRect 這個 method 畫出來。

 
 
 
 

星期四, 12月 23, 2010

Week 15: 程式實作 - GIF 檔案處理 (1)

1. 程式實作: 檔案處理
  file-text.txt
  a. FILE *fopen(const char *filename, const char *mode);
  b. int fseek(FILE *stream, long offset, int whence);
  c. size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
  d. size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
  f. int fclose(FILE *stream);

2. 範例程式講解 (1)

本範例程式可以讀取與顯示 GIF 影像檔案中的調色盤。

  DMC-SP-GIF.c

顯示的方式為使用一個影像元件, 然後用 FillRect 這個 method 畫出來。

 
 
 
 

星期四, 12月 17, 2009

範例程式: GIF 影像調色盤之讀取與顯示

本範例程式可以讀取與顯示 GIF 影像檔案中的調色盤。

  DMC-2009F-SP07.txt

顯示的方式為使用一個影像元件, 然後用 FillRect 這個 method 畫出來。

 
 
 
 

星期二, 12月 15, 2009

範例程式: BMP 影像讀取

範例程式: 彩色或灰階 BMP 影像之自動讀取

說明: 這個範例程式可以自動判別所開啟的影像是 24 位元之彩色影像, 或是 8 位元的灰階影像, 不論影像寬度是否為 4 的倍數, 都可以成功讀取其影像內容, 顯示在影像元件中。

  DMC-2009F-SP06.txt
 

星期四, 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
 

星期四, 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"。
imBMP = fopen(OpenDialog1->FileName.c_str(), "rb");
然而, 這個程式還沒有處理 bmp 在儲存處理影像時, 把每一橫列所需的byte數都對齊為 4 的倍數的狀況。假設, 一張 24-bit 彩色影像的寬度為 250, 每一橫列所需之記憶體為 250 * BitCount / 8 = 750, 那麼在存成 bmp 檔時, 每一行最後會補上 2 bytes, 一共需要 752 bytes。

因此, 如果要用上面的範例程式讀取一張彩色影像, 其寬度不是 4 的倍數時, 就會發生錯誤的情況。

以下是一張影像寬度為 250 的影像。



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


 

星期四, 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 影像的檔頭資料, 然後將其顯示出來。
 

Week 06: File Access

1.本週所要練習的指令是 C 語言中關於檔案存取的指令:

 a. fopen
 b. fclose
 c. fseek
 d. fread
 e. fwrite

2. 範例程式:

 DMC-2009F-SP01.txt