Bitmap-Quelleffekt

Verwenden Sie den Bitmap-Quelleffekt, um ein ID2D1Image aus einer IWICBitmapSource zur Verwendung als Eingabe in einem Effektdiagramm zu generieren. Dieser Effekt führt die Skalierung und Rotation der CPU durch. Optional kann es auch eine Mipmap für den Systemspeicher generieren, was eine Leistungsoptimierung für die aktive Skalierung sehr großer Bilder mit verschiedenen reduzierten Auflösungen sein kann.

Hinweis

Der Bitmapquelleneffekt verwendet seine Eingabe als Eigenschaft, nicht als Bildeingabe. Sie müssen die SetValue-Methode und nicht die SetInput-Methode verwenden. In der WicBitmapSource-Eigenschaft geben Sie die Bildeingabedaten an.

Die CLSID für diesen Effekt ist CLSID_D2D1BitmapSource.

Effekteigenschaften

Anzeigename und Indexaufzählung Beschreibung
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
Die IWICBitmapSource , die die zu ladenden Bilddaten enthält.
Der Typ ist IWICBitmapSource.
Der Standardwert ist NULL.
Skalieren
D2D1_BITMAPSOURCE_PROP_SCALE
Der Skalierungsbetrag in X- und Y-Richtung. Der Effekt multipliziert die Breite mit dem X-Wert und die Höhe mit dem Y-Wert. Diese Eigenschaft ist eine D2D1_VECTOR_2F definiert als: (X-Skalierung, Y-Skalierung). Die Skalierungsmengen sind FLOAT, einheitslos und müssen positiv oder 0 sein.
Der Typ ist D2D1_VECTOR_2F.
Der Standardwert ist {1.0f, 1.0f}.
Interpolationmode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Der Zum Skalieren des Bilds verwendete Interpolationsmodus. Weitere Informationen finden Sie unter Interpolationsmodi .
Wenn der Modus die mipmap deaktiviert, speichert BitmapSouce das Bild in der Auflösung zwischen, die durch die Eigenschaften Scale und EnableDPICorrection bestimmt wird.
Der Typ ist D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
Der Standardwert ist D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Wenn Sie dies auf TRUE festlegen, skaliert der Effekt das Eingabebild, um den von IWICBitmapSource gemeldeten DPI in den DPI des Gerätekontexts zu konvertieren. Der Effekt verwendet den Interpolationsmodus, den Sie mit der InterpolationMode-Eigenschaft festgelegt haben. Wenn Sie dies auf FALSE festlegen, verwendet der Effekt einen DPI von 96,0 für das Ausgabebild.
Der Typ ist BOOL.
Der Standardwert ist FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Der Alphamodus der Ausgabe. Dies kann entweder vormultipliziert oder gerade sein. Weitere Informationen finden Sie unter Alphamodi .
Der Typ ist D2D1_BITMAPSOURCE_ALPHA_MODE.
Der Standardwert ist D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Ausrichtung
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Ein Dreh- und/oder Drehvorgang, der für das Bild ausgeführt werden soll. Weitere Informationen finden Sie unter Orientierung .
Der Typ ist D2D1_BITMAPSOURCE_ORIENTATION.
Der Standardwert ist D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Interpolationsmodi

Der Effekt interpoliert mit diesem Modus, wenn ein Bild skaliert oder der DPI korrigiert wird. Die Interpolationsmodi, die dieser Effekt verwendet, werden von der CPU und nicht von der GPU berechnet.

Name Beschreibung
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Beispiel für den nächsten einzelen Punkt und verwendet diesen. Generiert keine mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Verwendet ein Vierpunktbeispiel und eine lineare Interpolation. Generiert keine mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Verwendet einen Kubikkern mit 16 Beispielen für die Interpolation. Generiert keine mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Verwendet die WIC-Fantinterpolation, die mit der IWICBitmapScaler-Schnittstelle identisch ist. Generiert keine mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Generiert die Mipmap-Kette im Systemspeicher mithilfe der bilinearen Interpolation. Für jede mipmap wird der Effekt mithilfe der bilinearen Interpolation auf das nächste Vielfache von 0,5 skaliert und dann die verbleibende Menge mithilfe der linearen Interpolation skaliert.

