Gambaran umum format Foto HD

Topik ini menyediakan informasi tentang codec Hd Photo asli (bawaan) yang tersedia melalui Komponen Pencitraan Windows (WIC).

Penting

Format HD Photo adalah implementasi pra-standar dari format JPEG XR, dan dukungan untuk HD Photo diimplementasikan oleh codec JPEG XR WIC. Untuk informasi selengkapnya, lihat Gambaran umum codec JPEG XR.

Identitas codec

Tabel berikut ini menyediakan informasi identifikasi codec.

Komponen Deskripsi
Nama Formal Foto HD, Foto Media Windows
Ekstensi Nama File wdp
Jenis MIME image/vnd.ms-photo
Tanda Tangan File Empat byte pertama: 0x4949bc00 (Versi 0; pra-rilis), 0x4949bc01 (Versi 1.0)

Tabel berikut mencantumkan GUID yang digunakan untuk mengidentifikasi komponen codec HD Photo asli.

Komponen Nama yang Mudah Diingat GUID
Format kontainer GUID_ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
Decoder CLSID_WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
Encoder CLSID_WICWmpEncoder ac4ce3cb-e1c1-44cd-82155a1665509ec2

Pengodean

API pengodean WIC dirancang untuk menjadi codec independen dan pengodean gambar untuk codec berkemampuan WIC pada dasarnya sama. Untuk informasi selengkapnya tentang pengodean gambar menggunakan WIC API, lihat Gambaran Umum Pengodean.

Opsi encoder

Codec yang diaktifkan WIC berbeda pada tingkat opsi pengodean. Opsi encoder mencerminkan kemampuan encoder gambar dan setiap codec asli mendukung serangkaian opsi encoder ini. Opsi encoder dapat menjadi opsi dasar yang didukung WIC yang tersedia untuk semua kode yang diaktifkan WIC (meskipun belum tentu didukung) atau opsi khusus codec yang dirancang oleh codec format gambar. Untuk mengelola opsi pengodean ini selama proses pengodean, WIC menggunakan antarmuka IPropertyBag2 . Untuk informasi selengkapnya tentang menggunakan antarmuka IPropertyBag2 untuk pengodean WIC, lihat Gambaran Umum Pengodean.

Codec Hd Photo menggunakan opsi WIC dasar dan menyediakan beberapa opsi pengodean khusus Hd Photo. Tabel berikut mencantumkan opsi encoder yang didukung oleh codec Hd Photo asli.

Opsi Encoder WIC Dasar

Nama Properti VARTYPE Rentang Nilai Nilai Default
ImageQuality VT_R4 0 - 1.0 0,9
Lossless VT_BOOL TRUE, FALSE SALAH
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

Opsi Encoder Khusus Foto HD

Nama Properti VARTYPE Rentang Nilai Nilai Default
UseCodecOptions VT_BOOL TRUE, FALSE SALAH
Quality VT_UI1 1 - 255 10
Tumpang tindih VT_UI1 0 - 2 1
Subsampling VT_UI1 0 - 3 3 jika ImageQuality > 0,8; jika tidak, 1;
HorizontalTileSlices VT_UI2 0 - 4095 (lebar gambar – 1) >> 8
VertikalTileSlices VT_UI2 0 - 4095 (tinggi gambar – 1) >> 8
FrequencyOrder VT_BOOL TRUE, FALSE BENAR
InterleavedAlpha VT_BOOL TRUE, FALSE SALAH
AlphaQuality VT_UI1 1 - 255 1
CompressedDomainTranscode VT_BOOL TRUE, FALSE BENAR
Kartu ImageDataDiscard VT_UI1 0 - 3 0
Kartu AlphaDataDiscard VT_UI1 0 -4 Tidak digunakan.
IgnoreOverlap VT_BOOL TRUE, FALSE SALAH

Jika opsi encoder ada dalam daftar opsi IPropertyBag2 yang tidak didukung codec, itu diabaikan.

Opsi ImageQuality

Menentukan keakuratan gambar yang diinginkan. 0.0 menunjukkan keakuratan semurah mungkin dan 1,0 menentukan keakuratan tertinggi. Untuk format gambar Foto HD, nilai 1,0 menghasilkan kompresi tanpa kehilangan secara matematis.

