Поделиться через


Реализация 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 используется для добавления записи метаданных по определенному индексу в коллекции. Если модуль записи метаданных в настоящее время существует в этом индексе, новый должен заменить его.

УдалитьПисателяПоИндексу

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

концептуальные

Реализация IWICBitmapFrameEncode

Инсталляция и регистрация CODEC

Как написать WIC-Enabled кодек

обзор компонента обработки изображений Windows