Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе приводятся сведения о поддержке метаданных изображений, предоставляемых компонентом образов Windows (WIC). В ней приведены общие сведения о чтении и написании метаданных изображения, языке запросов метаданных и расширяемости обработчика метаданных.
Метаданные изображения — это данные, внедренные в файл изображения, который предоставляет дополнительные сведения об изображении, например устройство, используемое для записи изображения или измерений изображения. Хотя он содержится в самом файле изображения, эти метаданные не являются частью данных отрисовки. WIC предоставляет интерфейсы, позволяющие считывать и записывать эти метаданные для нескольких распространенных форматов метаданных, включая расширяемую платформу метаданных (XMP), файл изображения Exchangeable (EXIF) и текстовые данные PNG (tEXt).
В этом разделе содержатся следующие разделы.
- Предварительные требования
- введение
- чтение метаданных изображения
- Написание метаданных изображения
- расширяемость метаданных
- поддерживаемые форматы метаданных
- Сводка компонента метаданных
- Связанные темы
Необходимые условия
Чтобы понять эту тему, необходимо ознакомиться с интерфейсами кодировщика и декодировщика WIC, а также с соответствующими компонентами объектной модели компонентов (COM), как описано в обзоре компонента образов Windows. Кроме того, он помогает получить общее представление о некоторых форматах метаданных изображений, используемых сегодня.
Знакомство
Метаданные предоставляют расширенные сведения о изображении. Эти сведения можно использовать несколькими способами. Изображение может содержать метаданные, такие как описание, рейтинг, теги категорий и сведения об авторских правах. Доступ к метаданным упрощает выполнение таких задач, как управление ресурсами, расположение файлов или определение сведений об авторских правах. Например, коллекция фотографий Windows в Windows Vista позволяет добавлять описания и теги категорий в изображения. Это позволяет улучшить обнаружение изображений и удобный способ классификации изображений. Используя API-интерфейсы WIC и распространенные форматы метаданных, приложения могут легко записывать или читать эти метаданные в образах или из них.
На следующей схеме показано содержимое JPEG-файла, включающего внедренные блоки метаданных и элементы метаданных.
jpeg-изображение
В этом примере метаданные внедрены в файл изображения в кадре изображения. Формат JPEG не поддерживает несколько кадров изображений, поэтому метаданные концептуально присоединены к этому одному кадру. Форматы, поддерживающие несколько кадров, например TIFF, могут содержать метаданные, присоединенные к каждому кадру изображения, как показано на этой схеме. Хотя и не поддерживается собственными кодеками изображений, некоторые форматы изображений также могут поддерживать метаданные за пределами кадра изображения. WIC достаточно гибкий, чтобы обрабатывать метаданные уровня кадра и метаданные за пределами отдельного кадра изображения.
Чтение метаданных изображения
API WIC предоставляют COM-компоненты, которые упрощают для приложений чтение и запись метаданных изображения.
Основным способом чтения метаданных является использование средства чтения запросов метаданных (IWICMetadataQueryReader) для доступа к определенным элементам метаданных. Компонент средства чтения метаданных реализуется кодеком и может быть доступен на уровне декодатора или с помощью отдельных кадров изображений, что является более распространенным методом. В следующем коде показано, как получить доступ к обработчику запросов для отдельного кадра с помощью метода GetMetadataQueryReader обработчика запросов.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Средство чтения запросов предоставляет методы для получения сведений о конкретных метаданных и средства для указания элемента метаданных для получения. В следующем коде используется выражение запроса для запроса определенного элемента метаданных в блоке каталога файлов вложенного образа App1 (IFD). Это делается путем использования метода GetMetadataByName объекта чтения запросов. Следующий код демонстрирует использование средства чтения запросов для получения значения оценки MicrosoftPhoto.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
Переменная pwzRatingQuery в предыдущем примере — это строка запроса для доступа к элементу метаданных MicrosoftPhoto. Эта строка создается с помощью языка запросов метаданных. Чтобы создать эту строку, необходимо знать формат метаданных и язык запросов метаданных для получения отдельных элементов метаданных. Дополнительные сведения о языке запросов метаданных см. в обзоре языка запросов метаданных.
За кулисами средство чтения запросов использует средство чтения метаданных (IWICMetadataReader) для доступа к метаданным, описанным выражением запроса. Помимо использования средства чтения запросов, вы также можете получить доступ к средству чтения метаданных непосредственно для чтения метаданных. Вы можете получить средство чтения метаданных из декодера или отдельных кадров, запрашивая средство чтения блоков (интерфейс IWICMetadataBlockReader).
Написание метаданных изображения
Процесс записи метаданных аналогичен тому, как он считывается, за исключением того, что используется модуль записи запросов метаданных (IWICMetadataQueryWriter). Интерфейс записи запросов реализуется кодировщиком изображений и, как и в средстве чтения запросов, метаданные получают доступ как к кодировщику, так и к отдельным кадрам (в зависимости от поддержки формата изображения).
В следующем коде показано, как получить модуль записи запросов из кадра кодировщика и удалить значение оценки, которое было прочитано ранее.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Другой способ записи метаданных — это быстрые обновления метаданных. Быстрая кодировка метаданных — это способ записи метаданных изображения без необходимости повторного кодирования файла изображения. Это делается путем записи новых сведений метаданных в заполненную область формата метаданных. Кодировщик быстрых метаданных (IWICFastMetadataEncoder) получен из фабрики компонентов на основе декодатора изображений. Быстрая система кодировки метаданных затем получает модуль записи запросов, используемый для записи метаданных. Наконец, быстрый кодировщик фиксирует изменение.
В следующем коде показано, как получить быстрый кодировщик метаданных и использовать его для записи значения MicrosoftRating.
if (SUCCEEDED(hr))
{
IWICFastMetadataEncoder *pFME = NULL;
IWICMetadataQueryWriter *pFMEQW = NULL;
hr = pFactory->CreateFastMetadataEncoderFromFrameDecode(
pFrameDecode,
&pFME);
if (SUCCEEDED(hr))
{
hr = pFME->GetMetadataQueryWriter(&pFMEQW);
}
if (SUCCEEDED(hr))
{
// Add additional metadata
PROPVARIANT value;
PropVariantInit(&value);
value.vt = VT_UI4;
value.uiVal = 99;
hr = pFMEQW->SetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);
PropVariantClear(&value);
}
if (SUCCEEDED(hr))
{
hr = pFME->Commit();
}
}
Не все форматы метаданных поддерживают быстрые метаданные. Сведения о том, какие форматы изначально поддерживают быструю кодировку метаданных, см. в таблице в разделе Поддерживаемые форматы метаданных далее в этом документе.
За кулисами модуль записи запросов использует модуль записи метаданных (IWICMetadataWriter) для записи метаданных, описанных выражением запроса. Помимо использования средства чтения запросов, можно также непосредственно обращаться к записи метаданных. Модуль записи метаданных можно получить из декодера или отдельных кадров с помощью запроса для модуля записи блоков (интерфейса IWICMetadataBlockWriter).
Расширяемость метаданных
Как упоминалось ранее, WIC предоставляет несколько обработчиков метаданных для чтения и записи метаданных для общих форматов метаданных. Однако существуют некоторые форматы метаданных, которые не поддерживаются в собственном коде. Поэтому WIC предоставляет API-интерфейсы для создания дополнительных обработчиков метаданных, которые могут расширить поддержку метаданных в других форматах.
Чтобы полностью поддерживать другие форматы метаданных, необходимо разработать два типа обработчиков — обработчик для чтения метаданных и обработчик для записи метаданных. Хотя эти два обработчика обычно реализуются в парах для определенного формата, это не является обязательным требованием. В некоторых случаях может потребоваться только возможность чтения или только возможность записи.
Дополнительные сведения о расширяемости метаданных с помощью API WIC см. в обзоре расширяемости метаданных.
Поддерживаемые форматы метаданных
WIC поддерживает несколько распространенных форматов метаданных. В следующей таблице перечислены поддерживаемые форматы метаданных, их версии, форматы изображений, поддерживающие формат метаданных, а также форматы метаданных, поддерживающие быструю кодировку метаданных. Дополнительные сведения о быстрой кодировке метаданных см. в разделе записи метаданных изображения выше в этом документе.
Поддерживаемые форматы метаданных | Версия спецификации метаданных | Поддержка формата изображения | Поддерживает быструю кодировку метаданных |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | Нет |
App1 | JFIF 1.02 | JPEG, TIFF | Нет |
App13 | Неизвестный | JPEG, TIFF | Нет |
IFD | TIFF 6.0 | JPEG, TIFF | Да |
Этический комитет | Неизвестный | JPEG, TIFF | Нет |
Эксиф | Exif 2.2 | JPEG, TIFF | Да |
XMP | XMP 1.0 (сентябрь 2005 г.) | JPEG, TIFF | Да |
GPS | Exif 2.2 | JPEG, TIFF | Да |
IPTC | IPTC 4.0 | JPEG, TIFF | Да |
текст | PNG 1.2 | PNG | Нет |
Заметка
IPTC поддерживает только FME, если блоки растут в размерах, так как IPTC не поддерживает заполнение.
Сводка компонента метаданных
В следующей таблице описаны интерфейсы WIC, поддерживающие метаданные и соответствующие компоненты. Эти компоненты предоставляют доступ к метаданным образа. Дополнительные сведения об этих компонентах см. в обзоре компонентов обработки изображений Windows .
Компонент | Описание |
---|---|
Декодер растровых изображений (IWICBitmapDecoder) |
|
Декодирование растровых кадров (IWICBitmapFrameDecode) |
|
Кодировщик растровых карт (IWICBitmapEncoder) |
|
Кодирование кадров Bitmap (IWICBitmapFrameEncode) |
|
В следующей таблице описаны компоненты метаданных WIC. Эти компоненты позволяют считывать и записывать метаданные в образ, предоставляемый компонентами, перечисленными в предыдущей таблице.
Компонент | Описание |
---|---|
Средство чтения запросов метаданных (IWICMetadataQueryReader) |
|
Модуль записи запросов метаданных (IWICMetadataQueryWriter) |
|
Средство чтения блоков метаданных (IWICMetadataBlockReader) |
|
Модуль записи блоков метаданных (IWICMetadataBlockWriter) | |
Средство чтения метаданных (IWICMetadataReader) |
|
Модуль записи метаданных (IWICMetadataWriter) |
|
Быстрый кодировщик метаданныхIWICFastMetadataEncoder |
|
Связанные разделы