【问题标题】:How to get 8 bit Colors?如何获得 8 位颜色?
【发布时间】:2014-12-04 09:44:08
【问题描述】:

所以,此刻,我得到了一个生成 3 个随机整数的方法,从 0 到 255。

我使用 3 个整数来表示颜色。红、绿、蓝。

所以,此时,如果我想用生成的颜色设置某物的颜色,我使用这个:

 Color.argb(255, r, g, b); //255 =max intensity and after ,there are red green blue

我需要做的,是将 3 个整数,或者最终的强度值,转换为 8 位整数。

我们非常感谢任何类型的文档或指导!

如果需要更多信息,我会评论或修改问题的正文。

【问题讨论】:

  • 要将 24 位数据放在 8 位空间中,您将丢失信息。一些系统使用调色板(颜色查找表)来尽可能接近原始图像(gif 可以做到这一点)。
  • 使用 8 位无论如何都会丢失一些关于颜色的数据。这就是你能得到的 64 种颜色中的“美”。
  • 是的,我知道这件事......但我的雇主想要 8 位......

标签: java colors 8-bit


【解决方案1】:

您可以通过以下方式对颜色进行编码:

Bits    0### 1### 2### 3### 4### 5### 6### 7###
        Alpha---- Red------ Green---- Blue-----

请注意,您会丢失大量有关颜色的信息(但我认为这是您想要获得的信息)。

为了编码你需要做的事情:

  • 更改颜色范围(0-2550-3
  • 适当移动颜色并添加它们以获得 8 位值。

下面是一些示例代码:

import java.awt.Color;

abstract class EightBit {
  public static int fromColor(Color c) {
    return ((c.getAlpha() >> 6) << 6)
         + ((c.getRed()   >> 6) << 4)
         + ((c.getGreen() >> 6) << 2)
         +  (c.getBlue()  >> 6);
  }
  public static Color toColor(int i) {
    return new Color(((i >> 4) % 4) * 64,
                     ((i >> 2) % 4) * 64,
                      (i       % 4) * 64,
                      (i >> 6)      * 64);
  }
}

说明

编码

让我们从一个示例颜色开始:new Color(200, 59, 148, 72)。现在我们将其转换为整数。颜色的二进制表示为:

Alpha 200 -- 11001000
Red    59 -- 00111011
Green 148 -- 10010100
Blue   72 -- 01001000

现在,我们将它们向右移动 6 位(所以我们得到前 2 位):

Alpha 3 -- 11
Red   0 -- 00
Green 2 -- 10
Blue  1 -- 01

现在我们把它们放在一起:

Bits  [ 1 ][ 1 ][ 0 ][ 0 ][ 1 ][ 0 ][ 0 ][ 1 ] -- 209
       ALPHA---  RED-----  GREEN---  BLUE----

它是209。看?

解码

所以我们回到了我们的 8 位数字:209。我们想解码它。首先,我们需要将 2 位颜色向右移动,然后取模 4:

Bits  [ 1 ][ 1 ][ 0 ][ 0 ][ 1 ][ 0 ][ 0 ][ 1 ]
      \_shift_by_6_bits_____________[ 1 ][ 1 ] -- 3 (Alpha)
                \_by_4_bits_________[ 0 ][ 0 ] -- 0 (Red)
                          \_by_2____[ 1 ][ 0 ] -- 2 (Green)
                   shift by 0 bits: [ 0 ][ 1 ] -- 1 (Blue)

现在我们将它们乘以 64:

3 * 64 = 192 (Alpha)
0 * 64 =   0 (Red)
2 * 64 = 128 (Green)
1 * 64 =  64 (Blue)

然后将它们放回Color 对象中。正如你所看到的,颜色是不同的:一些关于颜色的信息在这个过程中丢失了。这称为lossy compression

【讨论】:

  • 您能解释一下整个过程吗?我很确定我理解它是如何工作的,但我想确保我不会使用被误解的概念。无论如何,总的来说它看起来像我需要的。如果一切正确,将立即对其进行测试并检查答案。 (也会放弃你,只要你解释一下你做了什么,一点)
  • 解释完毕!确保接受答案(及其详尽的解释)。
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 2022-11-25
  • 2018-12-28
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多