Condividi tramite


Panoramica del formato immagine HD

Questo argomento fornisce informazioni sul codec HD nativo (integrato) disponibile tramite Windows Imaging Component (WIC).

Importante

Il formato HD Photo è un'implementazione standard del formato JPEG XR e il supporto per HD Photo viene implementato dal codec JPEG XR WIC. Per ulteriori informazioni, vedi la panoramica del codec JPEG XR .

Identità codec

Nella tabella seguente vengono fornite informazioni sull'identificazione del codec.

Componente Descrizione
Nomi formali Foto HD, Windows Media Photo
Estensioni del nome del file wdp
Tipo MIME image/vnd.ms-photo
Firme dei file Primi quattro byte: 0x4949bc00 (versione 0; versione non definitiva), 0x4949bc01 (versione 1.0)

La tabella seguente elenca i GUID usati per identificare i componenti codec HD Photo nativi.

Componente Nome amichevole GUID (Identificatore Unico Globale)
Formato contenitore GUID_ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
Decodificatore CLSID_WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
Codificatore CLSID_WICWmpEncoder ac4ce3cb-e1c1-44cd-82155a1665509ec2

Codifica

L'API di codifica WIC è progettata per essere indipendente dal codec e la codifica delle immagini per i codec abilitati per WIC è essenzialmente la stessa. Per altre informazioni sulla codifica delle immagini tramite l'API WIC, vedere panoramica della codifica .

Opzioni del codificatore

I codec abilitati per WIC differiscono a livello di opzione di codifica. Le opzioni del codificatore riflettono le funzionalità di un codificatore di immagini e ogni codec nativo supporta un set di queste opzioni del codificatore. Le opzioni del codificatore possono essere opzioni supportate da WIC di base disponibili per tutti i codici abilitati per WIC (anche se non necessariamente supportati) o opzioni specifiche del codec progettate dal codec del formato immagine. Per gestire queste opzioni di codifica durante il processo di codifica, WIC usa l'interfacciaIPropertyBag2. Per altre informazioni sull'uso dell'interfaccia IPropertyBag2 per la codifica WIC, vedere panoramica della codifica .

Il codec HD Photo usa entrambe le opzioni wic di base e offre diverse opzioni di codifica specifiche di FOTO HD. La tabella seguente elenca le opzioni del codificatore supportate dal codec HD Photo nativo.

Opzioni di base del codificatore WIC

Nome proprietà VARTYPE Intervallo valori Valore predefinito
QualitàImmagine VT_R4 0 - 1.0 0.9
senza perdita di dati VT_BOOL VERO, FALSO false
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

Opzioni del codificatore specifico per foto HD

Nome proprietà VARTYPE Intervallo valori Valore predefinito
UseCodecOptions VT_BOOL VERO, FALSO false
qualità VT_UI1 1 - 255 10
sovrapposizione VT_UI1 0 - 2 1
Sottocampionamento VT_UI1 0 - 3 3 se ImageQuality > 0.8; altrimenti 1;
horizontalTileSlices VT_UI2 0 - 4095 (larghezza immagine - 1) >> 8
VerticalTileSlices VT_UI2 0 - 4095 (altezza immagine - 1) >> 8
Ordine di Frequenza VT_BOOL VERO, FALSO VERO
InterleavedAlpha VT_BOOL VERO, FALSO false
AlphaQuality VT_UI1 1 - 255 1
TranscodificaDominioCompresso VT_BOOL VERO, FALSO VERO
ImageDataDiscard VT_UI1 0 - 3 0
AlphaDataDiscard VT_UI1 0 - 4 Non utilizzato.
IgnoraSovrapposizione VT_BOOL VERO, FALSO falso

Se un'opzione del codificatore è presente nell'elenco di opzioni IPropertyBag2 che il codec non supporta, viene ignorato.

Opzione ImageQuality

Specifica la fedeltà dell'immagine desiderata. 0.0 indica la fedeltà più bassa possibile e 1.0 specifica la massima fedeltà. Per il formato immagine HD Photo, un valore 1,0 restituisce una compressione matematicamente senza perdita.

Il valore predefinito è 0,9.

Opzione Qualità di Compressione

Specifica la qualità di compressione desiderata. 0.0 indica lo schema di compressione efficiente disponibile. In genere, questo schema produce una codifica più veloce ma un output più grande. Il valore 1.0 specifica lo schema di compressione più efficiente disponibile, che in genere produce una codifica più lunga ma un output più piccolo.

