Efeito de transformação de afim 2D
O efeito de transformação 2D aplica uma transformação espacial a uma imagem com base 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 de Affine preservam linhas paralelas e a proporção de distâncias entre três pontos em uma imagem.
O CLSID para esse efeito é CLSID_D2D12DAffineTransform.
- de imagem de exemplo
- propriedades do efeito
- modos de borda
- modos de interpolação
- de bitmap de saída
- requisitos de
- tópicos relacionados
Imagem de exemplo
Antes |
---|
![]() |
Depois |
![]() |
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 é adicionada com 0, 0 e 1 para produzir uma matriz quadrada. Isso permite multiplicação de matriz, de modo que as transformações possam ser concatenadas em uma única matriz.
Propriedades de efeito
Nome de 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. Há seis modos de escala que variam em qualidade e velocidade. O tipo é 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, flexível ou dura. Consulte modos de borda para obter mais informações. O 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 matriz Direct2D transformação. O tipo é D2D1_MATRIX_3X2_F. O valor padrão é Matrix3x2F::Identity(). |
Agudeza 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 float entre 0 e 1. Os valores são sem unidade. Você pode usar nitidez para ajustar a qualidade de uma imagem ao dimensionar a imagem. O fator de nitidez afeta a forma do kernel. Quanto maior o fator de nitidez, menor o kernel. Observação: Essa propriedade afeta apenas o modo de interpolação cúbica de alta qualidade. O tipo é FLOAT. O valor padrão é 0,0f. |
Modos de borda
Nome | Descrição |
---|---|
D2D1_BORDER_MODE_SOFT | O efeito armazena 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 | Amostra o ponto único mais próximo e usa isso. Esse modo usa menos tempo de processamento, mas gera a imagem de menor qualidade. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Usa um exemplo 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 mais tempo de processamento, mas gera uma imagem de qualidade mais alta. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Usa 4 exemplos lineares em um único pixel para um bom anti-aliasing de borda. Esse modo é bom para reduzir verticalmente em pequenas quantidades em imagens com poucos pixels. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Usa a filtragem anisotrópica para amostrar 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 uma escala pré-down 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. |
Nota
Se você não selecionar um modo, o efeito será D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
Nota
O modo anisotropic gera mipmaps ao dimensionar, no entanto, se você definir a propriedade Cache como true nos efeitos que são inseridos nesse 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 aplicada à imagem.
O efeito executa a operação de transformação e aplica uma caixa delimitadora em torno do resultado. O bitmap de saída é o tamanho da caixa delimitadora.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Servidor mínimo com suporte | Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Cabeçalho | d2d1effects.h |
Biblioteca | d2d1.lib, dxguid.lib |