public static double? ReadSignedRational( this BitmapMetadata metadata, string query )
{
var value = metadata.ReadLong( query );
return value.HasValue
? ((value.Value & 0xFFFFFFFFL) / (double) ((value.Value & 0x7FFFFFFF00000000L) >> 32))
: (double?) null;
}