Nilai defaultnya adalah 0,9.

Opsi CompressionQuality

Menentukan kualitas kompresi yang diinginkan. 0.0 menunjukkan skema kompresi efisien yang tersedia. Biasanya, skema ini menghasilkan pengodean yang lebih cepat tetapi output yang lebih besar. Nilai 1.0 menentukan skema kompresi paling efisien yang tersedia, yang biasanya menghasilkan pengodean yang lebih panjang tetapi output yang lebih kecil.

Hd Photo tidak mendukung opsi encoder ini. Nilai ini diabaikan jika ada dalam daftar parameter IPropertyBag2.

Opsi lossless

Menentukan apakah akan menggunakan mode kompresi kerugian. Untuk format gambar FOTO HD, nilai ini mengambil alih nilai opsi ImageQuality .

Nilai defaultnya adalah FALSE.

Opsi BitmapTransform

Menentukan bagaimana gambar diubah selama dekode gambar. Anda harus mengatur opsi ini ke salah satu nilai enumerasi WICBitmapTransformOptions.

Nilai defaultnya adalah WICBitmapTransformOptions::WICBitmapTransformRotate0.

Opsi UseCodecOptions

Jika nilai VARIANT_TRUE opsi Kualitas, Tumpang Tindih, dan Subsampling , bukan nilai opsi.

Nilai defaultnya adalah FALSE.

Opsi kualitas

Menentukan kualitas kompresi untuk gambar. Nilai 1 menunjukkan mode tanpa kehilangan. Meningkatkan nilai menghasilkan rasio kompresi yang lebih tinggi dan kualitas gambar yang lebih rendah.

Nilai defaultnya adalah 10.

Opsi tumpang tindih

Menentukan tingkat pemrosesan tumpang tindih.

Tabel berikut mencantumkan tingkat pemrosesan tumpang tindih yang tersedia.

Nilai Deskripsi
0 Tidak ada pemrosesan tumpang tindih yang diaktifkan.
1 Satu tingkat pemrosesan tumpang tindih diaktifkan, memodifikasi nilai yang dikodekan blok 4x4 berdasarkan nilai blok tetangga.
2 Dua tingkat pemrosesan tumpang tindih diaktifkan. Selain pemrosesan tingkat pertama, nilai yang dikodekan dari blok makro 16x16 dimodifikasi berdasarkan nilai blok makro tetangga.

Nilai default adalah 1.

Opsi subsampling

Menentukan pemadatan tambahan dalam ruang klorma. Dengan cara ini, Anda dapat mempertahankan detail luminance dengan mengorbankan detail warna . Opsi ini hanya berlaku untuk gambar RGB.

Tabel berikut ini mencantumkan opsi subsampling yang tersedia.

Nilai Deskripsi
3 Pengodean 4:4:4 mempertahankan resolusi klorma penuh.
2 Pengodean 4:2:2 mengurangi resolusi klorma menjadi 1/2 resolusi luminance.
1 Pengodean 4:2:0 mengurangi resolusi klorma menjadi 1/4 resolusi luminance.
0 Pengodean 4:0:0 membuang semua konten chroma, dan mempertahankan luminance saja. Karena codec menggunakan definisi luminance yang sedikit dimodifikasi untuk meningkatkan performa, kami sarankan Anda mengonversi gambar RGB menjadi monokrom sebelum pengodean daripada menggunakan mode subsampling kroma ini.

Nilai defaultnya adalah 3 jika ImageQuality> 0,8; jika tidak, 1.

HorizontalTileSlices, opsi VerticalTileSlices

