public TiffGrid(string filename, string NewFileName)
{
ValuesToWrite = new Dictionary<int, Dictionary<int, double>>();
tiff_org = BitMiracle.LibTiff.Classic.Tiff.Open(Path.GetFullPath(filename), "r");
tiff = BitMiracle.LibTiff.Classic.Tiff.Open(Path.GetFullPath(NewFileName), "w");
foreach (TiffTag enu in Enum.GetValues(typeof(TiffTag)))
{
var val = tiff_org.GetField(enu);
if (val != null & enu != TiffTag.EXTRASAMPLES)
tiff.SetField(enu, val[0]);
}
for (int i = 0; i < tiff_org.GetTagListCount(); i++)
{
int k = tiff_org.GetTagListEntry(i);
var ff = tiff_org.FindFieldInfo((TiffTag)k, TiffType.ANY);
tiff.MergeFieldInfo(new TiffFieldInfo[] { ff }, 1);
var val = tiff_org.GetField((TiffTag)tiff_org.GetTagListEntry(i));
tiff.SetField((TiffTag)k, val[0], val[1]);
}
var val2 = tiff_org.GetField((TiffTag)33922)[1].ToDoubleArray();
XOrigin = val2[3];
YOrigin = val2[4]; //Upper basegrid assumes Lower
val2 = tiff_org.GetField((TiffTag)33550)[1].ToDoubleArray();
GridSize = val2[0];
GridSize = val2[1];
NumberOfColumns = tiff_org.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
NumberOfRows = tiff_org.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
//Shift YOrigin to lower left
YOrigin -= GridSize * NumberOfRows;
scanline = new byte[tiff_org.ScanlineSize()];
bits = scanline.Count() / NumberOfColumns;
ScanLineCache = new Dictionary<int, byte[]>();
}