public static bool RenderTopo(Rendering.BlockColors bc, WorldVoxelEx wv, string RegionDirectory, string ImgsDirectory) { if (wv.R > 1) { return(false); } byte[][] MapData = new byte[][] { new byte[512 * 512], new byte[512 * 512] }; Color[] BlockData = new Color[512 * 512]; RegionMCA mca = new RegionMCA(RegionDirectory); mca.LoadRegion(wv.Xs, wv.Zs); try { Rendering.MCRegionMaps.RenderDataFromRegion(bc, mca, MapData, BlockData); Rendering.MCRegionMaps.RenderTopoPngFromRegion(MapData, ImgsDirectory, wv.Xs, wv.Zs); Rendering.MCRegionMaps.RenderBlockPngFromRegion(MapData, BlockData, ImgsDirectory, wv.Xs, wv.Zs); FileInfo mcaH = new FileInfo(Path.Combine(RegionDirectory, $"r{wv.BaseFilename()}.hdt")); using (FileStream tempFS = mcaH.Create()) { tempFS.Write(MapData[0], 0, 512 * 512); tempFS.Write(MapData[1], 0, 512 * 512); tempFS.Flush(); tempFS.Close(); } mcaH.LastWriteTime = mca.LastModified; FileInfo lwFS = new FileInfo(Path.Combine(ImgsDirectory, $"topo{wv.BaseFilename()}.png")); if (lwFS.Exists) { lwFS.LastWriteTime = mca.LastModified; } lwFS = new FileInfo(Path.Combine(ImgsDirectory, $"tile{wv.BaseFilename()}.png")); if (lwFS.Exists) { lwFS.LastWriteTime = mca.LastModified; } return(true); } catch (Exception ex) { Debug.Print(ex.Message); return(false); } }
public static bool RenderTopo(Rendering.BlockColors bc, WorldVoxelEx mr, string RegionDirectory, string ImgsDirectory) { if (mr.R > 1) { return(false); } byte[][] MapData = new byte[][] { new byte[512 * 512], new byte[512 * 512] }; Color[] BlockData = new Color[512 * 512]; RegionMCA mca = new RegionMCA(RegionDirectory); mca.LoadRegion(mr.Xs, mr.Zs); Rendering.MCRegionMaps.RenderDataFromRegion(bc, mca, MapData, BlockData); Rendering.MCRegionMaps.RenderTopoPngFromRegion(MapData, ImgsDirectory, mr.Xs, mr.Zs); //LibMCRcon.Rendering.MCRegionMaps.RenderBlockPngFromRegion(MapData, BlockData, ImgsDir.FullName, RV); FileInfo mcaH = new FileInfo(Path.Combine(RegionDirectory, $"r{mr.BaseFilename()}.hdt")); using (FileStream tempFS = mcaH.Create()) { tempFS.Write(MapData[0], 0, 512 * 512); tempFS.Write(MapData[1], 0, 512 * 512); tempFS.Flush(); tempFS.Close(); } mcaH.LastWriteTime = mca.LastModified; FileInfo lwFS = new FileInfo(Path.Combine(ImgsDirectory, $"topo{mr.BaseFilename()}.png")); if (lwFS.Exists) { lwFS.LastWriteTime = mca.LastModified; } return(true); }
public static async Task StitchAsync(WorldVoxelEx wv, string ImgPath, MCTransferAsync Tiles, MCTransferAsync Maps, int Regions = 2, bool TransferBack = true) { var map = wv.CopyToWorld(Regions); async Task MakeImage(string ImgType) { try { using (var ms1 = new MemoryStream()) using (var ms2 = new MemoryStream()) { var FileName = $"{ImgType}{map.BaseFilename()}.png"; var LocalFileName = Path.Combine(ImgPath, FileName); var b = await GetImgAsync(ms1, Maps, ImgPath, FileName, new Size(512, 512)); var g = Graphics.FromImage(b); var img = wv.CopyToWorld(Regions); var pix = WorldVoxelEx.PixelSize(img.R, wv.R); var p = await GetImgAsync(ms2, (wv.R == 1)?Tiles : Maps, ImgPath, $"{ImgType}{wv.BaseFilename()}.png", new Size(pix, pix)); g.DrawImage(p, img.Xo, img.Zo, pix, pix); p.Dispose(); b.Save(LocalFileName); if (TransferBack == true) { using (var mem = new MemoryStream()) { b.Save(mem, System.Drawing.Imaging.ImageFormat.Png); mem.Position = 0; await Maps.TransferNext(FileName, mem, TxRx.SEND); } } b.Dispose(); g.Dispose(); } } catch (Exception ex) { } } await Task.WhenAll(MakeImage("tile"), MakeImage("topo")); }