2012-07-18 199 views
1

我能夠與BufferedImage以獲得一個640x640的圖像的每個像素的RGB值,輸出看起來是這樣的:轉換24位圖像RGB到3位8色

[...] 
Pixel :(640, 634) RGB: 166 94 82 
Pixel :(640, 635) RGB: 166 94 80 
Pixel :(640, 636) RGB: 163 91 77 
Pixel :(640, 637) RGB: 157 88 73 
Pixel :(640, 638) RGB: 157 88 73 
Pixel :(640, 639) RGB: 159 90 74 
Pixel :(640, 640) RGB: 158 89 73 
This image has 69197 colors. 

我需要將這種方式獲得的每種RGB顏色分類爲3位RGB(8種顏色),我需要對如何做到這一點有一個想法...如何知道RGB的8個顏色中的每一個的範圍3位RGB。謝謝!

+0

該操作稱​​爲[抖動](http://en.wikipedia.org/wiki/Dither#Digital_photography_and_image_processing)。 – 2012-07-18 18:41:36

回答

3

您的結果圖像將有1位爲每個顏色組件。

爲紅色,例如,你應該這樣做:

red1Bit = redOriginal > 127 ? 1 : 0; 

你應該爲藍色和綠色做同樣也是如此。

+0

wooow !!這是合乎邏輯的 – 2012-07-18 18:38:05

1

24位RGB調色板使用每個紅色,綠色和藍色分量的8位:

RGB([0..255], [0..255], [0..255])

一個3比特的RGB調色板使用每個紅,綠和藍顏色分量的1位:

RGB([0..1], [0..1], [0..1])

由於每個通道的範圍只有兩個值,因此需要將8位編碼減少爲1位編碼。在八位編碼爲此,除以所述最大值的一半(255/2 = 127

可以使用整數除法對於每個RGB compenent的轉化:

3 bit R : (8-bit Red Value)/127 
     G : (8-bit Green Value)/127 
     B : (8-bit Blue Value)/127 

實施例:

3 bit R : (56)/127 = 0 
     G : (225)/127 = 1 
     B : (127)/127 = 1