Bagikan melalui


Gambaran Umum Decoding Progresif

Topik ini memperkenalkan decoding progresif dan cara menggunakan decoding progresif dalam aplikasi. Ini juga menyediakan panduan untuk membuat codec yang mendukung decoding progresif.

Topik ini berisi bagian berikut.

Pengantar

Decoding progresif memberikan kemampuan untuk mendekode dan merender bagian gambar secara bertahap sebelum seluruh gambar selesai diunduh. Fitur ini sangat meningkatkan pengalaman pengguna saat melihat gambar dari Internet, karena pengguna tidak perlu menunggu seluruh gambar diunduh sebelum pendekodean dapat dimulai. Pengguna dapat melihat pratinjau gambar dengan data yang tersedia jauh sebelum seluruh gambar diunduh. Fitur ini sangat penting untuk aplikasi apa pun yang digunakan untuk melihat gambar dari Internet atau dari sumber data dengan bandwidth terbatas.

Windows Imaging Component (WIC) di Windows 7 mendukung pendekodean progresif format gambar populer seperti JPEG, PNG, dan GIF. WIC juga mendukung codec non-Microsoft berkemampuan WIC yang menerapkan decoding progresif. Pengodean progresif tidak didukung dalam rilis WIC saat ini. Topik ini menguraikan decoding progresif di Windows 7 dan prosedur untuk mengaktifkan decoding progresif dalam aplikasi Anda.

Apa itu Decoding Progresif?

Decoding progresif adalah kemampuan untuk mendekode bagian gambar secara bertahap dari file gambar yang tidak lengkap. Pendekodean tradisional memerlukan file gambar lengkap sebelum pendekodean dapat dimulai. Decoding progresif dimulai setelah tingkat progresif gambar selesai diunduh. Dekoder melakukan decoding pass pada tingkat progresif gambar saat ini. Kemudian melakukan beberapa decoding pass pada gambar saat setiap tingkat progresif diunduh. Setiap pass pendekodean mengungkapkan lebih banyak gambar sampai gambar sepenuhnya diunduh dan didekodekan. Jumlah pass yang diperlukan untuk mendekode gambar lengkap tergantung pada format file gambar dan proses pengodean yang digunakan untuk membuat gambar.

Gambar harus dikodekan secara khusus untuk mengimplementasikan pendekodean progresif, tetapi tidak semua format gambar mendukungnya. Daftar berikut ini merangkum persyaratan untuk menggunakan decoding progresif.

  • File gambar harus mendukung pendekodean progresif. Sebagian besar format gambar tidak mendukung pendekodean progresif, meskipun format gambar populer JPEG, PNG, dan GIF.
  • File gambar harus dikodekan sebagai gambar progresif. File gambar yang tidak dibuat dengan pengodean gambar progresif tidak dapat menerapkan pendekodean progresif, bahkan di mana format file akan mendukungnya.
  • Codec yang mendukung decoding progresif harus tersedia. Jika codec tidak mendukung decoding progresif, gambar yang dikodekan sebagai gambar progresif akan didekodekan sebagai gambar tradisional.

Dukungan Decoding Progresif di Windows 7

Windows 7 menyediakan codec bawaan yang mendukung pendekodean progresif untuk format gambar JPEG, PNG, dan GIF. Masing-masing codec Windows 7 ini melakukan beberapa pendekodean yang diteruskan pada gambar. Setiap pass sesuai dengan tingkat dan bagian tertentu dari gambar yang didekodekan, akhirnya mengarah ke gambar yang sepenuhnya didekodekan.

Setiap format gambar menangani pendekodean progresif dengan cara yang berbeda. Tabel berikut ini menyediakan informasi tentang jumlah tingkat progresif dan metode pendekodean yang didukung oleh format pendekodean progresif Windows 7.

Format Gambar Jumlah tingkat progresif yang didukung Metode pendekodean progresif
JPEG Ditentukan oleh Gambar Meningkatkan resolusi
PNG 7 Jalinan
GIF 4 Jalinan

 

Selain itu, decoding progresif dapat diimplementasikan dalam codec dengan memberikan dukungan untuk antarmuka dan metode progresif. Jika decoding progresif tidak didukung dalam codec, maka pesan kesalahan yang sesuai harus dikembalikan jika metode ini dipanggil.

Pendekodean Progresif JPEG

Decoding progresif JPEG menyajikan data gambar pada resolusi yang semakin tinggi untuk setiap tingkat, hingga gambar resolusi penuh tersedia. Setiap tingkat gambar diatur untuk memberikan tingkat resolusi yang berbeda. Ketika tingkat yang lebih progresif tersedia, gambar ditampilkan pada resolusi yang lebih tinggi, sampai gambar resolusi penuh diselesaikan.

Jumlah tingkat yang tersedia dan resolusi yang ditetapkan di setiap tingkat sepenuhnya bergantung pada JPEG yang dikodekan. Dua gambar berikut menunjukkan contoh pendekodean progresif JPEG pada dua tingkat progresif.

contoh pendekodean progresif jpeg

