Реализация декодера WIC-Enabled
Для реализации декодера компонента образов Windows (WIC) требуется написание двух классов. Интерфейсы этих классов непосредственно соответствуют обязанностям декодировщика, описанным в разделе ДекодированиеКак работает компонент обработки изображений Windows.
Один из классов предоставляет службы уровня контейнера и реализует интерфейс IWICBitmapDecoder. Если формат изображения поддерживает метаданные уровня контейнера, необходимо также реализовать интерфейс IWICMetadataBlockReader в этом классе. Рекомендуется поддерживать интерфейс IWICBitmapCodecProgressNotification на декодере и кодировщике для обеспечения лучшего взаимодействия с пользователем.
Другой класс, который будет реализован, предоставляет службы уровня кадров и выполняет фактическое декодирование битов изображения для каждого кадра в контейнере. Этот класс реализует интерфейс IWICBitmapFrameDecode и интерфейс IWICMetadataBlockReader. Если вы пишете декодировщик для необработанного формата, вы также реализуете интерфейс IWICDevelopRaw в этом классе. В дополнение к необходимым интерфейсам настоятельно рекомендуется реализовать интерфейс IWICBitmapSourceTransform в этом классе, чтобы обеспечить оптимальную производительность для формата изображения.
Одним из объектов, предоставляемых WIC, является ImagingFactory. Для создания различных компонентов часто используется интерфейс IWICComponentFactory в этом объекте. Поскольку он используется часто, следует хранить ссылку на него в качестве свойства в обоих классах: декодировщика и кодировщика.
IWICImagingFactory* m_pImagingFactory = NULL;
IWICComponentFactory* m_pComponentFactory = NULL;
HRESULT hr;
hr = CoCreateInstance(CLSID_WICImagingFactory, NULL,
CLSCTX_INPROC_SERVER, IID_IWICImagingFactory,
(LPVOID*) m_pImagingFactory);
hr = m_pImagingFactory->QueryInterface(
IID_IWICComponentFactory, (void**)&m_pComponentFactory);
Связанные разделы
-
концептуальные