Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
CanvasBitmap támogatja a blokktömörített bitképeket. Ezek betölthetők egy DDS-fájlból, vagy a(z) CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat) segítségével hozhatók létre.
A blokktömörített bitképek nagyszerűek a bitképes alkalmazásokhoz (például játékokhoz), mivel kevesebb memóriát igényelnek, és hatékonyabban rajzolhatók. A blokktömörített bitképek a tömörítetlen bitképek memóriájának legfeljebb 1/8-át használják. Ennek eredményeképpen a GPU-nak sokkal kevesebb memóriát kell elérnie a bitkép rajzolásakor, ami gyorsabb rajzolást eredményez.
Tudnivalók a blokktömörítésről
A blokktömörítés eltér a PNG- vagy JPG-fájlok tömörítésétől. A tömörített fájlformátumok tömörítve vannak tárolva, de amikor a Win2D betölti őket, a rendszer egy bitképbe tömöríti őket, amely például DirectXPixelFormat::B8G8R8A8UIntNormalized32 bitet (4 bájt) használ képpontonként. Tehát egy 256x256-os bitkép 256 * 256 * 4 = 262 144 bájtot vesz igénybe.
A blokktömörített bitképek 8 vagy 16 bájtot használnak (a formátumtól függően – erről később bővebben olvashat) egy 4x4 képpontos blokk tárolására. Tehát ebben az esetben egy 256x256 bitkép 256 * 256 / (4 * 4) * 8 = 32 768 bájt, vagy 256 * 256 / (4 * 4) * 16 = 65 536 bájt. Ez akár 8-szor kisebb is lehet! Mivel a blokktömörítést közvetlenül a GPU-hardver támogatja, a bitkép a memóriában tömörítve tartható, és közvetlenül a tömörített formátumból rajzolható anélkül, hogy teljesen ki kellene vonnia a tömörítést.
A Win2D három blokktömörített formátumot támogat. Az alábbi táblázat ezeket a formátumokat ismerteti, valamint egy tömörítetlen formátumot az összehasonlításhoz.
DirectXPixelFormat |
4x4-es bitkép mérete | 256x256-os bitkép mérete | Alpha |
|---|---|---|---|
BC1Unorm |
8 bájt | 32 768 bájt | 1 bit |
BC2Unorm |
16 bájt | 65 536 bájt | 4 bit |
BC3Unorm |
16 bájt | 65 536 bájt | ~8 bit (tömörített) |
B8G8R8A8UintNormalized |
64 bájt | 262 144 bájt | 8 bit |
BC1Unorm, BC2Unorm és BC3Unorm leginkább abban különböznek, hogy hogyan támogatják az alfa. A BC1 csak az 1 bites alfát támogatja. A BC2 támogatja a blokk minden képpontjának egyedi 4 bites alfaértékét. A BC3 tömöríti az alfaértékeket.
A blokktömörítés működésével kapcsolatos további információkért tekintse meg a Direct2D blokktömörítés dokumentációját és a Direct3D blokktömörítés dokumentációját .
Restrictions
- Minden blokktömörített anyagmintának 4-ből többszörös szélességűnek és magasságúnak kell lennie. Ennek az az oka, hogy a blokktömörítés 4x4 képpontos blokkokon működik.
- A blokkosan tömörített textúra egy résztéglalapján végzett bármely művelethez (a
GetPixelBytes(),SetPixelBytes(Byte[])ésCopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)használatával) az szükséges, hogy a résztéglalap 4 képponthoz igazított legyen. - A Win2D előre szorzott alfát igényel blokktömörítésű formátumok használatakor.
DDS-fájlok létrehozása
A blokktömörített képek DDS-fájlokba menthetők. Bár ezek olyan alkalmazások beépülő moduljaival hozhatók létre, mint a Photoshop vagy a Paint.NET, ügyelni kell arra, hogy az eredményül kapott fájl előre meghatározott alfa használatával legyen mentve. A Win2D minden olyan DDS-fájlt be fog tölteni, amely BC1Unorm, BC2Unorm vagy BC3Unorm képet tartalmaz, és feltételezi, hogy az premultiplikált alfával készült.
Ha C++ projektet hoz létre, a kép konvertálásához használhatja a Képtartalom-folyamatot a Visual Studio dokumentációban leírtak szerint.
Másik lehetőségként használhatja a(z) texconv.exe elemet innen: https://github.com/Microsoft/DirectXTex.
texconv.exe a DirectXTex_Desktop_2015.sln megoldással hozható létre. A következő parancs a(z) "smoke.png" fájlt előre szorzott alfával rendelkező BC3Unorm-vá alakítja:
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer