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[]>(); }