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
- AlphaQuality
- BitmapTransform
- Compresseddomaintranscode
- FrequencyOrder
- HorizontalTileSlices
- IgnoreOverlap
- ImageDataDiscard
- ImageQuality
- InterleavedAlpha
- Lossless
- Sobreposição
- ProgressiveMode
- Qualidade
- StreamOnly
- Subamostragem
- UseCodecOptions
- VerticalTileSlices
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