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