Efeito de transformação afim 2D
O efeito de transformação afim 2D aplica uma transformação espacial a uma imagem baseada em uma matriz 3X2 usando a transformação de matriz Direct2D e qualquer um dos seis modos de interpolação. Você pode usar esse efeito para girar, dimensionar, inclinar ou traduzir uma imagem. Ou, você pode combinar essas operações. As transferências afins preservam as linhas paralelas e a razão de distâncias entre quaisquer três pontos em uma imagem.
O CLSID para esse efeito é CLSID_D2D12DAffineTransform.
- Imagem de exemplo
- Propriedades do efeito
- Modos de borda
- Modos de interpolação
- Bitmap de saída
- Requisitos
- Tópicos relacionados
Imagem de exemplo
Antes |
---|
Após |
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
affineTransformEffect->SetInput(0, bitmap);
D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f, 0.1f, 0.9f, 8.0f, 45.0f);
affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();
Esse efeito executa esta operação de matriz:
Embora a matriz de entrada seja definida como uma matriz 3x2, a última coluna é preenchida com 0, 0 e 1 para produzir uma matriz quadrada. Isso permite a multiplicação da matriz, de modo que as transformações possam ser concatenadas em uma única matriz.
Propriedades do efeito
Nome para exibição e enumeração de índice | Descrição |
---|---|
InterpolationMode D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE |
O modo de interpolação usado para dimensionar a imagem. Existem 6 modos de escala que variam em qualidade e velocidade. Tipo é D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. O valor padrão é D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
Modo Border: D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE |
O modo usado para calcular a borda da imagem, suave ou dura. Consulte Modos de borda para obter mais informações. Tipo é D2D1_BORDER_MODE. O valor padrão é D2D1_BORDER_MODE_SOFT. |
TransformMatrix D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX |
A matriz 3x2 para transformar a imagem usando a transformação de matriz Direct2D. Tipo é D2D1_MATRIX_3X2_F. O valor padrão é Matrix3x2F::Identity(). |
Nitidez D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS |
No modo de interpolação cúbica de alta qualidade, o nível de nitidez do filtro de dimensionamento como um flutuador entre 0 e 1. Os valores não têm unidade. Você pode usar a nitidez para ajustar a qualidade de uma imagem ao dimensioná-la. O fator de nitidez afeta a forma do núcleo. Quanto maior o fator de nitidez, menor o núcleo. Nota: Esta propriedade afeta apenas o modo de interpolação cúbica de alta qualidade. Tipo é FLOAT. O valor padrão é 0,0f. |
Modos de borda
Nome | Descrição |
---|---|
D2D1_BORDER_MODE_SOFT | O efeito preenche a imagem com pixels pretos transparentes à medida que ela se interpola, resultando em uma borda suave. |
D2D1_BORDER_MODE_HARD | O efeito prende a saída ao tamanho da imagem de entrada. |
Modos de interpolação
Enumeração | Descrição |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Mostra o ponto único mais próximo e usa-o. Esse modo usa menos tempo de processamento, mas produz a imagem de menor qualidade. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Usa uma amostra de quatro pontos e interpolação linear. Esse modo usa mais tempo de processamento do que o modo vizinho mais próximo, mas gera uma imagem de qualidade mais alta. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC | Usa um kernel cúbico de 16 amostras para interpolação. Esse modo usa a maior parte do tempo de processamento, mas gera uma imagem de maior qualidade. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Usa 4 amostras lineares em um único pixel para uma boa suavização de borda da borda. Esse modo é bom para reduzir em pequenas quantidades em imagens com poucos pixels. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Usa filtragem anisotrópica para obter amostras de um padrão de acordo com a forma transformada do bitmap. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC | Usa um kernel cúbico de alta qualidade de tamanho variável para executar um pré-downscale da imagem se o downscaling estiver envolvido na matriz de transformação. Em seguida, usa o modo de interpolação cúbica para a saída final. |
Observação
Se você não selecionar um modo, o efeito será D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR padrão.
Observação
O modo anisotrópico gera mipmaps durante o dimensionamento, no entanto, se você definir a propriedade Cached como true nos efeitos que são inseridos para esse efeito, os mipmaps não serão gerados todas as vezes para imagens suficientemente pequenas.
Bitmap de saída
O tamanho do bitmap de saída depende da matriz de transformação aplicada à imagem.
O efeito executa a operação de transformação e, em seguida, aplica uma caixa delimitadora ao redor do resultado. O bitmap de saída é o tamanho da caixa delimitadora.
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 com suporte mínimo | 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 |