// baselayer index = 0 private void DrawVisibleMapRectangle(ResourceClass.GWEDFile.OverlayStruct baseLayer, int tileRefIndex) { ushort tilePixel = 64; if (baseImage == null) { baseImage = new Bitmap(baseLayer.xtile * tilePixel, baseLayer.ytile * tilePixel, PixelFormat.Format24bppRgb); } baseImage = (Image)tisFile.CreateTileLayerImage((Bitmap)baseImage, baseLayer.tileMaps, tileRefIndex, CalculateTileRect(baseLayer, tilePixel), tilePixel, currBright); this.picAreaMap.Image = baseImage; }
private TileRect CalculateTileRect(ResourceClass.GWEDFile.OverlayStruct baseLayer, ushort tilePixel) { TileRect tileRect = new TileRect(); if (ApplicationRuntime.AppParams.HighMemoryUsage) { tileRect.minX = 0; tileRect.maxX = baseLayer.xtile; tileRect.minY = 0; tileRect.maxY = baseLayer.ytile; } else { double minX = Math.Abs(this.picAreaMap.DisplayRectangle.Left); double maxX = minX + this.picAreaMap.ClientSize.Width; double minY = Math.Abs(this.picAreaMap.DisplayRectangle.Top); double maxY = minY + this.picAreaMap.ClientSize.Height; tileRect.minX = (ushort)Math.Floor(minX / tilePixel); tileRect.maxX = (ushort)Math.Ceiling(maxX / tilePixel); tileRect.minY = (ushort)Math.Floor(minY / tilePixel); tileRect.maxY = (ushort)Math.Ceiling(maxY / tilePixel); int diff = tileRect.maxX - baseLayer.xtile; if (diff > 0) { tileRect.minX = (ushort)(tileRect.minX - diff < 0 ? 0 : tileRect.minX - diff); tileRect.maxX = baseLayer.xtile; } diff = tileRect.maxY - baseLayer.ytile; if (diff > 0) { tileRect.minY = (ushort)(tileRect.minY - diff < 0 ? 0 : tileRect.minY - diff); tileRect.maxY = baseLayer.ytile; } } return(tileRect); }