This article has been
excerpted from book "Graphics Programming with GDI+".
If you have ever worked with mechanical and engineering drawing or digital
images, you are probably aware of metadata. Metadata is information about the
image, that's not part of the image itself. When an engineer draws an image,
metadata is often added, such as the following information: last updated,
updated by, data, place, and names. A photograph might include metadata such as
image title, manufacturer, and model.
In the .NET Framework library, the PropertyItem object is used as a placeholder
for metadata. The PropertyItem class provides four properties: Id, Len, Type,
and Value. All of these properties have both read and write access.
The Id property is a tag, which identifies the metadata item. Table 9.10
describes Id tag values.
The Value property is an array of values whose format is determined by the Type
property. The Len property represents the length of the array of values in
bytes. The Type property represents the data type of values stored in the array.
Table 9.11 described the format of the Type property values.
TABLE 9.10: Id values
Hexadecimal Value |
Description |
0x0320 |
Image title |
0x010F |
Equipment
manufacturer |
0x0110 |
Equipment model |
0x9003 |
ExifDTOriginal |
0x829A |
EXIF exposure time |
0x5090 |
Luminance table |
0x5091 |
Chrominance table |
TABLE 9.11: Format of Type property values
Numeric Value |
Description |
1 |
A Byte
object |
2 |
An array of Byte
object encoded as ASCII |
3 |
A 16-bit integer |
4 |
A 32-bit integer |
5 |
An array of two
Byte
objects that represent a rational number |
6 |
Not used |
7 |
Undefined |
8 |
Not used |
9 |
Slong |
10 |
Srational |
An Image object may contain more than one PropertyItem object. The PropertyItems
property of the Image class represents an array of PropertyItem objects
corresponding to an image. The PropertyIdList property of the Image class
returns an array of property IDs stored in an image object. Listing 9.17 uses
the PropertyItems property of the Image class and reads all property items of an
image.
LISTING 9.17: Reading the metadata of a bitmap
private void
Form1_Load(object sender, System.EventArgs
e)
{
// Create an image from a file
Graphics g = this.CreateGraphics();
Image curImage =
Image.FromFile("C:/Documents and
Settings/Manu/Desktop/16864z.Bmp");
Rectangle rect = new
Rectangle(20, 20, 100, 100);
g.DrawImage(curImage, rect);
// Create an array of PropertyItem objects and read
items using PropertyItems
PropertyItem[] propItems = curImage.PropertyItems;
// Create values of PropertyItem members
foreach (PropertyItem propItem
in propItems)
{
System.Text.ASCIIEncoding encoder =
new System.Text.ASCIIEncoding();
string str = "ID ="
+ propItem.Id.ToString("x");
str +=
", Type =" + propItem.Type.ToString();
str +=
", Length =" + propItem.Len.ToString();
str +=
", Value ="
+
encoder.GetString(propItem.Value);
MessageBox.Show(str);
}
// Dispose of object
g.Dispose();
}
Figure 9.25 shows the output from Listing 9.17.
FIGURE 9.25: Reading the metadata of a bitmap
Conclusion
Hope the article would have helped you in understanding reading Metadata of
Images in GDI+. Read other articles on GDI+ on the website.
|
This book teaches
.NET developers how to work with GDI+ as they develop applications
that include graphics, or that interact with monitors or printers.
It begins by explaining the difference between GDI and GDI+, and
covering the basic concepts of graphics programming in Windows. |