Общие сведения о декодировании
В этом разделе представлен декодер растровых рисунков, основной компонент кодека компонента образов Windows (WIC), используемый для декодирования файлов изображений из потока.
В этом разделе содержатся следующие подразделы.
- Введение
- Собственные декодеры растровых изображений
- Создание декодера растрового рисунка
- Расширяемость декодера
- Связанные темы
Введение
Декодеры растровых рисунков можно рассматривать как внешний контейнер цифрового изображения и предоставляют доступ к глобальным свойствам и кадрам изображений. Некоторые форматы изображений поддерживают глобальные эскизы, предварительные просмотры, контексты цвета или метаданные, в то время как другие предоставляют эти свойства только на уровне кадра. Обратите внимание, что многие стандартные форматы изображений не поддерживают эти глобальные свойства. Таким образом, многие реализации машинного кодека, предоставляемые WIC, не поддерживают большинство этих глобальных свойств. Сведения о поддержке глобальных свойств см. в таблице в разделе Собственные декодеры растровых рисунков этой статьи.
В WIC декодеры растровых рисунков представлены интерфейсом IWICBitmapDecoder и предоставляют доступ к этим глобальным свойствам растрового рисунка и, что более важно, к кадрам, которые он содержит. Интерфейс IWICBitmapFrameDecode представляет отдельный кадр растрового изображения и подробно рассматривается в обзоре источников растровых изображений.
Собственные декодеры растровых изображений
WIC предоставляет несколько собственных реализаций интерфейса IWICBitmapDecoder для стандартных форматов веб-изображений и формата HD Photo с высоким динамическим диапазоном. В следующей таблице перечислены доступные собственные декодеры, имя идентификатора класса и поддержка глобальных свойств. Хотя функция может не поддерживать свойство, например эскизы, на глобальном уровне, формат изображения может поддерживать такие свойства на уровне отдельных кадров.
Формат образа | Имя CLSID | Эскизы | Предварительные версии | Контексты цвета | Метаданные |
---|---|---|---|---|---|
BMP | CLSID_WICBmpDecoder | Нет | Нет | Нет | Нет |
GIF | CLSID_WICGifDecoder | Нет | Нет | Нет | Да |
ICO | CLSID_WICIcoDecoder | Нет | Нет | Нет | Нет |
JPEG | CLSID_WICJpegDecoder | Нет | Нет | Нет | Нет |
PNG | CLSID_WICPngDecoder | Нет | Нет | Нет | Нет |
TIFF | CLSID_WICTiffDecoder | Нет | Нет | Нет | Нет |
Фотография в формате HD | 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.
Связанные темы
-
Основные понятия