Метод Image::GetAllPropertyItems (gdiplusheaders.h)
Метод Image::GetAllPropertyItems получает все элементы свойств (метаданные), хранящиеся в этом объекте Image .
Синтаксис
Status GetAllPropertyItems(
[in] UINT totalBufferSize,
[in] UINT numProperties,
[out] PropertyItem *allItems
);
Параметры
[in] totalBufferSize
Тип: UINT
Целое число, указывающее размер (в байтах) буфера allItems . Вызовите метод Image::GetPropertySize , чтобы получить необходимый размер.
[in] numProperties
Тип: UINT
Целое число, указывающее количество свойств на изображении. Вызовите метод Image::GetPropertySize , чтобы получить это число.
[out] allItems
Тип: PropertyItem*
Указатель на массив объектов PropertyItem , который получает элементы свойств.
Возвращаемое значение
Тип: Состояние
В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .
Если метод завершается сбоем, он возвращает один из других элементов перечисления Status .
Комментарии
Некоторые файлы с изображениями содержат метаданные, которые можно прочитать, чтобы определить свойства изображения. Например, цифровая фотография может содержать метаданные, которые позволяют определить модель камеры, с помощью которой была получена данная фотография.
GDI+ сохраняет отдельный фрагмент метаданных в объекте PropertyItem . Метод Image::GetAllPropertyItems возвращает массив объектов PropertyItem . Перед вызовом Image::GetAllPropertyItems необходимо выделить буфер, достаточно большой для получения этого массива. Можно вызвать метод Image::GetPropertySize объекта Image , чтобы получить размер требуемого буфера в байтах. Метод Image::GetPropertySize также предоставляет количество свойств (фрагментов метаданных) в изображении.
В Gdiplusimaging.h определено несколько перечислений и констант, связанных с метаданными изображения.
Примеры
В следующем примере создается объект Image на основе JPEG-файла. Код вызывает метод GetAllPropertyItems этого объекта Image для получения его элементов свойств (метаданных).
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;
INT main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
// Create an Image object based on a JPEG file.
Image* image = new Image(L"FakePhoto.jpg");
// Find out how many property items are in the image, and find out the
// required size of the buffer that will receive those property items.
UINT totalBufferSize;
UINT numProperties;
image->GetPropertySize(&totalBufferSize, &numProperties);
// Allocate the buffer that will receive the property items.
PropertyItem* pAllItems = (PropertyItem*)malloc(totalBufferSize);
// Fill the buffer.
image->GetAllPropertyItems(totalBufferSize, numProperties, pAllItems);
// Print the id data member of each property item.
for(UINT j = 0; j < numProperties; ++j)
{
printf("%x\n", pAllItems[j].id);
}
free(pAllItems);
delete image;
GdiplusShutdown(gdiplusToken);
return 0;
}
Приведенный выше код вместе с определенным файлом FakePhoto.jpg выводятся следующие выходные данные:
320
10f
110
9003
829a
5090
5091
В предыдущих выходных данных показан шестнадцатеричный идентификатор для каждого элемента свойства. Вы можете найти эти идентификаторы в Gdiplusimaging.h и узнать, что они представляют следующие теги свойств.
Шестнадцатеричное значение | Тег свойства |
---|---|
0x0320 | PropertyTagImageTitle |
0x010f | PropertyTagEquipMake |
0x0110 | PropertyTagEquipModel |
0x9003 | PropertyTagExifDTOriginal |
0x829a | PropertyTagExifExposureTime |
0x5090 | PropertyTagLuminanceTable |
0x5091 | PropertyTagChrominanceTable |
Требования
Минимальная версия клиента | Windows XP, Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | gdiplusheaders.h (включая Gdiplus.h) |
Библиотека | Gdiplus.lib |
DLL | Gdiplus.dll |