Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Некоторые файлы изображений содержат метаданные, которые можно считывать для определения функций образа. Например, цифровая фотография может содержать метаданные, которые можно считывать для определения создания и модели камеры, используемой для захвата изображения. С помощью интерфейса GDI+ можно считывать существующие метаданные, а также добавлять новые метаданные в файлы с изображениями.
Интерфейс GDI+ хранит каждый отдельный блок метаданных в объекте PropertyItem. Чтобы получить все метаданные файла, можно прочитать свойство PropertyItems объекта Image. Свойство PropertyItems возвращает массив PropertyItem объектов.
Объект PropertyItem имеет следующие четыре свойства: Id
, Value
, Len
и Type
.
Идентификатор
Тег, определяющий элемент метаданных. Некоторые из значений, которые может принимать Id, приводятся в следующей таблице.
Шестнадцатеричное значение | Описание |
---|---|
0x0320 0x010F 0x0110 0x9003 0x829A 0x5090 0x5091 |
Название изображения Производитель оборудования Модель оборудования ExifDTOriginal Exif — время выдержки Таблица светимости Таблица хроматических данных |
Ценность
Массив значений типа . Формат значений определяется свойством Type.
Лен
Размер (в байтах) массива значений, на который указывает свойство Value.
Тип
Тип элементов массива, на который указывает свойство Value
. Форматы, определяемые по значению свойства Type
, приводятся в таблице ниже.
Числовое значение | Описание |
---|---|
1 | Один Byte |
2 | Массив объектов Byte в кодировке ASCII |
3 | 16-битное целое число |
4 | 32-битное целое число |
5 | Массив из двух объектов Byte , представляющих рациональное число |
6 | Не используется |
7 | Неопределено |
8 | Не используется |
9 | SLong |
10 | SRational |
Пример
В приведенном ниже примере кода осуществляется считывание и отображение семи блоков метаданных из файла FakePhoto.jpg
. Второе свойство в списке (индекс 1) имеет значение Id 0x010F (производитель оборудование) и Type 2 (массив объектов byte в кодировке ASCII). В примере кода отображается значение данного свойства.
// Create an Image object.
Image image = new Bitmap(@"c:\FakePhoto.jpg");
// Get the PropertyItems property from image.
PropertyItem[] propItems = image.PropertyItems;
// Set up the display.
Font font = new Font("Arial", 12);
SolidBrush blackBrush = new SolidBrush(Color.Black);
int X = 0;
int Y = 0;
// For each PropertyItem in the array, display the ID, type, and
// length.
int count = 0;
foreach (PropertyItem propItem in propItems)
{
e.Graphics.DrawString(
"Property Item " + count.ToString(),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" id: 0x" + propItem.Id.ToString("x"),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" type: " + propItem.Type.ToString(),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" length: " + propItem.Len.ToString() + " bytes",
font,
blackBrush,
X, Y);
Y += font.Height;
count++;
}
// Convert the value of the second property to a string, and display
// it.
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
string manufacturer = encoding.GetString(propItems[1].Value);
e.Graphics.DrawString(
"The equipment make is " + manufacturer + ".",
font,
blackBrush,
X, Y);
'Create an Image object.
Dim image As Bitmap = New Bitmap("c:\FakePhoto.jpg")
'Get the PropertyItems property from image.
Dim propItems As PropertyItem() = image.PropertyItems
'Set up the display.
Dim font As New Font("Arial", 12)
Dim blackBrush As New SolidBrush(Color.Black)
Dim X As Integer = 0
Dim Y As Integer = 0
'For each PropertyItem in the array, display the ID, type, and length.
Dim count As Integer = 0
Dim propItem As PropertyItem
For Each propItem In propItems
e.Graphics.DrawString( _
"Property Item " & count.ToString(), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" id: 0x" & propItem.Id.ToString("x"), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" type: " & propItem.Type.ToString(), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" length: " & propItem.Len.ToString() & " bytes", _
font, _
blackBrush, _
X, Y)
Y += font.Height
count += 1
Next propItem
'Convert the value of the second property to a string, and display it.
Dim encoding As New System.Text.ASCIIEncoding()
Dim manufacturer As String = encoding.GetString(propItems(1).Value)
e.Graphics.DrawString( _
"The equipment make is " & manufacturer & ".", _
font, _
blackBrush, _
X, Y)
Результат выполнения этого кода будет выглядеть примерно следующим образом:
Property Item 0
id: 0x320
type: 2
length: 16 bytes
Property Item 1
id: 0x10f
type: 2
length: 17 bytes
Property Item 2
id: 0x110
type: 2
length: 7 bytes
Property Item 3
id: 0x9003
type: 2
length: 20 bytes
Property Item 4
id: 0x829a
type: 5
length: 8 bytes
Property Item 5
id: 0x5090
type: 3
length: 128 bytes
Property Item 6
id: 0x5091
type: 3
length: 128 bytes
The equipment make is Northwind Camera.
Компиляция кода
Приведенный выше пример предназначен для использования с Windows Forms и требует PaintEventArgse
, который является параметром обработчика событий Paint. Обработайте событие Paint формы и вставьте этот код в обработчик событий paint.
FakePhoto.jpg
необходимо заменить на имя изображения, имеющегося в системе, и путь к нему. Кроме того, импортируйте пространство имен System.Drawing.Imaging
.
См. также
.NET Desktop feedback