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 de efeito
- Modos de interpolação
- de Orientação
- modos Alpha
- Observações
- Requisitos
- Tópicos relacionados
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.
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 |