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 。
[in] pIPalette
類型: IWICPalette*
要用於轉換的調色盤。
[in] alphaThresholdPercent
類型: double
要用於轉換的 Alpha 臨界值。
[in] paletteTranslate
要用於轉換的調色盤轉譯類型。
傳回值
類型: HRESULT
如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
如果您沒有預先定義的調色盤,您必須先建立一個。 使用 InitializeFromBitmap 建立調色盤物件,然後將它與其他參數一起傳入。
dither、 pIPalette、 AlphaThresholdPercent和 paletteTranslate 是用來降低轉換成縮小位深度格式時的色彩遺失。 對於不需要這些設定的轉換,應該使用下列參數 值:將 設定為 WICBitmapDitherTypeNone、 pIPalette 設定為 Null、 AlphaThresholdPercent 設定為 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 |