Gambar di sebelah kiri didekode pada tingkat progresif 0. Gambar di sebelah kanan sepenuhnya didekode setelah lima tingkat progresif.

Pendekodean Progresif PNG/GIF

Baik pendekodean progresif PNG dan GIF menggunakan metode pendekodean progresif yang saling terkait. Proses pendekodean untuk kedua format sangat mirip.

Pendekodean Progresif PNG

File gambar PNG menyediakan tujuh tingkat progresif untuk pendekodean, seperti yang dijelaskan dalam spesifikasi PNG. Pendekodean progresif PNG diimplementasikan dengan mendekode pola piksel tertentu pada setiap lintasan dekoder. Pola dalam tabel berikut dari spesifikasi PNG direplikasi di seluruh gambar. Setiap angka menunjukkan tingkat progresif di mana piksel yang sesuai akan didekodekan.

               
1 6 4 6 2 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7
3 6 4 6 3 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7

 

Dari tabel di atas, Anda dapat menentukan piksel yang akan didekodekan dengan setiap pass decoder. Tidak seperti codec GIF Windows 7, codec Windows 7 PNG mereplikasi piksel paling kiri yang tersedia pada baris pemindaian untuk mengisi piksel kosong.

Gambar berikut menunjukkan contoh codec pendekodean progresif Windows 7 PNG pada tiga tingkat progresif.

contoh pendekodean progresif png

Gambar di kiri atas menunjukkan gambar PNG yang didekode pada tingkat progresif 0. Gambar kanan atas menunjukkan gambar PNG yang sama yang didekode pada tingkat progresif 3. Gambar bawah menunjukkan gambar yang sama sepenuhnya didekodekan setelah 7 tingkat progresif.

Pendekodean Progresif GIF

File gambar GIF menyediakan empat tingkat progresif untuk pendekodean, seperti yang dijelaskan dalam spesifikasi GIF. Setiap pass mengisi baris tertentu dalam gambar, menghasilkan gambar lengkap setelah pass keempat. Tabel berikut dari spesifikasi GIF menunjukkan baris pemindaian mana yang didekodekan oleh setiap lulus dekoder.

Nomor tingkat/nomor pass Garis pemindaian terisi Memulai garis pemindaian
1 Setiap baris pemindaian kedelapan 0
2 Setiap baris pemindaian kedelapan 4
3 Setiap baris pemindaian keempat 2
4 Setiap baris pemindaian kedua 1

 

Meskipun codec dapat menentukan konten piksel kosong pada tingkat tertentu, codec GIF Windows mengisi baris pemindaian kosong dengan mereplikasi baris pemindaian yang diisi di atas baris pemindaian kosong.

Decoding Progresif dalam Aplikasi

Antarmuka decoding progresif utama adalah antarmuka IWICProgressiveLevelControl . Untuk mendapatkan referensi ke antarmuka, kueri bingkai gambar (IWICBitmapFrameDecode) untuk IWICProgressiveLevelControl. Metode progresif kemudian dapat diakses dari antarmuka.

Kode di bawah ini memberikan contoh untuk menggunakan decoding progresif dalam aplikasi.

IWICProgressiveLevelControl *pProgressive = NULL;

HRESULT hr = (pBitmapFrame->QueryInterface(
   IID_IWICProgressiveLevelControl, 
   (void**) &pProgressive));
                
if (SUCCEEDED(hr))
{
   for (UINT uCurrentLevel = 0; SUCCEEDED(hr); uCurrentLevel++)
   {
      hr = pProgressive->SetCurrentLevel(uCurrentLevel);
               if (WINCODEC_ERR_INVALIDPROGRESSIVELEVEL == hr)
      {
         // No more levels
         break;
      }

      if (SUCCEEDED(hr))
      {
         // Output the current level
         hr = pBitmapFrame->CopyPixels(...);
      }                      
   }
}

if (pProgressive)
{
   pProgressive->Release();
}

Kode sebelumnya menyediakan fungsionalitas dasar yang diperlukan untuk menerapkan decoding progresif di sebagian besar aplikasi. Dengan menggunakan kode, tingkat progresif dapat diakses saat data piksel gambar tersedia. Fungsi SetCurrentLevel memblokir eksekusi hingga tingkat yang diminta tersedia.

Dukungan Codec Kustom untuk Decoding Progresif

Pengembang codec dapat memilih untuk mengimplementasikan IWICProgressiveLevelControl jika format gambar mereka mendukung decoding progresif. Dukungan untuk decoding progresif bukanlah persyaratan untuk penemuan dan arbitrase oleh WIC. Namun, decoding progresif sangat meningkatkan pengalaman pengguna, dan implementasi harus dipertimbangkan jika memungkinkan.

Konseptual

Gambaran Umum Komponen Pencitraan Windows

Sumber Daya Lainnya

Kompresi Digital dan Pengkodian Gambar Continuous-Tone Diam - Persyaratan dan Panduan

Format Pertukaran File JPEG

Spesifikasi GIF89a

Spesifikasi dan Ekstensi Portable Network Graphics (PNG)