Efeito de origem do bitmap
Use o efeito de origem do bitmap para gerar uma ID2D1Image de um IWICBitmapSource para uso como uma entrada em um grafo de efeito. Esse efeito executa o dimensionamento e a rotação na CPU. Opcionalmente, ele também pode 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 do bitmap usa sua entrada como uma propriedade, não como uma entrada de imagem. Você deve usar o método SetValue , não o método SetInput . A propriedade WicBitmapSource é onde você especifica os dados de entrada da imagem.
O CLSID para esse efeito é CLSID_D2D1BitmapSource.
- Propriedades do efeito
- Modos de interpolação
- Orientation
- Modos alfa
- Comentários
- Requirements
- Tópicos relacionados
Propriedades do efeito
Nome de exibição e enumeração de índice | Descrição |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
O IWICBitmapSource que contém os dados de imagem a serem carregados. O tipo é IWICBitmapSource. O valor padrão é NULL. |
Escala D2D1_BITMAPSOURCE_PROP_SCALE |
A quantidade de escala na direção X e Y. O efeito multiplica a largura pelo valor X e a altura pelo valor Y. Essa propriedade é uma D2D1_VECTOR_2F definida como: (escala X, escala Y). As quantidades de escala são FLOAT, sem unidade e devem ser positivas ou 0. O tipo é D2D1_VECTOR_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 desabilitar 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 no 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. Confira Modos alfa para obter mais informações. O tipo é D2D1_BITMAPSOURCE_ALPHA_MODE. O valor padrão é D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED. |
Orientation D2D1_BITMAPSOURCE_PROP_ORIENTATION |
Uma operação de inversão e/ou rotação a ser executada na imagem. Consulte 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 esse efeito usa são calculados pela CPU, não pela GPU.
Nome | Descrição |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Amostra o ponto único mais próximo e usa isso. Não gera um mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | Usa um exemplo de quatro pontos e interpolação linear. Não gera um mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | Usa um kernel 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, o mesmo que a interface IWICBitmapScaler . Não gera um mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | Gera a cadeia de mipmap na memória do sistema usando a interpolação bilinear. Para cada mipmap, o efeito é dimensionado para o múltiplo mais próximo de 0,5 usando interpolação bilinear e, em seguida, dimensiona a quantidade restante usando interpolação linear. |
Orientation
A propriedade Orientation pode ser usada para aplicar um sinalizador de orientação EXIF inserido em uma imagem.
Nome | Descrição |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | Padrão. 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 | Gira a imagem no sentido horário 180 graus e a inverte horizontalmente. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | Gira a imagem no sentido horário 270 graus 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 | Gira a imagem no sentido horário 90 graus e a inverte horizontalmente. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | Gira a imagem no sentido horário 270 graus. |
Este snippet de código demonstra como converter de valores de orientação EXIF (definidos em propkey.h) em 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
Nome | Descrição |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | A saída do efeito usa alfa pré-multiplicado. |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | A saída do efeito usa alfa reto. |
Comentários
Para otimizar o desempenho ao usar o WIC e Direct2D juntos, você deve usar IWICFormatConverter para converter em um formato de pixel apropriado com base no cenário do aplicativo e na precisão nativa da imagem.
Na maioria dos casos, o pipeline de Direct2D do 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 em 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 maior que 8 bpc de precisão), deverá 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 de canal RGBA, alfa pré-multiplicado |
Como muitos formatos de imagem dão 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 hardware dá suporte a formatos de pixel de alta precisão. Nesses casos, talvez seu aplicativo precise fazer fallback para o dispositivo WARP para dar suporte à alta precisão.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Servidor mínimo com suporte | Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Cabeçalho | d2d1effects.h |
Biblioteca | d2d1.lib, dxguid.lib |