Tentukan ubin horizontal dan vertikal gambar sebelum Anda melakukan pengodean kompresi untuk performa optimal dekode wilayah . Dengan membagi gambar menjadi petak peta persegi panjang selama pengodean, Anda dapat mendekode wilayah gambar tanpa memproses seluruh aliran data terkompresi. Nilai default 0 tidak menentukan subdivisi, sehingga seluruh gambar diperlakukan sebagai petak peta tunggal. Nilai 1 untuk setiap parameter menciptakan satu horizontal dan satu divisi vertikal, secara efektif memba merupakan empat petak peta berukuran sama. Nilai maksimum 4095 untuk setiap parameter membagi gambar menjadi 4096 baris petak peta dengan 4096 petak peta per baris. Dengan kata lain, nilai parameter sama dengan jumlah petak peta horizontal dan vertikal (masing-masing) dikurangi 1. Petak peta tidak boleh lebih kecil dari 16 piksel dalam lebar atau tinggi, sehingga encoder Foto HD mungkin menyesuaikan parameter ini untuk mempertahankan ukuran petak peta minimum yang diperlukan. Karena ada overhead penyimpanan dan pemrosesan yang terkait dengan setiap petak peta, Anda harus memilih nilai-nilai ini dengan hati-hati untuk memenuhi skenario tertentu.

HorizontalTileSlices: Nilai defaultnya adalah (Lebar Gambar – 1) >> 8.

VerticalTileSlices: Nilai defaultnya adalah (Tinggi Gambar – 1) >> 8.

Opsi FrequencyOrder

Menentukan bahwa gambar harus dikodekan dalam urutan frekuensi. Data frekuensi terendah muncul terlebih dahulu dalam file, dan konten gambar dikelompokkan berdasarkan frekuensinya daripada orientasi spasialnya. Mengatur file berdasarkan urutan frekuensi memberikan performa terbaik untuk setiap decoding berbasis frekuensi, dan oleh karena itu kami merekomendasikannya. Implementasi perangkat pengode Foto HD dapat mengatur file dalam urutan spasial untuk mengurangi jejak memori yang diperlukan selama pengodean.

Nilai defaultnya adalah TRUE dan kami menyarankan agar aplikasi dan perangkat selalu menggunakan urutan frekuensi kecuali Anda memiliki alasan performa atau khusus aplikasi untuk menggunakan urutan spasial.

Opsi InterleavedAlpha

Mengatur opsi ini ke TRUE menginstruksikan codec untuk mengodekan informasi saluran alfa sebagai saluran interleaved tambahan, tanpa korelasi ke saluran konten gambar. Mode ini berguna ketika Anda perlu mendekode alfa secara bersamaan dengan gambar dalam skenario streaming.

Mengatur parameter ini ke FALSE menghasilkan saluran alfa planar, dikodekan sebagai gambar terpisah dengan nilai Kualitas opsionalnya sendiri. Dengan menggunakan saluran alfa Planar, Anda dapat mendekode data gambar dan saluran alfa secara independen. Saluran alfa interleaved hanya didukung untuk format piksel RGB tertentu. Anda dapat mengaitkan saluran alfa Planar dengan format gambar apa pun yang menentukan saluran alfa.

Nilai defaultnya adalah FALSE.

Opsi AlphaQuality

Menentukan kualitas kompresi untuk gambar saluran alfa planar. Nilai 1 set mode lossless. Meningkatkan nilai menghasilkan rasio kompresi yang lebih tinggi dan kualitas gambar yang lebih rendah.

Nilai default adalah 1.

Opsi CompressedDomainTranscode

Dengan menggunakan HD Photo, Anda dapat melakukan sejumlah operasi transformasi file tanpa benar-benar mendekode data terkompresi dan mengodekannya kembali ke file tujuan. Operasi domain terkompresi sangat efisien dan menghindari kehilangan kualitas tambahan yang khas ketika Anda mendekode dan mengodekan ulang gambar yang dikompresi lossy.

Operasi domain terkompresi berikut ini didukung:

  • Memangkas wilayah gambar.
  • Lakukan transformasi rotasi/balik.
  • Buang data frekuensi (memungkinkan untuk membuat file gambar yang lebih kecil.)
  • Mengatur ulang gambar antara urutan spasial dan frekuensi berurutan.

Pengode Foto HD melakukan operasi transcode domain terkompresi saat mengodekan gambar Foto HD dengan menggunakan dekoder Foto HD sebagai sumber gambar. Bergantung pada opsi pengodean yang Anda pilih, codec menggunakan operasi domain terkompresi jika memungkinkan. Jika aplikasi memilih untuk secara eksplisit menghambat operasi transcode domain terkompresi, Anda harus mengatur opsi UseCodecOptions ke TRUE dan opsi CompressedDomainTranscode ke FALSE.

