Cara kerja Komponen Pencitraan Windows
Penemuan dan arbitrase
Sebelum gambar dapat didekodekan, codec yang sesuai harus ditemukan yang dapat mendekode format gambar tersebut. Di sebagian besar sistem, karena format gambar yang didukung dikodekan secara permanen, tidak diperlukan proses penemuan. Karena platform Windows Imaging Component (WIC) dapat diperluas, anda harus dapat mengidentifikasi format gambar dan mencocokkannya dengan codec yang sesuai.
Untuk mendukung penemuan run-time, setiap format gambar harus memiliki pola identifikasi yang dapat digunakan untuk mengidentifikasi dekoder yang sesuai untuk format tersebut. (Sangat disarankan bahwa, untuk format file baru, Anda menggunakan GUID untuk pola identifikasi, karena dijamin unik.) Pola identifikasi harus disematkan di setiap file gambar yang sesuai dengan format gambar tersebut. Setiap dekoder memiliki entri registri yang menentukan pola atau pola identifikasi format gambar yang dapat didekodekannya. Ketika aplikasi perlu membuka gambar, aplikasi meminta dekoder dari WIC. WIC mencari decoder yang tersedia di registri, dan memeriksa setiap entri registri untuk pola identifikasi yang cocok dengan pola yang disematkan dalam file gambar. Untuk informasi selengkapnya tentang entri registri decoder, lihat Entri Registri Encoder-Specific
Ketika WIC menemukan satu dekoder yang cocok dengan pola identifikasi dalam gambar, WIC membuat instans dekoder dan meneruskan file gambar ke dalamnya. Jika WIC menemukan lebih dari satu kecocokan, WIC memanggil metode yang disebut QueryCapability pada setiap dekoder yang cocok untuk melakukan arbitrase di antara mereka dan menemukan kecocokan terbaik. Untuk informasi selengkapnya, lihat bagian QueryCapabilities di Menerapkan IWICBitmapDecoder.
Mendekode
Setelah dekoder yang sesuai dipilih dan dibuat, aplikasi berbicara langsung ke dekoder. Decoder memiliki beberapa tanggung jawab, yang diterapkannya melalui berbagai antarmuka. Layanan ini dapat diklasifikasikan sebagai:
- Layanan tingkat kontainer
- Layanan tingkat kerangka
- Layanan enumerasi metadata
- Transformasi dekoder bawaan
- Pemberitahuan kemajuan dan dukungan pembatalan
- Layanan pemrosesan mentah
Layanan tingkat kontainer mencakup pengambilan thumbnail tingkat atas (jika didukung), pratinjau, konteks warna, palet (jika berlaku), dan format kontainer, serta menyediakan akses ke frame gambar individual dalam kontainer. (Beberapa kontainer hanya berisi satu bingkai sementara yang lain, seperti Format File Gambar Bertag (TIFF), dapat berisi beberapa bingkai.) Serangkaian layanan ini juga termasuk memberikan informasi tentang dekoder itu sendiri, dan kemampuannya sehubungan dengan file gambar tertentu.
Bingkai individu memiliki gambar mini mereka sendiri, dan mungkin juga memiliki konteks warna, palet, dan properti lainnya sendiri, yang ditampilkan pada tingkat bingkai. Namun, operasi terpenting yang dilakukan pada tingkat bingkai adalah decoding aktual dari bit gambar untuk bingkai tersebut.
WIC menyediakan pembaca metadata untuk format metadata yang paling umum (IFD, EXIF, IPTC, XMP, APP0, APP1, dan format lainnya), dan juga mendukung ekstensibilitas untuk format metadata pihak ketiga. Ini membebaskan codec dari tanggung jawab mengurai metadata. Namun, codec bertanggung jawab untuk menghitung blok metadata dan meminta pembaca metadata untuk setiap blok. WIC melakukan penemuan untuk penangan metadata dengan cara yang sama seperti yang dilakukannya untuk codec, berdasarkan pola di header blok yang cocok dengan pola dalam entri registri penangan metadata. Untuk informasi selengkapnya, lihat Encoder-Specific Entri Registri
Dekoder tidak diwajibkan untuk mendukung operasi transformasi secara bawaan, tetapi melakukannya memungkinkan pengoptimalan performa yang signifikan, yang memberikan pengalaman yang lebih baik bagi pengguna akhir. Misalnya, aplikasi dapat membuat alur berbagai transformasi (penskalaan, pemangkasan, rotasi, dan konversi format piksel) untuk dilakukan pada gambar sebelum gambar dirender. Untuk informasi selengkapnya tentang transformasi pipeline, lihat IWICBitmapSource. Setelah membuat alur transformasi, aplikasi meminta transformasi akhir dalam alur untuk menghasilkan bitmap yang dihasilkan dari menerapkan semua transformasi ke sumber gambar. Pada titik itu, jika dekoder itu sendiri mampu melakukan operasi transformasi, WIC menanyakan transformasi mana yang diminta yang dapat dilakukannya. Setiap transformasi yang diminta yang tidak dapat dilakukan dekoder akan dilakukan oleh WIC pada gambar yang didekodekan sebelum mengembalikannya ke pemanggil. Alur transformasi yang dioptimalkan ini memberikan performa yang lebih baik daripada melakukan setiap transformasi secara berurutan dalam memori, terutama ketika beberapa atau semua transformasi dapat dicapai selama proses decoding.
Pemberitahuan kemajuan dan dukungan pembatalan memungkinkan aplikasi meminta pemberitahuan kemajuan untuk operasi yang panjang, dan juga memungkinkan aplikasi untuk memberi pengguna kesempatan untuk membatalkan operasi yang memakan waktu terlalu lama. Ini penting karena jika pengguna tidak dapat membatalkan operasi, ia mungkin merasa prosesnya telah digantung, dan mencoba membatalkannya dengan menutup aplikasi.
Antarmuka ini dijelaskan secara rinci di bagian pada Menerapkan dekoder berkemampuan WIC.
Layanan pemrosesan mentah termasuk menyesuaikan pengaturan kamera, seperti pencahayaan, kontras, dan penajaman, atau mengubah ruang warna sebelum memproses bit mentah.
Encoding
Seperti dekoder, encoder memiliki tanggung jawab yang mereka terapkan melalui antarmuka. Layanan yang disediakan oleh encoder melengkapi layanan yang disediakan oleh decoder, kecuali encoder menuliskan data gambar daripada membacanya. Encoder juga menyediakan layanan dalam kategori berikut:
- Layanan di tingkat kontainer
- Layanan tingkat kerangka
- Enumerasi metadata dan layanan pembaruan
- Pemberitahuan kemajuan dan dukungan pembatalan
Layanan tingkat kontainer untuk encoder termasuk mengatur gambar mini utama (jika didukung), pratinjau, dan palet (jika berlaku), serta melakukan iterasi melalui bingkai gambar individual sehingga dapat diserialkan ke dalam kontainer.
Layanan tingkat bingkai untuk encoder mirip dengan yang untuk dekoder, kecuali bahwa mereka menulis data gambar, gambar mini, dan palet terkait atau komponen lainnya, daripada membacanya.
Selain itu, layanan enumerasi metadata untuk encoder termasuk iterasi melalui blok metadata yang akan ditulis, dan memanggil penulis metadata yang sesuai untuk membuat serialisasi metadata ke disk.
Antarmuka ini dijelaskan secara rinci di bagian tentang Menerapkan encoder berkemampuan WIC.
Masa pakai codec
Codec WIC dibuat untuk menangani satu gambar, dan biasanya memiliki masa pakai yang singkat. Ini dibuat saat gambar dimuat dan dirilis saat gambar ditutup. Aplikasi dapat menggunakan sejumlah besar codec secara bersamaan dengan masa pakai yang tumpang tindih (pertimbangkan untuk menggulir melalui direktori yang berisi ratusan gambar), dan beberapa aplikasi mungkin melakukan ini secara bersamaan.
Meskipun beberapa codec memiliki masa pakai yang terlingkup pada masa pakai proses di mana mereka hidup, ini tidak terjadi dengan codec WIC. Windows Vista Photo Gallery, Windows Explorer, dan Photo Viewer, serta banyak aplikasi lainnya, dibangun di atas WIC dan akan menggunakan codec Anda untuk menampilkan gambar dan thumbnail. Jika masa pakai codec Anda dicakup hingga masa pakai proses, setiap kali gambar atau gambar mini ditampilkan di Windows Vista Explorer, codec yang dibuat untuk mendekode gambar tersebut akan tetap berada dalam memori sampai kali berikutnya pengguna memulai ulang komputernya. Jika codec Anda tidak pernah dibongkar, sumber dayanya dapat dikatakan "bocor" karena tidak dapat digunakan oleh komponen lain dalam sistem.
Cara mengaktifkan codec WIC
- Terapkan kelas dekoder tingkat kontainer dan kelas dekoder tingkat bingkai yang mengekspos antarmuka WIC yang diperlukan untuk mendekode gambar dan melakukan iterasi melalui blok metadata. Ini memungkinkan semua aplikasi berbasis WIC berinteraksi dengan codec Anda dengan cara yang sama seperti mereka berinteraksi dengan format gambar standar.
- Terapkan kelas encoder tingkat kontainer dan kelas encoder tingkat bingkai yang mengekspos antarmuka WIC yang diperlukan untuk mengodekan gambar dan menserialisasikan blok metadata ke dalam file gambar.
- Jika format kontainer Anda tidak didasarkan pada kontainer TIFF atau JPEG, Anda mungkin perlu menulis penangan metadata untuk format metadata umum (EXIF, XMP). Namun, jika Anda menggunakan format kontainer berbasis TIFF atau jpeg, ini tidak diperlukan karena Anda dapat mendelegasikan ke handler metadata yang disediakan sistem.
- Sematkan pola identifikasi unik (kami merekomendasikan GUID) di semua file gambar Anda. Ini memungkinkan format gambar Anda dicocokkan dengan codec Anda selama penemuan. Jika Anda menulis lapisan WIC untuk format gambar yang sudah ada, Anda harus menemukan pola bit yang selalu ditulis oleh encoder ke dalam file gambarnya yang unik untuk format gambar tersebut, dan menggunakannya sebagai pola identifikasi.
- Daftarkan codec Anda pada waktu penginstalan. Ini memungkinkan codec Anda ditemukan saat waktu proses dengan mencocokkan pola identifikasi dalam registri dengan pola yang disematkan dalam file gambar.
- Pada Windows 7, WIC mengharuskan codec berjenis apartemen COM "Keduanya". Ini berarti Anda harus melakukan penguncian yang sesuai untuk menangani penelepon dan penelepon lintas apartemen dalam skenario multi-utas. Untuk informasi selengkapnya, lihat bagian berikutnya tentang dukungan apartemen multi-utas.
- Dukungan untuk platform 64-bit: Untuk Windows 7, WIC akan mengharuskan codec WIC pihak ketiga dikirimkan sebagai biner asli 32-bit dan 64-bit. Selanjutnya, formulir 32-bit harus menginstal dan menjalankan pada sistem 64-bit, dan penginstal codec Windows 7 pihak ketiga harus menginstal biner 32-bit dan 64-bit pada sistem 64-bit.
Dukungan apartemen multi-utas di WIC
Objek dalam Apartemen Multi-Utas (MTA) dapat dipanggil secara bersamaan oleh sejumlah utas dalam MTA. Ini memungkinkan performa yang lebih baik pada sistem multi-inti dan skenario server tertentu. Selain itu, codec WIC dalam MTA dapat memanggil objek lain di MTA tanpa biaya marshalling yang terkait dengan panggilan antara utas di apartemen STA yang berbeda. Pada Windows 7, semua codec WIC bawaan telah diperbarui untuk mendukung MTAs, termasuk JPEG, TIFF, PNG, GIF, ICO, dan BMP. Sangat disarankan agar codec pihak ketiga ditulis untuk mendukung MTAs. Codec pihak ketiga yang tidak mendukung aplikasi multi-utas menimbulkan biaya kinerja yang signifikan dalam aplikasi multi-utas karena marshaling. Mengaktifkan dukungan MTA memerlukan sinkronisasi yang tepat untuk diimplementasikan dalam codec pihak ketiga. Implementasi yang tepat dari teknik sinkronisasi ini berada di luar cakupan makalah ini. Untuk informasi selengkapnya tentang menyinkronkan objek COM, lihat Memahami dan Menggunakan Model Utas COM.
Topik terkait
-
Konseptual