實作 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 初始化 IWICMetadataBlockReader會針對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 映像處理元件概觀