实现 IWICMetadataBlockWriter

IWICMetadataBlockWriter

帧级编码类实现此接口以公开所有元数据块,并为每个块请求相应的元数据编写器。 如果图像格式支持全局元数据,则任何单个帧之外,还应在容器级编码器类上实现此接口。 有关元数据处理程序的更详细讨论,请参阅实现WIC-Enabled解码 器部分中有关 IWICMetadataBlockReader 的部分。

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

由于使用 IWICMetadataBlockReader 初始化 IWICMetadataBlockWriter 会为 IWICMetadataBlockReader 对象公开的每个元数据读取器实例化元数据编写器,因此应用程序不必为每个元数据块显式请求编写器。

GetWriterByIndex

GetWriterByIndex 返回第 n 个元数据块的 IWICMetadataWriter 对象,其中 n 是在 nIndex 参数中传递的值。 如果没有注册的元数据编写器可以处理第 n 个块中的元数据类型,则组件工厂将返回未知元数据处理程序,该处理程序会将元数据块视为 blob) (二进制大型对象。 它会将其序列化为位流,而无需尝试分析它。

AddWriter

AddWriter 允许调用方添加新的元数据编写器。 如果应用程序想要添加格式不同于任何现有元数据块的格式的元数据,则这是必需的。 例如,应用程序可能需要添加一些 XMP 元数据。 如果没有现有的 XMP 元数据块,则应用程序必须实例化 XMP 元数据编写器,并使用 AddWriter 方法将其包含在元数据编写器集合中。

SetWriterByIndex

SetWriterByIndex 用于在集合中的特定索引处添加元数据编写器。 如果元数据编写器当前位于该索引处,则新索引应替换它。

RemoveWriterByIndex

RemoveWriterByIndex 用于从集合中删除元数据编写器。

概念性

实现 IWICBitmapFrameEncode

CODEC 安装和注册

如何编写WIC-Enabled CODEC

Windows 映像组件概述