Partilhar 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 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

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();

Este 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 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

ID2D1Effect