Compartilhar via


Efeito de escala

Use esse efeito para escalar ou reduzir verticalmente uma imagem. O efeito tem seis modos de dimensionamento: vizinho mais próximo, linear, cúbico, linear de várias amostras, anisotrópico e cúbico de alta qualidade.

O CLSID para esse efeito é CLSID_D2D1Scale.

Imagem de exemplo

Este exemplo mostra o efeito de escala ampliando 2 vezes a entrada e cortando para o tamanho original.

Antes
a imagem antes do efeito.
After (após)
a imagem após a transformação.
ComPtr<ID2D1Effect> scaleEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Scale, &scaleEffect);

scaleEffect->SetInput(0, bitmap);

scaleEffect->SetValue(D2D1_SCALE_PROP_CENTER_POINT, D2D1::Vector2F(256.0f, 192.0f));
scaleEffect->SetValue(D2D1_SCALE_PROP_SCALE, D2D1::Vector2F(2.0f, 2.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(scaleEffect.Get());
m_d2dContext->EndDraw();

Propriedades do efeito

Nome de exibição e enumeração de índice Descrição
Escala
D2D1_SCALE_PROP_SCALE
A quantidade de escala na direção X e Y como uma proporção do tamanho da saída para o tamanho da entrada. Essa propriedade D2D1_VECTOR_2Fdefined como: (escala X, escala Y). As quantidades de escala são FLOAT, sem unidade e devem ser positivas ou 0.
O tipo é D2D1_VECTOR_2F.
O valor padrão é {1.0f, 1.0f}.
CenterPoint
D2D1_SCALE_PROP_CENTER_POINT
O ponto central de dimensionamento de imagens. Essa propriedade é uma D2D1_VECTOR_2F definida como: (ponto X, ponto Y). As unidades estão em DIPs.
Use a propriedade do ponto central para dimensionar em torno de um ponto diferente do canto superior esquerdo.
O tipo é D2D1_VECTOR_2F.
O valor padrão é {0.0f, 0.0f}.
BorderMode
D2D1_SCALE_PROP_BORDER_MODE
O modo usado para calcular a borda da imagem, suave ou dura. Confira Modos de borda para obter mais informações.
O tipo é D2D1_BORDER_MODE.
O valor padrão é D2D1_BORDER_MODE_SOFT.
Nitidez
D2D1_SCALE_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 unitários. Você pode usar nitidez para ajustar a qualidade de uma imagem ao reduzir a imagem.
O fator de nitidez afeta a forma do kernel. Quanto maior o fator de nitidez, menor será o kernel.
Nota: Essa propriedade afeta apenas o modo de interpolação cúbica de alta qualidade.
O tipo é FLOAT.
O valor padrão é 0,0f.
Interpolationmode
D2D1_SCALE_PROP_INTERPOLATION_MODE
O modo de interpolação que o efeito usa para dimensionar a imagem. Há seis modos de escala que variam em qualidade e velocidade. Consulte Modos de interpolação para obter mais informações.
O tipo é D2D1_SCALE_INTERPOLATION_MODE.
O valor padrão é D2D1_SCALE_INTERPOLATION_MODE_LINEAR.

Modos de borda

Nome Descrição
D2D1_BORDER_MODE_SOFT O efeito preenche a imagem de entrada com pixels pretos transparentes para amostras fora dos limites de entrada quando aplica o kernel de convolução. Isso cria uma borda flexível para a imagem e, no processo, expande o bitmap de saída pelo tamanho do kernel.
D2D1_BORDER_MODE_HARD O efeito estende a imagem de entrada com uma transformação de borda do tipo espelho para amostras fora dos limites de entrada. O tamanho do bitmap de saída é igual ao tamanho do bitmap de entrada.

`

Modos de interpolação

Enumeração Descrição
D2D1_SCALE_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_SCALE_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 maior qualidade.
D2D1_SCALE_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 maior qualidade.
D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 amostras 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_SCALE_INTERPOLATION_MODE_ANISOTROPIC Usa a filtragem anisotrópica para amostrar um padrão de acordo com a forma transformada do bitmap.
D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Usa um kernel cúbico de alta qualidade de tamanho variável para executar uma pré-redução 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 usará como padrão D2D1_SCALE_INTERPOLATION_MODE_LINEAR.

Observação

No entanto, 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 local e o tamanho do bitmap de saída dependem do fator de escala especificado e do ponto central.

Você pode calcular o tamanho do bitmap de saída usando esta equação:

BitmapSizex(Pixels)=Scalex*Original Bitmap Sizex (DIPs)*(UserDPI/96)
BitmapSizey(Pixels)=Scaley*Original Bitmap Sizey (DIPs)*(UserDPI/96)

O efeito arredonda frações de pixels até o pixel inteiro mais próximo.

O local do bitmap é (0, 0) ou o valor da propriedade do ponto central.

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