Exemple #1
0
        void CreateTexture()
        {
            if (bgImage.Image != null)
            {
                bgImage.Image.Dispose();
                bgImage.Image = null;
            }

            if (gridSet != null && gridSet.SetType == CharSetType.TileObject && gridSet.Width == 3 && gridSet.Height == 3)
            {
                var      images      = gridSet.GenerateCharImages();
                var      centerImage = images[4];
                Bitmap   bmpBack     = new Bitmap(20 * 8, 20 * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                Graphics g           = Graphics.FromImage(bmpBack);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                g.PixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.Half;

                for (int y = 0; y < 20; y++)
                {
                    for (int x = 0; x < 20; x++)
                    {
                        g.DrawImageUnscaled(centerImage, x * 8, y * 8);
                    }
                }

                g.Dispose();

                foreach (var bm in images)
                {
                    bm.Dispose();
                }

                bgImage.Image = bmpBack;
            }
        }
        void DrawElement()
        {
            elementView.Image = null;

            if (currentTexture != null)
            {
                currentTexture.Dispose();
            }

            if (set == null)
            {
                return;
            }

            if (scale == 1)
            {
                currentTexture = set.GenerateImage();
                Brush    br = new SolidBrush(overColor);
                Graphics g  = Graphics.FromImage(currentTexture);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                g.PixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.Half;
                g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height);
                br.Dispose();
                g.Dispose();
            }
            else
            {
                if (set.Width < 3 && set.Height < 3)
                {
                    scale          = 1;
                    currentTexture = set.GenerateImage();

                    if (overColor.A != 0)
                    {
                        Brush    br = new SolidBrush(overColor);
                        Graphics g  = Graphics.FromImage(currentTexture);
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                        g.PixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.Half;
                        g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height);
                        br.Dispose();
                        g.Dispose();
                    }
                }
                else
                {
                    int he = set.Height == 3 ? 3 + scale - 1 : set.Height;
                    int wi = set.Width == 3 ? 3 + scale - 1 : set.Width;

                    currentTexture = new Bitmap(wi * 8, he * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                    Graphics g = Graphics.FromImage(currentTexture);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                    g.PixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.Half;

                    var charImages = set.GenerateCharImages();

                    for (int y = 0; y < he; y++)
                    {
                        for (int x = 0; x < wi; x++)
                        {
                            int xI = set.Width == 3 ? (x == 0 ? 0 : (x == wi - 1 ? 2 : 1)) : x;
                            int yI = set.Height == 3 ? (y == 0 ? 0 : (y == he - 1 ? 2 : 1)) : y;

                            int index = set.GetCharIndex(xI, yI);
                            g.DrawImageUnscaled(charImages[index], x * 8, y * 8);
                        }
                    }

                    if (overColor.A != 0)
                    {
                        Brush br = new SolidBrush(overColor);
                        g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height);
                        br.Dispose();
                    }

                    foreach (var image in charImages)
                    {
                        image.Dispose();
                    }

                    g.Dispose();
                }
            }

            elementView.Image = currentTexture;
            this.Width        = currentTexture.Width * pixelScale;
            this.Height       = currentTexture.Height * pixelScale;
        }