共用方式為


譯碼概觀

本主題介紹位圖解碼器,這是核心的 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 譯碼器

概念

Windows 映射元件概觀

編碼概觀

元件開發