Foto HD non supporta questa opzione di codificatore. Questo valore viene ignorato se presente nell'elenco dei parametri IPropertyBag2.

Opzione senza perdita di dati

Specifica se utilizzare la modalità di compressione delle perdite. Per il formato immagine HD Photo, questo valore sostituisce il valore dell'opzione ImageQuality.

Il valore predefinito è FALSE.

Opzione BitmapTransform

Specifica la modalità di trasformazione dell'immagine durante la decodifica dell'immagine. È necessario impostare questa opzione su uno dei valori di enumerazioneWICBitmapTransformOptions.

Il valore predefinito è WICBitmapTransformOptions::WICBitmapTransformRotate0.

Opzione UseCodecOptions

Se il valore è VARIANT_TRUE vengono utilizzate le opzioni Qualità, Sovrapposizionee Sottocampionamento anziché il valore dell'opzione.

Il valore predefinito è FALSE.

Opzione Di qualità

Specifica la qualità della compressione per l'immagine. Il valore 1 indica la modalità senza perdita di dati. L'aumento dei valori comporta rapporti di compressione più elevati e una qualità dell'immagine inferiore.

Il valore predefinito è 10.

Opzione Di sovrapposizione

Specifica il livello di elaborazione della sovrapposizione.

Nella tabella seguente sono elencati i livelli di elaborazione di sovrapposizione disponibili.

Valore Descrizione
0 Non è abilitata alcuna elaborazione di sovrapposizione.
1 È abilitato un livello di elaborazione della sovrapposizione, modificando i valori codificati dei blocchi 4x4 in base ai valori dei blocchi adiacenti.
2 Sono abilitati due livelli di elaborazione della sovrapposizione. Oltre all'elaborazione di primo livello, i valori codificati di 16x16 blocchi di macro vengono modificati in base ai valori dei blocchi di macro adiacenti.

Il valore predefinito è 1.

Opzione di sottocampionamento

Specifica una compressione aggiuntiva nello spazio cromatico. In questo modo, è possibile mantenere i dettagli di luminanza a scapito dei dettagli di colore . Questa opzione si applica solo alle immagini RGB.

Nella tabella seguente sono elencate le opzioni di sottocampionamento disponibili.

Valore Descrizione
3 La codifica 4:4:4 preserva la risoluzione cromatica completa.
2 La codifica 4:2:2 riduce la risoluzione dei cromatici a 1/2 della risoluzione della luminanza.
1 La codifica 4:2:0 riduce la risoluzione dei cromatici a 1/4 della risoluzione della luminanza.
0 La codifica 4:0:0 rimuove tutti i contenuti cromatici e mantiene solo la luminanza. Poiché il codec usa una definizione di luminanza leggermente modificata per migliorare le prestazioni, è consigliabile convertire un'immagine RGB in monocromatica prima della codifica anziché usare questa modalità di sottocampionamento cromatico.

Il valore predefinito è 3 se ImageQuality> 0,8; in caso contrario, 1.

Opzioni di HorizontalTileSlices, VerticalTileSlices

Specificare la tillatura orizzontale e verticale dell'immagine prima di eseguire la codifica della compressione per ottenere prestazioni ottimali di decodifica dell'area. Dividendo l'immagine in riquadri rettangolari durante la codifica, è possibile decodificare le aree dell'immagine senza elaborare l'intero flusso di dati compresso. Il valore predefinito 0 non specifica alcuna suddivisione, quindi l'intera immagine viene considerata come un singolo riquadro. Un valore pari a 1 per ogni parametro crea un'unica divisione orizzontale e una singola divisione verticale, dividendo l'immagine in quattro riquadri di dimensioni uguali. Il valore massimo di 4095 per ogni parametro divide l'immagine in 4096 righe di riquadri con 4096 riquadri per riga. In altre parole, i valori dei parametri sono uguali al numero di riquadri orizzontali e verticali (rispettivamente) meno 1. Un riquadro non può mai essere inferiore a 16 pixel in larghezza o altezza, quindi il codificatore di foto HD potrebbe modificare questo parametro per mantenere le dimensioni minime richieste del riquadro. Poiché a ogni riquadro è associato un sovraccarico di archiviazione ed elaborazione, è consigliabile scegliere con attenzione questi valori per soddisfare lo scenario specifico.

