Skaleneffekt
Verwenden Sie diesen Effekt, um ein Bild nach oben oder unten zu skalieren. Der Effekt hat sechs Skalierungsmodi: nächster Nachbar, linear, kubisch, mehrproben linear, anisotropisch und qualitativ hochwertige Kubik.
Die CLSID für diesen Effekt ist CLSID_D2D1Scale.
Beispielbild
This example shows the scale effect zooming in 2 times the input and cropping to the original size.
Vor |
---|
![]() |
Nach |
![]() |
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();
Effekteigenschaften
Anzeigename und Indexenumeration | Beschreibung |
---|---|
Maßstab D2D1_SCALE_PROP_SCALE |
Die Skalierungsmenge in der X- und Y-Richtung als Verhältnis der Ausgabegröße zur Eingabegröße. Diese Eigenschaft D2D1_VECTOR_2Fdefined als: (X-Skalierung, Y-Skalierung). Die Skalierungsbeträge sind FLOAT, einheitslos und müssen positiv oder 0 sein. Der Typ ist D2D1_VECTOR_2F. Der Standardwert ist {1,0f, 1,0f}. |
CenterPoint D2D1_SCALE_PROP_CENTER_POINT |
Der Mittelpunkt der Bildskalierung. Diese Eigenschaft ist ein D2D1_VECTOR_2F definiert als: (Punkt X, Punkt Y). Die Einheiten befinden sich in DIPs. Verwenden Sie die Mittelpunktseigenschaft, um einen anderen Punkt als die obere linke Ecke zu skalieren. Der Typ ist D2D1_VECTOR_2F. Der Standardwert ist {0,0f, 0,0f}. |
BorderMode D2D1_SCALE_PROP_BORDER_MODE |
Der Modus, der zum Berechnen des Rahmens des Bilds verwendet wird, weich oder hart. Weitere Informationen finden Sie unter Rahmenmodi. Der Typ ist D2D1_BORDER_MODE. Der Standardwert ist D2D1_BORDER_MODE_SOFT. |
Schärfe D2D1_SCALE_PROP_SHARPNESS |
Im qualitativ hochwertigen kubischen Interpolationsmodus wird die Schärfe des Skalierungsfilters als Gleitkomma zwischen 0 und 1 festgelegt. Die Werte sind ohne Einheit. Sie können die Schärfe verwenden, um die Qualität eines Bilds anzupassen, wenn Sie das Bild nach unten skalieren. Der Schärfefaktor wirkt sich auf die Form des Kernels aus. Je höher der Schärfefaktor, desto kleiner der Kernel. Hinweis: Diese Eigenschaft wirkt sich nur auf den qualitativ hochwertigen kubischen Interpolationsmodus aus. Der Typ ist FLOAT. Der Standardwert ist 0,0f. |
InterpolationMode D2D1_SCALE_PROP_INTERPOLATION_MODE |
Der Interpolationsmodus, den der Effekt zum Skalieren des Bilds verwendet. Es gibt 6 Skalierungsmodi, die in Qualität und Geschwindigkeit reichen. Weitere Informationen finden Sie unter Interpolationsmodi. Der Typ ist D2D1_SCALE_INTERPOLATION_MODE. Der Standardwert ist D2D1_SCALE_INTERPOLATION_MODE_LINEAR. |
Rahmenmodi
Name | Beschreibung |
---|---|
D2D1_BORDER_MODE_SOFT | Die Effektpads des Eingabebilds mit transparenten schwarzen Pixeln für Beispiele außerhalb der Eingabegrenzen, wenn sie den Konvolutionskern anwendet. Dadurch wird eine weiche Kante für das Bild erstellt, und im Prozess wird die Ausgabebitmap um die Größe des Kernels erweitert. |
D2D1_BORDER_MODE_HARD | Der Effekt erweitert das Eingabebild mit einer Spiegelrahmentransformation für Beispiele außerhalb der Eingabegrenzen. Die Größe der Ausgabebitmap entspricht der Größe der Eingabebitmap. |
`
Interpolationsmodi
Aufzählung | Beschreibung |
---|---|
D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Gibt den nächstgelegenen einzelnen Punkt an und verwendet dies. Dieser Modus verwendet weniger Verarbeitungszeit, gibt jedoch das bild mit der niedrigsten Qualität aus. |
D2D1_SCALE_INTERPOLATION_MODE_LINEAR | Verwendet ein Beispiel mit vier Punkten und eine lineare Interpolation. Dieser Modus verwendet mehr Verarbeitungszeit als der nächste Nachbarmodus, gibt jedoch ein Bild mit höherer Qualität aus. |
D2D1_SCALE_INTERPOLATION_MODE_CUBIC | Verwendet einen 16 Beispiel-Kubikkern für die Interpolation. Dieser Modus verwendet die meiste Verarbeitungszeit, gibt jedoch ein Bild mit höherer Qualität aus. |
D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Verwendet vier lineare Beispiele innerhalb eines einzelnen Pixels für eine gute Antialiasierung am Rand. Dieser Modus eignet sich gut für die Skalierung von kleinen Mengen an Bildern mit wenigen Pixeln. |
D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC | Verwendet die anisotrope Filterung, um ein Muster gemäß der transformierten Form der Bitmap zu probieren. |
D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC | Verwendet einen kubischen Kernel mit variabler Größe mit hoher Qualität, um ein Bild vorab zu verkleinern, wenn die Downscaling an der Transformationsmatrix beteiligt ist. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe. |
Anmerkung
Wenn Sie keinen Modus auswählen, wird der Effekt standardmäßig auf D2D1_SCALE_INTERPOLATION_MODE_LINEAR festgelegt.
Anmerkung
Der anisotrope Modus generiert jedoch Mipmaps beim Skalieren, wenn Sie die Zwischengespeicherte-Eigenschaft auf "true" für die Effekte festlegen, die für diesen Effekt eingegeben werden, werden die Mipmaps nicht jedes Mal für ausreichend kleine Bilder generiert.
Ausgabebitmap
Die Position und Größe der Ausgabebitmap hängt vom angegebenen Skalierungsfaktor und dem Mittelpunkt ab.
Mit dieser Formel können Sie die Größe der Ausgabebitmap berechnen:
- BitmapSizex(Pixels)=Scalex*Original Bitmap Sizex (DIPs)*(UserDPI/96)
BitmapSizey(Pixels)=Scaley*Original Bitmap Sizey (DIPs)*(UserDPI/96)
Der Effekt rundet Bruchzahlen von Pixeln auf das nächste ganze Pixel auf.
Die Position der Bitmap ist (0, 0) oder der Wert der Mittelpunkteigenschaft.
Anforderungen
Anforderung | Wert |
---|---|
Mindestens unterstützter Client | Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps] |
Mindestens unterstützter Server | Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps] |
Kopfball | d2d1effects.h |
Bibliothek | d2d1.lib, dxguid.lib |