울트라 HDR 이미지 형식은 기기가 더 밝은 색상의 이미지를 더 강렬하게 표시할 수 있도록 밝기 정보를 인코딩합니다. 앱에서 Ultra HDR 이미지를 수정할 때는 밝기 정보를 보존해야 합니다. 이는 사용자의 기기가 울트라 HDR 이미지를 최대 밝기로 표시하지 못하는 경우에도 중요합니다. 결국 사용자는 울트라 HDR을 지원하는 기기를 사용하는 사람과 이미지를 공유하거나, 이미지를 저장했다가 몇 년 후 새 기기에서 다시 볼 수 있습니다.
다행히 비트맵을 수정하는 대부분의 Android 메서드는 울트라 HDR 이미지 형식을 지원합니다. 이미지를 자르거나 회전하는 등의 기본적인 수정 작업을 하는 경우 표준 Android 메서드를 사용하면 됩니다. 그러면 새로운 크기 또는 방향의 울트라 HDR 이미지가 만들어집니다.
이미지의 콘텐츠를 수정하는 경우 작업이 더 까다로워집니다. 이 경우 표준 편집 방법은 이전 이미지의 밝기 정보를 보존하므로 원하는 결과가 아닐 수 있습니다. 이 경우 올바른 결과를 얻으려면 이미지의 밝기 정보를 인코딩하는 이득 맵을 수정하거나 삭제해야 할 수 있습니다.
울트라 HDR 형식 개요
울트라 HDR 이미지 형식은 울트라 HDR 이미지 사양에 자세히 설명되어 있습니다. 가장 중요한 점은 울트라 HDR 이미지에는 기본 이미지와 이득 맵이 모두 포함되어 있다는 것입니다.
- 기본 이미지에는 이미지의 각 픽셀에 대한 색상 정보가 있습니다.
- 이득 맵은 기본 이미지와 비율이 동일한 표준 JPEG 이미지이지만 픽셀 크기는 반드시 동일하지는 않습니다. 이득 맵의 각 픽셀은 기본 이미지의 해당 부분의 밝기를 지정합니다.
이득 맵은 그레이스케일 또는 컬러일 수 있습니다. 이득 맵이 컬러인 경우 이득 맵의 각 색상 채널은 기본 이미지의 해당 부분에 있는 해당 색상 채널의 밝기를 지정합니다. 이득 맵이 그레이스케일인 경우 이득 맵의 각 픽셀은 기본 이미지의 해당 부분에 있는 세 가지 색상 채널의 밝기를 지정합니다.
이득 맵은 기본 이미지와 비율이 같아야 하지만 픽셀 크기는 같지 않아도 됩니다. 실제로 Android 플랫폼은 Ultra HDR 이미지를 만들 때 기본 이미지보다 너비와 높이가 작은 이득 맵을 만듭니다. 이렇게 하면 파일 크기가 크게 줄어들지만 좋은 결과를 얻기 위해 충분한 정보를 인코딩합니다. 즉, 이득 맵의 각 픽셀은 기본 이미지의 여러 픽셀에 대한 밝기 정보를 저장할 수 있습니다.
기본 울트라 HDR 수정
Android Bitmap
API를 사용하여 울트라 HDR 이미지에 기본 변환을 적용하면 메서드가 이득 맵을 적절하게 변경합니다. 지원되는 Bitmap
작업은 다음과 같습니다.
- 회전: 울트라 HDR 이미지를 회전하면 메서드가 이득 맵도 회전합니다.
- 자르기: 울트라 HDR 이미지를 자르면 메서드가 이득 맵을 적절하게 자릅니다.
- 크기: 울트라 HDR 이미지의 크기를 조절하면 메서드는 게인 맵의 크기를 조절하여 크기가 조절된 기본 이미지의 너비와 높이의 절반이 되도록 합니다.
두 경우 모두 밝기 정보는 보존됩니다.
고급 울트라 HDR 수정
울트라 HDR 이미지를 더 정교하게 수정하면 이득 맵이 변경되지 않고 유지되므로 원하는 결과를 얻지 못할 수 있습니다.
이러한 상황이 발생할 수 있는 일반적인 수정사항은 다음과 같습니다.
- 스티커 또는 그림 이모티콘 추가: 추가된 스티커는 붙여넣은 영역과 동일한 밝기 및 색상 선명도 값을 갖습니다.
- 두 번째 이미지 오버레이: 새 이미지는 오버레이하는 콘텐츠의 밝기 및 색상 선명도 정보를 사용합니다.
- 필터 추가: 이전 이득 맵의 정보가 수정된 기본 이미지에 적합하지 않을 수 있습니다.
각 경우 이전 밝기 및 색상 선명도 정보는 보존되지만 수정된 이미지에 적합하지 않을 수 있습니다.
원래 이득 맵이 수정된 이미지에 적합한 경우 아무 조치도 취하지 않아도 됩니다. 이득 맵을 수정하려는 경우 일반적인 워크플로는 다음과 같습니다.
Bitmap.getGainmap()
를 호출하여 이미지의 현재 이득 맵을 가져오고 캐시합니다.- 원하는 대로 기본 이미지를 수정합니다.
캐시된 이득 맵을 적절하게 수정합니다. 예를 들어 기본 이미지에 그림 이모티콘을 붙여넣은 경우 이득 맵의 해당 부분을 중성 값(예:
Color.GRAY
)으로 설정할 수 있습니다.Bitmap.setGainmap()
를 호출하여 수정된 이득 맵을 이미지에 다시 적용합니다.
추가 리소스
울트라 HDR 이미지에 관해 자세히 알아보려면 다음 추가 리소스를 참고하세요.