문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 RGB (문단 편집) === 디지털에서의 색상 처리 === 디지털에서는 이산적인 값을 쓰게 되며, 정보량(비트)에 따라서 표현할 수 있는 색의 가지수가 달라지게 된다. 제한된 정보량 안에서 색상을 표현하기 위해서는 잘리는 값이 생기게 된다. [[CGA]]부터 [[VGA]]까지 초창기 컬러 그래픽 시대에는 표현할 수 있는 색상의 가짓수가 적었으므로, R, G, B에 각각의 정보량을 할당하는 대신, [[팔레트]]를 사용해 미리 원하는 색상을 집어넣고 [[팔레트 스왑|필요한 경우 스크린 모드를 전환해 팔레트를 바꾸면서]] 색을 맞추는 경우도 있었다. 디스플레이가 RGB 컬러를 지원하는 경우에는 색상 출력이 가능했으며, 그래픽 카드와 단색 디스플레이가 호환되는 경우 그레이스케일처럼 명암처리가 되는 경우도 있었다. 색상에 사용되는 정보량은 [[색심도]](color depth)라는 용어가 사용되며, 주로 사용된 색심도는 다음과 같다. * 1비트(2색): 기본 콘솔용 그래픽 처리 신호만 보내거나, [[허큘리스 그래픽 카드]] 등을 사용해 고해상도 단색조 그래픽을 쓰는 경우엔 ON/OFF만으로 신호를 보냈다. 흑백 모니터, 단색 모니터라고 불리는 경우도 있지만, 이 당시 그래픽이 활발히 사용될 때의 모니터는 녹색, 주황색 등이 주로 사용되었고, ON/OFF는 2색이므로, 엄밀하게 따지면 둘 다 틀린 용어다.[* IBM [[MDA]]와 [[허큘리스 그래픽 카드]]가 단색, 정확히는 2색만을 표현할 수 있다는 말이 있으나, 틀린 말이며 4색까지 표현할 수 있다. 이는 MDA와 허큘리스가 화면을 표시할 때 비디오, 강도 등 2핀을 사용하기 때문이다. 비디오 핀 신호는 색의 ON/OFF를 담당했으며 강도 핀 신호는 색조를 담당했다. 이러한 조합을 통해 이론적으로 검은색, 어두운 회색, 밝은 회색, 흰색을 표현할 수 있었다. 그러나 일반적으로 호환 모니터는 3색의 표현(검은색, 어두운 회색, 흰색)까지만 지원했으며 4색을 모두 사용하는 소프트웨어도 당대에는 극히 드물었다.] * 2비트(4색): 컬러 그래픽 카드인 [[CGA]]에서 사용했던 단위로, 흑백에 더해 시안, 마젠타를 추가해서 썼다. 다만 당시의 NTSC 디스플레이 중에서는 서브픽셀 출력 라인에 따른 컬러 아티팩트가 있었기 때문에, 일부 고급 해킹 기술 중에서는 강제로 디스플레이의 서브픽셀 단위로 출력해 1비트(2색) 또는 2비트(4색)으로 훨씬 많은 색을 재현하는 경우[* 다만 이렇게 되면 '''색이 나타나는 픽셀 전체'''의 정보량을 맞추기 위해 서브픽셀을 쓴다는 개념으로 이해해야 한다.]도 있다. * 4비트(16색): 후속 [[EGA]] 그래픽 카드에서 사용했던 것으로, 16색 표현이 가능하며, 이 수준부터는 기본적인 색상을 쓸 수 있었으며, 주어진 색 범위 안에서 도트 등을 찍어 자연색에 가깝게 표현하기 위한 [[디더링]] 같은 기술이 발달하기 시작했다. 일본에서 한자 그래픽 처리를 위해 그래픽 처리 용량을 키운 [[PC-9801]]에 맞춰 나온 게임들이 대표적. * 8비트(256색): PAL8이라고도 한다. [[VGA]] 그래픽 카드 이후에 나오기 시작한 것으로, 1990년대 말까지 유효하게 사용되었다. PC에서는 주로 R 3비트, G 3비트, B 2비트[* 청색의 표현 수가 적은 것은 인간의 눈에 있는 청색 원뿔세포가 가장 적고, 적색/녹색 원뿔세포가 단파장을 흡수하지 못하기 때문에 청색에 상대적으로 둔감하기 때문이다. 아날로그 컬러 TV 등에 사용되는 영상용 색상공간에서도 이런 요소가 고려되었으므로, 디지털에서도 큰 차이 없이 적용되었다.]를 썼으나, 휴대용 기기나 게임 콘솔 등에서 256색을 지원하는 경우엔 대부분 팔레트식이었다. PC에서 팔레트식을 못 쓰는 건 아니었으며, [[스타크래프트]] 같이 게임 등에서는 팔레트 방식(indexed color 또는 pseudocolor, indirect color 등으로 불림)을 사용하는 경우도 있었다. * 16비트(65,536색): 윈도우 9x 시대에는 디스플레이 설정에 '''[[하이 컬러]]'''(High Color)라는 이름이 있었기 때문에 이 용어를 사용했던 경우도 많다. 8비트와 달리 16비트부터는 팔레트 식이 아닌 R, G, B 각 채널별로 정보값을 할당하는 경우가 많아졌다. 인간의 눈에서 가장 민감한 영역이 녹색 영역[* 적색/청색 원뿔세포가 같이 받아들일 수 있는데다, 밀도가 상당히 높기 때문에 적색보다도 더 민감하다.]임을 감안해 G에 1비트를 더 부여한 '''565 컬러 모드'''(R 5비트, G 6비트, B 5비트)가 가장 많이 사용되었으며 투명을 표현할 필요가 있는 경우 등에는 G에 부여된 추가 1비트 대신 A(알파) 채널 1비트를 만들어 사용하기도 했다. [[Windows Embedded Compact]]와 [[Windows Mobile]], [[안드로이드 진저브레드]]의 기본 지원색상이다. * 24비트(16,777,216색): R, G, B 채널에 각각 1바이트(8비트)를 할당한 것으로, '''트루 컬러'''(True Color)라는 별칭도 있다. 현재 사용되는 대부분의 디지털 디스플레이들 및 그래픽 프로세서가 지원하는 것으로, 각 색상에 1바이트로 꽤 충분한 샘플을 부여했기 때문에, 대부분의 천연사진을 디지털화 해도 위화감 없이 받아들일 수 있다. 또한 1바이트 단위기 때문에 데이터 처리 등에 있어서도 굉장히 간단한데, 어지간하면 비트 단위 조작이 필요 없기 때문이다. [[Windows 95]]부터 지원하였으며, 아주 구형 VGA를 사용하지 않는 이상 트루 컬러가 기본설정이었다. 다만 일부 3D 게임 등 몇몇 프로그램은 퍼포먼스 문제로 16비트 하이 컬러를 사용했으며, [[Windows 9x]] 시절에는 리소스 낭비를 줄이기 위해 하이 컬러를 주로 사용했었다. [[안드로이드 아이스크림 샌드위치]]부터 기본 지원이 되었다. 투명도나 데이터 처리를 위한 값을 확장해서 32비트라고 부르기도 한다. * 30비트(1,073,741,824색): R, G, B 채널에 각각 10비트를 할당한 것으로, '''딥 컬러'''(Deep Color)라는 별칭도 있다. [[HDR]] 화면의 기본 요구사항이며 하드웨어와 드라이버에 따라 일부 기기는 [[Windows XP]]부터 지원되었다. [[Windows 11]], [[안드로이드 파이]]부터 권장사항이 되어 급속도로 보급되었다. HDR과 같은 딥 컬러 환경에서 하드웨어가 네이티브로 48비트 (FP16ppc) 연산을 지원하는 것에 비해 컨슈머 미디어에서 더 자주 쓰이는 편인데 픽셀당 24비트에 비해 더 세밀한 색상 표현을 하는 것이 가능하고 48비트 대비 용량을 적게 사용하기 때문이다. 그렇지만 연산장치에게 있어선 효율이 좋은 편은 아닌데 대부분의 하드웨어는 워드 단위로 처리되고 32비트 CPU를 기준으로 30비트는 한 레지스터에 담는 것이 가능하지만 특히 [[SIMD]]를 통해 구현하는 경우 프로세서가 벡터의 원소를 8, 16, 32, 64와 같이 2의 거듭제곱 단위의 연산을 지원해 바로 바로 처리가 가능한 것에 비해 [* AVX의 {{{vpaddb}}}, {{{vpaddw}}}, {{{vpaddd}}}, {{{vpaddq}}} 가 그 예이다. 256비트의 벡터에서 각각 8비트, 16비트, 32비트, 64비트 단위로 연산한다.] 10비트 단위로 연산하기 위해선 매 채널 연산마다 마스크를 입히고 연산 후 그 결과값을 10비트에 맞게 비트시프트로 Saturation 하고 채널에 채워넣는 추가적인 연산이 필요하기 때문이다. 그 때문에 게임과 같이 실시간으로 연산되어야 하는 곳에서는 30비트 보다는 아래의 48비트가 더 자주 사용된다. * 48비트: 구현에 있어 픽셀당 16비트 정수 또는 16비트 부동소수점으로 구현된다. 개인 사용자가 이 포맷을 다룰 일은 없지만 프로그래머나 컨텐츠 제작자들에게는 자주 사용되는 포맷인데 3D의 HDR매핑을 가진 OpenEXR이 픽셀당 FP32또는 FP16을 사용하며 프로그래머의 경우 딥 컬러 프로세싱에 사용할 내부 서페이스 포맷을 FP16으로 하는 경우가 많다. 채널당 FP32인 픽셀당 96/128 비트도 존재하지만 이걸 넘는 포맷의 사용은 드문 편이다. {{{DXGI_FORMAT_R32G32B32A32_FLOAT}}} 데이터형의 경우 정수보다는 부동소수점 사용이 더 많은 편인데 그래픽 하드웨어의 경우 FPU가 FP16 연산을 네이티브로 지원하기 때문에 무리 없이 사용할 수 있으며 다른 분야와 다르게 그래픽의 경우 픽셀값이 0.0 - 1.0 사이의 값만 가지므로 부동소수점 연산 특유의 값이 0에서 가까울 수록 정밀도가 높아지고 멀수록 낮아지는 문제에서 자유롭기 때문이다. 프로세서 등 데이터 처리 과정에선 32비트(4바이트) 단위로 처리하는 경우가 많으므로, RGB에 1바이트 채널 하나를 더해 쓰는 경우도 많다.[* R 11비트, G 11비트, B 10비트로 할당하는 방법도 있긴 하다.] 비워 두는 경우에는 단순한 패딩이지만, 이 추가 1바이트를 투명도를 나타내는 알파 채널로 쓰는 경우가 많다. 이 경우엔 '''RGBA'''라 부르기도 한다. 다만 알파 채널은 어디까지나 직접 출력될 색상을 나타내는 것이 아니며, 그래픽 프로세서 등에서 내부 처리(색상 혼합 = 블렌딩)를 통해 결과 색상을 다시 계산하는 것이므로, '''색상을 표현하기 위한 것이 아닌 것'''에 주의할 필요가 있다. 모니터 페널들은 [[디더링]] 기법으로 지원하는 색상 깊이보다 더 깊은 색상을 구현해 원가를 절감하기도 한다. 각 채널별 색 심도를 10비트가 아니라 12비트, 16비트 등으로 더 늘여 쓰는 경우도 있다. 이 경우 총 색상은 36, 48비트 등이 되며, 이 경우에는 10비트처럼 딥컬러 혹은 [[HDR]] 등의 용어를 쓴다. 색심도를 더 높게 쓰는 곳이 많지는 않지만, 대표적으로는 다음과 같은 경우에 사용된다. * 사진 촬영 시에 '''RAW 포맷'''으로 저장하는 경우 광학 센서에서 샘플링되는 신호 레벨을 그대로 적용해 손상없이 저장하며 따라서 더 깊은 색심도로 저장된다. * 전문가용 고급 디스플레이 중에서는 HDR을 지원하는 경우도 있으며, [[포토샵]] 등에서도 이런 경우를 위해 딥컬러를 다룰 수 있게 되어있다. 2021년 기준 출시되는 대부분의 TV는 HDR을 지원하며, 40~50만원대 이상인 중급형 이상 모니터들은 HDR을 대부분 지원한다. * 프로그래머의 경우 3개의 값이 들어간다는 점에 착안해서, 3가지 원소를 사용하는 개체를 RGB식으로 저장하는 경우나 그 반대의 경우도 꽤 많다. 대표적으로 3D 그래픽에서의 3차원 벡터/좌표. 특히 [[노멀 매핑]]같은 경우 RGB텍스쳐 저장 포맷을 그대로 사용할 수 있어 편하기 때문에 3차원 노멀 벡터의 xyz값을 RGB로 변환해서 이미지 파일로 저장하는 경우가 많으며, [[DirectX]]에서는 컬러값을 Vector3(float, float, float)으로 저장하기도 한다. 또한 분류 3개가 나오는 그래프의 경우도 RGB로 색상을 구분하기도 하는데, 왜냐면 색상값을 하드코딩으로 입력하기 편하기 때문. (255, 0, 0)이나 (1.0f, 0, 0) 또는 0xFF0000 등. 그것보다 갯수가 많으면 RGB 다음으로 CMYK가 들어간다. * [[OpenCV]]의 경우 메모리 내부 구조체에서 RGB가 아닌 BGR 포맷으로 이미지를 처리한다. 왜냐면 라이브러리 개발 당시 카메라 제조사들이 BGR포맷을 선호했기 때문. Endianness와 관련이 [[http://dev.chromium.org/developers/design-documents/graphics-and-skia#:~:text=When%20written%20to%20memory%20on%20a%20little%2Dendian%20machine%20like%20a%20Pentium%2C%20this%20becomes%20BGRA|깊다.]] * 팔레트식 256색의 경우 R, G, B를 임의의 단계로 나눈 팔레트도 쓰였으며, 이는 n Level RGB 또는 n-n-n Levels RGB 식으로 불렸다. R, G, B의 단계를 동일하게 나눈 것으로는 6 Level RGB가 주로 쓰였으며, 그 외에도 6-7-6 Levels RGB와 6-8-5 Levels RGB, 8-8-4 level RGB도 쓰였다. 이 중 8-8-4 level RGB를 제외하면 남는 자리가 있는데, 이 경우는 남은 곳에 임의의 색이 들어간 경우도 있었다. 자세한 것은 영어 위키백과의 [[https://en.wikipedia.org/wiki/List_of_software_palettes|List of software palettes]] 문서 참조.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기