안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
보통 Color 클래스에서 Color.red(int color) 등으러 컬러값의 각 r,g,b을 가져 오잖아요.
이 때 범위는 0~255 8bit이구요.
저는 여기서 5bit의 값만 즉 0~32의 범위를 가져오고 싶은데 찾아본대로
c = color;
int r = (c & 0xF80000) >> 19;
int g = (c & 0xF800) >> 6;
int b = (c & 0xF8) << 7;
int r = (c & 0xF80000) >> 19;
int g = (c & 0xF800) >> 6;
int b = (c & 0xF8) << 7;
이렇게 시프트연산을 해봤는데.. r 값만 0~32의 범위를 가져오지 g와 b는 훨씬 오버하는 값을 가져오더라구요ㅜㅜ
제 생각대로라면 각 r,g,b(0~255,0~255,0~255)를 r,g,b(0~32,0~32,0~32)로 가져와야 하는거 아닌가요?
아니면 다른 개념이라면 r,g,b 모두 각각 0~32의 값으로 가져오는 방법은 없을까요?
계산식이 틀리신듯해요
5bit 만 가져오려면 하위 5bit 만 1로 바꿔서 & 연산을 하셔야하는데, F8 의 경우는 반대로 "상위" 5bit 가 1 이더군요.
다시 정정해서 계산하자면..
int r = (c & 0x001F0000) >> 16;
int g = (c & 0x00001F00) >> 8;
int b = (c & 0x0000001F);
참고적으로 R, G, B 에서 각각 5bit 로 뽑는다고 했을때, 값의 범위는 0~31 이 됩니다. 32까지 추출하려면 6비트가 됩니다~