Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
CanvasBitmap, blok sıkıştırmalı bit eşlemlerini destekler. Bunlar bir DDS dosyasından yüklenebilir veya ile CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat)oluşturulabilir.
Blok sıkıştırılmış bit eşlemler, bit eşlem ağır uygulamaları (oyunlar gibi) için mükemmeldir çünkü bunlar daha az bellek alır ve daha verimli bir şekilde çizilebilir. Blok sıkıştırılmış bit eşlem sıkıştırılmamış bit eşlem belleğinin en fazla 1/8'ini kullanır. Sonuç olarak, bit eşlemi çizerken GPU'nın çok daha az belleğe erişmesi gerekir ve bu da daha hızlı çizime neden olur.
Blok sıkıştırma hakkında
Blok sıkıştırma, PNG veya JPG dosyaları tarafından kullanılan sıkıştırmadan farklıdır. Sıkıştırılmış dosya biçimleri sıkıştırılmış olarak depolanır; ancak Win2D tarafından yüklendiklerinde, sıkıştırmaları çözülerek piksel başına 32 bit (4 bayt) kullanan DirectXPixelFormat::B8G8R8A8UIntNormalized gibi bir bitmap biçimine dönüştürülürler. Dolayısıyla 256x256 bit eşlemli görüntü 256 * 256 * 4 = 262.144 bayt yer kaplar.
Blok sıkıştırmalı bir bit eşlem, 4x4 piksellik bir bloğu depolamak için 8 veya 16 bayt (biçime bağlı olarak -- buna daha sonra değineceğiz) kullanır. Bu durumda 256x256 bit eşlem 256 * 256 / (4 * 4) * 8 = 32.768 bayt veya 256 * 256 / (4 * 4) * 16 = 65.536 bayt kadar sürebilir. Bu, 8 kat daha küçüktür! Blok sıkıştırma doğrudan GPU donanımı tarafından desteklendiğinden bit eşlem bellekte sıkıştırılabilir ve sıkıştırmayı tamamen açmak zorunda kalmadan doğrudan sıkıştırılmış biçimden çekilebilir.
Win2D üç blok sıkıştırılmış biçimi destekler. Aşağıdaki tabloda bu biçimler ve karşılaştırma için sıkıştırılmamış biçim açıklanmaktadır.
DirectXPixelFormat |
4x4 bitmap boyutu | 256x256 bit eşlem boyutu | Alpha |
|---|---|---|---|
BC1Unorm |
8 bayt | 32.768 bayt | 1 bit |
BC2Unorm |
16 bayt | 65.536 bayt | 4 bit |
BC3Unorm |
16 bayt | 65.536 bayt | ~8 bit (sıkıştırılmış) |
B8G8R8A8UintNormalized |
64 bayt | 262.144 bayt | 8 bit |
BC1Unormve BC2UnormBC3Unorm çoğunlukla alfayı nasıl destekledikleri konusunda farklılık gösterir. BC1 yalnızca 1 bit alfayı destekler. BC2, bloktaki her pikselin benzersiz bir 4 bit alfa değerine sahip olmasını destekler. BC3, alfa değerlerini sıkıştırır.
Blok sıkıştırmanın nasıl çalıştığı hakkında daha fazla bilgi için Direct2D Blok Sıkıştırma belgelerine ve Direct3D Blok Sıkıştırma belgelerine bakın.
Restrictions
- Tüm blok sıkıştırılmış dokuların genişliği ve yüksekliği 4'ün katı olmalıdır. Bunun nedeni blok sıkıştırmanın 4x4 piksellik bloklarda çalışmasıdır.
- Blok sıkıştırılmış dokusunun alt dikdörtgeni üzerindeki herhangi bir işlem (
GetPixelBytes()kullanarak ,SetPixelBytes(Byte[])CopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)), alt dikdörtgenin 4 piksel hizalanmış olmasını gerektirir. - Win2D, blok sıkıştırmalı biçimler kullanıldığında önceden çarpılmış alfa gerektirir.
DDS dosyaları yazma
Blok sıkıştırılmış görüntüleri DDS dosyalarına kaydedilebilir. Bunlar Photoshop veya Paint.NET gibi uygulamalara yönelik eklentilerle üretilebilse de, ortaya çıkan dosyanın önceden çarpılmış alfa ile kaydedildiğinden emin olmak için dikkatli olunmalıdır. Win2D, BC1Unorm, BC2Unorm veya BC3Unorm görüntüsü içeren tüm DDS dosyalarını yükler ve bunların önceden çarpılmış alfa ile oluşturulduğunu varsayar.
C++ projesi yazarsanız, Visual Studio belgelerinde açıklandığı gibi görüntüyü dönüştürmek için Görüntü İçeriği İşlem Hattı'nı kullanabilirsiniz.
Alternatif olarak, https://github.com/Microsoft/DirectXTex içinden texconv.exe kullanabilirsiniz.
texconv.exe DirectXTex_Desktop_2015.sln çözümü kullanılarak oluşturulabilir. Aşağıdaki komut, "smoke.png" dosyasını önceden çarpılmış alfa içeren bir BC3Unorm öğesine dönüştürür:
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer