Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
CanvasBitmap unterstützt komprimierte Blockbitmaps. Diese können aus einer DDS-Datei geladen oder mit CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat).
Blockkomprimierte Bitmaps eignen sich hervorragend für bitmapintensive Anwendungen (z. B. Spiele), da sie weniger Arbeitsspeicher belegen und effizienter gezeichnet werden können. Eine komprimierte Blockbitmap verwendet bis zu 1/8 des Speichers einer nicht komprimierten Bitmap. Daher muss die GPU beim Zeichnen der Bitmap auf viel weniger Arbeitsspeicher zugreifen, was zu einer schnelleren Zeichnung führt.
Informationen zur Blockkomprimierung
Die Blockkomprimierung unterscheidet sich von der Komprimierung, die von PNG- oder JPG-Dateien verwendet wird. Komprimierte Dateiformate werden komprimiert gespeichert, aber wenn sie von Win2D geladen werden, werden sie in eine Bitmap mit einem Format wie z DirectXPixelFormat::B8G8R8A8UIntNormalized. B. 32 Bit (4 Bytes) pro Pixel dekomprimiert. Eine Bitmap von 256 x 256 würde also 256 * 256 * 4 = 262,144 Bytes beanspruchen.
Eine komprimierte Blockbitmap verwendet 8 oder 16 Bytes (je nach Format – mehr zu diesem späteren Zeitpunkt), um einen Block von 4 x 4 Pixeln zu speichern. In diesem Fall würde eine 256x256-Bitmap also 256 * 256 * 256 / (4 * 4) * 8 = 32.768 Bytes oder 256 * 256 / (4 * 4) * 16 = 65,536 Bytes aufnehmen. Das ist bis zu 8 Mal kleiner! Da die Blockkomprimierung direkt von der GPU-Hardware unterstützt wird, kann die Bitmap im Arbeitsspeicher komprimiert und direkt aus dem komprimierten Format gezeichnet werden, ohne es vollständig entkomprimieren zu müssen.
Win2D unterstützt drei komprimierte Blockformate. In der folgenden Tabelle werden diese Formate zusammen mit einem nicht komprimierten Format für den Vergleich beschrieben.
DirectXPixelFormat |
Größe von 4x4 Bitmap | Größe von 256 x 256 Bitmap | Alpha |
|---|---|---|---|
BC1Unorm |
8 Byte | 32.768 Bytes | 1 Bit |
BC2Unorm |
16 Bytes | 65.536 Byte | 4 Bit |
BC3Unorm |
16 Bytes | 65.536 Byte | ~8 Bit (komprimiert) |
B8G8R8A8UintNormalized |
64 Bytes | 262.144 Bytes | 8 Bit |
BC1Unorm, und BC3Unorm unterscheiden sie sich hauptsächlich darin, BC2Unorm wie sie Alpha unterstützen. BC1 unterstützt nur 1-Bit-Alpha. BC2 unterstützt jedes Pixel im Block mit einem eindeutigen 4-Bit-Alphawert. BC3 komprimiert die Alphawerte.
Weitere Informationen zur Funktionsweise der Blockkomprimierung finden Sie in der Dokumentation zur Direct2D-Blockkomprimierung und der Direct3D-Blockkomprimierung .
Beschränkungen
- Alle blockkomprimierten Texturen müssen eine Breite und Höhe aufweisen, die ein Vielfaches von 4 ist. Dies liegt daran, dass die Blockkomprimierung auf Blöcken von 4 x 4 Pixeln funktioniert.
- Jeder Vorgang auf einem Unterrechteck einer komprimierten Blocktextur (mit
GetPixelBytes(),SetPixelBytes(Byte[])mit ,CopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)) erfordert, dass das Unterrechteck 4 Pixel ausgerichtet ist. - Win2D erfordert prämultipliziertes Alpha bei Verwendung von blockkomprimierten Formaten.
Erstellen von DDS-Dateien
Blockkomprimierte Bilder können in DDS-Dateien gespeichert werden. Obwohl diese von Plug-Ins für Anwendungen wie Photoshop oder Paint.NET generiert werden können, müssen Sie darauf achten, dass die resultierende Datei mit prämultiplizierten Alpha gespeichert wird. Win2D lädt alle DDS-Dateien, die ein BC1Unormoder BC3Unorm BC2Unorm ein Bild enthalten, und gehen davon aus, dass sie mit prämultipliziertem Alpha erstellt wird.
Wenn Sie ein C++-Projekt erstellen, können Sie das Bild mithilfe der Bildinhaltspipeline konvertieren, wie auf MSDN beschrieben.
Alternativ können texconv.exe Sie von https://github.com/Microsoft/DirectXTex. texconv.exe kann mithilfe der DirectXTex_Desktop_2015.sln Lösung erstellt werden. Mit dem folgenden Befehl wird "smoke.png" in ein BC3Unorm mit prämultipliziertem Alpha konvertiert:
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer