Compartilhar via


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

Antes
a imagem antes do efeito.
Após
a imagem após a transformação.
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:

operação da matriz afim

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

ID2D1Efeito