Condividi tramite


Implementazione di IWICDevelopRaw

IWICDevelopRaw

L'interfaccia IWICDevelopRaw espone opzioni di elaborazione specifiche per l'elaborazione di immagini non elaborate. Tutti i codec non elaborati devono supportare l'interfaccia IWICDevelopRaw . Alcuni codec non elaborati potrebbero non essere in grado di supportare tutte le impostazioni esposte da questa interfaccia, ma è necessario supportare tutte le impostazioni che il codec è in grado di eseguire. Come minimo, ogni codec non elaborato deve implementare i metodi SetRotation e SetRenderMode .

Inoltre, alcuni metodi e interfacce facoltativi per altri codec sono fortemente consigliati per i codec non elaborati. Questi includono i metodi GetPreview e GetThumbnail nella classe decodificatore a livello di contenitore e l'interfaccia IWICBitmapSourceTransform nella classe decode a livello di frame.

Le impostazioni impostate usando i metodi IWICDevelopRaw devono essere rese persistenti dal codec in modo coerente con il modo in cui altri metadati vengono salvati in modo permanente, ma non sovrascrivere mai le impostazioni originali "As Shot". Grazie alla persistenza dei metadati e all'implementazione di LoadParameterSet e GetCurrentParameterSet, è possibile consentire alle applicazioni di elaborazione non elaborate di recuperare e applicare le impostazioni di elaborazione tra le sessioni.

Uno scopo principale dell'interfaccia IWICDevelopRaw è consentire agli sviluppatori di applicazioni di creare un'interfaccia utente per modificare i parametri non elaborati che funzioneranno il più coerentemente possibile tra codec diversi. Si supponga che un utente finale regola i parametri usando un controllo dispositivo di scorrimento, con i valori minimo e massimo mappati agli intervalli minimo e massimo per il parametro. Per supportare questa operazione, è necessario eseguire ogni sforzo per considerare tutti gli intervalli di parametri come lineari. Per garantire che i controlli dispositivo di scorrimento non siano eccessivamente sensibili, è anche consigliabile supportare un intervallo più ampio possibile per ogni parametro, coprendo almeno il 50% dell'intervallo massimo possibile. Ad esempio, se l'intervallo massimo possibile di contrasto è da grigio puro a bianco e nero puro, con il valore predefinito di cui è stato eseguito il mapping a 0,0, l'intervallo minimo supportato da un codec sarà compreso tra almeno a metà tra il valore predefinito e il grigio puro sulla fascia bassa (-1,0), almeno a metà tra il valore predefinito e il bianco e nero puro sull'estremità alta (+1,0).

interface IWICDevelopRaw : IWICBitmapFrameDecode
{
   HRESULT QueryRawCapabilitiesInfo ( WICRawCapabilitiesInfo *pInfo );
   HRESULT LoadParameterSet ( WICRawParameterSet ParameterSet );
   HRESULT GetCurrentParameterSet ( IPropertyBag2 **ppCurrentParameterSet );
   HRESULT SetExposureCompensation ( double ev );
   HRESULT GetExposureCompensation ( double *pEV );
   HRESULT SetWhitePointRGB ( UINT Red, UINT Green, UINT Blue );
   HRESULT GetWhitePointRGB ( UINT *pRed, UINT *pGreen, UINT *pBlue );
   HRESULT SetNamedWhitePoint ( WICNamedWhitePoint WhitePoint );
   HRESULT GetNamedWhitePoint ( WICNamedWhitePoint *pWhitePoint );
   HRESULT SetWhitePointKelvin ( UINT WhitePointKelvin );
   HRESULT GetWhitePointKelvin ( UINT *pWhitePointKelvin );
   HRESULT GetKelvinRangeInfo ( UINT *pMinKelvinTemp,
               UINT *pMaxKelvinTemp,
               UINT *pKelvinTempStepValue );
   HRESULT SetContrast ( double Contrast );
   HRESULT GetContrast ( double *pContrast );
   HRESULT SetGamma ( double Gamma );
   HRESULT GetGamma ( double *pGamma );
   HRESULT SetSharpness ( double Sharpness );
   HRESULT GetSharpness ( double *pSharpness );
   HRESULT SetSaturation ( double Saturation );
   HRESULT GetSaturation ( double *pSaturation );
   HRESULT SetTint ( double Tint );
   HRESULT GetTint ( double *pTint );
   HRESULT SetNoiseReduction ( double NoiseReduction );
   HRESULT GetNoiseReduction ( double *pNoiseReduction );
   HRESULT SetDestinationColorContext (const IWICColorContext *pColorContext );
   HRESULT SetToneCurve ( UINT cbToneCurveSize,
               const WICRawToneCurve *pToneCurve );
   HRESULT GetToneCurve ( UINT cbToneCurveBufferSize,
               WICRawToneCurve *pToneCurve,
               UINT *pcbActualToneCurveBufferSize );
   HRESULT SetRotation ( double Rotation );
   HRESULT GetRotation ( double *pRotation );
   HRESULT SetRenderMode ( WICRawRenderMode RenderMode );
   HRESULT GetRenderMode ( WICRawRenderMode *pRenderMode ); 
   HRESULT SetNotificationCallback ( IWICDevelopRawNotificationCallback 
               *pCallback );
}

QueryRawCapabilitiesInfo

QueryRawCapabilitiesInfo restituisce il set di funzionalità supportate per questo file non elaborato. La struttura WICRawCapabilitiesInfo è definita come segue:

struct WICRawCapabilitiesInfo
{
   UINT cbSize;
   UINT CodecMajorVersion;
   UINT CodecMinorVersion;
   WICRawCapabilities ExposureCompensationSupport;
   WICRawCapabilities ContrastSupport;
   WICRawCapabilities RGBWhitePointSupport;
   WICRawCapabilities NamedWhitePointSupport;
   UINT NamedWhitePointSupportMask;
   WICRawCapabilities KelvinWhitePointSupport;
   WICRawCapabilities GammaSupport;
   WICRawCapabilities TintSupport;
   WICRawCapabilities SaturationSupport;
   WICRawCapabilities SharpnessSupport;
   WICRawCapabilities NoiseReductionSupport;
   WICRawCapabilities DestinationColorProfileSupport;
   WICRawCapabilities ToneCurveSupport;
   WICRawRotationCapabilities RotationSupport;              
}

L'enumerazione WICRawCapabilities usata in questa struttura è definita come:

enum WICRawCapabilities 
{   
   WICRawCapabilityNotSupported,
   WICRawCapabilityGetSupported,
   WICRawCapabilityFullySupported
}

Il campo finale è un'enumerazione WICRawRotationCapabilities , definita come:

enum WICRawRotationCapabilities                    
{
   WICRawRotationCapabilityNotSupported,
   WICRawRotationCapabilityGetSupported,
   WICRawRotationCapabilityNinetyDegreesSupported
   WICRawRotationCapabilityFullySupported
}

LoadParameterSet

LoadParameterSet consente all'utente di specificare se usare le impostazioni As Shot, usare le impostazioni modificate dall'utente o richiedere al decodificatore di correggere automaticamente l'immagine.

enum WICRawParameterSet
{
   WICAsShotParameterSet,
   WICUserAdjustedParameterSet,
   WICAutoAdjustedParameterSet
}

GetCurrentParameterSet

GetCurrentParameterSet restituisce un oggetto IPropertyBag2 con il set di parametri corrente. Il chiamante può quindi passare questo parametro impostato al codificatore da usare come opzioni del codificatore.

Set/GetExposureCompensation

GetExposureCompensation e SetExposureCompensation indicano la compensazione dell'esposizione da applicare all'output finale. L'intervallo valido per EV è da -5,0 a +5,0 stop.

Set/GetCurrentParameterRGB, Set/GetNamedWhitePoint, Set/GetwhitePointKelvin

Queste funzioni forniscono tutti i modi per ottenere e impostare il punto bianco, come valore RGB, come valore predefinito denominato o come valore Kelvin. L'intervallo accettabile per Kelvin è 1.500 - 30.000.

Set/GetContrast

GetContrast e SetContrast indicano la quantità di contrasto da applicare all'output. L'intervallo valido da specificare il contrasto è da -1,0 a +1,0, con il contrasto predefinito pari a 0,0.

Set/GetGamma

GetGamma e SetGamma indicano la gamma da applicare. L'intervallo valido per Gamma è compreso tra 0,2 e 5,0, con 1,0 come valore predefinito. Gamma viene in genere implementato usando la funzione di alimentazione gamma tradizionale (una funzione di potenza lineare con guadagno unity). La luminosità aumenta con l'aumento della gamma e diminuisce man mano che gamma si avvicina a zero. Si noti che il valore minimo è diverso da zero, perché zero genera un errore di divisione per zero nei calcoli gamma tradizionali. Il limite minimo logico è 1/max, motivo per cui il valore minimo è 0,2.

Set/GetSharpness

GetSharpness e SetSharpness indicano la quantità di nitidezza da applicare. L'intervallo valido è da -1,0 a +1,0, con 0,0 come quantità predefinita di affilamento e -1,0 che indica che non viene affatto affilato.

Set/GetSaturation

GetSaturation e SetSaturation indicano la quantità di saturazione da applicare. L'intervallo valido per specificare la saturazione è da -1,0 a +1,0, con una saturazione normale, -1,0 che rappresenta la desatura completa e +1,0 che rappresenta la saturazione completa.

