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 Resmi | Foto HD, Windows Media Photo |
Ekstensi Nama File(s) | 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 Ramah Pengguna | GUID |
---|---|---|
Format kontainer | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
Dekoder | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
Pengode | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
Encoding
API pengodean WIC dirancang untuk independen dari codec, dan pengodean gambar untuk codec yang mendukung WIC pada dasarnya dilakukan dengan cara yang sama. Untuk informasi selengkapnya tentang pengodean gambar menggunakan WIC API, lihat Gambaran Umum Pengodean .
Opsi encoder
Codec yang menggunakan WIC berbeda pada tingkat opsi pengodean. Opsi encoder mencerminkan kemampuan encoder gambar dan setiap codec asli mendukung serangkaian opsi encoder ini. Opsi encoder dapat berupa opsi dasar yang didukung oleh WIC dan tersedia untuk semua kode yang mendukung 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 antarmukaIPropertyBag2 . 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 | Tipe Variabel | Rentang Nilai | Nilai Bawaan |
---|---|---|---|
KualitasGambar | VT_R4 | 0 - 1.0 | 0.9 |
Tanpa Kehilangan | VT_BOOL | TRUE, FALSE | FALSE |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
Opsi Encoder Khusus Foto HD
Nama Properti | VARTYPE | Rentang Nilai | Nilai Bawaan |
---|---|---|---|
GunakanOpsiKodek | VT_BOOL | TRUE, FALSE | FALSE |
Kualitas | 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 |
PotonganUbinVertikal | VT_UI2 | 0 - 4095 | (tinggi gambar – 1) >> 8 |
FrequencyOrder | VT_BOOL | BENAR, SALAH | BENAR |
InterleavedAlpha | VT_BOOL | TRUE, FALSE | FALSE |
AlphaQuality | VT_UI1 | 1 - 255 | 1 |
compressedDomainTranscode | VT_BOOL | TRUE, FALSE | TRUE |
ImageDataDiscard | VT_UI1 | 0 - 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 - 4 | Tidak digunakan. |
AbaikanTumpangTindih | VT_BOOL | TRUE, FALSE | FALSE |
Jika opsi encoder ada dalam daftar opsi IPropertyBag2 yang tidak didukung oleh codec, opsi tersebut akan diabaikan.
Opsi KualitasGambar
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 Kualitas Kompresi
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 parameterIPropertyBag2.
Opsi tanpa kehilangan kualitas
Menentukan apakah akan menggunakan mode kompresi kerugian. Untuk format gambar Hd Photo, nilai ini mengambil alih nilai opsi ImageQuality.
Nilai defaultnya adalah FALSE.
Opsi BitmapTransform
Menentukan bagaimana gambar diubah selama proses dekode gambar. Anda harus mengatur opsi ini ke salah satu nilai enumerasi WICBitmapTransformOptions.
Nilai defaultnya adalah WICBitmapTransformOptions::WICBitmapTransformRotate0.
Opsi Penggunaan Codec
Jika nilai adalah VARIANT_TRUE, opsi Kualitas, Tumpang Tindih, dan Subsampling digunakan alih-alih 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 lapisan pemrosesan tumpang tindih diaktifkan, memodifikasi nilai yang sudah dikodekan dari 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 defaultnya adalah 1.
Opsi pengambilan sampel sebagian
Menentukan kompresi tambahan dalam ruang kroma. Dengan cara ini, Anda dapat mempertahankan detail pencahayaan dengan mengorbankan detail warna. Opsi ini hanya berlaku untuk gambar RGB.
Tabel berikut ini mencantumkan opsi subsampling yang tersedia.
Nilai | Deskripsi |
---|---|
3 | Enkoding 4:4:4 mempertahankan resolusi chroma penuh. |
2 | Pengodean 4:2:2 mengurangi resolusi kroma menjadi setengah dari resolusi luminansi. |
1 | Pengodean 4:2:0 mengurangi resolusi chroma menjadi ¼ dari resolusi luminansi. |
0 | Pengodean 4:0:0 membuang semua isi chroma, dan hanya mempertahankan luminansi. 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 dari gambar sebelum melakukan pengodean kompresi untuk kinerja optimal dalam 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 divisi horizontal dan satu divisi vertikal, secara efektif membagi gambar menjadi empat petak berukuran sama. Nilai maksimum 4095 untuk setiap parameter membagi gambar menjadi 4096 baris petak dengan 4096 petak 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 khusus performa atau aplikasi untuk menggunakan urutan spasial.
Opsi InterleavedAlpha
Mengatur opsi ini ke TRUE menginstruksikan codec untuk mengodekan informasi saluran alfa sebagai saluran interleaved tambahan, tanpa adanya korelasi dengan 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 mengaktifkan mode lossless. Meningkatkan nilai menghasilkan rasio kompresi yang lebih tinggi dan kualitas gambar yang lebih rendah.
Nilai defaultnya 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 pada domain terkompresi sangat efisien dan menghindari kehilangan kualitas tambahan yang khas ketika Anda mendekode dan mengodekan ulang gambar lossy terkompresi.
Operasi domain terkompresi berikut ini didukung:
- Memangkas wilayah gambar.
- Lakukan transformasi putar/balik.
- Buang data frekuensi (memungkinkan untuk membuat file gambar yang lebih kecil.)
- Menyusun ulang gambar antara urutan spasial dan urutan berdasarkan frekuensi.
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 menjadi TRUE dan opsi CompressedDomainTranscode menjadi FALSE.
Ketika codec melakukan operasi domain terkompresi, hanya parameter encoder dan pengaturan properti tertentu yang diizinkan.
- Opsi encoder dasar ImageQuality, CompressionQuality dan Lossless diabaikan.
- Opsi khusus encoder Foto HD Kualitas , Tumpang Tindih , InterleavedAlpha , dan AlphaQuality diabaikan.
- Jika ada, opsi HorizontalTileSlices dan VerticalTileSlices harus diatur ke nol. Ukuran tile dari gambar tidak dapat diubah sebagai bagian dari transcode domain terkompresi.
- Anda dapat mengubah organisasi gambar antara frekuensi dan pengurutan spasial dengan menentukan nilai yang sesuai dari opsi FrequencyOrdering.
- Rotasi kardinal dan/atau operasi flip horizontal/vertikal dapat dilakukan berdasarkan nilai yang ditentukan dalam opsi BitmapTransform encoder.
- Gambar dapat dipangkas dengan menentukan wilayah yang diinginkan menggunakan parameterWICRect dari metode encoder WriteSource.
- Data gambar dan/atau alfa dapat dibuang dengan menentukan nilai yang sesuai dalam opsi ImageDataDiscard dan/atau AlphaDataDiscard, mengurangi ukuran file yang dikodekan dan secara efektif mengurangi resolusi gambar baru.
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 ini 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, menyebabkan penurunan kualitas gambar yang telah ditranskodekan tanpa mengubah resolusi gambarnya 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 | Jalur data frekuensi HighPass dibuang (yang juga mencakup FlexBits), secara efektif mengurangi resolusi gambar yang ditranskodekan hingga 4 kali lipat 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 resolusi gambar hasil transkode setiap kali Anda mendekodenya. |
3 | Pita frekuensi data HighPass dan LowPass dibuang (termasuk juga 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 mengecilkan gambar yang telah ditranskodekan sesuai setiap kali Anda melakukan proses dekode. |
Nilai defaultnya adalah 0.
Opsi AlphaDataDiscard
Opsi ini hanya valid jika properti CompressedDomainTranscode adalah TRUE dan gambar berisi saluran alfa planar atau interleaved; jika tidak, opsi ini 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, menghasilkan pengurangan kualitas yang sewenang-wenang pada saluran planar alfa dari gambar yang ditranskodekan tanpa mengubah resolusi 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-sampel turun (down-sample) sesuai setiap kali gambar tersebut didekodekan. Biasanya, Anda harus mengatur nilai ini hanya ketika Anda mengatur properti ImageDataDiscard ke nilai yang sama. |
3 | Pita frekuensi HighPass dan LowPass dibuang (termasuk FlexBits), dengan demikian mengurangi resolusi gambar yang ditranskodekan sebanyak 16 kali 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 diambil sampel ulang sesuai setiap kali gambar tersebut 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 sepenuhnya dibuang dan format piksel gambar yang ditranskodekan diubah sesuai.
Tidak ada nilai default.
Opsi AbaikanTumpangTindih
Opsi ini hanya valid jika properti CompressedDomainTranscode adalah TRUE dan transcode sub-wilayah dari tepat satu atau lebih petak diminta. Operasi bawaan untuk transkode wilayah (atau dekode) adalah memperluas wilayah yang diminta untuk menyertakan piksel sekitarnya yang diperlukan untuk decoding tumpang tindih batas wilayah. Ketika parameter ini diatur ke TRUE, piksel sekitarnya diabaikan dan hanya petak yang dipilih yang diekstrak. Sekali lagi, ini mengharuskan wilayah yang diminta sama persis dengan koordinat satu atau beberapa petak peta. Jika gambar sumber tidak berubin atau jika wilayah yang diminta menentukan petak parsial, parameter ini diabaikan.
Nilai defaultnya adalah FALSE.
Menerjemahkan
API decoding WIC dirancang agar independen dari codec dan decoding gambar untuk codec yang kompatibel dengan WIC pada dasarnya serupa. Untuk informasi selengkapnya tentang pendekodean gambar, lihat Gambaran Umum Pendekodean. Untuk informasi selengkapnya tentang menggunakan data gambar yang didekodekan, lihat Gambaran Umum Sumber Bitmap .
Dukungan IWICBitmapSourceTransform
Selain antarmuka yang diperlukan untuk menjadi codec yang diaktifkan WIC, dekoder Foto HD 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
- Lakukan transformasi (rotasi/balik) saat mendekode
Codec HD Photo asli menyediakan tingkat dukungan berikut untuk antarmuka IWICBitmapSourceTransform.
ApakahMendukungTransformasi
Implementasi asli mendukung semua transformasi WICBitmapTransformOptions.
DapatkanUkuranTerdekat
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 fungsiGetClosestSize. 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.