Compartilhar via


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.

Imagem de exemplo

Antes
a imagem antes do efeito.
Depois
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 de matriz de afim

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

ID2D1Effect