Android 8.1 이상에는 디스플레이 기술 전체에 걸쳐 일관적인 환경을 제공하는 데 사용할 수 있는 색 관리 지원이 포함되어 있습니다. Android에서 실행되는 앱은 고색 재현 디스플레이의 기능 일체에 액세스하여 디스플레이 기기를 최대한 활용할 수 있습니다.
이전 Android 버전은 색 관리 지원을 포함하지 않았으며 대신 콘텐츠와 디스플레이의 호환성에 의존했습니다(주로 TV 업계에서 지원하는 목표). 그러나 최근 디스플레이 기술을 통해 기존 콘텐츠를 예상대로 표시하지 않는 고색 재현 디스플레이가 가능해졌습니다. Android 8.1 이상에서는 고색 재현 디스플레이를 사용하는 기기(예: 능동형 유기 발광 다이오드(AMOLED), 일부 LCD)에서 앱의 고색 재현 콘텐츠를 확인할 수 있습니다.
기기 지원 결정
Android 8.1 이상을 실행하고 고색 재현 디스플레이가 있는 기기는 색 관리(고색)를 지원해야 합니다. 이 기능을 사용 설정하기 전에 기기가 다음 요구사항을 충족하는지 확인하세요.
기기 디스플레이가 Display-P3 색공간을 지원하는 제대로 특성화된 디스플레이를 비롯한 하드웨어 요구사항을 충족합니다. 디스플레이가 이러한 요구사항을 충족하지 않으면 색 관리를 사용 설정하면 안 됩니다. CPU 및 GPU 영향을 줄이려면 디스플레이 파이프라인에서 확장된 sRGB 및 HDR10을 지원하는 것이 좋습니다.
기기가 보정 데이터(기기에 저장됨)를 생성하는 공장 보정 프로세스를 지원하여 디스플레이 동작의 제조 편차를 조정합니다. 최소한 보정 데이터를 통해 디스플레이에서 sRGB 콘텐츠와 D65 및 D73 화이트 포인트를 정확하게 표시할 수 있어야 합니다.
이러한 요구사항을 충족하면 기기에 색 관리 기능을 사용 설정할 수 있습니다.
색 관리 구현
색 관리를 구현하려면 먼저 Hardware Composer 2(HWC2) 드라이버를 업데이트하여 색 모드를 파악하고 이러한 모드를 하드웨어에 적용합니다.
특히 HWC2는 HWCDisplay::GetColorModes를 사용하여 Display-P3 및 sRGB 색 모드를 보고해야 합니다.
그런 다음에는 필요한 OpenGL 확장자와 라이브러리 지원을 사용 설정하여 OpenGL 색공간을 HAL 데이터 공간으로 해석합니다. 필수 OpenGL 확장자는 다음과 같습니다.
EGL_EXT_pixel_format_float.
앱에서 16비트 부동 색 구성요소로 표시 가능한 EGLSurfaces를 만들 수 있습니다. 우선순위가 높습니다(고색 인식 앱의 기본 픽셀 형식으로 예상해야 함). 드라이버 지원이 필요합니다.
EGL_KHR_gl_colorspace.
sRGB 형식 기본 프레임 버퍼를 사용하여 디스플레이 기기에 sRGB 렌더링을 더 쉽게 달성하려는 앱의 경우 이 확장자를 통해 이 기능을 지원하는 OpenGL 컨텍스트에서 sRGB로 렌더링될 EGLSurfaces를 만들 수 있습니다. sRGB 동작과 관련된 드라이버 지원이 필요합니다.
또한 Android는 다음과 같은 선택적 확장자도 제공합니다.
EGL_EXT_colorspace_scrgb_linear.
이 확장자는 앱이 EGLSurface를 만들 때 선택할 수 있는 새로운 색공간 옵션인 scRGB를 제공합니다. scRGB 색공간은 sRGB와 동일한 화이트 포인트와 삼원색이 있는 선형 디스플레이 참조 공간을 정의합니다. 따라서 sRGB와 하위 호환됩니다. 드라이버 지원이 필요하지 않으며 Android EGL 래퍼에서 구현될 수 있습니다. 좀 더 유용하게 활용되려면 이 확장자에 16비트 부동 소수점(FP16) 지원이 필요합니다.
VK_EXT_swapchain_colorspace(Vulkan). 앱이 사용하고 있는 색공간으로 스왑 체인에 태그를 지정할 수 있습니다. DCI-P3, Display-P3, AdobeRGB, BT2020과 같은 여러 일반적인 색공간을 포함합니다.
맞춤설정
DCI-P3, AdobeRGB, Rec709, Rec2020과 같은 다양한 색 표준 지원을 포함하여 색 관리 기능을 맞춤설정할 수 있습니다. 기타 맞춤설정은 다음과 같습니다.
디스플레이 파이프라인의 색 변환을 위한 하드웨어 지원. 하드웨어에서 여러 색을 변환할 수 있도록 지원합니다.
여러 계층의 개별 색 변환 지원(예: 일부 계층은 sRGB, 다른 계층은 확장된 sRGB일 수 있음, 각각 자체 색 파이프라인을 보유함). 두 개 이상의 색공간이 보이는 경우 일부 색공간을 디스플레이의 색공간으로 변환해야 합니다. 이러한 변환은 디스플레이 엔진에서 제공하는 것이 좋으며, 그렇지 않으면 Android는 GPU 구성을 실행해야 합니다.
테스트
색 관리를 테스트하려면 opengl/tests에서 다음 리소스를 사용하세요.
gl2_basic은 Display-P3 색공간을 요청하는 간단한 OpenGL 데모입니다.
EGL_test는 필요한 확장자와 구성 지원(10:10:10:2 및 FP16)을 테스트합니다.
test_wide_color는 SurfaceFlinger와 동일한 방식으로 표면을 만듭니다(예: 구성, 색공간, 픽셀 형식).
참조 구현
참조 구현은 frameworks/native를 참고하세요. 헤더의 경우 다음을 참고하세요.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-18(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-18(UTC)"],[],[],null,["# Color management\n\nAndroid 8.1 and higher include support for color management that can be used to provide a\nconsistent experience across display technologies. Apps running on\nAndroid can access the full capabilities of a wide-gamut display to get the\nmost out of a display device.\n\nPrevious Android releases didn't include color management support and\ninstead relied on content and displays being compatible (a goal often aided by\nthe TV industry). However, recent display technologies allow for much larger\ngamut displays that don't display existing content as expected. With Android\n8.1 and higher, devices that use a wide-gamut display (for example, active-matrix organic\nlight-emitting diode or AMOLED, some LCDs) can see wide-gamut\ncontent from apps.\n\nDetermine device support\n------------------------\n\nDevices with wide-color displays running Android 8.1 or higher should support color\nmanagement (wide-color). Before enabling this feature, ensure that the device meets\nthe following requirements:\n\n- Device display meets the hardware requirements, which include a well-characterized display that supports the Display-P3 colorspace. If the display doesn't meet this requirement, don't enable color management. To reduce CPU and GPU impact, support for extended sRGB and HDR10 in the display pipeline is desirable.\n- Device supports a factory calibration process that generates calibration data (stored on the device) to adjust for manufacturing variance in display behavior. At a minimum, calibration data should allow the display to accurately display sRGB content and D65 and D73 white points.\n\nIf these requirements are met, you can enable the color management\nfeature for the device.\n\nImplement color management\n--------------------------\n\nTo implement color management, first update the\n[Hardware Composer 2 (HWC2)](/docs/core/graphics/implement-hwc) driver\nto understand color modes and to apply those modes to the hardware.\nSpecifically, the HWC2 composer must report the Display-P3 and sRGB\ncolor modes using `HWCDisplay::GetColorModes`.\n| **Key Term:** Display-P3 uses Digital Cinema Initiatives primaries and sRGB transfer function.\n\nNext, enable the necessary OpenGL extensions and library support to\ntranslate OpenGL color spaces to HAL data spaces. Required OpenGL extensions\ninclude:\n\n- [`EGL_EXT_pixel_format_float`](https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_pixel_format_float.txt). Allows apps to create presentable EGLSurfaces with 16-bit float color components. Priority: high (expect this is the default pixel format for wide-color aware apps). Requires driver support.\n- [`EGL_KHR_gl_colorspace`](https://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_colorspace.txt). For apps that want to use sRGB format default framebuffers to more easily achieve sRGB rendering to display devices, this extension allows creating EGLSurfaces that will be rendered to in sRGB by OpenGL contexts supporting that capability. Requires driver support for sRGB behavior.\n\nAndroid also provides the following optional extensions:\n\n- [`EGL_EXT_colorspace_scrgb_linear`](https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_gl_colorspace_scrgb_linear.txt). This extension provides a new color space option, scRGB, that apps can choose when creating an EGLSurface. The scRGB color space defines a linear display referred space with the same white point and color primaries as sRGB (and thus is backward compatible with sRGB). This shouldn't require driver support and can be implemented in the Android EGL wrapper. To be useful, this extension requires support for 16-bit floating point (FP16).\n- [`EGL_EXT_gl_colorspace_display_p3`\n and `EGL_EXT_gl_colorspace_display_p3_linear`](https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_display_p3.txt). For apps that want to use Display-P3 format default framebuffers to more easily achieve sRGB rendering to display devices, this extension allows creating EGLSurfaces that will be rendered to in Display-P3 by OpenGL contexts supporting that capability. This can be implemented in EGL driver wrapper.\n- [`VK_EXT_swapchain_colorspace`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VK_EXT_swapchain_colorspace) (Vulkan). Enables apps to tag swap chains with the color space they're using. Includes a number of common color spaces such as DCI-P3, Display-P3, AdobeRGB, and BT2020.\n\nCustomization\n-------------\n\nYou can customize the color management feature by including support for a\nvariety of color standards such as DCI-P3, AdobeRGB, Rec709, and Rec2020. Other\ncustomizations include:\n\n- **Hardware support for color conversion in the display\n pipeline.** Enables support for multiple color transforms in hardware.\n- **Support for independent color transform on multiple layers** (for example, some layers could be sRGB and others extended-sRGB, each with their own color pipeline). When there's more than one color space visible, some color spaces need to be converted to the color space of the display. Ideally, this transform is best provided by the display engine (otherwise Android must perform GPU composition).\n\nTesting\n-------\n\nTo test color management, use the following resources in\n`opengl/tests`:\n\n- `gl2_basic` is a simple OpenGL demo that requests a Display-P3 colorspace.\n- [`EGL_test`](https://android.googlesource.com/platform/frameworks/native/+/android16-release/opengl/tests/EGLTest/EGL_test.cpp) tests for necessary extension and config support (10:10:10:2 and FP16).\n- `test_wide_color` creates a surface in same manner as SurfaceFlinger (for example, config, color space, and pixel format).\n\nReference implementation\n------------------------\n\nFor a reference implementation, refer to `frameworks/native`. For\nheaders, refer to:\n\n- [`system/core/include/system/graphics.h`](https://android.googlesource.com/platform/system/core/+/android16-release/libsystem/include/system/graphics.h)\n- [`system/core/include/system/graphics-base.h`](https://android.googlesource.com/platform/system/core/+/android16-release/libsystem/include/system/graphics-base.h)\n - `HAL_DATASPACE_*`\n - `HAL_COLOR_MODE_*`"]]