Ketika codec melakukan operasi domain terkompresi, hanya parameter encoder dan pengaturan properti tertentu yang diizinkan.

Nilai defaultnya adalah TRUE dan kami menyarankan agar aplikasi dan perangkat selalu menggunakan urutan frekuensi kecuali Anda memiliki alasan performa atau aplikasi tertentu untuk menggunakan urutan spasial.

Opsi ImageDataDiscard

Parameter ini hanya valid jika opsi CompressedDomainTranscode adalah TRUE; jika tidak, parameter tersebut diabaikan. ImageDataDiscard menentukan jumlah data gambar yang akan dibuang selama transcode domain terkompresi. Jika gambar berisi saluran alfa yang saling terkait, pembuangan data ini juga berlaku untuk saluran alfa, dengan pengecualian seperti yang dijelaskan nanti di bagian ini.

Nilai berikut diperbolehkan.

Nilai Deskripsi
0 Tidak ada data frekuensi gambar yang dibuang.
1 FlexBits dibuang, membuat pengurangan kualitas gambar yang ditranskodekan tanpa mengubah resolusi gambar yang efektif. Pengurangan ukuran file yang tepat atau pengurangan kualitas tertentu tergantung pada banyak faktor dan tidak dapat ditentukan atau diprediksi. Nilai ini menghasilkan kesalahan jika Anda menentukannya untuk saluran alfa yang saling berhubungan.
2 Pita data frekuensi HighPass dibuang (yang juga mencakup FlexBits), secara efektif mengurangi resolusi gambar yang ditranskodekan dengan faktor 4 di kedua dimensi. Dimensi aktual dari gambar yang ditranskodekan tetap sama, tetapi kehilangan semua detail di setiap blok piksel 4x4. Oleh karena itu, Anda harus menurunkan sampel gambar yang ditranskodekan sesuai setiap kali Anda mendekodenya.
3 Pita data frekuensi HighPass dan LowPass dibuang (yang juga mencakup FlexBits), secara efektif mengurangi resolusi gambar yang ditranskodekan dengan faktor 16 di kedua dimensi. Dimensi aktual dari gambar yang ditranskodekan tetap sama, tetapi kehilangan semua detail dalam setiap blok makro 16x16 piksel. Oleh karena itu, Anda harus menurunkan sampel gambar yang ditranskodekan sesuai setiap kali Anda mendekodenya.

Nilai default adalah 0.

Opsi AlphaDataDiscard

Opsi ini hanya valid jika properti CompressedDomainTranscode TRUE dan gambar berisi saluran alfa planar atau interleaved; jika tidak, itu diabaikan. Ini menentukan jumlah data frekuensi alfa yang akan dibuang selama transcode domain terkompresi. Nilai berikut diizinkan untuk saluran alfa planar.

Nilai Deskripsi
0 Tidak ada data frekuensi gambar yang dibuang.
1 FlexBits dibuang, membuat pengurangan kualitas saluran alfa planar untuk gambar yang ditranskodekan tanpa mengubah resolusi yang efektif. Pengurangan ukuran file yang tepat atau pengurangan kualitas tertentu tergantung pada banyak faktor dan tidak dapat ditentukan atau diprediksi.
2 Pita data frekuensi HighPass dibuang (yang juga mencakup FlexBits), secara efektif mengurangi resolusi saluran alfa planar gambar yang ditranskodekan dengan faktor 4 di kedua dimensi. Dimensi aktual dari gambar yang ditranskodekan tetap sama, tetapi gambar kehilangan semua detail saluran alfa planar di setiap blok piksel 4x4. Oleh karena itu, gambar yang ditranskodekan harus di-down-sample sesuai setiap kali didekodekan. Biasanya, Anda harus mengatur nilai ini hanya ketika Anda mengatur properti ImageDataDiscard ke nilai yang sama.
3 Pita data frekuensi HighPass dan LowPass dibuang (yang juga mencakup FlexBits), secara efektif mengurangi resolusi gambar yang ditranskodekan dengan faktor 16 di kedua dimensi. Dimensi aktual dari gambar yang ditranskodekan tetap sama, tetapi gambar kehilangan semua detail dalam setiap blok makro 16x16 piksel. Oleh karena itu, gambar yang ditranskodekan harus di-down-sample sesuai setiap kali didekodekan. Biasanya, Anda harus mengatur nilai ini hanya ketika Anda mengatur properti ImageDataDiscard ke nilai yang sama.
4 Saluran Alpha benar-benar dibuang. Format piksel gambar yang ditranskodekan diubah untuk mencerminkan penghapusan saluran alfa.