HorizontalTileSlices: il valore predefinito è (Larghezza immagine - 1) >> 8.

VerticalTileSlices: il valore predefinito è (Altezza immagine - 1) >> 8.

Opzione FrequencyOrder

Specifica che l'immagine deve essere codificata in ordine di frequenza. I dati relativi alla frequenza più bassa vengono visualizzati per primi nel file e il contenuto dell'immagine viene raggruppato in base alla frequenza anziché all'orientamento spaziale. L'organizzazione di un file in base all'ordine di frequenza offre le migliori prestazioni per qualsiasi decodifica basata sulla frequenza e pertanto è consigliabile. Le implementazioni del dispositivo dei codificatori di foto HD possono organizzare un file nello spazio per ridurre il footprint di memoria necessario durante la codifica.

Il valore predefinito è TRUE ed è consigliabile che le applicazioni e i dispositivi usino sempre l'ordine di frequenza, a meno che non siano presenti motivi specifici delle prestazioni o dell'applicazione per usare l'ordine spaziale.

Opzione InterleavedAlpha

L'impostazione di questa opzione su TRUE indica al codec di codificare le informazioni sul canale alfa come canale interleaved aggiuntivo, senza alcuna correlazione con i canali di contenuto dell'immagine. Questa modalità è utile quando è necessario decodificare alfa contemporaneamente con l'immagine in uno scenario di streaming.

Se si imposta questo parametro su FALSE viene generato un canale alfa planare, codificato come immagine separata con il proprio valore di qualità facoltativo. Usando un canale alfa planare è possibile decodificare i dati dell'immagine e il canale alfa in modo indipendente. I canali alfa interleaved sono supportati solo per determinati formati di pixel RGB. È possibile associare un canale alfa planare a qualsiasi formato di immagine che definisce un canale alfa.

Il valore predefinito è FALSE.

Opzione AlphaQuality

Specifica la qualità della compressione per l'immagine del canale alfa planare. Il valore 1 imposta la modalità senza perdita di dati. L'aumento dei valori comporta rapporti di compressione più elevati e una qualità dell'immagine inferiore.

Il valore predefinito è 1.

Opzione CompressedDomainTranscode

Usando Foto HD è possibile eseguire una serie di operazioni di trasformazione file senza decodificare effettivamente i dati compressi e codificarli nuovamente nel file di destinazione. Le operazioni di dominio compresso sono molto efficienti ed evitano eventuali perdite di qualità aggiuntive tipiche quando si decodifica e si codifica nuovamente un'immagine compressa con perdita di dati.

Sono supportate le operazioni di dominio compresse seguenti:

  • Ritagliare un'area dell'immagine.
  • Effettuare una trasformazione di rotazione o capovolgimento.
  • Eliminare i dati relativi alla frequenza (rendendo possibile la creazione di un file di immagine più piccolo).
  • Riorganizzare l'immagine tra l'ordine sequenziale spaziale e quello di frequenza.

Il codificatore foto HD esegue un'operazione di transcodifica del dominio compresso quando codifica un'immagine HD Photo usando un decodificatore di foto HD come origine dell'immagine. A seconda delle opzioni di codifica selezionate, il codec usa un'operazione di dominio compressa, se possibile. Se un'applicazione sceglie di inibire in modo esplicito le operazioni di transcodifica di dominio compresso, è necessario impostare l'opzione UseCodecOptions TRUE e l'opzione CompressedDomainTranscode su FALSE.

Quando il codec esegue un'operazione di dominio compresso, sono consentiti solo determinati parametri del codificatore e impostazioni delle proprietà.

  • Le opzioni del codificatore di base ImageQuality, CompressionQuality e lossless vengono ignorate.
  • Le opzioni del codificatore specifico di Foto HD Quality, Overlap, InterleavedAlpha e AlphaQuality vengono ignorate.
  • Se presente, le opzioni HorizontalTileSlices e VerticalTileSlices devono essere impostate su zero. Le dimensioni del riquadro di un'immagine non possono essere modificate come parte di una transcodifica del dominio compresso.
  • È possibile modificare l'organizzazione dell'immagine tra frequenza e ordinamento spaziale specificando il valore appropriato delle opzioni FrequencyOrdering.
  • È possibile eseguire un'operazione di rotazione cardinale e/o orizzontale/verticale in base al valore specificato nell'opzione del codificatore BitmapTransform.
  • L'immagine può essere ritagliata specificando l'area desiderata usando il parametro WICRect della funzione del codificatore WriteSource .
  • I dati immagine e/o alfa possono essere eliminati specificando i valori appropriati nelle opzioni ImageDataDiscard e/o AlphaDataDiscard, riducendo le dimensioni del file codificato e diminuendo efficacemente la risoluzione della nuova immagine.

