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 matriz Direct2D transformar e qualquer um dos seis modos de interpolação. Você pode usar esse efeito para girar, dimensionar, distorcer ou traduzir uma imagem. Ou, você pode combinar essas operações. As transferências afins preservam as linhas paralelas e a relação de distâncias entre quaisquer três pontos de uma imagem.
O CLSID para este efeito é CLSID_D2D12DAffineTransform.
- Imagem de exemplo
- Propriedades de 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();
Este 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 matricial, 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 |
---|---|
InterpolaçãoModo de Interpolação 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. Type é D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. O valor padrão é D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE |
O modo usado para calcular a borda da imagem, suave ou hard. Consulte Modos de borda para obter mais informações. Type é 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 matriz Direct2D transformar. Type é 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 escala como flutuador entre 0 e 1. Os valores são unitários. Você pode usar a nitidez para ajustar a qualidade de uma imagem ao dimensioná-la. O fator de nitidez afeta a forma do kernel. Quanto maior o fator de nitidez, menor o kernel. 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
Designação | Descrição |
---|---|
D2D1_BORDER_MODE_SOFT | O efeito preenche a imagem com pixels pretos transparentes à medida que interpola, resultando em uma borda suave. |
D2D1_BORDER_MODE_HARD | O efeito fixa a saída ao tamanho da imagem de entrada. |
Modos de interpolação
Enumeração | Descrição |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Recolhe amostras do ponto único mais próximo e utiliza-o. Este modo usa menos tempo de processamento, mas produz a imagem de menor qualidade. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Utiliza uma amostra de quatro pontos e interpolação linear. Este modo utiliza mais tempo de processamento do que o modo vizinho mais próximo, mas produz uma imagem de qualidade superior. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC | Usa um núcleo cúbico de 16 amostras para interpolação. Este modo utiliza a maior parte do tempo de processamento, mas produz uma imagem de qualidade superior. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Usa 4 amostras lineares dentro de um único pixel para uma boa suavização de borda. Este 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 padrão será D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
Observação
O modo anisotrópico gera mipmaps ao dimensionar, 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 sempre para imagens suficientemente pequenas.
Bitmap de saída
O tamanho do bitmap de saída depende da matriz de transformação que é aplicada à imagem.
O efeito executa a operação de transformação e, em seguida, aplica uma caixa delimitadora em torno do resultado. O bitmap de saída é o tamanho da caixa delimitadora.
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 |