2013-02-08 4 views
0

일부 제품을 포함 할 "항목"테이블과 해당 색상을 설정하는 필드가있는 Java EE 응용 프로그램에서 작업하고 있습니다.16 비트 변환의 ​​상대 8 비트 색상

문제 : 사용자가 16 색 또는 128 색을 포함하는 팔레트에서 색을 선택합니다. 나는 바이트 (8 비트 컬러)와 같은 색상을 저장하고, 나는 예를 들어, 자사의 8 비트 상당와 그 반대로 RGB 색상/정수로 변환 할 수 있어야한다 : 나는 무엇을 가지고

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

지금까지 시도 :

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)); 
} 

색상 값 0에서 255 사이를 반복하면 하나의 색상 변화가 발생합니다. 8 비트 색상

+0

코드를 getColor에서 당신은 대단히 감사합니다 – AlexWien

답변

3

그래서 :

111 111 11 
red grn bl 

?

0 (0) 
1 (36) 
2 (72) 
3 (109) 
4 (145) 
5 (182) 
6 (218) 
7 (255) 

그리고 4 가지 값 청색 : 빨간색과 녹색 8 개 다른 값으로

.

이 시도 :

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))); 
} 

여기 http://jsfiddle.net/e3TsR/

+0

색상을 반환 해달라고, 유효하지 않은 것으로 보인다 가능한 색상 있습니다, 이것은 내가 원하는 정확히입니다. –

관련 문제