방프리

RGB555와 RGB565에 관하여 본문

기타 프로그래밍

RGB555와 RGB565에 관하여

방프리 2020. 3. 26. 00:21

비트맵 관련 소스코드를 보면서 RGB555와 RGB565에 대한 코드를 보게 되었다.

일단은.... 비트계산으로 된 코드인데 어셈블리 코드라고 하기엔 뭔가 애매하다.

(그 이유는 RGB555인지 RGB565인지 DirectX에서 판별하기 때문이다.)

일단은 RGB555와 RGB565의 차이점에 대해 설명하면 FrameBuffer는 하나의 pixel을 구성하는 2byte로

구성되어 있다. 하나의 pixel이 2byte로 된 색 정보란 뜻이다. BMP의 팔레트는 R, G ,B의 값이 각각 1byte로

정보를 담고 있습니다. 거기에 1byte 확장으로 쓰여서 4byte가 된다. 하지만 Frame Buffer에서는 2byte로 표현이 된다.

pixel의 2byte에도 RGB의 값이 각각 들어가 있다. RGB555는 상위 1bit를 사용하지 않고 R,G,B가

각각 5bit로 사용되는 구조이며, RGB565는 R = 5bit, G = 6bit, B = 5bit로 구성되어 있다.

위의 RGB555와 RGB565는 모두 16비트의 해상도를 지원한다. 즉 결과는 같다라는 것이다.

대신 어떠한 기기를 사용하여 이미지를 출력하느냐에 따라 두 개의 사용이 달라진다.

(단지 1byte를 사용하냐 안하냐에 따라 말이다.)

이외에 RGB888과 ARGB8888이 있는데 각각 24bit와 32bit를 뜻한다.

쉽게 나타내면

RGB888    = RRRRRRRRGGGGGGGGBBBBBBBB

ARGB8888 = AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB

다음과 같이 나타낼 수 있다. (여기서 A란 알파값을 뜻한다.)

추가적으로 알아낸 것은 Android의 경우 기본 RGB565를 지원하며 ARGB8888로 변환하는 함수가 따로

존재한다. IOS의 경우 ARGB8888을 기본 비트맵으로 사용한다.

Comments