1

我能够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 种颜色),我需要知道如何做到这一点......如何知道 8 种颜色中每种颜色的 RGB 范围的 3 位 RGB。谢谢!

4

2 回答 2

3

您生成的图像对于每个颜色分量都有 1 位。

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

 red1Bit = redOriginal > 127 ? 1 : 0;

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

于 2012-07-18T18:36:38.027 回答
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 组件:

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
于 2012-07-18T18:44:41.530 回答