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 番目のブロック内のメタデータの種類を処理できるメタデータ ライターが登録されていない場合、コンポーネント ファクトリは Unknown Metadata Handler を返します。これにより、メタデータのブロックがバイナリ ラージ オブジェクト (BLOB) として扱われます。 解析を試みることなく、ビット ストリームとしてシリアル化されます。

AddWriter

AddWriter を使用すると、呼び出し元は新しいメタデータ ライターを追加できます。 これは、アプリケーションが既存のメタデータ ブロックとは異なる形式のメタデータを追加する場合に必要です。 たとえば、アプリケーションで XMP メタデータを追加できます。 既存の XMP メタデータ ブロックがない場合、アプリケーションは XMP メタデータ ライターをインスタンス化し、 AddWriter メソッドを使用してメタデータ ライターのコレクションに含める必要があります。

SetWriterByIndex

SetWriterByIndex は、コレクション内の特定のインデックスにメタデータ ライターを追加するために使用されます。 メタデータ ライターが現在そのインデックスに存在する場合は、新しいライターが置き換える必要があります。

RemoveWriterByIndex

RemoveWriterByIndex は、コレクションからメタデータ ライターを削除するために使用されます。

概念

IWICBitmapFrameEncode の実装

CODEC のインストールと登録

WIC-Enabled コーデックを記述する方法

Windows イメージング コンポーネントの概要