Visão geral do formato de foto HD
Este tópico fornece informações sobre o codec HD Photo nativo (interno) disponível por meio do WIC (componente de imagem do Windows).
Importante
O formato HD Photo é uma implementação pré-padrão do formato JPEG XR, e o suporte para HD Photo é implementado pelo codec JPEG XR WIC. Para obter mais informações, consulte Visão geral do codec JPEG XR.
Identidade do codec
A tabela a seguir fornece informações de identificação de codec.
Componente | Descrição |
---|---|
Nomes formais | HD Photo, Windows Media Photo |
Extensões de nome de arquivo¹. | wdp |
tipo MIME | imagem/vnd.ms-photo |
Assinaturas de arquivo | Primeiros quatro bytes: 0x4949bc00 (Versão 0; versão prévia), 0x4949bc01 (Versão 1.0) |
A tabela a seguir lista os GUIDs usados para identificar os componentes nativos do codec HD Photo.
Componente | Nome Amigável | GUID |
---|---|---|
Formato de contêiner | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
Decodificador | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
Codificador | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
Codificação
A API de codificação WIC foi projetada para ser independente de codec, e a codificação de imagem para codecs habilitados para WIC é essencialmente a mesma. Para obter mais informações sobre codificação de imagem usando a API do WIC, consulte a Visão geral de codificação.
Opções do codificador
Os codecs habilitados para WIC diferem no nível da opção de codificação. As opções do codificador refletem os recursos de um codificador de imagem e cada codec nativo dá suporte a um conjunto dessas opções de codificador. As opções de codificador podem ser opções básicas com suporte pelo WIC disponíveis para todos os códigos habilitados para WIC (embora não necessariamente tenham suporte) ou opções específicas do codec projetadas pelo codec de formato de imagem. Para gerenciar essas opções de codificação durante o processo de codificação, o WIC usa a interface IPropertyBag2. Para obter mais informações sobre como usar a interface IPropertyBag2 para codificação WIC, consulte a Visão geral de codificação.
O codec HD Photo usa as opções básicas do WIC e fornece várias opções de codificação específicas do HD Photo. A tabela a seguir lista as opções de codificador com suporte pelo codec HD Photo nativo.
Opções básicas do codificador WIC
Nome da propriedade | VARTYPE | Intervalo de valores | Valor padrão |
---|---|---|---|
ImageQuality | VT_R4 | 0 – 1.0 | 0,9 |
Sem perdas | VT_BOOL | TRUE, FALSE | FALSE |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
Opções de codificador específico para HD Photo
Nome da propriedade | VARTYPE | Intervalo de valores | Valor padrão |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE, FALSE | FALSE |
Quality | VT_UI1 | 1 a 255 | 10 |
Sobreposição | VT_UI1 | 0 – 2 | 1 |
Subsampling | VT_UI1 | 0 a 3 | 3 se ImageQuality > 0.8; caso contrário 1; |
HorizontalTileSlices | VT_UI2 | 0 – 4095 | (largura da imagem – 1) >> 8 |
VerticalTileSlices | VT_UI2 | 0 – 4095 | (altura da imagem – 1) >> 8 |
FrequencyOrder | VT_BOOL | TRUE, FALSE | TRUE |
InterleavedAlpha | VT_BOOL | TRUE, FALSE | FALSE |
AlphaQuality | VT_UI1 | 1 a 255 | 1 |
CompressedDomainTranscode | VT_BOOL | TRUE, FALSE | TRUE |
ImageDataDiscard | VT_UI1 | 0 a 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 -4 | não usado. |
IgnoreOverlap | VT_BOOL | TRUE, FALSE | FALSE |
Se uma opção de codificador estiver presente na lista de opções IPropertyBag2 às quais o codec não dá suporte, ela será ignorada.
Opção ImageQuality
Especifica a fidelidade de imagem desejada. 0.0 indica a menor fidelidade possível, e 1.0 especifica a maior fidelidade. Para o formato de imagem HD Photo, um valor 1.0 resulta em uma compactação matematicamente sem perdas.
O valor padrão é 0.9.
Opção CompressionQuality
Especifica a qualidade de compactação desejada. 0.0 indica o esquema de compactação eficiente disponível. Normalmente, esse esquema produz uma codificação mais rápida, mas uma saída maior. Um valor de 1.0 especifica o esquema de compactação mais eficiente disponível, que normalmente produz uma codificação mais longa, mas uma saída menor.
O HD Photo não dá suporte a essa opção de codificador. Esse valor será ignorado se estiver presente na lista de parâmetros IPropertyBag2.
Opção sem perdas
Especifica se o modo de compactação de perdas deve ser usado. Para o formato de imagem HD Photo, esse valor substitui o valor da opção ImageQuality.
O valor padrão é FALSE.
Opção BitmapTransform
Especifica como a imagem é transformada durante a decodificação da imagem. Você precisa definir essa opção como um dos valores da enumeração WICBitmapTransformOptions.
O valor padrão é WICBitmapTransformOptions::WICBitmapTransformRotate0.
Opção UseCodecOptions
Se o valor for VARIANT_TRUE as opções Qualidade, Sobreposição e Subamostragem em vez do valor da opção.
O valor padrão é FALSE.
Opção de qualidade
Especifica a qualidade de compactação da imagem. Um valor de 1 indica o modo sem perdas. Valores maiores resultam em maiores taxas de compactação e menor qualidade de imagem.
O valor padrão é 10.
Opção de sobreposição
Especifica o nível de processamento de sobreposição.
A tabela a seguir lista os níveis de processamento de sobreposição disponíveis.
Valor | Descrição |
---|---|
0 | Nenhum processamento de sobreposição é habilitado. |
1 | Um nível de processamento de sobreposição é habilitado, modificando valores codificados em blocos 4x4 com base em valores de blocos vizinhos. |
2 | Dois níveis de processamento de sobreposição são habilitados. Além do processamento de primeiro nível, os valores codificados de macroblocos 16x16 são modificados com base nos valores dos macroblocos vizinhos. |
O valor padrão é 1.
Opção de subamostragem
Especifica compactação adicional no espaço de cor. Dessa forma, você pode preservar detalhes de luminância em detrimento dos detalhes de cor. Essa opção se aplica apenas a imagens RGB.
A tabela a seguir lista as opções de subamostragem disponíveis.
Valor | Descrição |
---|---|
3 | A codificação 4:4:4 preserva a resolução total do espaço de cor. |
2 | A codificação 4:2:2 reduz a resolução do espaço de cor para metade da resolução de luminância. |
1 | A codificação 4:2:0 reduz a resolução do espaço de cor para um quarto da resolução de luminância. |
0 | A codificação 4:0:0 descarta todo o conteúdo do espaço de cor e preserva apenas a luminância. Como o codec usa uma definição ligeiramente modificada de luminância para aprimorar o desempenho, recomendamos que você converta uma imagem RGB em monocromática antes de codificar, em vez de usar esse modo de subamostragem de espaço de cor. |
O valor padrão é 3 se ImageQuality> 0.8; caso contrário, 1.
Opções HorizontalTileSlices, VerticalTileSlices
Especifique a divisão em blocos horizontal e vertical da imagem antes de executar a codificação de compactação para obter o desempenho ideal da decodificação de região. Ao dividir a imagem em blocos retangulares durante a codificação, você pode decodificar regiões da imagem sem processar todo o fluxo de dados compactados. O valor padrão de 0 não especifica nenhuma subdivisão, portanto, a imagem inteira é tratada como apenas um bloco. Um valor de 1 para cada parâmetro cria uma divisão horizontal e uma divisão vertical, dividindo efetivamente a imagem em quatro blocos de tamanho igual. O valor máximo de 4095 para cada parâmetro divide a imagem em 4096 linhas de blocos com 4096 blocos por linha. Em outras palavras, os valores dos parâmetros são iguais ao número de blocos horizontais e verticais (respectivamente) menos 1. Um bloco nunca pode ser menor do que 16 pixels em largura ou altura, portanto, o codificador do HD Photo pode ajustar esse parâmetro para manter o tamanho mínimo de bloco necessário. Como há sobrecarga de armazenamento e processamento associada a cada bloco, você deve escolher esses valores cuidadosamente para atender a cada cenário específico.
HorizontalTileSlices: o valor padrão é (Largura da imagem – 1) >> 8.
VerticalTileSlices: o valor padrão é (Altura da imagem – 1) >> 8.
Opção FrequencyOrder
Especifica que a imagem precisa ser codificada em ordem de frequência. Os dados de frequência mais baixa aparecem primeiro no arquivo, e o conteúdo da imagem é agrupado pela frequência dela em vez de sua orientação espacial. Organizar um arquivo por ordem de frequência fornece o melhor desempenho para qualquer decodificação baseada em frequência e, portanto, recomendamos esse procedimento. As implementações de dispositivos de codificadores HD Photo podem organizar um arquivo em ordem espacial para reduzir o volume de memória necessário durante a codificação.
O valor padrão é TRUE e recomendamos que os aplicativos e dispositivos sempre usem a ordem de frequência, a menos que você tenha motivos específicos de desempenho ou de aplicativo para usar a ordem espacial.
Opção InterleavedAlpha
Definir essa opção como TRUE instrui o codec a codificar as informações do canal alfa como um canal intercalado adicional, sem correlação com os canais de conteúdo da imagem. Esse modo é útil quando você precisa decodificar alfa simultaneamente com a imagem em um cenário de streaming.
Definir esse parâmetro como FALSE resulta em um canal alfa planar, codificado como uma imagem separada com um valor de Qualidade opcional próprio. Usando um canal alfa Planar, você pode decodificar os dados da imagem e o canal alfa independentemente. Canais alfa intercalados são compatíveis apenas com determinados formatos de pixel RGB. Você pode associar um canal alfa Planar a qualquer formato de imagem que defina um canal alfa.
O valor padrão é FALSE.
Opção AlphaQuality
Especifica a qualidade de compactação para a imagem de canal alfa planar. Um valor de 1 define o modo sem perdas. Valores maiores resultam em maiores taxas de compactação e menor qualidade de imagem.
O valor padrão é 1.
Opção CompressedDomainTranscode
Usando HD Photo, você pode executar uma série de operações de transformação de arquivo sem efetivamente decodificar os dados compactados e recodificá-los para o arquivo de destino. As operações de domínio compactado são muito eficientes e evitam qualquer perda de qualidade adicional típica quando você decodifica e recodifica uma imagem compactada com perdas.
Há suporte para as seguintes operações de domínio compactadas:
- Recortar uma região da imagem.
- Executar uma transformação de rotação/inversão.
- Descartar dados de frequência (tornando possível criar um arquivo de imagem menor).
- Reorganizar a imagem entre ordem sequencial espacial e de frequência.
O codificador do HD Photo executa uma operação de transcodificação de domínio compactado quando codifica uma imagem de HD Photo usando um decodificador do HD Photo como fonte de imagem. Dependendo das opções de codificação selecionadas, o codec usa uma operação de domínio compactado, se possível. Se um aplicativo optar por inibir explicitamente qualquer operação de transcodificação de domínio compactado, você deverá definir a opção UseCodecOptions como TRUE e a opção CompressedDomainTranscode como FALSE.
Quando o codec executa uma operação de domínio compactado, somente determinadas configurações de parâmetro e propriedade do codificador são permitidas.
- As opções básicas ImageQuality, CompressionQuality e Lossless do codificador são ignoradas.
- As opções Quality, Overlap, InterleavedAlpha e AlphaQuality específicas do codificador HD Photo são ignoradas.
- Se presentes, as opções HorizontalTileSlices e VerticalTileSlices precisam ser definidas como zero. O tamanho do bloco de uma imagem não pode ser alterado como parte de uma transcodificação de domínio compactado.
- Você pode alterar a organização da imagem entre frequência e ordenação espacial especificando o valor apropriado das opções FrequencyOrdering.
- Uma operação de rotação cardinal e/ou inversão horizontal/vertical pode ser executada com base no valor especificado na opção de codificador BitmapTransform.
- A imagem pode ser cortada especificando a região desejada usando o parâmetro WICRect do método codificador WriteSource.
- Os dados de imagem e/ou alfa podem ser descartados especificando os valores apropriados nas opções ImageDataDiscard e/ou AlphaDataDiscard, reduzindo o tamanho do arquivo codificado e reduzindo efetivamente a resolução da nova imagem.
O valor padrão é TRUE e recomendamos que os aplicativos e dispositivos sempre usem a ordem de frequência, a menos que você tenha motivos específicos de desempenho ou de aplicativo para usar a ordem espacial.
Opção ImageDataDiscard
Esse parâmetro será válido somente se a opção CompressedDomainTranscode for TRUE, caso contrário, ele será ignorado. ImageDataDiscard especifica a quantidade de dados de imagem a serem descartados durante uma transcodificação de domínio compactada. Se a imagem contiver um canal alfa intercalado, esse descarte de dados também se aplicará ao canal alfa, com as exceções descritas posteriormente nesta seção.
Os valores a seguir são permitidos.
Valor | Descrição |
---|---|
0 | Nenhum dado de frequência de imagem é descartado. |
1 | Os FlexBits são descartados, fazendo uma redução arbitrária da qualidade da imagem transcodificada sem alterar a resolução efetiva da imagem. A redução exata do tamanho do arquivo ou a redução de qualidade específica depende de vários fatores e não pode ser especificada nem prevista. Esse valor retornará um erro se você especificá-lo para um canal alfa intercalado. |
2 | A banda de dados de frequência HighPass é descartada (o que também inclui os FlexBits), reduzindo efetivamente a resolução da imagem transcodificada por um fator de 4 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas ela perde todos os detalhes em cada bloco de 4x4 pixels. Portanto, você deve diminuir a amostragem da imagem transcodificada de acordo sempre que você decodificá-la. |
3 | As bandas de dados de frequência HighPass e LowPass são descartadas (o que também inclui os FlexBits), reduzindo efetivamente a resolução da imagem transcodificada por um fator de 16 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas ela perde todos os detalhes em cada macrobloco de 16x16 pixels. Portanto, você deve diminuir a amostragem da imagem transcodificada de acordo sempre que você decodificá-la. |
O valor padrão é 0.
Opção AlphaDataDiscard
Essa opção é válida somente se a propriedade CompressedDomainTranscode for TRUE e a imagem contiver um canal alfa planar ou intercalado, caso contrário, ela será ignorada. Especifica a quantidade de dados de frequência alfa a serem descartados durante uma transcodificação de domínio compactada. Os valores a seguir são permitidos para um canal alfa planar.
Valor | Descrição |
---|---|
0 | Nenhum dado de frequência de imagem é descartado. |
1 | Os FlexBits são descartados, fazendo uma redução arbitrária da qualidade do canal alfa planar da imagem transcodificada sem alterar a resolução efetiva. A redução exata do tamanho do arquivo ou a redução de qualidade específica depende de vários fatores e não pode ser especificada nem prevista. |
2 | A banda de dados de frequência HighPass é descartada (o que também inclui os FlexBits), reduzindo efetivamente a resolução do canal alfa planar da imagem transcodificada por um fator de 4 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas ela perde todos os detalhes em cada bloco de 4x4 pixels. Portanto, a imagem transcodificada deve ter a própria amostragem reduzida sempre que for decodificada. Normalmente, você deve definir esse valor somente quando você define a propriedade ImageDataDiscard para o mesmo valor. |
3 | As bandas de dados de frequência HighPass e LowPass são descartadas (o que também inclui os FlexBits), reduzindo efetivamente a resolução da imagem transcodificada por um fator de 16 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas ela perde todos os detalhes em cada macrobloco de 16x16 pixels. Portanto, a imagem transcodificada deve ter a própria amostragem reduzida sempre que for decodificada. Normalmente, você deve definir esse valor somente quando você define a propriedade ImageDataDiscard para o mesmo valor. |
4 | O canal alfa é completamente descartado. O formato de pixel da imagem transcodificada é alterado para refletir a remoção do canal alfa. |
Para imagens que contêm canais alfa intercalados, a menos que essa propriedade seja definida como 4, o canal alfa é processado da mesma forma que os dados da imagem, de acordo com o valor da propriedade ImageDataDiscard. Se essa propriedade for definida como 4, o canal alfa intercalado será completamente descartado e o formato de pixel da imagem transcodificada será alterado de acordo.
Sem valor padrão.
Opção IgnoreOverlap
Essa opção será válida somente se a propriedade CompressedDomainTranscode for TRUE e uma transcodificação de subregião de exatamente um ou mais blocos for solicitada. A operação padrão para uma transcodificação (ou decodificação) de região é expandir a região solicitada para incluir os pixels ao redor que são necessários para a decodificação de sobreposição das bordas da região. Quando esse parâmetro é definido como TRUE, os pixels ao redor são ignorados e somente o bloco ou blocos selecionados são extraídos. Novamente, isso requer que a região solicitada corresponda exatamente às coordenadas de um ou mais blocos. Se a imagem de origem não estiver lado a lado ou se a região solicitada especificar blocos parciais, esse parâmetro será ignorado.
O valor padrão é FALSE.
Decodificação
A API de codificação WIC foi projetada para ser independente de codec, e a codificação de imagem para codecs habilitados para WIC é essencialmente a mesma. Para obter mais informações sobre a decodificação de imagem, consulte a Visão geral de decodificação. Para obter mais informações sobre como usar dados de imagem decodificados, consulte a Visão geral de fontes de bitmap.
Suporte a IWICBitmapSourceTransform
Além das interfaces necessárias para ser um codec habilitado para WIC, o decodificador nativo HD Photo também dá suporte ao IWICBitmapSourceTransform. A interface IWICBitmapSourceTransform fornece uma opção avançada para decodificar um fluxo de bits de imagem. Em vez de apenas retornar uma imagem completa usando IWICBitmapFrameDecode, a interface IWICBitmapSourceTransform habilita as opções de decodificador a seguir.
- Decodificar uma sub-região retangular da imagem.
- Decodificar para uma resolução mais baixa
- Decodificar para um formato de pixel diferente
- Executar uma transformação (rotação/inversão) durante a decodificação
O codec HD Photo nativo fornece o seguinte nível de suporte para a interface IWICBitmapSourceTransform.
DoesSupportTransform
A implementação nativa oferece suporte a todas as transformações WICBitmapTransformOptions.
GetClosestSize
Para solicitações que são menores que metade da dimensão da imagem de origem em ambas as dimensões, o HD Photo retorna o próximo maior tamanho de imagem inteiro que é divisível por dois. Para todos os outros tamanhos solicitados, o HD Photo retorna as dimensões originais da imagem.
GetClosestPixelFormat
O HD Photo retorna o formato de pixel da imagem codificada.
CopyPixels
O HD Photo aceita qualquer região solicitada especificada pelo parâmetro WICRect e retorna essa parte da imagem.
Os parâmetrosuiWidth e uiHeight precisam especificar dimensões conforme retornadas pela função GetClosestSize. Quaisquer outros valores retornam um erro.
O parâmetro pguidDstFormat precisa especificar o formato de pixel retornado pela função GetClosestPixelFormat. Qualquer outro valor retorna um erro.
O HD Photo aceita qualquer valor permitido para o parâmetro dstTransform. Observe que os valores permitidos pelo WIC para esse parâmetro são diferentes dos valores usados pelo HD Photo para a marca de metadados Transformation.