Ausrichtung

Die Orientation-Eigenschaft kann verwendet werden, um ein EXIF-Ausrichtungsflag anzuwenden, das in ein Bild eingebettet ist.

Name Beschreibung
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Standard. Der Effekt ändert die Ausrichtung der Eingabe nicht.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Das Bild wird horizontal umgedreht.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Dreht das Bild im Uhrzeigersinn um 180 Grad.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Dreht das Bild im Uhrzeigersinn um 180 Grad und dreht es horizontal.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Dreht das Bild im Uhrzeigersinn um 270 Grad und dreht es horizontal.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Dreht das Bild im Uhrzeigersinn um 90 Grad.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Dreht das Bild im Uhrzeigersinn um 90 Grad und kippt es horizontal.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Dreht das Bild im Uhrzeigersinn um 270 Grad.

Dieser Codeausschnitt veranschaulicht, wie Sie exif-Ausrichtungswerte (definiert in propkey.h) in D2D1_BITMAPSOURCE_ORIENTATION-Werte konvertieren.

#include <propkey.h>
#include <d2d1effects.h>

D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
       switch (PhotoOrientation)
       {
       case PHOTO_ORIENTATION_NORMAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       case PHOTO_ORIENTATION_FLIPHORIZONTAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE180:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
       case PHOTO_ORIENTATION_FLIPVERTICAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_TRANSPOSE: 
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE270:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
       case PHOTO_ORIENTATION_TRANSVERSE:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE90:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
       default:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       }
}

Alphamodi

Name Beschreibung
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED Die Effektausgabe verwendet prämultipliziertes Alpha.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT Die Effektausgabe verwendet ein gerades Alpha.

Bemerkungen

Um die Leistung bei der gemeinsamen Verwendung von WIC und Direct2D zu optimieren, sollten Sie IWICFormatConverter verwenden, um basierend auf Ihrem App-Szenario und der nativen Genauigkeit des Bilds in ein geeignetes Pixelformat zu konvertieren.

In den meisten Fällen erfordert Die Direct2D-Pipeline ihrer App nur 8 Bits pro Kanal (bpc) an Genauigkeit, oder das Bild bietet nur eine Genauigkeit von 8 bpc, weshalb Sie in GUID_WICPixelFormat32bppPBGRA konvertieren sollten. Wenn Sie jedoch von der zusätzlichen Genauigkeit eines Bilds profitieren möchten (z. B. ein JPEG-XR oder TIFF, das mit einer Genauigkeit von mehr als 8 bpc gespeichert ist), sollten Sie ein RGBA-basiertes Pixelformat verwenden. Die folgende Tabelle enthält weitere Details.

Gewünschte Genauigkeit Native Genauigkeit des Bilds Empfohlenes Pixelformat
8 Bits pro Kanal <= 8 Bits pro Kanal GUID_WICPixelFormat32bppPBGRA
So hoch wie möglich <= 8 Bits pro Kanal GUID_WICPixelFormat32bppPBGRA
So hoch wie möglich > 8 Bits pro Kanal RGBA-Kanalreihenfolge, prämultipliziertes Alpha

Da viele Bildformate mehrere Genauigkeitsstufen unterstützen, sollten Sie IWICBitmapSource::GetPixelFormat verwenden, um das native Pixelformat des Bilds abzurufen, und dann IWICPixelFormatInfo verwenden, um zu bestimmen, wie viele Bits pro Kanal an Genauigkeit für dieses Format verfügbar sind. Beachten Sie außerdem, dass nicht alle Hardware Pixelformate mit hoher Genauigkeit unterstützt. In diesen Fällen muss Ihre App möglicherweise auf das WARP-Gerät zurückgreifen, um eine hohe Genauigkeit zu unterstützen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Unterstützte Mindestversion (Server) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Header d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect