2010年1月8日 星期五

hw5

位元平面切片。

像素是由位元所組成的數位數字。
假設一幅影像中每個像素都是用八個位元表示。把影像想像成由八個 1 位元平面構成,範圍從最不重要位元的平面 0(所有最低位元)到最重要位元的平面 7(所有最高位元)最低位元裡頭有影像比較精細的部分,最高位元則有大量視覺上的重要資料!

首先是要知道ScanLine()的語法
ptr = (Byte *)Bmp->ScanLine[j];

ScanLine主要是幫助你去取得影像某一行的開頭指標!

當取得某行的開頭指標後,我們便可以將那一行做and運算!

0000 0001
0000 0010
.
.
.
1000 0000
這樣子我們便可以做出八個位元的平面切面!

當然!最後的輸出要變成黑跟白!這時候我們就必須將b,g,r值去除以2算完之後在去乘上255,這樣就可以將他轉換為只有黑跟白的圖片了。

可能有人有疑問 為什麼是b,g,r,跟RGB是不是一樣的東西?答案是:scanline讀取一列的每一個pixel值,假如你讀的是一張24bits的BMP因為BMP的特性,所以每一列的pixel是以B1 G1 R1 B2 G2 R2 Bn Gn Rn ....排列下去,因為這樣特性的關係,所以要使用以下程式碼前三行的指令。

b=ptr[i*3];
g=ptr[i*3+1];
r=ptr[i*3+2];
b=((b/bit)%2)*255;
g=((g/bit)%2)*255;
r=((r/bit)%2)*255;

以下是實作圖片:。

































































沒有留言:

張貼留言