Il valore predefinito è TRUE ed è consigliabile che le applicazioni e i dispositivi usino sempre l'ordine di frequenza, a meno che non si disponga di specifiche prestazioni o motivi dell'applicazione per usare l'ordine spaziale.

Opzione ImageDataDiscard

Questo parametro è valido solo se l'opzione CompressedDomainTranscode è TRUE; in caso contrario, viene ignorato. imageDataDiscard specifica la quantità di dati dell'immagine da rimuovere durante la transcodifica di un dominio compresso. Se l'immagine contiene un canale alfa interleaved, questi dati vengono rimossi anche al canale alfa, con le eccezioni descritte più avanti in questa sezione.

Sono consentiti i valori seguenti.

Valore Descrizione
0 Nessun dato sulla frequenza dell'immagine viene rimosso.
1 I FlexBit vengono scartati, rendendo una riduzione arbitraria della qualità dell'immagine transcodificata senza modificare la risoluzione effettiva dell'immagine. La riduzione esatta delle dimensioni del file o la riduzione della qualità specifica dipende da numerosi fattori e non può essere specificata o stimata. Questo valore restituisce un errore se viene specificato per un canale alfa intrecciato.
2 La banda di dati ad alta frequenza HighPass viene eliminata (che include anche FlexBits), riducendo in modo efficace la risoluzione dell'immagine transcodificata da un fattore pari a 4 in entrambe le dimensioni. Le dimensioni effettive dell'immagine transcodificata rimangono invariate, ma perdono tutti i dettagli in ogni blocco 4x4 di pixel. Pertanto, è consigliabile eseguire il down-sample dell'immagine transcodificata di conseguenza ogni volta che la si decodifica.
3 Entrambe le bande di dati HighPass e LowPass sono eliminate (che includono anche FlexBits), riducendo in modo efficace la risoluzione dell'immagine transcodificata di un fattore di 16 volte in entrambe le dimensioni. Le dimensioni effettive dell'immagine transcodificata rimangono invariate, ma perdono tutti i dettagli in ogni macroblock di 16x16 di pixel. Pertanto, è consigliabile eseguire il down-sample dell'immagine transcodificata di conseguenza ogni volta che la si decodifica.

Il valore predefinito è 0.

Opzione AlphaDataDiscard

Questa opzione è valida solo se la proprietà CompressedDomainTranscode è TRUE e l'immagine contiene un canale alfa planare o intrecciato; in caso contrario, viene ignorato. Specifica la quantità di dati di frequenza alfa da rimuovere durante la transcodifica di un dominio compresso. Per un canale alfa planare sono consentiti i valori seguenti.

Valore Descrizione
0 Nessun dato sulla frequenza dell'immagine viene rimosso.
1 I FlexBit vengono scartati, rendendo una riduzione arbitraria della qualità del canale alfa planare per l'immagine transcodificata senza modificare la risoluzione effettiva. La riduzione esatta delle dimensioni del file o la riduzione della qualità specifica dipende da numerosi fattori e non può essere specificata o stimata.
2 La banda di dati ad alta frequenza HighPass viene eliminata (che include anche FlexBits), riducendo in modo efficace la risoluzione del canale alfa planare dell'immagine transcodificata di un fattore 4 in entrambe le dimensioni. Le dimensioni effettive dell'immagine transcodificata rimangono invariate, ma l'immagine perde tutti i dettagli del canale alfa planare in ogni blocco di pixel 4x4. Pertanto, l'immagine transcodificata deve essere campionata di conseguenza ogni volta che viene decodificata. In genere, è necessario impostare questo valore solo quando si imposta la proprietà ImageDataDiscard sullo stesso valore.
3 Entrambe le bande di dati HighPass e LowPass vengono rimosse (inclusi anche i FlexBits), riducendo in modo efficace la risoluzione dell'immagine transcodificata di un fattore 16 in entrambe le dimensioni. Le dimensioni effettive dell'immagine transcodificata rimangono invariate, ma l'immagine perde tutti i dettagli in ogni macroblock di 16x16 di pixel. Pertanto, l'immagine transcodificata deve essere campionata di conseguenza ogni volta che viene decodificata. In genere, è necessario impostare questo valore solo quando si imposta la proprietà ImageDataDiscard sullo stesso valore.
4 Il canale Alfa viene completamente rimosso. Il formato pixel dell'immagine transcodificata viene modificato in modo da riflettere la rimozione del canale alfa.

