IWICFormatConverter::Initialize method (wincodec.h)
Menginisialisasi pengonversi format.
Sintaks
HRESULT Initialize(
[in] IWICBitmapSource *pISource,
[in] REFWICPixelFormatGUID dstFormat,
[in] WICBitmapDitherType dither,
[in] IWICPalette *pIPalette,
[in] double alphaThresholdPercent,
[in] WICBitmapPaletteType paletteTranslate
);
Parameter
[in] pISource
Jenis: IWICBitmapSource*
Bitmap input yang akan dikonversi
[in] dstFormat
Jenis: REFWICPixelFormatGUID
GUID format piksel tujuan.
[in] dither
Jenis: WICBitmapDitherType
WICBitmapDitherType yang digunakan untuk konversi.
[in] pIPalette
Jenis: IWICPalette*
Palet yang digunakan untuk konversi.
[in] alphaThresholdPercent
Jenis: ganda
Ambang alfa yang digunakan untuk konversi.
[in] paletteTranslate
Jenis: WICBitmapPaletteType
Jenis terjemahan palet yang digunakan untuk konversi.
Nilai kembali
Jenis: HRESULT
Jika metode ini berhasil, metode akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.
Keterangan
Jika Anda tidak memiliki palet yang telah ditentukan sebelumnya, Anda harus membuatnya terlebih dahulu. Gunakan InitializeFromBitmap untuk membuat objek palet, lalu teruskan bersama dengan parameter Anda yang lain.
dither, pIPalette, alphaThresholdPercent, dan paletteTranslate digunakan untuk mengurangi kehilangan warna saat mengonversi ke format kedalaman bit yang dikurangi. Untuk konversi yang tidak memerlukan pengaturan ini, nilai parameter berikut harus digunakan: dither diatur ke WICBitmapDitherTypeNone, pIPalette diatur ke NULL, alphaThresholdPercent diatur ke 0.0f, dan paletteTranslate diatur ke WICBitmapPaletteTypeCustom.
Algoritma dasar yang terlibat saat menggunakan dither yang diurutkan memerlukan palet tetap, yang ditemukan dalam enumerasi WICBitmapPaletteType , dalam urutan tertentu.
Seringkali, palet aktual yang disediakan untuk output mungkin memiliki urutan yang berbeda atau sedikit variasi dalam warna aktual. Ini adalah kasus saat menggunakan palet Microsoft Windows yang memiliki sedikit perbedaan di antara versi Windows.To menyediakan untuk ini, palet dan terjemahan palet diberikan ke pengonversi format. pIPalette adalah palet tujuan aktual yang akan digunakan dan paletTranslate adalah palet tetap. Setelah konversi selesai, warna dipetakan dari palet tetap ke warna aktual dalam pIPalette menggunakan algoritma pencocokan warna terdekat.
Jika warna dalam pIPalette tidak cocok erat dengan warna di paletTranslate, pemetaan dapat menghasilkan hasil yang tidak diinginkan.
WICBitmapDitherTypeOrdered4x4 dapat berguna dalam konversi format dari format 8-bit ke format 5- atau 6-bit karena tidak ada cara untuk mengonversi data warna secara akurat.
WICBitmapDitherTypeErrorDiffusion memilih algoritma diffusion kesalahan dan dapat digunakan dengan palet apa pun. Jika palet arbitrer disediakan, WICBitmapPaletteCustom harus diteruskan sebagai paletTranslate. Diffusion kesalahan sering memberikan hasil yang unggul dibandingkan dengan algoritma dithering yang diurutkan terutama ketika dikombinasikan dengan fungsionalitas pembuatan palet yang dioptimalkan pada IWICPalette.
Saat mengonversi bitmap yang memiliki saluran alfa, seperti Portable Network Graphics (PNG), menjadi 8bpp, saluran alfa biasanya diabaikan. Piksel apa pun yang transparan dalam bitmap asli muncul sebagai hitam dalam output akhir karena transparan dan hitam memiliki nilai piksel nol dalam format masing-masing.
Beberapa konten 8bpp dapat berisi warna alfa; misalnya, format Graphics Interchange Format (GIF) memungkinkan entri palet tunggal digunakan sebagai warna transparan. Untuk jenis konten ini, alphaThresholdPercent menentukan persentase transparansi apa yang harus dipetakan ke warna transparan. Karena nilai alfa berbanding lurus dengan opasitas (bukan transparansi) piksel, alphaThresholdPercent menunjukkan tingkat keburaman apa yang dipetakan ke warna yang sepenuhnya transparan.
Misalnya, 9,8% menyiratkan bahwa piksel apa pun dengan nilai alfa kurang dari 25 akan dipetakan ke warna transparan. Nilai 100% memetakan semua piksel yang tidak sepenuhnya buram ke warna transparan. Perhatikan bahwa palet harus memberikan warna transparan. Jika tidak, warna 'transparan' akan menjadi yang paling dekat dengan nol - sering hitam.
Contoh
Contoh berikut mengonversi bingkai gambar menjadi format 32bppPBGRA tanpa dithering atau ambang alfa. Direct2D memerlukan sumber bitmap dalam format 32bppPBGRA untuk penyajian. Untuk sampel lengkap yang menunjukkan penggunaan IWICFormatConverter, lihat Penampil Gambar WIC Menggunakan Sampel Direct2D.
HRESULT hr = S_OK;
IWICBitmapDecoder *pIDecoder = NULL;
IWICBitmapFrameDecode *pIDecoderFrame = NULL;
IWICFormatConverter *pIFormatConverter = NULL;
// Create the decoder.
hr = m_pIWICFactory->CreateDecoderFromFilename(
L"turtle.jpg", // Image to be decoded
NULL, // Do not prefer a particular vendor
GENERIC_READ, // Desired read access to the file
WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
&pIDecoder // Pointer to the decoder
);
// Retrieve the first bitmap frame.
if (SUCCEEDED(hr))
{
hr = pIDecoder->GetFrame(0, &pIDecoderFrame);
}
// Create the flip/rotator.
if (SUCCEEDED(hr))
{
hr = m_pIWICFactory->CreateFormatConverter(&pIFormatConverter);
}
// Initialize the format converter.
if (SUCCEEDED(hr))
{
hr = pIFormatConverter->Initialize(
pIDecoderFrame, // Input source to convert
GUID_WICPixelFormat32bppPBGRA, // Destination pixel format
WICBitmapDitherTypeNone, // Specified dither pattern
NULL, // Specify a particular palette
0.f, // Alpha threshold
WICBitmapPaletteTypeCustom // Palette translation type
);
}
//Create render target and D2D bitmap from IWICBitmapSource
if (SUCCEEDED(hr))
{
hr = CreateDeviceResources(hWnd);
}
if (SUCCEEDED(hr))
{
// Need to release the previous D2DBitmap if there is one
SafeRelease(&m_pD2DBitmap);
hr = m_pRT->CreateBitmapFromWicBitmap(pIFormatConverter, NULL, &m_pD2DBitmap);
}
SafeRelease(&pIFormatConverter);
SafeRelease(&pIDecoderFrame);
SafeRelease(&pIDecoder);
Persyaratan
Klien minimum yang didukung | Windows XP dengan SP2, Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | wincodec.h |
Pustaka | Windowscodecs.lib |
DLL | Windowscodecs.dll |