2010年1月1日 星期五

HW5

這次是要完成位元平面 (bit-planes) 程式實作
因為8 bit 所以可以把圖切成8個平面
作業方法就是把像素用ScanLine讀出
和切面值做and運算
ucRMatrix[x][y] & 0x01 (0x01就是16位元 0000 0001 的意思)


如果與值相等就設為255
Image2->Canvas->Pixels[x][y] = TColor RGB(255,255,255); //白色


不同就設0
Image2->Canvas->Pixels[x][y] = TColor RGB(0,0,0); //黑色


再多寫幾個大概就完成了0x02,0x03.....0x08
--------------------------------1/19(補)
這個作業就是
由於圖片是由8-bit組成 現在我們就是要把這八張圖片拆開來顯示
也就是說 把像素點做& 運算
譬如說 像素點0111 1100

-------------
0000 0001
0000 0010
0000 0100
0000 1000
0001 0000 & 0111 1100 (原圖像素值)
0010 0000
0100 0000
1000 0000

一開始也是大概知道這樣運算
一張圖的像素值也是8-bit
and運算應該是把它的1值取出來其他都為0
例如
0111 1100
0000 0001 ->第一位元
--------------
0000 0000 -->判斷0111 1100 的第一位元是否為1
所以才用and 不用or

這應該就是位元平面的原理
補充 ..
我在想原來像素值可以直接和數值做邏輯運算
沒有想過把像素值二進制化= =

第一位元平面:

第二位元平面:

第三位元平面:

第四位元平面:

第五位元平面:

第六位元平面:

第七位元平面:

第八位元平面:








3 則留言:

  1. RGB(255,255,255) 應該是白色, 不是黑色耶!

    回覆刪除
  2. 0x01就是16位元 0000 0001 的意思, 那麼請問
    " 再多寫幾個大概就完成了0x02,0x03.....0x08 "
    這是甚麼意思??

    0x08 是代表什麼呢?

    回覆刪除
  3. 先跟老師說抱歉寫得太草率了
    RGB(255,255,255)原來是白色
    我搞反了
    0x08 就是1000 0000
    0x07 0100 0000
    以此類推..
    還有多寫幾個就是
    一樣跑for迴圈
    寫8個Button只是把0x01...0x08值代入

    寫太草率 讓老師 看不懂 真是對不起XD

    回覆刪除