private bool getIFDOffsets()
{
long idx = this.offsets["tiffHeader"];
// Set read order of multi-byte data
data.Endian = data.SHORT(idx) == 0x4949 ? BinaryReader.LITTLE_ENDIAN : BinaryReader.BIG_ENDIAN;
// Check if always present bytes are indeed present
if (data.SHORT(idx+=2) != 0x002A) {
return false;
}
this.offsets.Add("IFD0", this.offsets["tiffHeader"] + data.LONG(idx += 2));
Tiff = extractTags(this.offsets["IFD0"], tags["tiff"]);
//Moxie.log(data.SHORT(idx).ToString("x"));
object ExifIFDPointer, GPSInfoIFDPointer;
if (Tiff.TryGetValue("ExifIFDPointer", out ExifIFDPointer)) {
this.offsets.Add("exifIFD", this.offsets["tiffHeader"] + Convert.ToInt32(ExifIFDPointer));
Tiff.Remove("ExifIFDPointer");
}
if (Tiff.TryGetValue("GPSInfoIFDPointer", out GPSInfoIFDPointer)) {
this.offsets.Add("gpsIFD", this.offsets["tiffHeader"] + Convert.ToInt32(GPSInfoIFDPointer));
Tiff.Remove("GPSInfoIFDPointer");
}
long ifd1Offset = data.LONG(this.offsets["IFD0"] + data.SHORT(this.offsets["IFD0"]) * 12 + 2);
if (ifd1Offset > 0) {
this.offsets.Add("IFD1", this.offsets["tiffHeader"] + ifd1Offset);
}
return true;
}