本主題介紹位圖解碼器,這是核心的 Windows 影像元件 (WIC) 解碼元件,用來從資料流解碼圖像檔案。
本主題包含下列各節。
介紹
位圖譯碼器可以視為數位影像的外部容器,並提供全域屬性和影像畫面格的存取權。 某些影像格式支援全域縮圖、預覽、色彩內容或元數據,而另一些格式則只在畫面層級提供這些屬性。 不過請注意,許多標準影像格式不支持這些全域屬性。 因此,WIC 所提供的許多原生編解碼器實作都不支援大部分的全域屬性。 如需全域屬性支持的相關信息,請參閱本主題的原生位圖譯碼器一節中的表格。
在 WIC 中,位圖譯碼器會以 IWICBitmapDecoder 介面來表示,並提供位圖這些全域屬性的存取權,更重要的是,它所包含的框架。 IWICBitmapFrameDecode 介面代表個別的點陣圖框架,並在 位圖來源概觀中詳細討論。
原生位圖譯碼器
WIC 針對標準 Web 影像格式和高動態範圍 HD 相片格式,提供數個 IWICBitmapDecoder 介面的原生實作。 下表列出可用的原生譯碼器、類別標識碼名稱和全域屬性的支援。 雖然功能可能不支援全域層級的縮圖之類的屬性,但影像格式可能支援個別框架層級的這類屬性。
| 影像格式 | CLSID 名稱 | 縮圖 | 預覽 | 色彩環境 | 後設資料 |
|---|---|---|---|---|---|
| BMP | CLSID_WICBmpDecoder | 不 | 不 | 不 | 不 |
| GIF | CLSID_WICGifDecoder | 不 | 不 | 不 | 是的 |
| ICO | CLSID_WICIcoDecoder | 不 | 不 | 不 | 不 |
| JPEG | CLSID_WICJpegDecoder | 不 | 不 | 不 | 不 |
| PNG | CLSID_WICPngDecoder | 不 | 不 | 不 | 不 |
| TIFF | CLSID_WICTiffDecoder | 不 | 不 | 不 | 不 |
| 高清相片 | CLSID_WICWmpDecoder | 不 | 是的 | 不 | 不 |
建立位圖譯碼器
若要使用 WIC 譯碼影像,您必須先為目標影像格式建立 IWICBitmapDecoder 實例。 如果支持,譯碼器實例可讓您存取全域屬性和元數據,以及影像畫面格。 WIC 映像處理站 IWICImagingFactory提供數種方法來建立位圖譯碼器。 提供下列工廠方法來建立位圖解碼器。
下列程式碼示範如何使用影像檔名建立位圖解碼器,並擷取圖片的第一幀。
// Create a decoder
IWICBitmapDecoder *pDecoder = NULL;
hr = m_pIWICFactory->CreateDecoderFromFilename(
szFileName, // Image to be decoded
NULL, // Do not prefer a particular vendor
GENERIC_READ, // Desired read access to the file
WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
&pDecoder // Pointer to the decoder
);
// Retrieve the first frame of the image from the decoder
IWICBitmapFrameDecode *pFrame = NULL;
if (SUCCEEDED(hr))
{
hr = pDecoder->GetFrame(0, &pFrame);
}
譯碼器擴充性
WIC 的核心功能之一是擴充性架構,可讓編解碼器開發人員開發自己的映像編解碼器,並取得與映像編解碼器原生實作相同的平台支援。 不論影像格式為何,所有影像處理都會使用單一且一致的介面集。 只要安裝編解碼器,任何使用 WIC 的應用程式都會自動支援新的映像格式。 如需編解碼器開發的詳細資訊,請參閱 元件開發中的主題。 如需譯碼器開發的詳細資訊,請參閱 實作 WIC-Enabled 譯碼器。
相關主題