Compartilhar via


Implementando IWICDevelopRaw

IWICDevelopRaw

A interface IWICDevelopRaw expõe opções de processamento específicas ao processamento de imagem bruta. Todos os codecs brutos devem dar suporte à interface IWICDevelopRaw . Alguns codecs brutos podem não ser capazes de dar suporte a todas as configurações expostas por essa interface, mas você deve dar suporte a todas as configurações que o codec é capaz de executar. No mínimo, cada codec bruto deve implementar os métodos SetRotation e SetRenderMode .

Além disso, alguns métodos e interfaces que são opcionais para outros codecs são altamente recomendados para codecs brutos. Eles incluem os métodos GetPreview e GetThumbnail na classe de decodificador no nível do contêiner e a interface IWICBitmapSourceTransform na classe de decodificação no nível do quadro.

As configurações definidas usando os métodos IWICDevelopRaw devem ser mantidas pelo codec de uma maneira consistente com a maneira como outros metadados são persistidos, mas você nunca deve substituir as configurações originais de "As Shot". Ao persistir os metadados e implementar LoadParameterSet e GetCurrentParameterSet, você permite que aplicativos de processamento bruto recuperem e apliquem configurações de processamento entre sessões.

Uma main finalidade da interface IWICDevelopRaw é permitir que os desenvolvedores de aplicativos criem uma interface do usuário para ajustar parâmetros brutos que funcionarão da forma mais consistente possível em diferentes codecs. Suponha que um usuário final ajuste os parâmetros usando um controle deslizante, com seus valores mínimo e máximo mapeados para os intervalos mínimo e máximo para o parâmetro. Para dar suporte a isso, você deve fazer todos os esforços para tratar todos os intervalos de parâmetros como lineares. Para garantir que os controles deslizantes não sejam excessivamente confidenciais, você também deve dar suporte a um intervalo o mais amplo possível para cada parâmetro, cobrindo pelo menos 50% do intervalo máximo possível. Por exemplo, se o intervalo máximo possível de contraste for de cinza puro a preto e branco puros, com o valor padrão sendo mapeado para 0,0, o intervalo mínimo suportado por um codec seria de pelo menos a metade entre o valor padrão e o cinza puro na extremidade baixa (–1,0), até pelo menos a metade entre o valor padrão e preto e branco puro na extremidade 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 retorna o conjunto de recursos com suporte para esse arquivo bruto. A estrutura WICRawCapabilitiesInfo é definida da seguinte maneira:

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;              
}

A enumeração WICRawCapabilities usada nessa estrutura é definida como:

enum WICRawCapabilities 
{   
   WICRawCapabilityNotSupported,
   WICRawCapabilityGetSupported,
   WICRawCapabilityFullySupported
}

O campo final é uma enumeração WICRawRotationCapabilities , definida como:

enum WICRawRotationCapabilities                    
{
   WICRawRotationCapabilityNotSupported,
   WICRawRotationCapabilityGetSupported,
   WICRawRotationCapabilityNinetyDegreesSupported
   WICRawRotationCapabilityFullySupported
}

LoadParameterSet

LoadParameterSet permite que o usuário especifique se deseja usar as configurações de As Shot, usar configurações ajustadas pelo usuário ou solicitar que o decodificador corrija automaticamente a imagem.

enum WICRawParameterSet
{
   WICAsShotParameterSet,
   WICUserAdjustedParameterSet,
   WICAutoAdjustedParameterSet
}

GetCurrentParameterSet

GetCurrentParameterSet retorna um IPropertyBag2 com o conjunto de parâmetros atual. Em seguida, o chamador pode passar esse parâmetro definido para o codificador a ser usado como as opções do codificador.

Set/GetExposureCompensation

GetExposureCompensation e SetExposureCompensation indicam a compensação de exposição a ser aplicada à saída final. O intervalo válido para EV é –5.0 a +5.0 paradas.

Set/GetCurrentParameterRGB, Set/GetNamedWhitePoint, Set/GetwhitePointKelvin

Todas essas funções fornecem maneiras de obter e definir o ponto em branco, seja como um valor RGB, um valor nomeado predefinido ou como um valor Kelvin. O intervalo aceitável para Kelvin é de 1.500 a 30.000.

Set/GetContrast

GetContrast e SetContrast indicam a quantidade de contraste a ser aplicada à saída. O intervalo válido para especificar contraste é –1.0 a +1.0, com o contraste padrão sendo 0.0.

Set/GetGamma

GetGamma e SetGamma indicam o Gama a ser aplicado. O intervalo válido para Gama é de 0,2 a 5,0, sendo 1,0 o padrão. O gama normalmente é implementado usando a função de energia gama tradicional (uma função de energia linear com ganho do Unity). O brilho aumenta com o aumento do Gama e diminui à medida que o Gama se aproxima de zero. (Observe que o valor mínimo não é zero, pois zero resultaria em um erro de divisão por zero nos cálculos gama tradicionais. O limite mínimo lógico é 1/max, razão pela qual o mínimo é 0,2.)

Set/GetSharpness

GetSharpness e SetSharpness indicam a quantidade de nitidez a ser aplicada. O intervalo válido é –1.0 a +1.0, sendo 0,0 a quantidade padrão de nitidez e –1.0 indicando nenhuma nitidez.

Set/GetSaturation

GetSaturation e SetSaturation indicam a quantidade de saturação a ser aplicada. O intervalo válido para especificar saturação é –1.0 a +1.0, sendo 0,0 saturação normal, –1.0 representando a desseaturação completa e +1.0 representando saturação completa.

Set/GetTint

GetTint e SetTint indicam a tonalidade a ser aplicada, em um viés verde/magenta. O intervalo válido é –1,0 a +1,0, com verde no lado negativo da escala e magenta no positivo. A escala de tonalidade é definida como ortogonal para a temperatura da cor.

Set/GetNoiseReduction

GetNoiseReduction e SetNoiseReduction indicam a quantidade de redução de ruído a ser aplicada. O intervalo válido para é –1.0 a +1.0, com 0,0 indicando a quantidade padrão de redução de ruído, –1,0 indicando nenhuma redução de ruído e +1,0 indicando a redução máxima de ruído.

SetDestinationColorContext

SetDestinationColorContext especifica o perfil de cor a ser aplicado à imagem. Você pode chamar GetColorContexts para recuperar o perfil de cor atual.

Set/GetToneCurve

GetToneCurve e SetToneCurve especificam a curva de tom a ser aplicada. Suponha interpolação linear entre pontos. O pToneCurve é uma estrutura WICRawToneCurve , que contém uma matriz de estruturas WICRawToneCurvePoint e uma contagem do número de pontos na matriz.

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

Um WICRawToneCurvePoint contém um valor de entrada e um valor de saída.

struct WICRawToneCurvePoint 
{
   double Input;
   double Output;
}

Quando o chamador passar NULL no parâmetro pToneCurve , você deverá retornar o tamanho necessário para o WICRawToneCurve no parâmetro pcbActualToneCurveBufferSize .

Set/GetRotation

GetRotation e SetRotation indicam o grau de rotação a ser aplicado. Uma rotação de 90,0 especificaria uma rotação de 90 graus no sentido horário. (A diferença entre usar SetRotation e a rotação de configuração usando o método CopyPixels é que o conjunto de ângulos de rotação usando SetRotation deve ser persistente pelo codec, enquanto a rotação de configuração por meio de CopyPixels gira apenas a imagem na memória.

Set/GetRenderMode

GetRenderMode e SetRenderMode indicam o nível de qualidade de saída exigido pelo chamador. Quando um usuário estiver ajustando parâmetros, o aplicativo deverá exibir uma aproximação muito rápida de como será a imagem real se as alterações forem aplicadas. Para essa finalidade, a imagem geralmente é exibida na resolução da tela ou menos, em vez da resolução real da imagem, para fornecer comentários imediatos ao usuário. É quando um aplicativo solicita a qualidade do Modo de Rascunho, portanto, isso deve ser muito rápido. Quando o usuário fez todas as alterações, visualizou-as no modo de rascunho e decidiu decodificar a imagem completa com as configurações atuais, o aplicativo solicita uma decodificação de Melhor Qualidade. Isso geralmente também é solicitado para impressão. Quando uma compensação razoável entre a velocidade de uma qualidade é necessária, o aplicativo solicita a Qualidade Normal.

enum WICRawRenderMode
{
   WICRawRenderModeDraftMode,
   WICRawRenderModeNormalQuality ,
   WICRawRenderModeBestQuality
}

SetNotificationCallback

SetNotificationCallback registra uma função de retorno de chamada para o decodificador chamar quando qualquer um dos parâmetros de processamento bruto é alterado. A assinatura do IWICDevelopRawNotificationCallback tem apenas um método, chamado Notify. Notify tem um único parâmetro, que é uma máscara que indica quais dos parâmetros brutos de processamento foram alterados.

HRESULT Notify ( UINT NotificationMask );

Uma operação OR é executada nos valores a seguir para o 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

Referência

IWICDevelopRaw

Conceitual

Implementando IWICBitmapSourceTransform

Implementando um codificador WIC-Enabled

Como escrever um CODEC WIC-Enabled

Visão geral do componente de imagem do Windows