Реализация 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 используется для удаления модуля записи метаданных из коллекции.
Связанные темы
-
Основные понятия