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
, Len
en 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
.NET Desktop feedback