Per le immagini che contengono canali alfa interleaved, a meno che questa proprietà non sia impostata su 4, il canale alfa viene elaborato come i dati dell'immagine, in base al valore della proprietà ImageDataDiscard. Se questa proprietà è impostata su 4, il canale alfa interleaved viene completamente rimosso e il formato pixel dell'immagine transcodificata viene modificato di conseguenza.

Nessun valore predefinito.

Opzione IgnoreOverlap

Questa opzione è valida solo se la proprietà CompressedDomainTranscode è TRUE e viene richiesta una transcodifica di esattamente uno o più tasselli. L'operazione predefinita per una transcodifica dell'area (o decodifica) consiste nell'espandere l'area richiesta in modo da includere i pixel circostanti necessari per la decodifica sovrapposta dei bordi dell'area. Quando questo parametro è impostato su TRUE, i pixel circostanti vengono ignorati e vengono estratti solo il riquadro o i riquadri selezionati. Anche in questo caso, è necessario che l'area richiesta corrisponda esattamente alle coordinate di uno o più riquadri. Se l'immagine di origine non viene affiancata o se l'area richiesta specifica riquadri parziali, questo parametro viene ignorato.

Il valore predefinito è FALSE.

Decodificazione

L'API di decodifica WIC è progettata per essere indipendente dal codec e la decodifica delle immagini per i codec abilitati per WIC è essenzialmente la stessa. Per ulteriori informazioni sulla decodifica delle immagini, vedere la "Panoramica della decodifica" . Per ulteriori informazioni sull'uso dei dati di immagine decodificati, vedere la panoramica delle origini bitmap .

Supporto di IWICBitmapSourceTransform

Oltre alle interfacce necessarie per essere un codec abilitato per WIC, il decodificatore di foto HD nativo supporta anche il IWICBitmapSourceTransform. L'interfaccia IWICBitmapSourceTransform offre un'opzione avanzata per decodificare un flusso di bit di immagine. Anziché restituire semplicemente un'immagine completa usando interfaccia IWICBitmapFrameDecode, interfaccia IWICBitmapSourceTransform abilita le opzioni del decodificatore seguenti.

  • Decodificare un'area secondaria rettangolare dell'immagine.
  • Decodificare a una risoluzione inferiore
  • Decodifica in un formato pixel diverso
  • Eseguire una trasformazione (rotazione/scorrimento) durante la decodifica

Il codec HD Photo nativo offre il livello di supporto seguente per l'interfacciaIWICBitmapSourceTransform.

SupportaTrasformazione

L'implementazione nativa supporta tutte le opzioni di trasformazione WICBitmapTransformOptions .

GetClosestSize

Per le richieste che sono inferiori a metà della dimensione dell'immagine di origine in entrambe le dimensioni, HD Photo restituisce la dimensione intera successiva più grande, divisibile esattamente per due. Per tutte le altre dimensioni richieste, HD Photo restituisce le dimensioni originali dell'immagine.

GetClosestPixelFormat

Hd Photo restituisce il formato pixel dell'immagine codificata.

CopiaPixel

Foto HD accetta qualsiasi area richiesta specificata dal parametro WICRect e restituisce tale parte dell'immagine.

I parametri uiWidth e uiHeight devono specificare le dimensioni restituite dalla funzioneGetClosestSize. Tutti gli altri valori restituiscono un errore.

Il parametro pguidDstFormat deve specificare il formato pixel restituito dalla funzione GetClosestPixelFormat. Qualsiasi altro valore restituisce un errore.

Hd Photo accetta qualsiasi valore consentito per il parametro dstTransform. Si noti che i valori consentiti da WIC per questo parametro sono diversi dai valori usati da HD Photo per il tag dei metadati di trasformazione.