Compartilhar via


Visão geral do Codec do JPEG XR

O codec JPEG XR nativo está disponível por meio do WIC (Componente de Imagem do Windows). O formato JPEG XR, compatível com o codec, foi projetado para fotografia digital profissional e de consumidor.

O formato JPEG XR pode obter até duas vezes a eficiência de compactação do formato JPEG original, com artefatos de compactação menos perceptíveis. Os recursos do JPEG XR incluem:

  • Suporte para imagens monocromáticas, RGB, CMYK e n-channel
  • Formatos inteiros de 8, 16 e 32 bits
  • Alto intervalo dinâmico, formatos de gama larga, usando valores de cor de ponto fixo ou ponto flutuante
  • Decodificação progressiva
  • Codificação com perda ou sem perdas usando o mesmo algoritmo de compactação
  • Suporte para decodificação de regiões de interesse em imagens grandes

O formato JPEG XR é definido nos seguintes documentos padrões:

  • ITU-T T.832: Tecnologia da informação – sistema de codificação de imagem JPEG XR – Especificação de codificação de imagem
  • ISO/IEC 29199-2:2010: Tecnologia da informação — sistema de codificação de imagem JPEG XR — Parte 2: especificação de codificação de imagem

O padrão JPEG XR é em grande parte baseado no formato HD Photo , mas há algumas diferenças entre os dois formatos. No Windows 8, o codec do HD Photo foi atualizado para dar suporte ao JPEG XR. O codificador agora sempre gera um fluxo de bits compatível com JPEG XR. O decodificador pode decodificar imagens JPEG XR e HD Photo.

Melhorias substanciais de desempenho, em relação ao codec do HD Photo, foram feitas no codec XR JPEG. Por exemplo, a decodificação de imagem de sub-resolução, como a geração de miniaturas, foi aprimorada, bem como a decodificação de imagem de baixa resolução. É recomendável que você use o formato JPEG XR em vez do formato HD Photo.

Informações do Codec

Componente Descrição
Extensão de nome de arquivo "jxr" e "wdp"
GUID do contêiner GUID_ContainerFormatWmp
GUID do decodificador CLSID_WICWmpDecoder
GUID do codificador CLSID_WICWmpEncoder
Suporte a perfil O codificador e o decodificador dão suporte até o Perfil Principal e até o nível 128.

 

Recursos do Codec

Alto Intervalo Dinâmico

O JPEG XR dá suporte a imagens de alto intervalo dinâmico, usando cores de ponto flutuante ou ponto fixo. Nesses formatos de cor, o intervalo numérico de um pixel é maior que o intervalo visível, portanto, você pode ajustar as cores acima ou abaixo do intervalo visível durante estágios de processamento intermediários.

  • Ponto fixo: em uma representação de ponto fixo, 0 representa preto e 1,0 representa saturação máxima. O codec JPEG XR dá suporte a formatos de ponto fixo de 16 e 32 bits. Para 16 bits, 1,0 = 0x2000h, que fornece 13 bits para o intervalo visível [0...1]. O intervalo total é de –4,0 a +3,999 e é mapeado linearmente. Para 32 bits, 1,0 = 0x01000000h, o intervalo visível é de 24 bits e o intervalo total é de –128 a +127,999.
  • Ponto flutuante: em uma representação de ponto flutuante, 0 representa preto e 1,0 representa saturação máxima. O codec JPEG XR dá suporte a formatos de ponto flutuante de 16 e 32 bits.

Blocos

Um quadro pode ser particionado em sub-regiões retangulares chamadas blocos. Um bloco é uma área de uma imagem que contém matrizes retangulares de macroblocks. Os blocos permitem que as regiões da imagem sejam decodificadas sem processar a imagem inteira.

Durante a codificação, selecione o número de blocos definindo as propriedades HorizontalTileSlices e VerticalTileSlices . O tamanho mínimo do bloco é de 16 × 16 pixels. O codificador ajusta o número de blocos para manter essa restrição. Há sobrecarga de armazenamento e processamento associada a cada bloco, portanto, você deve considerar o número de blocos necessários para cenários específicos.

Saída do fluxo de imagem

O padrão JPEG-XR define duas partes de um arquivo JPEG-XR:

  • O fluxo de bits de imagem, definido no corpo do padrão.
  • O contêiner de imagem. O arquivo contém metadados Exif e XMP e é definido no Anexo A do padrão.

É possível, e permitido pelo padrão, inserir o fluxo de imagem dentro de outro tipo de contêiner de arquivo. O codificador dá suporte a um modo somente de fluxo, que gera o fluxo de bits de imagem bruta sem nenhum contêiner de imagem. Um aplicativo pode armazenar o fluxo de bits em algum outro formato de contêiner.

Para habilitar o modo somente fluxo, defina a propriedade StreamOnly .

Configurações de qualidade da imagem

Várias propriedades codec controlam a qualidade da imagem de saída do codificador.

  • ImageQuality é uma propriedade comum entre codecs WIC. Ele especifica a qualidade da imagem como um único valor de ponto flutuante de 0,0 a 1,0,
  • As propriedades Quality, Overlap e Subsampling dão mais controle sobre as configurações de qualidade.

Para usar as propriedades Quality, Overlap e Subsampling , defina a propriedade UseCodecOptions como VARIANT_TRUE.

Se UseCodecOptions for VARIANT_FALSE (VARIANT_FALSE é o padrão), o codificador usará a propriedade ImageQuality . O codificador mapeia o valor de ImageQuality para Qualidade, Sobreposição e Subsampling por meio de uma tabela de pesquisa.

O codificador não dá suporte à propriedade CompressionQuality .

Transcódigo de domínio compactado

O codec JPEG XR pode executar determinadas transformações de imagem sem realmente decodificar os dados compactados e recodificar. As operações de domínio compactadas são muito eficientes e evitam qualquer perda de qualidade adicional que seja típica quando você decodifica e recodifica uma imagem compactada com perda.

Há suporte para as seguintes operações de domínio compactadas:

  • Cortar uma região da imagem.
  • Gire ou inverta a imagem.
  • Descartar dados de frequência para criar um arquivo de imagem menor.
  • Reorganizar a imagem entre a ordem espacial e de frequência.

O codificador JPEG XR usa transcodificação de domínio compactada, se possível, quando a imagem de origem é uma imagem XR JPEG. Quando o codificador executa uma operação de domínio compactado, ele ignora as seguintes propriedades de codec: AlphaQuality, ImageQuality, InterleavedAlpha, LosslessOverlap e Quality. Se as propriedades HorizontalTileSlices e VerticalTileSlices estiverem presentes, você deverá defini-las como zero. Você não pode alterar o tamanho do bloco de uma imagem como parte de um transcódigo de domínio compactado.

A lista a seguir descreve como executar as transformações de imagem.

  • Para cortar a imagem, defina a região desejada no parâmetro WICRect do método WriteSource .
  • Para girar ou inverter a imagem, defina a propriedade BitmapTransform .
  • Para descartar dados de frequência na imagem, defina a propriedade ImageDataDiscard . Para descartar dados de frequência no canal alfa, defina a propriedade AlphaDataDiscard . Descartar dados de frequência reduz o tamanho do arquivo codificado e pode reduzir a resolução.
  • Para alterar a organização da imagem entre a frequência e a ordenação espacial, defina a propriedade FrequencyOrdering .

Para desabilitar o transcódigo de domínio compactado e forçar o codificador a recodificar a imagem, defina UseCodecOptions como VARIANT_TRUE e defina CompressedDomainTranscode como VARIANT_FALSE.

Opções do codificador

Para definir propriedades de codificação, use a interface IPropertyBag2 . Para obter mais informações, consulte a Visão geral da codificação.

A lista a seguir especifica as opções do codificador.

AlphaDataDiscard

Define a quantidade de dados de frequência alfa a serem descartados durante um transcódigo de domínio compactado.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 0-4 Nenhum

 

Essa propriedade só se aplicará se a propriedade CompressedDomainTranscode estiver definida como VARIANT_TRUE e a imagem contiver um canal alfa planar ou um canal alfa intercalado; caso contrário, ele será ignorado.

Para imagens que contêm um canal alfa planar, os valores a seguir são válidos.

