private bool fetchSubjectDistance(TiffDirEntry dir)
{
if (dir.tdir_count != 1 || dir.tdir_type != TiffType.RATIONAL)
{
Tiff.WarningExt(this, m_clientdata, m_name,
"incorrect count or type for SubjectDistance, tag ignored");
return false;
}
bool ok = false;
byte[] b = new byte[2 * sizeof(int)];
int read = fetchData(dir, b);
if (read != 0)
{
int[] l = new int[2];
l[0] = readInt(b, 0);
l[1] = readInt(b, sizeof(int));
float v;
if (cvtRational(dir, l[0], l[1], out v))
{
/*
* XXX: Numerator -1 means that we have infinite
* distance. Indicate that with a negative floating point
* SubjectDistance value.
*/
ok = SetField(dir.tdir_tag, (l[0] != -1) ? v : -v);
}
}
return ok;
}