1. 影像縮放處理以及旋轉(MATRIX)的演算法
2. BMP檔案的格式(C/C++的重點)(參考點陣圖(Bitmap)檔案格式)
為了抓出BMP檔案裡面的RAW資料,有使用window.h
問題在於fread()這個函數抓出來的資料列是一維陣列
所以我們必須將他手動轉成二維以便做計算
在此則有另一個問題則是:BMP檔案又分為24-BIT(無壓縮)以及8-BIT(壓縮)
24-BIT的RAW檔每個PIXEL以RGB三個BYTE表示
8-BIT的RAW檔則是利用HEADER裡面的調色盤來表示,每個PIXEL一個BYTE
演算法部分則分為三種
- Nearest Neighbor Interpolation
- Bilinear Interpolation
- Bicubic Interpolation
在BMP檔案讀取花了較多的時間,所以演算法實做部分只用Nearest Neighbor Interpolation
(當初應該用.NET去寫作業的= =)

而縮放的部分我選擇直接使用一維的方式處理,直接算出縮放倍率並將畫格等比放大塞入新的陣列。以下是結果:
原始圖檔:
放大後:
放大前與放大後畫格差異:
旋轉的演算法則參考這篇(影像處理常見幾何運算)
其中,最主要是要REDIM整張畫布的大小。
且初始化的時候所有值設為HEX<<FF
且要將影像的四個角座標化才比較好實現旋轉的運用
旋轉後結果:
原本還有去查JPEG的檔案影象格式並且實做,但是沒辦法從壓縮過的那些資料列拉出原始影像陣列,然後就放棄了。
沒有留言:
張貼留言