Реализация IWICMetadataBlockWriter

IWICMetadataBlockWriter

Класс кодирования на уровне кадра реализует этот интерфейс для предоставления всех блоков метаданных и запроса соответствующего модуля записи метаданных для каждого блока. Если формат изображения поддерживает глобальные метаданные за пределами любого отдельного кадра, этот интерфейс также следует реализовать в классе кодировщика уровня контейнера. Более подробное описание обработчиков метаданных см. в разделе IWICMetadataBlockReader раздела Реализация декодера WIC-Enabled.

interface IWICMetadataBlockWriter : IWICMetadataBlockReader
{
   // All methods required
   HRESULT InitializeFromBlockReader ( IWICMetadataBlockReader *pIMDBlockReader );
   HRESULT GetWriterByIndex ( UINT nIndex, IWICMetadataWriter **ppIMetadataWriter );
   HRESULT AddWriter (IWICMetadataWriter *pIMetadataWriter );
   HRESULT SetWriterByIndex ( UINT nIndex, IWICMetadataWriter *pIMetadataWriter );
   HRESULT RemoveWriterByIndex ( UINT nIndex );
}

InitializeFromBlockReader

InitializeFromBlockReader использует IWICMetadataBlockReader для инициализации модуля записи блоков. IWICMetadataBlockReader можно получить из декодера, который декодировал изображение.

UINT blockCount = 0;
IWICMetadataReader* pMetadataReader = NULL;
IWICMetadataWriter** ppMetadataWriter = NULL;
HRESULT hr;

hr = m_pBlockReader->GetCount(&blockCount);
ppMetadataWriter = IWICMetadataWriter*[blockCount];

for (UINT x=0; x < blockCount; x++)
{
   hr = m_pBlockReader->GetReaderByIndex(&pMetadataReader);
   hr = m_pComponentFactory->CreateMetadataWriterFromReader(
         pMetadataReader, NULL, &ppMetadataWriter[x]);
}

Так как при инициализации IWICMetadataBlockWriter с помощью IWICMetadataBlockReader создается экземпляр модуля записи метаданных для каждого средства чтения метаданных, предоставляемого объектом IWICMetadataBlockReader , приложению не нужно явно запрашивать модуль записи для каждого блока метаданных.

GetWriterByIndex

GetWriterByIndex возвращает объект IWICMetadataWriter для n-го блока метаданных, где n — это значение, переданное в параметре nIndex . Если не зарегистрирован модуль записи метаданных, который может обрабатывать тип метаданных в n-м блоке, фабрика компонентов вернет обработчик неизвестных метаданных, который будет обрабатывать блок метаданных как большой двоичный объект (BLOB). Он сериализует его в виде битового потока, не пытаясь проанализировать его.

AddWriter

AddWriter позволяет вызывающей объекту добавлять новый модуль записи метаданных. Это необходимо, если приложение хочет добавить метаданные в формате, отличном от формата любого из существующих блоков метаданных. Например, приложению может потребоваться добавить некоторые метаданные XMP. Если блок метаданных XMP отсутствует, приложение должно создать экземпляр модуля записи метаданных XMP и использовать метод AddWriter , чтобы включить его в коллекцию средств записи метаданных.

SetWriterByIndex

SetWriterByIndex используется для добавления модуля записи метаданных по определенному индексу в коллекции. Если модуль записи метаданных в настоящее время существует в этом индексе, его должен заменить новый.

RemoveWriterByIndex

RemoveWriterByIndex используется для удаления модуля записи метаданных из коллекции.

Основные понятия

Реализация IWICBitmapFrameEncode

Установка и регистрация CODEC

Написание кодека WIC-Enabled

Общие сведения о компоненте обработки образов Windows