using (GdPictureImaging gdpictureImaging = new GdPictureImaging())
{
int imageID = gdpictureImaging.CreateGdPictureImageFromFile("image.jpg", false);
// Walk the list of tags to gather the gps coordinates.
StringBuilder report = new StringBuilder();
int tagCount = gdpictureImaging.TagCount(imageID);
for (int tagNo = 1; tagNo <= tagCount; tagNo++)
{
Tags tag = gdpictureImaging.TagGetID(imageID, tagNo);
switch (tag)
{
case Tags.TagGpsLatitudeRef:
report.Append("LatitudeRef: ");
report.AppendLine(gdpictureImaging.TagGetValueString(imageID, tagNo));
break;
case Tags.TagGpsLongitudeRef:
report.Append("LongitudeRef: ");
report.AppendLine(gdpictureImaging.TagGetValueString(imageID, tagNo));
break;
case Tags.TagGpsLatitude:
case Tags.TagGpsLongitude:
StringBuilder coordinate = new StringBuilder();
if (gdpictureImaging.TagGetType(imageID, tagNo) == TagType.TagTypeRational)
{
// Read the rationals for the coordinate, usually 3 floatting values, 8 bytes per value.
int dataLength = gdpictureImaging.TagGetLength(imageID, tagNo);
byte[] data = new byte[dataLength];
gdpictureImaging.TagGetValueBytes(imageID, tagNo, ref data);
int rationalsCount = dataLength / 8;
int readIndex = 0;
for (int rationalIndex = 0; rationalIndex < rationalsCount; rationalIndex++)
{
uint numerator = System.BitConverter.ToUInt32(data, readIndex);
uint denominator = System.BitConverter.ToUInt32(data, readIndex + 4);
double value = (double)numerator / (double)denominator;
coordinate.Append(value.ToString());
coordinate.Append(" ");
readIndex += 8;
}
}
else
{
coordinate.Append(gdpictureImaging.TagGetValueString(imageID, tagNo));
}
report.Append(tag.ToString() + ": ");
report.AppendLine(coordinate.ToString());
break;
default:
break;
}
}
gdpictureImaging.ReleaseGdPictureImage(imageID);
MessageBox.Show(report.ToString(), "Coordinates", MessageBoxButtons.OK, MessageBoxIcon.Information);
}