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 skalierungs- und rotationsskalierend auf der CPU aus. Sie kann optional auch eine Systemspeicher-Mipmap generieren, die eine Leistungsoptimierung für die aktive Skalierung sehr großer Bilder mit verschiedenen reduzierten Auflösungen sein kann.

Hinweis

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

Die CLSID für diesen Effekt ist CLSID _ D2D1BitmapSource.

Effekteigenschaften

Anzeigename und Indexenumeration 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
Die Skalierungsmenge 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 ein D2D1 _ VECTOR _ 2F, der wie folgt definiert ist: (X-Skalierung, Y-Skalierung). Die Skalierungsbeträge sind FLOAT, einheitenlos 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 Interpolationsmodus, der zum Skalieren des Bilds verwendet wird. Weitere Informationen finden Sie unter Interpolationsmodi.
Wenn der Modus die Mipmap deaktiviert, speichert BitmapSouce das Bild mit 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 diese Einstellung 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 diese Einstellung auf FALSE festlegen, verwendet der Effekt einen DPI-Wert 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 prämultiplizierend oder direkt sein. Weitere Informationen finden Sie unter Alphamodi.
Der Typ ist D2D1 _ BITMAPSOURCE _ ALPHA _ MODE.
Der Standardwert ist D2D1 _ BITMAPSOURCE _ ALPHA MODE _ _ PREMULTIPLIED.
Orientation
D2D1 _ BITMAPSOURCE _ PROP _ ORIENTATION
Ein Flip- und/oder Drehungsvorgang, der für das Bild ausgeführt werden soll. Weitere Informationen finden Sie unter Ausrichtung.
Der Typ ist D2D1 _ BITMAPSOURCE _ ORIENTATION.
Der Standardwert ist D2D1 _ BITMAPSOURCE _ ORIENTATION _ DEFAULT.

Interpolationsmodi

Der Effekt interpoliert mit diesem Modus, wenn er ein Bild skaliert oder den DPI korrigiert. Die von diesem Effekt verwendeten Interpolationsmodi werden von der CPU und nicht von der GPU berechnet.

Name BESCHREIBUNG
D2D1 _ BITMAPSOURCE _ INTERPOLATION _ MODE _ NEAREST _ NEIGHBOR Probieren Sie den nächstgelegenen einzelnen Punkt aus, und verwendet diesen. Generiert keine Mipmap.
D2D1 _ BITMAPSOURCE _ INTERPOLATION _ MODE _ LINEAR Verwendet eine Vier-Punkt-Stichprobe und lineare Interpolation. Generiert keine Mipmap.
D2D1 _ BITMAPSOURCE _ INTERPOLATION _ MODE _ KUBISCH Verwendet einen kubischen Kernel mit 16 Beispielen für die Interpolation. Generiert keine Mipmap.
D2D1 _ BITMAPSOURCE _ INTERPOLATION _ MODE _ MINIMIERUNG Verwendet die WIC-Interpolation, die mit der IWICBitmapScaler-Schnittstelle identisch ist. Generiert keine Mipmap.
D2D1 _ BITMAPSOURCE _ INTERPOLATION _ MODE _ MIPMAP _ LINEAR Generiert eine Mipmapkette im Systemspeicher mit bilinearer Interpolation. Für jede Mipmap skaliert der Effekt mithilfe der bilinearen Interpolation auf das nächste Vielfache von 0,5 und skaliert dann die verbleibende Menge mit linearer Interpolation.

Orientation

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 nicht die Ausrichtung der Eingabe.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ FLIP _ HORIZONTAL Blättern des Bilds horizontal.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE180 Rotiert das Bild im Uhrzeigersinn um 180 Grad.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE180 _ FLIP _ HORIZONTAL Rotiert das Bild im Uhrzeigersinn um 180 Grad und flippt es horizontal.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE270 _ FLIP _ HORIZONTAL Rotiert das Bild im Uhrzeigersinn um 270 Grad und flippt es horizontal.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE90 Rotiert das Bild im Uhrzeigersinn um 90 Grad.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE90 _ FLIP _ HORIZONTAL Rotiert das Bild im Uhrzeigersinn um 90 Grad und flippt es horizontal.
D2D1 _ BITMAPSOURCE _ ORIENTATION _ ROTATE _ CLOCKWISE270 Rotiert das Bild im Uhrzeigersinn um 270 Grad.

Dieser Codeausschnitt veranschaulicht die Konvertierung von EXIF-Ausrichtungswerten (definiert in propkey.h) in D2D1 _ BITMAPSOURCE _ ORIENTATION-Werte.

#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ämultipliiertes Alpha.
D2D1 _ BITMAPSOURCE _ ALPHA _ MODE _ STRAIGHT Die Effektausgabe verwendet 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 entweder die Direct2D-Pipeline Ihrer App nur eine Genauigkeit von 8 Bits pro Kanal (bpc), oder das Bild bietet nur eine Genauigkeit von 8 BPC. Daher sollten Sie in die GUID _ WICPixelFormat32bppPBGRA konvertieren. Wenn Sie jedoch die zusätzliche Genauigkeit nutzen möchten, die von einem Bild bereitgestellt wird (z. B. eine JPEG-XR oder TIFF, die 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 Genauigkeitsebenen unterstützen, sollten Sie IWICBitmapSource::GetPixelFormat verwenden, um das systemeigene Pixelformat des Bilds abzurufen, und dann IWICPixelFormatInfo verwenden, um zu bestimmen, wie viele Bits pro Genauigkeitskanal für dieses Format verfügbar sind. Beachten Sie auch, 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 hohe Genauigkeit zu unterstützen.

Requirements (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