Valor Descrição
0 Nenhum dado de frequência de imagem é descartado.
1 Os flexbits são descartados. Isso reduz arbitrariamente a qualidade do canal alfa planar para a imagem transcodificada. , sem uma alteração na resolução efetiva. A redução exata do tamanho e da qualidade do arquivo depende de vários fatores e não pode ser especificada exatamente.
2 A faixa de dados de frequência de passagem alta é descartada, incluindo os flexbits. Isso reduz efetivamente a resolução do canal alfa planar em um fator de 4 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas a imagem perde todos os detalhes em cada bloco 4x4 de pixels de canal alfa. Normalmente, você deve definir esse valor somente quando a propriedade ImageDataDiscard tiver o mesmo valor.
3 As faixas de dados de frequência de passagem alta e baixa são descartadas, incluindo os flexbits. Isso reduz ffetivamente a resolução do canal alfa planar em um fator de 16 em ambas as dimensões. As dimensões reais da imagem transcodificada permanecem as mesmas, mas a imagem perde todos os detalhes em cada macroblock 16x16 de pixels de canal alfa. Normalmente, você deve definir esse valor somente quando a propriedade ImageDataDiscard tiver 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 um canal alfa intercalado, o valor a seguir é válido.

Valor Descrição
4 O canal alfa é completamente descartado. O formato de pixel da imagem transcodificada é alterado para refletir a remoção do canal alfa.

 

Para alfa intercalado, 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 .

AlphaQuality

Define a qualidade da compactação para a imagem do canal alfa planar.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 1–255 1

 

Essa propriedade se aplica quando a imagem tem um canal alfa e a propriedade InterleavedAlpha é VARIANT_FALSE. O valor 1 indica o modo sem perdas. O aumento dos valores resulta em taxas de compactação mais altas e menor qualidade de imagem.

BitmapTransform

Especifica se a imagem é girada ou invertida quando decodificada.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

 

Compresseddomaintranscode

Habilita ou desabilita a transcodificação de domínio compactado.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

Para desabilitar operações de domínio compactadas, defina essa propriedade como VARIANT_FALSE.

FrequencyOrder

Habilita a codificação na ordem de frequência. As implementações de dispositivo de codificadores JPEG XR podem organizar um arquivo em ordem espacial para reduzir a memória necessária durante a codificação.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

  • VARIANT_TRUE: ordem de frequência. Os dados de menor frequência aparecem primeiro no arquivo, e o conteúdo da imagem é agrupado por sua frequência 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.
  • VARIANT_FALSE: ordem espacial. A ordem espacial reduz a memória necessária durante a codificação

A ordem de frequência é recomendada, a menos que você tenha motivos específicos de desempenho ou de aplicativo para usar a ordem espacial.

HorizontalTileSlices

Define o número de blocos horizontais.

Tipo de dados VARTYPE Intervalo Padrão
USHORT VT_UI2 0–4095 (largura da imagem – 1) >> 8

 

O valor é o número de subdivisões horizontais; ou seja, o número de blocos horizontais – 1.

IgnoreOverlap

Especifica como o codificador lida com limites de bloco durante uma transcodificação de domínio compactada.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Essa propriedade será aplicada somente se a propriedade CompressedDomainTranscode estiver definida como VARIANT_TRUE e um transcodificado de sub-região de exatamente um ou mais blocos for executado.

A operação padrão para um transcódigo de região é expandir a região solicitada para incluir os pixels ao redor necessários para a decodificação sobreposta das bordas da região. Se essa propriedade estiver definida como VARIANT_TRUE, o codec ignorará os pixels ao redor e somente o bloco ou bloco selecionado será extraído. Se a imagem de origem não estiver em bloco ou se a região solicitada incluir blocos parciais, esse parâmetro será ignorado.

ImageDataDiscard

Define a quantidade de dados de frequência de imagem a serem descartados durante um transcódigo de domínio compactado.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 0–3 0

 

Essa propriedade só se aplicará se a propriedade CompressedDomainTranscode estiver definida como VARIANT_TRUE; caso contrário, ele será ignorado.

Valor Descrição
0 Nenhum dado de frequência de imagem é descartado.
1 Os flexbits são descartados. Isso reduz arbitrariamente a qualidade da imagem transcodificada sem alterar a resolução efetiva da imagem. A redução exata do tamanho e da qualidade do arquivo depende de vários fatores e não pode ser exatamente especificada. Esse valor retorna um erro especificado para um canal alfa intercalado.
2 A faixa de dados de frequência de alta passagem é descartada, incluindo os flexbits. Isso reduz 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 a imagem perde todos os detalhes em cada bloco de pixels 4x4. Portanto, a imagem transcodificada deve ser downsampled adequadamente sempre que for decodificada.
3 As faixas de dados de frequência de passagem alta e baixa são descartadas, incluindo os flexbits. Isso reduz 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 a imagem perde todos os detalhes em cada macroblock 16x16 de pixels. Portanto, a imagem transcodificada deve ser downsampled adequadamente sempre que for decodificada.

 

Se a imagem contiver um canal alfa intercalado, o valor de ImageDataDiscard será aplicado ao canal alfa, a menos que a propriedade AlphaDataDiscard seja definida como 4, nesse caso, o canal alfa será descartado.

Para o alfa planar, os dados de frequência descartados são controlados pela propriedade AlphaDataDiscard .

ImageQuality

Define a qualidade da imagem.

Tipo de dados VARTYPE Intervalo Padrão
FLOAT VT_R4 0–1.0 0,9

 

O nível 1.0 oferece compactação matematicamente sem perdas.

O nível 0.0 é a configuração de menor qualidade.

InterleavedAlpha

Especifica se é necessário codificar alfa intercalado ou alfa planar.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

  • VARIANT_TRUE: alfa intercalado. As informações do canal alfa são codificadas como um canal intercalado adicional, sem correlação com os canais de conteúdo da imagem. Esse modo é útil para decodificar alfa simultaneamente com a imagem quando a imagem está sendo transmitida.
  • VARIANT_FALSE: Planar alfa. Um canal alfa planar é codificado como uma imagem separada. Os dados da imagem e o canal alfa são decodificados independentemente. Opcionalmente, você pode definir o nível de qualidade do canal alfa definindo a propriedade AlphaQuality .

O alfa intercalado tem suporte apenas para determinados formatos de pixel RGB. Há suporte para o Planar Alpha em qualquer formato de imagem que defina um canal alfa.

Lossless

Habilita a compactação de perdas.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Se o valor for VARIANT_TRUE, o codificador usará compactação sem perda. Quando definida como VARIANT_TRUE, essa propriedade substitui a propriedade ImageQuality .

Sobreposição

Define o nível de filtragem de sobreposição. Com a filtragem de sobreposição, os coeficientes de transformação são aplicados entre limites de bloco e de macrobloco. Isso pode reduzir os artefatos de bloqueio.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 0-4 1

 

Valor Descrição
0 Sem sobreposição.
1 Um nível de sobreposição, lado a lado macio. (Padrão.)
2 Dois níveis de sobreposição, lado a lado macio.
3 Um nível de sobreposição, lado a lado rígido
4 Dois níveis de sobreposição, lado a lado.

 

Definições:

  • Um nível de sobreposição: os valores codificados de blocos 4x4 são modificados com base em blocos vizinhos.
  • Dois níveis de sobreposição: o primeiro nível de sobreposição é aplicado. Além disso, os valores codificados de macroblocks 16x16 são modificados com base nos macroblocks vizinhos.
  • Lado a lado suave: a filtragem sobreposta é aplicada entre limites de bloco.
  • Blocos rígidos: a filtragem de sobreposição não é aplicada entre limites de bloco. Os blocos rígidos podem introduzir alguns artefatos visuais ao longo dos limites do bloco.

Se você definir essa propriedade, também defina UseCodecOptions como VARIANT_TRUE.

ProgressiveMode

Habilita ou desabilita a codificação progressiva.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Valor Descrição
VARIANT_TRUE Modo sequencial (padrão).
VARIANT_FALSE Modo progressivo.

 

Qualidade

Define a qualidade da compactação.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 1–255 1

 

O valor 1 indica o modo sem perdas. O aumento dos valores resulta em taxas de compactação mais altas e menor qualidade de imagem.

Se você definir essa propriedade, também defina UseCodecOptions como VARIANT_TRUE.

StreamOnly

Habilita ou desabilita o modo somente fluxo.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Valor Descrição
VARIANT_TRUE O codificador gera o fluxo de imagem bruta sem metadados.
VARIANT_FALSE O codificador gera o formato de contêiner (fluxo de imagem mais metadados).

 

Subamostragem

Define a subamostragem chroma. Essa propriedade se aplica somente a imagens RGB.

Tipo de dados VARTYPE Intervalo Padrão
UCHAR VT_UI1 0–3 3 se ImageQuality> 0.8; caso contrário, 1

 

Valor Descrição
3 Codificação 4:4:4. Preserva a resolução completa do croma.
2 Codificação 4:2:2. A resolução de croma é 1/2 de resolução de luminância.
1 Codificação 4:2:0. A resolução de croma é 1/4 de resolução de luminância.
0 Codificação 4:0:0. Descarta todos os valores de croma e preserva apenas a luminância. Nota: Esse modo não é recomendado, pois o codec usa uma definição ligeiramente modificada de luminância para melhorar o desempenho. Em vez disso, é melhor converter a imagem em monocromática antes da codificação.

 

4:2:2 e 4:2:0 preservam detalhes de luminância em detrimento dos detalhes de cor.

Se você definir essa propriedade, também defina UseCodecOptions como VARIANT_TRUE.

UseCodecOptions

Especifica se as propriedades Quality, Overlap e Subsampling devem ser usadas em vez da propriedade ImageQuality genérica.

Tipo de dados VARTYPE Padrão
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

VerticalTileSlices

Define o número de blocos horizontais.

Tipo de dados VARTYPE Intervalo Padrão
USHORT VT_UI2 0–4095 (altura da imagem – 1) >> 8

 

O valor é o número de subdivisões verticais; ou seja, o número de blocos verticais – 1.

Formatos de cor com suporte

Para obter mais informações sobre esses formatos, consulte Formatos de pixel nativo.

  • Formatos RGB inteiros
    • GUID_WICPixelFormat24bppRGB
    • GUID_WICPixelFormat24bppBGR
    • GUID_WICPixelFormat32bppBGR
    • GUID_WICPixelFormat48bppRGB
    • GUID_WICPixelFormat32bppBGRA
    • GUID_WICPixelFormat64bppRGBA
    • GUID_WICPixelFormat32bppPBGRA
    • GUID_WICPixelFormat64bppPRGBA
  • Formatos RGB de ponto fixo
    • GUID_WICPixelFormat48bppRGBFixedPoint
    • GUID_WICPixelFormat64bppRGBFixedPoint
    • GUID_WICPixelFormat96bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBAFixedPoint
  • Formatos RGB de ponto flutuante
    • GUID_WICPixelFormat48bppRGBHalf
    • GUID_WICPixelFormat64bppRGBHalf
    • GUID_WICPixelFormat128bppRGBFloat
    • GUID_WICPixelFormat64bppRGBAFixedPoint
    • GUID_WICPixelFormat64bppRGBAHalf
    • GUID_WICPixelFormat128bppRGBAFloat
    • GUID_WICPixelFormat128bppPRGBAFloat
  • Formatos de escala de cinza
    • GUID_WICPixelFormat8bppGray
    • GUID_WICPixelFormat16bppGray
    • GUID_WICPixelFormat16bppGrayFixedPoint
    • GUID_WICPixelFormat16bppGrayHalf
    • GUID_WICPixelFormat32bppGrayFixedPoint
    • GUID_WICPixelFormat32bppGrayFloat
  • Formatos empacotados
    • GUID_WICPixelFormat16bppBGR555
    • GUID_WICPixelFormat16bppBGR565
    • GUID_WICPixelFormat32bppBGR101010
    • GUID_WICPixelFormat32bppRGBE
  • Formatos CMYK
    • GUID_WICPixelFormat40bppCMYKAlpha
    • GUID_WICPixelFormat64bppCMYK
    • GUID_WICPixelFormat80bppCMYKAlpha
  • Formatos de N canais
    • GUID_WICPixelFormat32bpp4Channels
    • GUID_WICPixelFormat40bpp5Channels
    • GUID_WICPixelFormat48bpp6Channels
    • GUID_WICPixelFormat56bpp7Channels
    • GUID_WICPixelFormat64bpp8Channels
    • GUID_WICPixelFormat32bpp3ChannelsAlpha
    • GUID_WICPixelFormat40bpp4ChannelsAlpha
    • GUID_WICPixelFormat48bpp5ChannelsAlpha
    • GUID_WICPixelFormat56bpp6ChannelsAlpha
    • GUID_WICPixelFormat64bpp7ChannelsAlpha
    • GUID_WICPixelFormat72bpp8ChannelsAlpha
    • GUID_WICPixelFormat48bpp3Channels
    • GUID_WICPixelFormat64bpp4Channels
    • GUID_WICPixelFormat80bpp5Channels
    • GUID_WICPixelFormat96bpp6Channels
    • GUID_WICPixelFormat128bpp8Channels
    • GUID_WICPixelFormat64bpp3ChannelsAlpha
    • GUID_WICPixelFormat80bpp4ChannelsAlpha
    • GUID_WICPixelFormat96bpp5ChannelsAlpha
    • GUID_WICPixelFormat112bpp6ChannelsAlpha
    • GUID_WICPixelFormat128bpp7ChannelsAlpha
    • GUID_WICPixelFormat144bpp8ChannelsAlpha