Partilhar via


Efeito de origem de bitmap

Use o efeito de origem de bitmap para gerar umID2D1Imagede umIWICBitmapSource depara uso como entrada em um gráfico de efeitos. Este efeito executa o dimensionamento e a rotação na CPU. Ele também pode opcionalmente gerar um mipmap de memória do sistema, que pode ser uma otimização de desempenho para dimensionar ativamente imagens muito grandes em várias resoluções reduzidas.

Observação

O efeito de origem de bitmap usa sua entrada como uma propriedade, não como uma entrada de imagem. Você deve usar o SetValue método, não o SetInput método. A propriedade WicBitmapSource é onde você especifica os dados de entrada da imagem.

O CLSID para este efeito é CLSID_D2D1BitmapSource.

Propriedades do efeito

Nome para exibição e enumeração de índice Descrição
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
O IWICBitmapSource contendo os dados de imagem a serem carregados.
O tipo é IWICBitmapSource.
O valor padrão é NULL.
Escala
D2D1_BITMAPSOURCE_PROP_SCALE
A quantidade da escala na direção X e Y. O efeito multiplica a largura pelo valor X e a altura pelo valor Y. Esta propriedade é um D2D1_VETOR_2F definido como: (escala X, escala Y). Os valores da escala são FLOAT, sem unidade, e devem ser positivos ou 0.
O tipo é D2D1_VETOR_2F.
O valor padrão é {1.0f, 1.0f}.
InterpolationMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
O modo de interpolação usado para dimensionar a imagem. Consulte modos de interpolação para obter mais informações.
Se o modo desativar o mipmap, o BitmapSouce armazenará em cache a imagem na resolução determinada pelas propriedades Scale e EnableDPICorrection .
O tipo é D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
O valor padrão é D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Se você definir isso como TRUE, o efeito dimensionará a imagem de entrada para converter o DPI relatado por IWICBitmapSource para o DPI do contexto do dispositivo. O efeito usa o modo de interpolação definido com a propriedade InterpolationMode. Se você definir isso como FALSE, o efeito usará um DPI de 96.0 para a imagem de saída.
O tipo é BOOL.
O valor padrão é FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
O modo alfa da saída. Isso pode ser pré-multiplicado ou reto. Consulte modos Alpha para obter mais informações.
O tipo é D2D1_BITMAPSOURCE_ALPHA_MODE.
O valor padrão é D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Orientação
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Uma operação de inversão e/ou rotação a ser executada na imagem. Consulte de Orientação para obter mais informações.
O tipo é D2D1_BITMAPSOURCE_ORIENTATION.
O valor padrão é D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Modos de interpolação

O efeito interpola usando esse modo quando dimensiona uma imagem ou quando corrige o DPI. Os modos de interpolação que este efeito usa são calculados pela CPU, não pela GPU.

Designação Descrição
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Recolhe amostras do ponto único mais próximo e utiliza-o. Não gera um mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Utiliza uma amostra de quatro pontos e interpolação linear. Não gera um mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Usa um núcleo cúbico de 16 amostras para interpolação. Não gera um mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Usa a interpolação de fant WIC, a mesma que a interfaceIWICBitmapScaler. Não gera um mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Gera cadeia mipmap na memória do sistema usando interpolação bilinear. Para cada mipmap, o efeito escala para o múltiplo mais próximo de 0,5 usando interpolação bilinear e, em seguida, escala a quantidade restante usando interpolação linear.

Orientação

A propriedade Orientation pode ser usada para aplicar um sinalizador de orientação EXIF incorporado em uma imagem.

Designação Descrição
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Inadimplência. O efeito não altera a orientação da entrada.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Inverte a imagem horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Gira a imagem no sentido horário 180 graus.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Roda a imagem 180 graus no sentido horário e inverte-a horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Gira a imagem 270 graus no sentido horário e a inverte horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Gira a imagem no sentido horário 90 graus.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Roda a imagem 90 graus no sentido horário e inverte-a horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Gira a imagem no sentido horário 270 graus.

Este trecho de código demonstra como converter de valores de orientação EXIF (definidos em propkey.h) para valores D2D1_BITMAPSOURCE_ORIENTATION.

#include <propkey.h>
#include <d2d1effects.h>

D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
       switch (PhotoOrientation)
       {
       case PHOTO_ORIENTATION_NORMAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       case PHOTO_ORIENTATION_FLIPHORIZONTAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE180:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
       case PHOTO_ORIENTATION_FLIPVERTICAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_TRANSPOSE: 
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE270:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
       case PHOTO_ORIENTATION_TRANSVERSE:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE90:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
       default:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       }
}

Modos alfa

Designação Descrição
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED A saída de efeito usa alfa pré-multiplicado.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT A saída de efeito usa alfa reto.

Comentários

Para otimizar o desempenho ao usar WIC e Direct2D juntos, você deve usar IWICFormatConverter para converter para um formato de pixel apropriado com base no cenário do seu aplicativo e na precisão nativa da imagem.

Na maioria dos casos, o pipeline de Direct2D do seu aplicativo requer apenas 8 bits por canal (bpc) de precisão, ou a imagem fornece apenas 8 bpc de precisão e, portanto, você deve converter para GUID_WICPixelFormat32bppPBGRA. No entanto, se você quiser aproveitar a precisão extra fornecida por uma imagem (por exemplo, um JPEG-XR ou TIFF armazenado com precisão superior a 8 bpc), você deve usar um formato de pixel baseado em RGBA. A tabela abaixo fornece mais detalhes.

Precisão desejada Precisão nativa da imagem Formato de pixel recomendado
8 bits por canal <= 8 bits por canal GUID_WICPixelFormat32bppPBGRA
O mais alto possível <= 8 bits por canal GUID_WICPixelFormat32bppPBGRA
O mais alto possível > 8 bits por canal Ordem do canal RGBA, alfa pré-multiplicado

Como muitos formatos de imagem oferecem suporte a vários níveis de precisão, você deve usar IWICBitmapSource::GetPixelFormat para obter o formato de pixel nativo da imagem e, em seguida, usar IWICPixelFormatInfo para determinar quantos bits por canal de precisão estão disponíveis para esse formato. Além disso, observe que nem todo o hardware suporta formatos de pixel de alta precisão. Nesses casos, seu aplicativo pode precisar recorrer ao dispositivo WARP para oferecer suporte a alta precisão.

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect