将24位图像RGB转换为3位8色

时间:2012-07-18 18:19:56

标签: java rgb bufferedimage color-palette

我能够使用BufferedImage获取640x640图像的每个像素的RGB值,输出如下所示:

[...]
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范围3位RGB的8种颜色。谢谢!

2 个答案:

答案 0 :(得分:3)

每个颜色分量的结果图像将为1位。

例如,对于红色,你应该这样做:

 red1Bit = redOriginal > 127 ? 1 : 0;

你也应该对蓝色和绿色做同样的事情。

答案 1 :(得分:1)

24位RGB调色板为红色,绿色和蓝色分量使用8位:

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

3位RGB调色板每个红色,绿色和蓝色分量使用1位:

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

由于每个通道的范围只有两个值,因此需要将8位编码减少为1位编码。为此,请以8位编码(255 / 2 = 127

除以最大值的一半

您可以使用整数除法来转换每个RGB部分:

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