位元平面切片。
像素是由位元所組成的數位數字。
假設一幅影像中每個像素都是用八個位元表示。把影像想像成由八個 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;
以下是實作圖片:。
沒有留言:
張貼留言