Delen via


Hoe de metagegevens van afbeeldingen te lezen

Sommige afbeeldingsbestanden bevatten metagegevens die u kunt lezen om de functies van de afbeelding te bepalen. Een digitale foto kan bijvoorbeeld metagegevens bevatten die u kunt lezen om het merk en model van de camera te bepalen die wordt gebruikt om de afbeelding vast te leggen. Met GDI+ kunt u bestaande metagegevens lezen en kunt u ook nieuwe metagegevens naar afbeeldingsbestanden schrijven.

GDI+ slaat een afzonderlijk stukje metagegevens op in een PropertyItem-object. U kunt de eigenschap PropertyItems van een Image-object lezen om alle metagegevens uit een bestand op te halen. De eigenschap PropertyItems retourneert een matrix van PropertyItem objecten.

Een PropertyItem-object heeft de volgende vier eigenschappen: Id, Value, Lenen Type.

ID

Een tag die het metagegevensitem identificeert. Sommige waarden die kunnen worden toegewezen aan Id worden weergegeven in de volgende tabel:

Hexadecimale waarde Beschrijving
0x0320

0x010F

0x0110

0x9003

0x829A

0x5090

0x5091
Titel van afbeelding

Fabrikant van apparatuur

Apparatuurmodel

ExifDTOriginal

Exif blootstellingstijd

Luminantietabel

Chrominance-tabel

Waarde

Een matrix met waarden. De notatie van de waarden wordt bepaald door de eigenschap Type.

Len

De lengte (in bytes) van de matrix met waarden die worden verwezen door de eigenschap Value.

Type

Het gegevenstype van de waarden in de matrix waarop de eigenschap Value wijst. De formaten die worden aangegeven door de Type eigenschapswaarden staan in de volgende tabel:

Numerieke waarde Beschrijving
1 Een Byte
2 Een matrix van Byte objecten die zijn gecodeerd als ASCII
3 Een 16-bits geheel getal
4 Een 32-bits geheel getal
5 Een matrix van twee Byte objecten die een rationeel getal vertegenwoordigen
6 Niet gebruikt
7 Ongedefinieerde
8 Niet gebruikt
9 SLong
10 SRational

Voorbeeld

In het volgende codevoorbeeld worden de zeven stukjes metagegevens in het bestand gelezen en weergegeven FakePhoto.jpg. Het tweede eigenschapsitem (index 1) in de lijst heeft Id 0x010F (fabrikant van apparatuur) en Type 2 (ASCII-gecodeerde bytematrix). In het codevoorbeeld wordt de waarde van dat eigenschapsitem weergegeven.

// 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)

De code produceert uitvoer die vergelijkbaar is met de volgende:

 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.

De code compileren

Het voorgaande voorbeeld is ontworpen voor gebruik met Windows Forms en vereist PaintEventArgse, een parameter van de Paint gebeurtenis-handler. De Paint gebeurtenis van het formulier afhandelen en deze code in de paint-gebeurtenishandler plakken. U moet FakePhoto.jpg vervangen door een afbeeldingsnaam en -pad dat geldig is op uw systeem en de naamruimte System.Drawing.Imaging importeren.

Zie ook