Untuk gambar yang berisi saluran alfa yang terjalin, kecuali properti ini diatur ke 4, saluran alfa diproses sama dengan data gambar, sesuai dengan nilai properti ImageDataDiscard. Jika properti ini diatur ke 4, saluran alfa yang diselingi benar-benar dibuang dan format piksel gambar yang ditranskodekan diubah.

Tidak ada nilai default.

Opsi IgnoreOverlap

Opsi ini hanya valid jika properti CompressedDomainTranscode TRUE dan transkode sub-wilayah tepat satu atau beberapa petak peta diminta. Operasi default untuk transcode wilayah (atau dekode) adalah memperluas wilayah yang diminta untuk menyertakan piksel sekitarnya yang diperlukan untuk decoding tumpang tindih tepi wilayah. Ketika parameter ini diatur ke TRUE, piksel di sekitarnya diabaikan dan hanya petak peta atau petak peta yang dipilih yang diekstrak. Sekali lagi, ini mengharuskan wilayah yang diminta sama persis dengan koordinat satu atau beberapa petak peta. Jika gambar sumber tidak diurutkan atau jika wilayah yang diminta menentukan petak peta parsial apa pun, parameter ini diabaikan.

Nilai defaultnya adalah FALSE.

Decoding

API decoding WIC dirancang untuk menjadi codec-independen dan decoding gambar untuk codec yang diaktifkan WIC pada dasarnya sama. Untuk informasi selengkapnya tentang pendekodean gambar, lihat Gambaran Umum Decoding. Untuk informasi selengkapnya tentang menggunakan data gambar yang didekodekan, lihat Gambaran Umum Sumber Bitmap.

Dukungan IWICBitmapSourceTransform

Selain antarmuka yang diperlukan untuk menjadi codec berkemampuan WIC, dekoder Hd Photo asli juga mendukung IWICBitmapSourceTransform. Antarmuka IWICBitmapSourceTransform menyediakan opsi tingkat lanjut untuk mendekode aliran bit gambar. Daripada hanya mengembalikan gambar lengkap menggunakan IWICBitmapFrameDecode, antarmuka IWICBitmapSourceTransform memungkinkan opsi dekoder berikut.

  • Dekodekan sub-wilayah persegi panjang gambar.
  • Dekode ke resolusi yang lebih rendah
  • Dekode ke format piksel yang berbeda
  • Melakukan transformasi (rotasi/balik) saat mendekode

Codec Hd Photo asli menyediakan tingkat dukungan berikut untuk antarmuka IWICBitmapSourceTransform.

DoesSupportTransform

Implementasi asli mendukung semua transformasi WICBitmapTransformOptions.

GetClosestSize

Untuk permintaan yang kurang dari 1/2 dimensi gambar sumber di kedua dimensi, HD Photo mengembalikan ukuran gambar bilangan bulat terbesar berikutnya yang dibagi secara merata dengan faktor dua. Untuk semua ukuran lain yang diminta, Hd Photo mengembalikan dimensi gambar asli.

GetClosestPixelFormat

Hd Photo mengembalikan format piksel gambar yang dikodekan.

CopyPixels

Hd Photo menerima wilayah yang diminta yang ditentukan oleh parameter WICRect dan mengembalikan bagian gambar tersebut.

Parameter uiWidth dan uiHeight harus menentukan dimensi seperti yang dikembalikan oleh fungsi GetClosestSize. Nilai lain mengembalikan kesalahan.

Parameter pguidDstFormat harus menentukan format piksel yang dikembalikan oleh fungsi GetClosestPixelFormat . Nilai lain mengembalikan kesalahan.

Hd Photo menerima nilai yang diizinkan untuk parameter dstTransform . Perhatikan bahwa nilai yang diizinkan oleh WIC untuk parameter ini berbeda dari nilai yang digunakan oleh Foto HD untuk tag metadata Transformasi.