Implementando IWICMetadataBlockWriter

IWICMetadataBlockWriter

A classe de codificação no nível do quadro implementa essa interface para expor todos os blocos de metadados e solicitar o gravador de metadados apropriado para cada bloco. Se o formato de imagem der suporte a metadados globais, fora de qualquer quadro individual, você também deverá implementar essa interface na classe de codificador no nível do contêiner. Para obter uma discussão mais detalhada sobre manipuladores de metadados, consulte a seção no IWICMetadataBlockReader na seção sobre Como implementar um decodificador de 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 usa um IWICMetadataBlockReader para inicializar o gravador de blocos. Você pode obter o IWICMetadataBlockReader do decodificador que decodificou a imagem.

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]);
}

Como inicializar o IWICMetadataBlockWriter com um IWICMetadataBlockReader cria uma instância de um gravador de metadados para cada leitor de metadados exposto pelo objeto IWICMetadataBlockReader , o aplicativo não precisa solicitar explicitamente um gravador para cada bloco de metadados.

GetWriterByIndex

GetWriterByIndex retorna o objeto IWICMetadataWriter para o nth metadata block, em que n é o valor passado no parâmetro nIndex . Se não houver nenhum gravador de metadados registrado que possa lidar com o tipo de metadados no nº bloco, a fábrica de componentes retornará o Manipulador de Metadados Desconhecido, que tratará o bloco de metadados como um BLOB (objeto binário grande). Ele o serializará como um fluxo de bits sem tentar analisá-lo.

AddWriter

AddWriter permite que um chamador adicione um novo gravador de metadados. Isso será necessário se um aplicativo quiser adicionar metadados de um formato diferente de qualquer um dos blocos de metadados existentes. Por exemplo, um aplicativo pode querer adicionar alguns metadados XMP. Se não houver nenhum bloco de metadados XMP existente, o aplicativo deverá criar uma instância de um gravador de metadados XMP e usar o método AddWriter para incluí-lo na coleção de gravadores de metadados.

SetWriterByIndex

SetWriterByIndex é usado para adicionar um gravador de metadados a um índice específico na coleção. Se um gravador de metadados existir no momento nesse índice, o novo deverá substituí-lo.

RemoveWriterByIndex

RemoveWriterByIndex é usado para remover um gravador de metadados da coleção.

Conceitual

Implementando IWICBitmapFrameEncode

Instalação e registro do CODEC

Como escrever uma WIC-Enabled CODEC

Visão geral do componente de imagem do Windows