반응형

비트맵(bitmap)을 다루다 보면

16비트 컬러 값을 32비트로 변환해야 할 일이 생긴다.


그럴 때 귀찮은 비트 연산을 해야 하는데

아래와 같이 하면 된다.

 

   // 하나의 픽셀이 short형으로 저장되어있다.   
   short color = 0x6782;                               

   // 3만큼 shift 함으로써 0부터 255까지의 컬러값이 표현된다.
   short r = ( (color &amp; 0xf800) >> 11 ) <;<; 3;
   short g = ( (color &amp; 0x07c0) >> 6 ) <;<; 3;
   short b = ( (color &amp; 0x003e) >> 1 ) <;<; 3;
   short a = ( (color &amp; 0x0001) >> 0 ) <;<; 3;

 

여기서 첫 번째 red 값을 구한

원리에 대해서 간단히 이해해 보자.


우선 AND 연산을 한다.

   1100 1010 1101 0101
& 1111 1000 0000 0000
----------------------
   1100 1000 0000 0000

이것을 11 만큼 오른쪽으로 shift를 하면

 

1100 1000 0000 0000 >> 11

   0000 0000 0001 1001 가 된다.

다시 3만큼 왼쪽으로 shift를 하면
0000 0000 0001 1001

→ 

 0000 0000 1100 1000 이 된다.

이렇게 하면 최댓값이 0000 0000 1111 1111이 되고

이것은 10진수로 255가 된다.


즉, 0부터 255까지의 숫자 표현이 가능해진다.

 

반응형