共用方式為


IWICFormatConverter::Initialize 方法 (wincodec.h)

初始化格式轉換程式。

語法

HRESULT Initialize(
  [in] IWICBitmapSource      *pISource,
  [in] REFWICPixelFormatGUID dstFormat,
  [in] WICBitmapDitherType   dither,
  [in] IWICPalette           *pIPalette,
  [in] double                alphaThresholdPercent,
  [in] WICBitmapPaletteType  paletteTranslate
);

參數

[in] pISource

類型: IWICBitmapSource*

要轉換的輸入點陣圖

[in] dstFormat

類型: REFWICPixelFormatGUID

目的地像素格式 GUID。

[in] dither

類型: WICBitmapDitherType

用於轉換 的 WICBitmapDitherType

[in] pIPalette

類型: IWICPalette*

要用於轉換的調色盤。

[in] alphaThresholdPercent

類型: double

要用於轉換的 Alpha 臨界值。

[in] paletteTranslate

類型: WICBitmapPaletteType

要用於轉換的調色盤轉譯類型。

傳回值

類型: HRESULT

如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

如果您沒有預先定義的調色盤,您必須先建立一個。 使用 InitializeFromBitmap 建立調色盤物件,然後將它與其他參數一起傳入。

ditherpIPaletteAlphaThresholdPercentpaletteTranslate 是用來降低轉換成縮小位深度格式時的色彩遺失。 對於不需要這些設定的轉換,應該使用下列參數 值:將 設定為 WICBitmapDitherTypeNonepIPalette 設定為 NullAlphaThresholdPercent 設定為 0.0f而 paletteTranslate 設定為 WICBitmapPaletteTypeCustom

使用已排序 der 時所涉及的基本演算法需要特定順序的 WICBitmapPaletteType 列舉中找到固定調色盤。

通常,為輸出提供的實際調色盤可能會有不同的排序,或實際色彩有一些微變化。 使用 Microsoft Windows 調色盤時,在針對此版本提供 Windows.To 稍有差異時,會將調色盤和調色盤轉譯提供給格式轉換器。 pIPalette是要使用的實際目的地選擇區,而 paletteTranslate是固定調色盤。 轉換完成後,色彩會使用最接近的色彩比對演算法,從固定調色盤對應到 pIPalette 中的實際色彩。

如果 pIPalette 中的色彩不符合 paletteTranslate中的色彩,則對應可能會產生不想要的結果。

WICBitmapDitherTypeOrdered4x4 在從 8 位格式轉換成 5 位或 6 位格式的格式時很有用,因為無法正確轉換色彩資料。

WICBitmapDitherTypeErrorDiffusion 會選取錯誤壓縮演算法,而且可以搭配任何調色盤使用。 如果提供任意調色盤, 則 WICBitmapPaletteCustom 應該以 paletteTranslate的形式傳入。 相較于已排序的任一演算法,錯誤隔離通常會提供較佳的結果,特別是與 IWICPalette上的優化調色盤產生功能結合時。

將具有 Alpha 色板的點陣圖轉換成 8bpp 時,例如可攜式網狀圖形 (PNG) ,通常會忽略 Alpha 色板。 原始點陣圖中透明的任何圖元都會在最終輸出中顯示為黑色,因為透明和黑色都有個別格式的圖元值為零。

某些 8bpp 內容可以包含 Alpha 色彩;例如,圖形交換格式 (GIF) 格式可讓單一調色盤專案當做透明色彩使用。 針對這種類型的內容, AlphaThresholdPercent 會指定透明度應該對應至透明色彩的百分比。 因為 Alpha 值與不透明度直接成正比, (不是圖元的透明度) , AlphaThresholdPercent 會指出哪個不透明度層級對應至完全透明色彩。

例如,9.8% 表示任何 Alpha 值小於 25 的圖元都會對應至透明色彩。 值為 100% 會將所有不透明圖元對應至透明色彩。 請注意,調色盤應該提供透明色彩。 如果沒有,則「透明」色彩會是最接近零的色彩,通常是黑色。

範例

下列範例會將影像框架轉換成 32bppPBGRA 格式,不含重複或 Alpha 臨界值。 Direct2D 需要點陣圖來源採用 32bppPBGRA 格式進行轉譯。 如需示範 使用 IWICFormatConverter的完整範例,請參閱 使用 Direct2D 範例的 WIC 影像檢視器

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);

規格需求

   
最低支援的用戶端 Windows XP 搭配 SP2、Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincodec.h
程式庫 Windowscodecs.lib
Dll Windowscodecs.dll