HD 相片格式概觀
本主題提供透過 Windows 映射元件 (WIC) 提供的原生 (內建) HD 相片編解碼器的相關信息。
重要
HD 相片格式是 JPEG XR 格式的預先標準實作,而 HD 相片的支援是由 JPEG XR WIC 編解碼器實作。 如需詳細資訊,請參閱 JPEG XR 編解碼器概觀。
編解碼器身分識別
下表提供編解碼器識別資訊。
元件 | 描述 |
---|---|
正式名稱(秒) | HD 相片、Windows 媒體相片 |
延伸名(s) | wdp |
MIME 類型 | image/vnd.ms-photo |
檔案簽章(秒) | 前四個字節:0x4949bc00 (版本 0; 發行前版本), 0x4949bc01 (版本 1.0) |
下表列出用來識別原生 HD 相片編解碼器元件的 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 介面 。 如需使用 IPropertyBag2 介面進行 WIC 編碼的詳細資訊,請參閱 編碼概觀。
HD 相片編解碼器同時使用基本的 WIC 選項,並提供數個 HD 相片特定的編碼選項。 下表列出原生 HD 相片編解碼器支援的編碼器選項。
基本 WIC 編碼器選項
屬性名稱 | VARTYPE | 值範圍 | 預設值 |
---|---|---|---|
ImageQuality | VT_R4 | 0 - 1.0 | 0.9 |
無損 | VT_BOOL | TRUE、 FALSE | 假 |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
HD 相片特定編碼器選項
屬性名稱 | VARTYPE | 值範圍 | 預設值 |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE、 FALSE | 假 |
品質 | VT_UI1 | 1 - 255 | 10 |
重疊 | VT_UI1 | 0 - 2 | 1 |
子取樣 | 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 |
交錯式Alpha | VT_BOOL | TRUE、 FALSE | 假 |
AlphaQuality | VT_UI1 | 1 - 255 | 1 |
CompressedDomainTranscode | VT_BOOL | TRUE、 FALSE | TRUE |
ImageDataDiscard | VT_UI1 | 0 - 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 -4 | 未使用。 |
IgnoreOverlap | VT_BOOL | TRUE、 FALSE | 假 |
如果編碼器選項存在於編解碼器不支援的 IPropertyBag2 選項清單中,則會忽略它。
ImageQuality 選項
指定所需的影像逼真度。 0.0 表示可能的精確度最低,而 1.0 會指定最高的逼真度。 針對 HD 相片影像格式,1.0 值會產生數學上的無損失壓縮。
預設值為 0.9。
CompressionQuality 選項
指定所需的壓縮品質。 0.0 表示可用的有效壓縮架構。 一般而言,此架構會產生更快的編碼但較大的輸出。 值為 1.0 會指定最有效率的壓縮架構,這通常會產生較長的編碼,但輸出較小。
HD 相片不支援此編碼器選項。 如果 IPropertyBag2 參數清單中存在,則會忽略此值。
無遺失選項
指定是否要使用損失壓縮模式。 針對 HD 相片影像格式,此值會 覆寫 ImageQuality 選項值。
預設值為 FALSE。
BitmapTransform 選項
指定影像譯碼期間影像的轉換方式。 您必須將此選項設定為其中 一個 WICBitmapTransformOptions 列舉值。
默認值為 WICBitmapTransformOptions::WICBitmapTransformRotate0。
UseCodecOptions 選項
如果值VARIANT_TRUE 品質、 重疊和 子取樣 選項,而不是選項值。
預設值為 FALSE。
質量選項
指定影像的壓縮品質。 值為 1 表示無損失模式。 增加值會導致較高的壓縮比例和較低的影像品質。
預設值為 10。
重疊選項
指定重疊處理層級。
下表列出可用的重疊處理層級。
值 | 描述 |
---|---|
0 | 未啟用重疊處理。 |
1 | 啟用一個層級的重疊處理,根據鄰近區塊的值修改 4x4 區塊編碼值。 |
2 | 已啟用兩種重疊處理層級。 除了第一層處理之外,16x16 宏區塊的編碼值也會根據鄰近宏區塊的值進行修改。 |
預設值是 1。
子取樣選項
指定色度空間中的其他壓縮。 如此一來,您可以保留亮度詳細數據,但代價是色彩詳細數據 。 此選項僅適用於 RGB 影像。
下表列出可用的子取樣選項。
值 | Description |
---|---|
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 會建立單一水準和單一垂直除法,有效地將影像分割成四個相同大小的磚。 每個參數的最大值 4095 會將影像分割成 4096 個磚列,每個數據列有 4096 個磚。 換句話說,參數值等於水準和垂直圖格的數目減 1。 磚的寬度或高度永遠不能小於 16 像素,因此 HD 相片編碼器可能會調整此參數,以維持所需的最小磚大小。 由於每個磚都有相關聯的儲存和處理額外負荷,因此您應該仔細選擇這些值,以符合特定案例。
HorizontalTileSlices:預設值為 (影像寬度 – 1) >> 8。
VerticalTileSlices:預設值為 [影像高度 – 1] >> 8。
FrequencyOrder 選項
指定影像必須以頻率順序編碼。 最低頻率數據會先出現在檔案中,影像內容會依其頻率分組,而不是其空間方向。 依頻率順序組織檔案可為任何以頻率為基礎的譯碼提供最佳效能,因此建議您使用。 HD Photo 編碼器的裝置實作可以組織檔案的空間,以減少編碼期間所需的記憶體使用量。
默認值為 TRUE ,我們建議您應用程式和裝置一律使用頻率順序,除非您有使用空間順序的效能或應用程式特定原因。
InterleavedAlpha 選項
將此選項設定為 TRUE 會指示編解碼器將 Alpha 色板資訊編碼為額外的交錯通道,而與影像內容通道沒有任何關聯。 當您需要與串流案例中的影像同時譯碼 Alpha 時,此模式很有用。
將此參數設定為 FALSE 會導致平面 Alpha 色板,並以自己的選擇性 Quality 值編碼為個別影像。 藉由使用平面 Alpha 色板,您可以獨立譯碼影像數據和 Alpha 色板。 只有特定 RGB 像素格式才支援交錯 Alpha 色板。 您可以將平面 Alpha 色板與定義 Alpha 色板的任何影像格式產生關聯。
預設值為 FALSE。
AlphaQuality 選項
指定平面 Alpha 色板影像的壓縮品質。 值為 1 會設定無損失模式。 增加值會導致較高的壓縮比例和較低的影像品質。
預設值是 1。
CompressedDomainTranscode 選項
藉由使用 HD Photo,您可以執行數個檔案轉換作業,而不需要實際譯碼壓縮的數據,並將它重新編碼至目的地檔案。 壓縮網域作業非常有效率,而且當您譯碼和重新編碼遺失壓縮影像時,避免任何其他品質遺失。
支援下列壓縮網域作業:
- 裁剪影像的區域。
- 執行旋轉/翻轉轉換。
- 捨棄頻率資料(讓您能夠建立較小的影像檔。)
- 在空間和頻率順序之間重新組織影像。
HD Photo 編碼器會在使用 HD Photo 譯碼器做為影像來源來編碼 HD 相片影像時,執行壓縮網域轉碼作業。 視您選取的編碼選項而定,編解碼器會盡可能使用壓縮網域作業。 如果應用程式選擇明確禁止任何壓縮網域轉碼作業,您應該將 UseCodecOptions 選項設定為 TRUE ,並將 CompressedDomainTranscode 選項設定為 FALSE。
當編解碼器執行壓縮網域作業時,只允許特定的編碼器參數和屬性設定。
- 系統會忽略基本編碼器選項 ImageQuality、CompressionQuality 和 Lossless。
- 會忽略 HD 相片特定編碼器選項 [品質]、 [重迭]、[交錯][ Alpha ] 和 [AlphaQuality ]。
- 如果存在, HorizontalTileSlices 和 VerticalTileSlices 選項必須設定為零。 影像的磚大小無法變更為壓縮網域轉碼的一部分。
- 您可以藉由指定 FrequencyOrdering 選項的適當值,在頻率與空間順序之間變更影像組織。
- 根據 BitmapTransform 編碼器選項中指定的值,可以執行基數旋轉和/或水準/垂直翻轉作業。
- 您可以使用 WriteSource 編碼器方法的 WICRect 參數來指定所需的區域,以裁剪影像。
- 您可以在 ImageDataDiscard 和/或 AlphaDataDiscard 選項中指定適當的值,減少編碼的檔案大小,並有效地減少新影像的解析度,來捨棄影像和/或 Alpha 數據。
默認值為 TRUE ,我們建議您應用程式與裝置一律使用頻率順序,除非您有特定的效能或應用程式理由使用空間順序。
ImageDataDiscard 選項
只有當 CompressedDomainTranscode 選項為 TRUE 時,此參數才有效,否則會忽略此參數。 ImageDataDiscard 會指定要在壓縮網域轉碼期間捨棄的影像數據量。 如果影像包含交錯的Alpha色板,此數據捨棄也會套用至Alpha色板,但本節稍後會說明例外狀況。
允許下列值。
值 | 描述 |
---|---|
0 | 不會捨棄任何影像頻率數據。 |
1 | FlexBits 會被捨棄,任意減少轉碼影像的品質,而不會變更影像的有效解析度。 確切的檔案大小縮減或特定品質降低取決於許多因素,無法指定或預測。 如果您為交錯的 Alpha 色板指定這個值,這個值會回復錯誤。 |
2 | HighPass 頻率數據帶會被捨棄(也包含 FlexBits),可有效降低兩個維度中 4 的轉碼影像解析度。 轉碼影像的實際維度保持不變,但每 4x4 像素區塊都會遺失所有詳細數據。 因此,每當譯碼影像時,您應該相應縮小轉碼影像的取樣。 |
3 | HighPass 和 LowPass 頻率數據頻帶都會捨棄(這也包括 FlexBits),有效地將轉碼影像的解析度降低為兩個維度的 16 倍。 轉碼影像的實際維度保持不變,但它會在每個 16x16 像素的宏區塊中遺失所有詳細數據。 因此,每當譯碼影像時,您應該相應縮小轉碼影像的取樣。 |
預設值是 0。
AlphaDataDiscard 選項
只有在 CompressedDomainTranscode 屬性為 TRUE 且影像包含平面或交錯 Alpha 色板時,這個選項才有效,否則會忽略它。 它會指定要在壓縮網域轉碼期間捨棄的 Alpha 頻率數據量。 平面 Alpha 色板允許下列值。
值 | 描述 |
---|---|
0 | 不會捨棄任何影像頻率數據。 |
1 | FlexBits 會被捨棄,不變更有效解析度,任意減少轉碼影像的平面 Alpha 色板品質。 確切的檔案大小縮減或特定品質降低取決於許多因素,無法指定或預測。 |
2 | HighPass 頻率數據帶會被捨棄(也包含 FlexBits),有效地將轉碼影像平面 Alpha 色板的解析度降低為兩個維度中的 4 倍。 轉碼影像的實際維度保持不變,但影像會在每個 4x4 像素區塊中遺失所有平面 Alpha 色板詳細數據。 因此,每當譯碼影像時,應該相應向下取樣轉碼影像。 一般而言,只有當您將 ImageDataDiscard 屬性設定為相同的值時,才應該設定此值。 |
3 | HighPass 和 LowPass 頻率數據頻帶都會捨棄(這也包括 FlexBits),有效地將轉碼影像的解析度降低為兩個維度的 16 倍。 轉碼影像的實際維度保持不變,但影像會在每個 16x16 的像素宏區塊中遺失所有詳細數據。 因此,每當譯碼影像時,應該相應向下取樣轉碼影像。 一般而言,只有當您將 ImageDataDiscard 屬性設定為相同的值時,才應該設定此值。 |
4 | Alpha色板已完全捨棄。 轉碼影像的像素格式會變更,以反映移除Alpha色板。 |
針對包含交錯 Alpha 色板的影像,除非此屬性設定為 4,否則 Alpha 色板會根據 ImageDataDiscard 屬性的值處理與影像數據相同。 如果此屬性設定為 4,交錯的 Alpha 色板會完全捨棄,並據以變更轉碼影像的圖元格式。
無預設值。
IgnoreOverlap 選項
只有在 CompressedDomainTranscode 屬性為 TRUE 且要求完全相同一或多個磚的子區域轉碼時,此選項才有效。 區域轉碼(或譯碼)的預設作業是展開要求的區域,以包含區域邊緣重疊譯所需的周圍圖元。 當此參數設定為 TRUE時,會忽略周圍圖元,而且只會擷取選取的磚或磚。 同樣地,這需要要求的區域完全符合一或多個圖格的座標。 如果來源影像未並排,或要求的區域指定任何部分磚,則會忽略此參數。
預設值為 FALSE。
解碼
WIC 譯碼 API 是設計成與編解碼器無關的程式代碼,且啟用 WIC 的編解碼器的影像譯碼基本上相同。 如需影像譯碼的詳細資訊,請參閱 譯碼概觀。 如需使用譯碼影像數據的詳細資訊,請參閱 位圖來源概觀。
IWICBitmapSourceTransform 支援
除了啟用 WIC 的編解碼器所需的介面之外,原生 HD 相片譯碼器也支援 IWICBitmapSourceTransform。 IWICBitmapSourceTransform 介面提供譯碼影像位數據流的進階選項。 IWICBitmapSourceTransform 介面不只使用 IWICBitmapFrameDecode 傳回完整的影像,而是啟用下列譯碼器選項。
- 譯碼影像的矩形子區域。
- 譯碼為較低的解析度
- 譯碼為不同的圖元格式
- 譯碼時執行轉換 (旋轉/翻轉)
原生 HD Photo 編解碼器提供 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 用於轉換元數據標記的值不同。