public void ImportMapFromImage(string path, int moveX = 0, int moveY = 0) { var heightMeta = RawImage.LoadRawMetadataFromJson(path); var heightData = RawImage.LoadGrayscale16(path, heightMeta); int cellNumberX = heightData.GetLength(1) / MW_CELL; int cellNumberY = heightData.GetLength(0) / MW_CELL; var landList = new List <Record>(); for (int y = 0; y < cellNumberY; y++) { for (int x = 0; x < cellNumberX; x++) { var landRecord = new LAND(); landRecord.INTV = new INTV { CellX = x + moveX, CellY = y + moveY, }; landRecord.DATA = new DATA(); landRecord.VHGT = CreateHeightMapSubrecord(x * 64, y * 64, heightData); var cellRecord = new CELL { NAME = new TES3Lib.Subrecords.Shared.NAME { EditorId = "" }, DATA = new TES3Lib.Subrecords.CELL.DATA { Flags = new HashSet <TES3Lib.Enums.Flags.CellFlag>(), GridX = landRecord.INTV.CellX, GridY = landRecord.INTV.CellY, }, }; landList.Add(cellRecord); landList.Add(landRecord); } } var example = new TES3(); example.Records.Add(createTES3HEader()); example.Records.AddRange(landList); example.TES3Save($"{path}.esp"); }