java 10位转16位,一个16位的转换相对8位色

I am working on a Java EE application, in which I have a table of "items" which will contain some products, and a field to set its color.

The Problem: The user chooses a color from a palette that contains 16 or perhaps 128 colors. I am storing the color as a byte (8-bit color), and I need to be able to convert RGB color/integer to its 8-bit equivalent and vice-versa, e.g.:

White: 0xFF(0b 111 111 11) to -1 or (255,255,255)

Red: 0x10(0b 111 000 00) to -65536 or (255, 0, 0 )

What I have tried so far:

void setColor(Color color){

short sColor = (color.getRGB() >> 16) & 0xFF) >> 8

| (color.getRGB() >> 8) & 0xFF) >> 8

| (color.getRGB() >> 0) & 0xFF) >> 8;

}

Color getColor(short sColor){

Color rgb = new Color(

/*red:*/ (sColor & 0xF) << 16,

/*gree:*/ (sColor & 0xF) << 8,

/*blue*/ (sColor & 0xF) << 0));

}

/* or */

Color getColor(short sColor){

Color rgb = new Color((sColor << 8) + sColor));

}

When I loop through color values 0 to 255, I get a single hue variations.

解决方案

So in the 8 bit color:

111 111 11

red grn bl

?

With 8 different values for red and green:

0 (0)

1 (36)

2 (72)

3 (109)

4 (145)

5 (182)

6 (218)

7 (255)

And 4 different values for blue.

Try this:

public static Color fromByte(byte b) {

int red = (int) Math.round(((b & 0xE0) >>> 5) / 7.0 * 255.0);

int green = (int) Math.round(((b & 0x1C) >>> 2) / 7.0 * 255.0);

int blue = (int) Math.round((b & 0x03) / 3.0 * 255.0);

return new Color(red, green, blue);

}

public static byte fromColor(Color color) {

int red = color.getRed();

int green = color.getGreen();

int blue = color.getBlue();

return (byte) (((int) Math.round(red / 255.0 * 7.0) << 5) |

((int) Math.round(green / 255.0 * 7.0) << 2) |

((int) Math.round(blue / 255.0 * 3.0)));

}

Here are the possible colors http://jsfiddle.net/e3TsR/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值