Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CanvasBitmap mendukung bitmap terkompresi blok. Ini dapat dimuat dari file DDS, atau dibuat dengan CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat).
Bitmap terkompresi blok sangat bagus untuk aplikasi berat bitmap (seperti game) karena membutuhkan lebih sedikit memori dan dapat digambar lebih efisien. Bitmap terkompresi blok menggunakan hingga 1/8 memori bitmap yang tidak dikompresi. Akibatnya, GPU perlu mengakses memori yang jauh lebih sedikit saat menggambar bitmap, menghasilkan gambar yang lebih cepat.
Tentang kompresi blok
Kompresi blok berbeda dengan kompresi yang digunakan oleh file PNG atau JPG. Format file terkompresi disimpan dikompresi tetapi ketika dimuat oleh Win2D, format file tersebut didekompresi ke dalam bitmap dengan format seperti DirectXPixelFormat::B8G8R8A8UIntNormalized, yang menggunakan 32 bit (4 byte) per piksel. Jadi bitmap 256x256 akan memakan waktu 256 * 256 * 4 = 262.144 byte.
Bitmap terkompresi blok menggunakan 8 atau 16 byte (tergantung pada format -- lebih lanjut tentang ini nanti) untuk menyimpan blok piksel 4x4. Jadi dalam hal ini bitmap 256x256 akan memakan waktu 256 * 256 / (4 * 4) * 8 = 32.768 byte, atau 256 * 256 / (4 * 4) * 16 = 65.536 byte. Itu hingga 8 kali lebih kecil! Karena kompresi blok didukung langsung oleh perangkat keras GPU, bitmap dapat disimpan dikompresi dalam memori dan digambar langsung dari format terkompresi tanpa harus benar-benar membongkarnya.
Win2D mendukung tiga format terkompresi blok. Tabel di bawah ini menjelaskan format ini, bersama dengan format yang tidak dikompresi untuk perbandingan.
DirectXPixelFormat |
Ukuran bitmap 4x4 | Ukuran bitmap 256x256 | Alpha |
|---|---|---|---|
BC1Unorm |
8 byte | 32.768 byte | 1 bit |
BC2Unorm |
16 byte | 65.536 byte | 4 bit |
BC3Unorm |
16 byte | 65.536 byte | ~8 bit (terkompresi) |
B8G8R8A8UintNormalized |
64 byte | 262.144 byte | 8 bit |
BC1Unorm, BC2Unorm dan BC3Unorm sebagian besar berbeda dalam cara mereka mendukung alfa. BC1 hanya mendukung alfa 1-bit. BC2 mendukung setiap piksel dalam blok yang memiliki nilai alfa 4-bit yang unik. BC3 memadatkan nilai alfa.
Lihat dokumentasi Kompresi Blok Direct2D dan dokumentasi Kompresi Blok Direct3D untuk informasi selengkapnya tentang cara kerja kompresi blok.
Batasan
- Semua tekstur terkompresi blok harus memiliki lebar dan tinggi yang merupakan kelipatan 4. Ini karena kompresi blok berfungsi pada blok 4x4 piksel.
- Setiap operasi pada sub-persegi panjang tekstur terkompresi blok (menggunakan
GetPixelBytes(), ,SetPixelBytes(Byte[])CopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)) mengharuskan sub-persegi panjang selaras 4 piksel. - Win2D memerlukan alfa yang telah diisi sebelumnya saat menggunakan format terkompresi blok.
Menulis file DDS
Gambar terkompresi blok dapat disimpan dalam file DDS. Meskipun ini dapat dihasilkan oleh plugin ke aplikasi seperti Photoshop atau Paint.NET, perawatan harus dilakukan untuk memastikan bahwa file yang dihasilkan disimpan dengan alfa yang telah ditentukan sebelumnya. Win2D akan memuat file DDS apa pun yang BC1Unormberisi , BC2Unorm atau BC3Unorm gambar dan mengasumsikan bahwa file tersebut ditulis dengan alfa yang telah ditentukan sebelumnya.
Jika Anda menulis proyek C++ maka Anda dapat menggunakan Alur Konten Gambar untuk mengonversi gambar, seperti yang dijelaskan pada MSDN.
Atau, Anda dapat menggunakan texconv.exe dari https://github.com/Microsoft/DirectXTex. texconv.exe dapat dibangun menggunakan solusi DirectXTex_Desktop_2015.sln. Perintah berikut mengonversi "smoke.png" menjadi BC3Unorm dengan alfa yang telah diisi sebelumnya:
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer