private bool fetchAnyArray(TiffDirEntry dir, double[] v)
{
int i = 0;
bool res = false;
switch (dir.tdir_type)
{
case TiffType.BYTE:
case TiffType.SBYTE:
byte[] b = new byte[dir.tdir_count];
res = fetchByteArray(dir, b);
if (res)
{
for (i = dir.tdir_count - 1; i >= 0; i--)
v[i] = b[i];
}
if (!res)
return false;
break;
case TiffType.SHORT:
case TiffType.SSHORT:
short[] u = new short[dir.tdir_count];
res = fetchShortArray(dir, u);
if (res)
{
for (i = dir.tdir_count - 1; i >= 0; i--)
v[i] = u[i];
}
if (!res)
return false;
break;
case TiffType.LONG:
case TiffType.SLONG:
int[] l = new int[dir.tdir_count];
res = fetchLongArray(dir, l);
if (res)
{
for (i = dir.tdir_count - 1; i >= 0; i--)
v[i] = l[i];
}
if (!res)
return false;
break;
case TiffType.RATIONAL:
case TiffType.SRATIONAL:
float[] r = new float[dir.tdir_count];
res = fetchRationalArray(dir, r);
if (res)
{
for (i = dir.tdir_count - 1; i >= 0; i--)
v[i] = r[i];
}
if (!res)
return false;
break;
case TiffType.FLOAT:
float[] f = new float[dir.tdir_count];
res = fetchFloatArray(dir, f);
if (res)
{
for (i = dir.tdir_count - 1; i >= 0; i--)
v[i] = f[i];
}
if (!res)
return false;
break;
case TiffType.DOUBLE:
return fetchDoubleArray(dir, v);
default:
// NOTYPE
// ASCII
// UNDEFINED
ErrorExt(this, m_clientdata, m_name,
"cannot read TIFF_ANY type {0} for field \"{1}\"",
dir.tdir_type, FieldWithTag(dir.tdir_tag).Name);
return false;
}
return true;
}