HD 사진 형식 개요
이 항목에서는 WIC(Windows 이미징 구성 요소)를 통해 제공되는 기본(기본 제공) HD 사진 코덱에 대한 정보를 제공합니다.
Important
HD Photo 형식은 JPEG XR 형식의 사전 표준 구현이며, HD Photo에 대한 지원은 JPEG XR WIC 코덱에 의해 구현됩니다. 자세한 내용은 JPEG XR 코덱 개요를 참조 하세요.
코덱 ID
다음 표에서는 코덱 식별 정보를 제공합니다.
구성 요소 | 설명 |
---|---|
정식 이름 | HD 사진, Windows 미디어 사진 |
파일 이름 확장명 | wdp |
MIME 형식 | image/vnd.ms-photo |
파일 서명 | 처음 4바이트: 0x4949bc00(버전 0; 시험판), 0x4949bc01(버전 1.0) |
다음 표에서는 네이티브 HD Photo 코덱 구성 요소를 식별하는 데 사용되는 GUID를 나열합니다.
구성 요소 | 이름 | GUID |
---|---|---|
컨테이너 형식 | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
디코더 | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
인코더 | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
인코딩
WIC 인코딩 API는 코덱 독립적으로 설계되었으며 WIC 사용 코덱에 대한 이미지 인코딩은 기본적으로 동일합니다. WIC API를 사용하는 이미지 인코딩에 대한 자세한 내용은 인코딩 개요를 참조 하세요.
인코더 옵션
WIC 사용 코덱은 인코딩 옵션 수준에서 다릅니다. 인코더 옵션은 이미지 인코더의 기능을 반영하며 각 네이티브 코덱은 이러한 인코더 옵션 집합을 지원합니다. 인코더 옵션은 모든 WIC 지원 코드에서 사용할 수 있는 기본 WIC 지원 옵션(반드시 지원되는 것은 아님) 또는 이미지 형식 코덱에서 디자인한 코덱별 옵션일 수 있습니다. 인코딩 프로세스 중에 이러한 인코딩 옵션을 관리하기 위해 WIC는 IPropertyBag2 인터페이스를 사용합니다. WIC 인코딩에 IPropertyBag2 인터페이스를 사용하는 방법에 대한 자세한 내용은 인코딩 개요를 참조 하세요.
HD Photo 코덱은 기본 WIC 옵션을 모두 사용하고 여러 HD Photo 관련 인코딩 옵션을 제공합니다. 다음 표에서는 네이티브 HD Photo 코덱에서 지원하는 인코더 옵션을 나열합니다.
기본 WIC 인코더 옵션
속성 이름 | VARTYPE | 값 범위 | 기본값 |
---|---|---|---|
ImageQuality | VT_R4 | 0 - 1.0 | 0.9 |
무손실 | VT_BOOL | TRUE, FALSE | FALSE |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
HD 사진별 인코더 옵션
속성 이름 | VARTYPE | 값 범위 | 기본값 |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE, FALSE | FALSE |
품질 | VT_UI1 | 1 - 255 | 10 |
겹치는 | VT_UI1 | 0 - 2 | 1 |
Subsampling | VT_UI1 | 0 - 3 | ImageQuality > 0.8이면 3, 그렇지 않으면 1; |
HorizontalTileSlices | VT_UI2 | 0 - 4095 | (이미지 너비 – 1) >> 8 |
VerticalTileSlices | VT_UI2 | 0 - 4095 | (이미지 높이 – 1) >> 8 |
FrequencyOrder | VT_BOOL | TRUE, FALSE | TRUE |
InterleavedAlpha | VT_BOOL | TRUE, FALSE | FALSE |
AlphaQuality | VT_UI1 | 1 - 255 | 1 |
CompressedDo기본Transcode | VT_BOOL | TRUE, FALSE | TRUE |
ImageDataDis카드 | VT_UI1 | 0 - 3 | 0 |
AlphaDataDis카드 | VT_UI1 | 0 -4 | 사용되지 않습니다. |
IgnoreOverlap | VT_BOOL | TRUE, FALSE | FALSE |
코덱이 지원하지 않는 IPropertyBag2 옵션 목록에 인코더 옵션이 있으면 무시됩니다.
ImageQuality 옵션
원하는 이미지 충실도를 지정합니다. 0.0은 가능한 가장 낮은 충실도를 나타내고 1.0은 가장 높은 충실도를 지정합니다. HD Photo 이미지 형식의 경우 1.0 값을 사용하면 수학적으로 무손실 압축이 발생합니다.
기본값은 0.9입니다.
CompressionQuality 옵션
원하는 압축 품질을 지정합니다. 0.0은 사용 가능한 효율적인 압축 스키마를 나타냅니다. 일반적으로 이 스키마는 더 빠른 인코딩이지만 더 큰 출력을 생성합니다. 값 1.0은 사용 가능한 가장 효율적인 압축 스키마를 지정하며, 일반적으로 인코딩이 길지만 출력은 작습니다.
HD Photo는 이 인코더 옵션을 지원하지 않습니다. IPropertyBag2 매개 변수 목록에 있는 경우 이 값은 무시됩니다.
무손실 옵션
손실 압축 모드를 사용할지 여부를 지정합니다. HD Photo 이미지 형식의 경우 이 값은 ImageQuality 옵션 값을 재정의합니다.
기본값은 FALSE입니다.
BitmapTransform 옵션
이미지 디코딩 중에 이미지를 변환하는 방법을 지정합니다. 이 옵션은 WICBitmapTransformOptions 열거형 값 중 하나로 설정해야 합니다.
기본값은 WICBitmapTransformOptions::WICBitmapTransformRotate0입니다.
UseCodecOptions 옵션
값이 옵션 값 대신 품질, 겹침 및 하위 샘플링 옵션에 VARIANT_TRUE 경우
기본값은 FALSE입니다.
품질 옵션
이미지의 압축 품질을 지정합니다. 값이 1이면 무손실 모드를 나타냅니다. 값을 늘리면 압축 비율이 높아지고 이미지 품질이 낮아집니다.
기본값은 10입니다.
겹침 옵션
겹치는 처리 수준을 지정합니다.
다음 표에서는 사용 가능한 겹침 처리 수준을 나열합니다.
값 | 설명 |
---|---|
0 | 겹침 처리를 사용할 수 없습니다. |
1 | 인접 블록의 값에 따라 4x4 블록으로 인코딩된 값을 수정하여 한 수준의 겹침 처리를 사용할 수 있습니다. |
2 | 두 가지 수준의 겹침 처리를 사용할 수 있습니다. 첫 번째 수준 처리 외에도 16x16 매크로 블록의 인코딩된 값은 인접한 매크로 블록의 값에 따라 수정됩니다. |
기본값은 1입니다.
하위 샘플링 옵션
크로마 공간에서 추가 압축을 지정합니다. 이러한 방식으로 색상 세부 정보를 희생하여 광도 세부 정보를 유지할 수 있습니다. 이 옵션은 RGB 이미지에만 적용됩니다.
다음 표에서는 사용 가능한 하위 샘플링 옵션을 나열합니다.
값 | 설명 |
---|---|
3 | 4:4:4 인코딩은 전체 크로마 해상도를 유지합니다. |
2 | 4:2:2 인코딩은 크로마 해상도를 광도 해상도의 1/2로 줄입니다. |
1 | 4:2:0 인코딩은 크로마 해상도를 광도 해상도의 1/4로 줄입니다. |
0 | 4:0:0 인코딩은 모든 크로마 콘텐츠를 카드 광도만 유지합니다. 코덱은 약간 수정된 광도 정의를 사용하여 성능을 향상하기 때문에 이 크로마 하위 샘플링 모드를 사용하지 않고 인코딩하기 전에 RGB 이미지를 단색으로 변환하는 것이 좋습니다. |
ImageQuality> 0.8인 경우 기본값은 3이고, 그렇지 않으면 1입니다.
HorizontalTileSlices, VerticalTileSlices 옵션
지역 디코딩의 최적의 성능을 위해 압축 인코딩을 수행하기 전에 이미지의 가로 및 세로 타일링을 지정합니다. 인코딩하는 동안 이미지를 사각형 타일로 분할하면 압축된 전체 데이터 스트림을 처리하지 않고 이미지 영역을 디코딩할 수 있습니다. 기본값 0은 세분화를 지정하지 않으므로 전체 이미지가 단일 타일로 처리됩니다. 각 매개 변수에 대해 1의 값은 단일 가로 및 단일 세로 나누기를 만들어 이미지를 4개의 동일한 크기의 타일로 효과적으로 분할합니다. 각 매개 변수에 대한 최대값 4095는 이미지를 행당 4096개의 타일이 있는 4096개의 타일 행으로 나눕니다. 즉, 매개 변수 값은 가로 및 세로 타일 수(각각)에서 1을 뺀 값과 같습니다. 타일은 너비 또는 높이가 16픽셀보다 작을 수 없으므로 HD Photo 인코더는 이 매개 변수를 조정하여 필요한 최소 타일 크기를 기본 수 있습니다. 각 타일과 연결된 스토리지 및 처리 오버헤드가 있으므로 특정 시나리오에 맞게 이러한 값을 신중하게 선택해야 합니다.
HorizontalTileSlices: 기본값은 (Image Width – 1) >> 8입니다.
VerticalTileSlices: 기본값은 (Image Height – 1) >> 8입니다.
FrequencyOrder 옵션
이미지를 빈도 순서로 인코딩하도록 지정합니다. 가장 낮은 빈도 데이터가 파일에 먼저 나타나고 이미지 콘텐츠는 공간 방향이 아닌 빈도로 그룹화됩니다. 빈도 순서로 파일을 구성하면 모든 빈도 기반 디코딩에 최상의 성능을 제공하므로 권장됩니다. HD Photo 인코더의 디바이스 구현은 인코딩하는 동안 필요한 메모리 공간을 줄이기 위해 파일을 공간 순서대로 구성할 수 있습니다.
기본값은 TRUE이며, 성능 또는 애플리케이션별 공간 순서를 사용하는 이유가 없는 한 애플리케이션과 디바이스는 항상 빈도 순서를 사용하는 것이 좋습니다.
InterleavedAlpha 옵션
이 옵션을 TRUE로 설정하면 이미지 콘텐츠 채널과 상관 관계가 없는 추가 인터리브 채널로 알파 채널 정보를 인코딩하도록 코덱에 지시합니다. 이 모드는 스트리밍 시나리오에서 이미지와 알파를 동시에 디코딩해야 하는 경우에 유용합니다.
이 매개 변수를 FALSE로 설정하면 평면 알파 채널이 생성되며, 고유한 선택적 품질 값을 사용하여 별도의 이미지로 인코딩됩니다. 평면 알파 채널을 사용하여 이미지 데이터와 알파 채널을 독립적으로 디코딩할 수 있습니다. 인터리브 알파 채널은 특정 RGB 픽셀 형식에 대해서만 지원됩니다. 평면 알파 채널을 알파 채널을 정의하는 이미지 형식과 연결할 수 있습니다.
기본값은 FALSE입니다.
AlphaQuality 옵션
평면 알파 채널 이미지의 압축 품질을 지정합니다. 값 1은 무손실 모드를 설정합니다. 값을 늘리면 압축 비율이 높아지고 이미지 품질이 낮아집니다.
기본값은 1입니다.
CompressedDo기본Transcode 옵션
HD Photo를 사용하면 압축된 데이터를 실제로 디코딩하고 대상 파일로 다시 인코딩하지 않고도 여러 파일 변환 작업을 수행할 수 있습니다. 압축된 작업기본 작업은 매우 효율적이며 손실 압축 이미지를 디코딩하고 다시 인코딩할 때 일반적인 추가 품질 손실을 방지합니다.
다음과 같은 압축된 do기본 작업이 지원됩니다.
- 이미지의 영역을 자세요.
- 회전/대칭 이동 변환을 수행합니다.
- Dis카드 빈도 데이터(더 작은 이미지 파일을 만들 수 있도록)
- 공간 순서와 빈도 순차 순서 간에 이미지를 재구성합니다.
HD Photo 인코더는 HD Photo 디코더를 이미지 원본으로 사용하여 HD Photo 이미지를 인코딩할 때 압축된 do기본 트랜스코딩 작업을 수행합니다. 선택한 인코딩 옵션에 따라 코덱은 가능한 경우 압축된 do기본 작업을 사용합니다. 애플리케이션이 압축된 do기본 코드 변환 작업을 명시적으로 금지하도록 선택하는 경우 UseCodecOptions 옵션을 TRUE 로 설정하고 CompressedDo기본Transcode 옵션을 FALSE로 설정해야 합니다.
코덱이 압축된 do기본 작업을 수행하는 경우 특정 인코더 매개 변수 및 속성 설정만 허용됩니다.
- 기본 인코더 옵션 ImageQuality, CompressionQuality 및 Lossless 는 무시됩니다.
- HD 사진별 인코더 옵션 품질, 겹침, InterleavedAlpha 및 AlphaQuality 는 무시됩니다.
- 있는 경우 HorizontalTileSlices 및 VerticalTileSlices 옵션을 0으로 설정해야 합니다. 이미지의 타일 크기는 압축된 do기본 트랜스코드의 일부로 변경할 수 없습니다.
- FrequencyOrdering 옵션의 적절한 값을 지정하여 빈도와 공간 순서 간에 이미지 조직을 변경할 수 있습니다.
- 비트맵Transform 인코더 옵션에 지정된 값에 따라 카드 회전 및/또는 가로/세로 대칭 이동 작업을 수행할 수 있습니다.
- WriteSource 인코더 메서드의 WICRect 매개 변수를 사용하여 원하는 지역을 지정하여 이미지를 잘라낼 수 있습니다.
- ImageDataDis카드 및/또는 AlphaDataDis카드 옵션에서 적절한 값을 지정하고 인코딩된 파일 크기를 줄이고 새 이미지의 해상도를 효과적으로 줄임으로써 이미지 및/또는 알파 데이터를 카드 해제할 수 있습니다.
기본값은 TRUE이며, 공간 순서를 사용해야 하는 특정 성능 또는 애플리케이션 이유가 없는 한 애플리케이션과 디바이스는 항상 빈도 순서를 사용하는 것이 좋습니다.
ImageDataDis카드 옵션
이 매개 변수는 CompressedDo기본Transcode 옵션이 TRUE인 경우에만 유효합니다. 그렇지 않으면 무시됩니다. ImageDataDis카드 압축된 do기본 트랜스코드 중에 카드 이미지 데이터의 양을 지정합니다. 이미지에 인터리브 알파 채널이 포함된 경우 이 데이터 dis카드는 이 섹션의 뒷부분에 설명된 대로 예외를 제외하고 알파 채널에도 적용됩니다.
다음 값이 허용됩니다.
값 | 설명 |
---|---|
0 | 이미지 빈도 데이터가 카드 않습니다. |
1 | FlexBits는 카드 처리되어 이미지의 유효 해상도를 변경하지 않고도 트랜스코딩된 이미지의 품질을 임의로 감소합니다. 정확한 파일 크기 감소 또는 특정 품질 감소는 다양한 요인에 따라 달라지며 지정하거나 예측할 수 없습니다. 이 값은 인터리브 알파 채널에 대해 지정하는 경우 오류를 반환합니다. |
2 | HighPass 빈도 데이터 밴드는 dis카드ed(FlexBits도 포함)되므로 두 차원 모두에서 코드 변환된 이미지의 해상도를 4인수로 효과적으로 줄입니다. 트랜스코딩된 이미지의 실제 크기는 동일하게 기본 4x4 픽셀 블록마다 모든 세부 정보가 손실됩니다. 따라서 디코딩할 때마다 적절하게 코드 변환된 이미지를 다운 샘플링해야 합니다. |
3 | HighPass 및 LowPass 빈도 데이터 밴드는 모두 dis카드ed(FlexBits도 포함)되며, 두 차원 모두에서 코드 변환된 이미지의 해상도를 16 배까지 효과적으로 줄입니다. 트랜스코딩된 이미지의 실제 크기는 동일하게 다시 기본 픽셀의 각 16x16 매크로 블록에서 모든 세부 정보가 손실됩니다. 따라서 디코딩할 때마다 적절하게 코드 변환된 이미지를 다운 샘플링해야 합니다. |
기본값은 0입니다.
AlphaDataDis카드 옵션
이 옵션은 CompressedDo기본Transcode 속성이 TRUE이고 이미지에 평면 또는 인터리브 알파 채널이 포함된 경우에만 유효합니다. 그렇지 않으면 무시됩니다. 압축된 do기본 코드 변환 중에 카드 알파 빈도 데이터의 양을 지정합니다. 평면 알파 채널에는 다음 값이 허용됩니다.
값 | 설명 |
---|---|
0 | 이미지 빈도 데이터가 카드 않습니다. |
1 | FlexBits는 dis카드ed이므로 효과적인 해상도를 변경하지 않고도 트랜스코딩된 이미지에 대한 평면 알파 채널의 품질을 임의로 줄입니다. 정확한 파일 크기 감소 또는 특정 품질 감소는 다양한 요인에 따라 달라지며 지정하거나 예측할 수 없습니다. |
2 | HighPass 빈도 데이터 밴드는 dis카드ed(FlexBits도 포함)되므로 두 차원 모두에서 코드 변환된 이미지 평면 알파 채널의 해상도를 4인수로 효과적으로 줄입니다. 트랜스코딩된 이미지의 실제 크기는 동일하지만기본 이미지는 각 4x4 픽셀 블록의 모든 평면 알파 채널 세부 정보를 잃게 됩니다. 따라서 코드 변환된 이미지는 디코딩될 때마다 그에 따라 다운 샘플링되어야 합니다. 일반적으로 ImageDataDis카드 속성을 동일한 값으로 설정하는 경우에만 이 값을 설정해야 합니다. |
3 | HighPass 및 LowPass 빈도 데이터 밴드는 모두 dis카드ed(FlexBits도 포함)되며, 두 차원 모두에서 코드 변환된 이미지의 해상도를 16 배까지 효과적으로 줄입니다. 트랜스코딩된 이미지의 실제 크기는 동일하지만기본 이미지는 픽셀의 각 16x16 매크로 블록에서 모든 세부 정보를 손실합니다. 따라서 코드 변환된 이미지는 디코딩될 때마다 그에 따라 다운 샘플링되어야 합니다. 일반적으로 ImageDataDis카드 속성을 동일한 값으로 설정하는 경우에만 이 값을 설정해야 합니다. |
4 | 알파 채널은 완전히 카드. 트랜스코딩된 이미지의 픽셀 형식이 알파 채널 제거를 반영하도록 변경됩니다. |
인터리브된 알파 채널을 포함하는 이미지의 경우 이 속성이 4로 설정되지 않는 한 ImageDataDis카드 속성 값에 따라 알파 채널이 이미지 데이터와 동일하게 처리됩니다. 이 속성을 4로 설정하면 인터리브 알파 채널이 완전히 해제되고카드 트랜스코딩된 이미지의 픽셀 형식이 그에 따라 변경됩니다.
기본값이 없습니다.
IgnoreOverlap 옵션
이 옵션은 CompressedDo기본Transcode 속성이 TRUE이고 정확히 하나 이상의 타일의 하위 지역 트랜스코드가 요청된 경우에만 유효합니다. 지역 코드 변환(또는 디코딩)에 대한 기본 작업은 요청된 영역을 확장하여 영역 가장자리의 겹치는 디코딩에 필요한 주변 픽셀을 포함하는 것입니다. 이 매개 변수를 TRUE로 설정하면 주변 픽셀이 무시되고 선택한 타일 또는 타일만 추출됩니다. 다시 말하지만, 요청된 영역이 하나 이상의 타일의 좌표와 정확히 일치해야 합니다. 원본 이미지가 바둑판식으로 표시되지 않거나 요청된 영역이 부분 타일을 지정하는 경우 이 매개 변수는 무시됩니다.
기본값은 FALSE입니다.
디코딩
WIC 디코딩 API는 코덱 독립적으로 설계되었으며 WIC 사용 코덱에 대한 이미지 디코딩은 기본적으로 동일합니다. 이미지 디코딩에 대한 자세한 내용은 디코딩 개요를 참조 하세요. 디코딩된 이미지 데이터를 사용하는 방법에 대한 자세한 내용은 비트맵 원본 개요를 참조 하세요.
IWICBitmapSourceTransform 지원
기본 HD Photo 디코더는 WIC 지원 코덱에 필요한 인터페이스 외에도 IWICBitmapSourceTransform도 지원합니다. IWICBitmapSourceTransform 인터페이스는 이미지 비트 스트림을 디코딩하기 위한 고급 옵션을 제공합니다. IWICBitmapFrameDecode를 사용하여 전체 이미지를 반환하는 대신 IWICBitmapSourceTransform 인터페이스를 사용하면 다음 디코더 옵션을 사용할 수 있습니다.
- 이미지의 사각형 하위 영역을 디코딩합니다.
- 낮은 해상도로 디코딩
- 다른 픽셀 형식으로 디코딩
- 디코딩하는 동안 변환(회전/대칭 이동) 수행
네이티브 HD 포토 코덱은 IWICBitmapSourceTransform 인터페이스에 대해 다음과 같은 수준의 지원을 제공합니다.
DoesSupportTransform
네이티브 구현은 모든 WICBitmapTransformOptions 변환을 지원합니다.
GetClosestSize
두 차원의 원본 이미지 차원이 1/2 미만인 요청의 경우 HD Photo는 2배로 균등하게 나눌 수 있는 다음으로 큰 정수 이미지 크기를 반환합니다. 요청된 다른 모든 크기의 경우 HD Photo는 원래 이미지 크기를 반환합니다.
GetClosestPixelFormat
HD Photo는 인코딩된 이미지의 픽셀 형식을 반환합니다.
CopyPixels
HD Photo는 WICRect 매개 변수로 지정된 요청된 영역을 허용하고 이미지의 해당 부분을 반환합니다.
uiWidth 및 uiHeight 매개 변수는 GetClosestSize 함수에서 반환되는 차원을 지정해야 합니다. 다른 값은 오류를 반환합니다.
pguidDstFormat 매개 변수는 GetClosestPixelFormat 함수에서 반환된 픽셀 형식을 지정해야 합니다. 다른 값은 오류를 반환합니다.
HD Photo는 dstTransform 매개 변수에 허용되는 모든 값을 허용합니다. 이 매개 변수에 대해 WIC에서 허용하는 값은 변환 메타데이터 태그에 대해 HD Photo에서 사용하는 값과 다릅니다.