// 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);
        }