Effect van 2D-affinetransformatie
Het 2D-affinetransformatieeffect past een ruimtelijke transformatie toe op een afbeelding op basis van een 3X2-matrix met behulp van de Direct2D-matrix transformatie en een van de zes interpolatiemodi. U kunt dit effect gebruiken om een afbeelding te draaien, te schalen, scheef te maken of te vertalen. U kunt deze bewerkingen ook combineren. Affinusoverdrachten behouden parallelle lijnen en de verhouding van afstanden tussen drie punten in een afbeelding.
De CLSID voor dit effect is CLSID_D2D12DAffineTransform.
- voorbeeldafbeelding
- eigenschappen van effect
- randmodi
- interpolatiemodi
- uitvoer bitmap
- vereisten
- Verwante onderwerpen
Voorbeeldafbeelding
Voor |
---|
![]() |
Na |
![]() |
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();
Met dit effect wordt deze matrixbewerking uitgevoerd:
Hoewel de invoermatrix is gedefinieerd als een 3x2-matrix, wordt de laatste kolom gevuld met 0, 0 en 1 om een vierkante matrix te produceren. Hierdoor kunnen matrixververmenigvuldigen, zodat transformaties kunnen worden samengevoegd in één matrix.
Effecteigenschappen
Weergavenaam en indexenumeratie | Beschrijving |
---|---|
InterpolationMode D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE |
De interpolatiemodus die wordt gebruikt om de afbeelding te schalen. Er zijn 6 schaalmodi die variëren in kwaliteit en snelheid. Type is D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. De standaardwaarde is D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE |
De modus die wordt gebruikt voor het berekenen van de rand van de afbeelding, zacht of hard. Zie Randmodi voor meer informatie. Type is D2D1_BORDER_MODE. De standaardwaarde is D2D1_BORDER_MODE_SOFT. |
TransformMatrix D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX |
De 3x2-matrix om de afbeelding te transformeren met behulp van de Direct2D-matrix transformatie. Type is D2D1_MATRIX_3X2_F. De standaardwaarde is Matrix3x2F::Identity(). |
Scherpte D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS |
In de kubieke interpolatiemodus van hoge kwaliteit is het scherpteniveau van het schaalfilter als een float tussen 0 en 1. De waarden zijn eenheidsloos. U kunt scherpte gebruiken om de kwaliteit van een afbeelding aan te passen wanneer u de afbeelding schaalt. De scherptefactor beïnvloedt de vorm van de kernel. Hoe hoger de scherptefactor, hoe kleiner de kernel. Opmerking: Deze eigenschap is alleen van invloed op de kubieke interpolatiemodus van hoge kwaliteit. Type is FLOAT. De standaardwaarde is 0,0f. |
Randmodi
Naam | Beschrijving |
---|---|
D2D1_BORDER_MODE_SOFT | Het effect vult de afbeelding met transparante zwarte pixels terwijl deze interpoleert, wat resulteert in een zachte rand. |
D2D1_BORDER_MODE_HARD | Het effect klemt de uitvoer op de grootte van de invoerafbeelding. |
Interpolatiemodi
Opsomming | Beschrijving |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Steekt het dichtstbijzijnde single point in en gebruikt dat. In deze modus wordt minder verwerkingstijd gebruikt, maar wordt de afbeelding van de laagste kwaliteit uitgevoerd. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Maakt gebruik van een voorbeeld van vier punten en lineaire interpolatie. In deze modus wordt meer verwerkingstijd gebruikt dan de dichtstbijzijnde buurmodus, maar wordt een afbeelding met een hogere kwaliteit uitgevoerd. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC | Maakt gebruik van een 16 voorbeeldkubieke kernel voor interpolatie. In deze modus wordt de meeste verwerkingstijd gebruikt, maar wordt een afbeelding met een hogere kwaliteit uitgevoerd. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Maakt gebruik van vier lineaire steekproeven binnen één pixel voor goede rand antialiassen. Deze modus is geschikt voor het omlaag schalen met kleine hoeveelheden afbeeldingen met een paar pixels. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Maakt gebruik van anisotropische filtering om een patroon te steekproefen op basis van de getransformeerde vorm van de bitmap. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC | Maakt gebruik van een variabele grootte van een kubieke kernel van hoge kwaliteit om een pre-downscale van de afbeelding uit te voeren als omlaag schalen wordt gebruikt in de transformatiematrix. Vervolgens wordt de kubieke interpolatiemodus gebruikt voor de uiteindelijke uitvoer. |
Notitie
Als u geen modus selecteert, wordt het effect standaard D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
Notitie
De anisotropische modus genereert mipmaps bij het schalen, maar als u de eigenschap in cache instelt op true op de effecten die invoer voor dit effect zijn, worden de mipmaps niet telkens gegenereerd voor voldoende kleine afbeeldingen.
Uitvoer bitmap
De grootte van de uitvoer bitmap is afhankelijk van de transformatiematrix die op de afbeelding wordt toegepast.
Het effect voert de transformatiebewerking uit en past vervolgens een begrenzingsvak rond het resultaat toe. De uitvoer bitmap is de grootte van het begrenzingsvak.
Eisen
Eis | Waarde |
---|---|
Minimaal ondersteunde client | Windows 8 en Platform Update voor Windows 7 [desktop-apps | Windows Store-apps] |
Minimaal ondersteunde server | Windows 8 en Platform Update voor Windows 7 [desktop-apps | Windows Store-apps] |
Rubriek | d2d1effects.h |
Bibliotheek | d2d1.lib, dxguid.lib |