Efeito de escala
Use esse efeito para aumentar ou diminuir a escala de uma imagem. O efeito tem seis modos de escala: vizinho mais próximo, linear, cúbico, linear de várias amostras, anisotrópico e cúbico de alta qualidade.
O CLSID para este efeito é CLSID_D2D1Scale.
- Imagem de exemplo
- Propriedades de efeito
- Modos de interpolação
- Bitmap de saída
- Requisitos
- Tópicos relacionados
Imagem de exemplo
Este exemplo mostra o efeito de escala ampliando 2 vezes a entrada e cortando para o tamanho original.
Antes |
---|
![]() |
Após |
![]() |
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 para exibição e enumeração de índice | Descrição |
---|---|
Escala D2D1_SCALE_PROP_SCALE |
A quantidade da escala na direção X e Y como uma proporção do tamanho da saída para o tamanho da entrada. Esta propriedade D2D1_VETOR_2Fdefined como: (escala X, escala Y). Os valores da escala são FLOAT, sem unidade, e devem ser positivos ou 0. O tipo é D2D1_VETOR_2F. O valor padrão é {1.0f, 1.0f}. |
Ponto de Centro D2D1_SCALE_PROP_CENTER_POINT |
O ponto central de dimensionamento da imagem. Esta propriedade é um D2D1_VETOR_2F definido como: (ponto X, ponto Y). As unidades estão em DIPs. Use a propriedade de ponto central para dimensionar em torno de um ponto diferente do canto superior esquerdo. O tipo é D2D1_VETOR_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 hard. Consulte 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 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 reduzi-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. O tipo é FLOAT. O valor padrão é 0.0f. |
InterpolaçãoModo de Interpolação D2D1_SCALE_PROP_INTERPOLATION_MODE |
O modo de interpolação que o efeito usa para dimensionar a imagem. Existem 6 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
Designação | 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 suave 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 | 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_SCALE_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_SCALE_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_SCALE_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_SCALE_INTERPOLATION_MODE_ANISOTROPIC | Usa filtragem anisotrópica para obter amostras de 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 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_SCALE_INTERPOLATION_MODE_LINEAR como padrão.
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 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)=Escalax*Tamanho original do bitmapx (DIPs)*(UserDPI/96)
BitmapSizey(Pixels)=Escalay*Tamanho original do bitmapy (DIPs)*(UserDPI/96)
O efeito arredonda frações de pixels para cima para o pixel inteiro mais próximo.
O local do bitmap é (0, 0) ou o valor da propriedade do ponto central.
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 |