Set/GetTint

GetTint e SetTint indicano la tinta da applicare, su una distorsione verde/magenta. L'intervallo valido è da -1,0 a +1,0, con il colore verde sul lato negativo della scala e magenta sul positivo. La scala della tinta è definita ortogonale alla temperatura del colore.

Set/GetNoiseReduction

GetNoiseReduction e SetNoiseReduction indicano la quantità di riduzione del rumore da applicare. L'intervallo valido da è da -1,0 a +1,0, con 0,0 che indica la quantità predefinita di riduzione del rumore, -1,0 che indica nessuna riduzione del rumore e +1,0 che indica la riduzione massima del rumore.

SetDestinationColorContext

SetDestinationColorContext specifica il profilo colore da applicare all'immagine. È possibile chiamare GetColorContexts per recuperare il profilo colore corrente.

Set/GetToneCurve

GetToneCurve e SetToneCurve specificano la curva del tono da applicare. Si supponga l'interpolazione lineare tra i punti. PToneCurve è una struttura WICRawToneCurve, che contiene una matrice di strutture WICRawToneCurvePoint e un conteggio del numero di punti nella matrice.

struct WICRawToneCurve 
{
   UINT cPoints;
   WICRawToneCurvePoint aPoints[];
}

WicRawToneCurvePoint contiene un valore di input e un valore di output.

struct WICRawToneCurvePoint 
{
   double Input;
   double Output;
}

Quando il chiamante passa NULL nel parametro pToneCurve , è necessario passare di nuovo le dimensioni necessarie per WICRawToneCurve nel parametro pcbActualToneCurveBufferSize .

Set/GetRotation

GetRotation e SetRotation indicano il grado di rotazione da applicare. Una rotazione di 90,0 specifica una rotazione di 90 gradi in senso orario. La differenza tra l'uso di SetRotation e la rotazione dell'impostazione tramite il metodo CopyPixels consiste nel fatto che l'angolo di rotazione impostato tramite SetRotation deve essere reso persistente dal codec, mentre l'impostazione della rotazione tramite CopyPixels ruota solo l'immagine in memoria.

Set/GetRenderMode

GetRenderMode e SetRenderMode indicano il livello di qualità richiesto dal chiamante. Quando un utente modifica i parametri, l'applicazione dovrebbe visualizzare un'approssimazione molto rapida dell'aspetto dell'immagine effettiva se vengono applicate le modifiche. A questo scopo, l'immagine viene in genere visualizzata alla risoluzione dello schermo o meno, anziché alla risoluzione effettiva dell'immagine, per fornire un feedback immediato all'utente. Questo è quando un'applicazione richiede la qualità della modalità bozza, quindi dovrebbe essere molto veloce. Quando l'utente ha apportato tutte le modifiche, le ha visualizzate in anteprima in modalità bozza e ha deciso di decodificare l'immagine completa con le impostazioni correnti, l'applicazione richiede una decodifica di qualità migliore. Questo è in genere richiesto anche per la stampa. Se è necessario un compromesso ragionevole tra velocità e qualità, l'applicazione richiede la qualità normale.

enum WICRawRenderMode
{
   WICRawRenderModeDraftMode,
   WICRawRenderModeNormalQuality ,
   WICRawRenderModeBestQuality
}

SetNotificationCallback

SetNotificationCallback registra una funzione di callback per il decodificatore da chiamare quando uno dei parametri di elaborazione non elaborati cambia. La firma per IWICDevelopRawNotificationCallback ha un solo metodo, denominato Notify. Notify ha un singolo parametro, ovvero una maschera che indica quale dei parametri di elaborazione non elaborati sono stati modificati.

HRESULT Notify ( UINT NotificationMask );

Un'operazione OR viene eseguita sui valori seguenti per NotificationMask.

WICRawChangeNotification_ExposureCompensation
WICRawChangeNotification_NamedWhitePoint
WICRawChangeNotification_KelvinWhitePoint
WICRawChangeNotification_RGBWhitePoint
WICRawChangeNotification_Contrast
WICRawChangeNotification_Gamma
WICRawChangeNotification_Sharpness
WICRawChangeNotification_Saturation
WICRawChangeNotification_Tint
WICRawChangeNotification_NoiseReduction
WICRawChangeNotification_DestinationColorContext
WICRawChangeNotification_ToneCurve
WICRawChangeNotification_Rotation
WICRawChangeNotification_RenderMode

Riferimento

IWICDevelopRaw

Informazioni concettuali

Implementazione di IWICBitmapSourceTransform

Implementazione di un codificatore WIC-Enabled

Come scrivere un codec WIC-Enabled

Panoramica del componente Di creazione immagini di Windows