Ejemplo n.º 1
0
        public static void TiledFont()
        {
            using (var tiledImage = new MagickImage("xc:lightblue", 400, 175))
            {
                var textImage = new MagickImage("pattern:checkerboard", 400, 175);
                //textImage.Annotate("ddd", Gravity.Center);

                //var text = new DrawableText(0, 0, "DrawnText");
                var circle        = new DrawableCircle(tiledImage.Width / 2, 0, 5, 5);
                var drawText      = new DrawableText(tiledImage.Width / 2, tiledImage.Height / 2, "What");
                var drawTextColor = new DrawableTextDecoration(TextDecoration.Overline);

                textImage.Draw(circle, drawText);
                textImage.Write("textImage.png");

                tiledImage.Write("tileFont.png");
            }


            var settings = new MagickReadSettings();

            settings.Width         = 400;
            settings.Height        = 175;
            settings.FontPointsize = 72;
        }
Ejemplo n.º 2
0
        private void DebugRiver(int index, WaterConfiguration river, List <PointD> riverCoordinates)
        {
            string debugFilename = string.Format("{0}\\debug\\rivers\\{1}_{2}_{3}.jpg", System.Windows.Forms.Application.StartupPath, zoneConfiguration.ZoneId, index, river.Name);

            if (index == 0)
            {
                DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(debugFilename));
                if (di.Exists)
                {
                    di.EnumerateFiles().ToList().ForEach(f => f.Delete());
                }
                else
                {
                    di.Create();
                }
            }

            using (MagickImage debugRiver = new MagickImage(MagickColors.Transparent, zoneConfiguration.TargetMapSize, zoneConfiguration.TargetMapSize))
            {
                debugRiver.BackgroundColor    = Color.White;
                debugRiver.Settings.FillColor = new MagickColor(0, 0, ushort.MaxValue, 256 * 128);

                double resizeFactor = zoneConfiguration.TargetMapSize / zoneConfiguration.Heightmap.Heightmap.Width;

                DrawablePolygon poly = new DrawablePolygon(riverCoordinates);
                debugRiver.Draw(poly);

                List <PointD> orginalCoords = river.GetCoordinates();
                for (int i = 0; i < riverCoordinates.Count(); i++)
                {
                    double x, y;

                    if (riverCoordinates[i].X > zoneConfiguration.TargetMapSize / 2)
                    {
                        x = riverCoordinates[i].X - 15;
                    }
                    else
                    {
                        x = riverCoordinates[i].X + 1;
                    }

                    if (riverCoordinates[i].Y < zoneConfiguration.TargetMapSize / 2)
                    {
                        y = riverCoordinates[i].Y + 15;
                    }
                    else
                    {
                        y = riverCoordinates[i].Y - 1;
                    }

                    debugRiver.Settings.FontPointsize = 14.0;
                    debugRiver.Settings.FillColor     = Color.Black;
                    DrawableText text = new DrawableText(x, y, string.Format("{0} ({1}/{2})", i, orginalCoords[i].X, orginalCoords[i].Y));
                    debugRiver.Draw(text);
                }

                debugRiver.Quality = 100;
                debugRiver.Write(debugFilename);
            }
        }
Ejemplo n.º 3
0
        public UIText()
        {
            DrawableText drawableText = new DrawableText();

            drawableText.AddShader(Shaders.Projection);
            drawableText.AddShader(Shaders.Unlit);
            drawableText.Finish();

            drawables.Add(drawableText);
        }
Ejemplo n.º 4
0
        private static void WriteLabelAndBoundingBox(IMagickImage outputImage, int imageHeight, string text, double[] bb, string drawColor)
        {
            DrawableStrokeColor strokeColor = new DrawableStrokeColor(new MagickColor(drawColor));
            DrawableStrokeWidth strokeWidth = new DrawableStrokeWidth(3);
            DrawableFillColor   fillColor   = new DrawableFillColor(new MagickColor(50, 50, 50, 128));
            DrawableRectangle   dr          = new DrawableRectangle(bb[0], bb[1], bb[4], bb[5]);
            DrawableText        dt          = new DrawableText(bb[0], bb[1], text);

            outputImage.Draw(strokeColor, strokeWidth, fillColor, dr, dt);
        }
Ejemplo n.º 5
0
                public void ShouldUseTheSpecifiedDensity()
                {
                    var image     = new MagickImage(MagickColors.Purple, 500, 500);
                    var pointSize = new DrawableFontPointSize(20);
                    var text      = new DrawableText(250, 250, "Magick.NET");

                    image.Draw(pointSize, new DrawableDensity(96), text);

                    image.Trim();

                    Assert.Equal(144, image.Width);
                    Assert.Equal(24, image.Height);
                }
Ejemplo n.º 6
0
        protected internal Button(float xCenter, float yCenter, ButtonDelegate buttonClickedAction,
                                  Sprite backgroundSprite             = null, string text = null,
                                  ButtonDelegate buttonReleasedAction = null, bool drawInBlack = false)
        {
            _backgroundSprite = backgroundSprite == null?
                                GameData.GraphicsFactory.CreateButtonBackgroundSprite(xCenter, yCenter) : backgroundSprite;

            if (text != null)
            {
                _text = GameData.GraphicsFactory.CreateDrawableText(xCenter, yCenter, text, drawInBlack);
            }
            buttonClicked  += buttonClickedAction;
            buttonReleased += buttonReleasedAction;
        }
Ejemplo n.º 7
0
            public void ShouldUseTheDefaultDensity()
            {
                using (var image = new MagickImage(MagickColors.Purple, 500, 500))
                {
                    var pointSize = new DrawableFontPointSize(20);
                    var text      = new DrawableText(250, 250, "Magick.NET");

                    image.Draw(pointSize, text);

                    image.Trim();

                    Assert.Equal(108, image.Width);
                    Assert.Equal(19, image.Height);
                }
            }
Ejemplo n.º 8
0
        public override void Update()
        {
            PositionAndScale(TextSize.X, TextSize.Y, false);

            DrawableText drawableText = (DrawableText)Drawable;

            drawableText.Text = Text;
            drawableText.Transform.localPosition = new Vector3(pixelPosition.X, pixelPosition.Y, -1);
            drawableText.Transform.localScale    = new Vector3(Font.CharacterWidth * Size.X, Font.CharacterHeight * Size.Y, 1);
            drawableText.Material = Material;
            drawableText.Font     = Font;

            TextSize = drawableText.Size;

            base.Update();
        }
Ejemplo n.º 9
0
 public static void Load(float x, float y)
 {
     _whiteLine = GameData.GraphicsFactory.CreateRectangleSprite(x, y, "TransparentWhite",
                                                                 6f * GameData.CellWidth, 0.6f * GameData.CellHeight);
     _heartSprite = GameData.GraphicsFactory.CreateHeartSprite(x, y);
     _bomb1Sprite = GameData.GraphicsFactory.CreateBombSmallSprite(x + 1.5f * GameData.CellWidth, y, 1);
     _bomb2Sprite = GameData.GraphicsFactory.CreateBombSmallSprite(x + 3f * GameData.CellWidth, y, 2);
     _bomb3Sprite = GameData.GraphicsFactory.CreateBombSmallSprite(x + 4.5f * GameData.CellWidth, y, 3);
     _lifesText   = GameData.GraphicsFactory.CreateDrawableText(x + 1f * GameData.CellWidth, y
                                                                + 0.3f * GameData.CellHeight, "x");
     _bomb1Text = GameData.GraphicsFactory.CreateDrawableText(x + 2.5f * GameData.CellWidth, y
                                                              + 0.3f * GameData.CellHeight, "x");
     _bomb2Text = GameData.GraphicsFactory.CreateDrawableText(x + 4f * GameData.CellWidth, y
                                                              + 0.3f * GameData.CellHeight, "x");
     _bomb3Text = GameData.GraphicsFactory.CreateDrawableText(x + 5.5f * GameData.CellWidth, y
                                                              + 0.3f * GameData.CellHeight, "x");
 }
Ejemplo n.º 10
0
        private IMagickImage CreateImage(int?density)
        {
            IMagickImage          image     = new MagickImage(MagickColors.Purple, 500, 500);
            DrawableFontPointSize pointSize = new DrawableFontPointSize(20);
            DrawableText          text      = new DrawableText(250, 250, "Magick.NET");

            if (!density.HasValue)
            {
                image.Draw(pointSize, text);
            }
            else
            {
                image.Draw(pointSize, new DrawableDensity(density.Value), text);
            }

            image.Trim();

            return(image);
        }
Ejemplo n.º 11
0
        public void Stamp(ThumbnailSheetCreateRequest request, string filePath, TimeSpan time)
        {
            var stampText    = time.ToString(request.VideoDurationInSeconds >= 3600 ? @"hh\:mm\:ss" : @"mm\:ss");
            var tempFilePath = filePath + ".tmp.png";

            using (var imgText = new MagickImage(filePath))
            {
                var drawable    = new DrawableText(5, 5, stampText);
                var gravity     = new DrawableGravity(Gravity.Southeast);
                var font        = new DrawableFont("Tahoma");
                var antialias   = new DrawableTextAntialias(true);
                var size        = new DrawableFontPointSize(48);
                var color       = new DrawableFillColor(MagickColors.Black);
                var strokecolor = new DrawableStrokeColor(MagickColors.AliceBlue);
                imgText.Draw(drawable, gravity, font, antialias, size, color, strokecolor);
                imgText.Write(tempFilePath);
            }

            File.Delete(filePath);
            File.Move(tempFilePath, filePath);
        }
Ejemplo n.º 12
0
        public static string AddTextToImage(string imageFile, string text)
        {
            var image = new MagickImage(imageFile);

            using (var imgText = new MagickImage())
            {
                var drawable    = new DrawableText(0, 10, text);
                var gravity     = new DrawableGravity(Gravity.North);
                var font        = new DrawableFont("Arial");
                var antialias   = new DrawableTextAntialias(true);
                var size        = new DrawableFontPointSize(50);
                var color       = new DrawableFillColor(Color.Snow);
                var strokeColor = new DrawableStrokeColor(Color.OrangeRed);
                image.Draw(drawable, gravity, font, antialias, size, color, strokeColor);
            }
            // Save the result
            string outputImage = TempFolder + "\\waterMark_" + Path.GetFileName(imageFile);

            image.Write(outputImage);
            return(outputImage);
        }
Ejemplo n.º 13
0
 public void Initialize(IServiceProvider serviceProvider, Options options)
 {
     popUpText                   = new DrawableText();
     content                     = new ContentManager(serviceProvider, "Data");
     popUpText.font              = content.Load <SpriteFont>("Stuff\\Arial");
     popUpBG                     = content.Load <Texture2D>("Stuff\\popUpBG");
     popUpText.Text              = "";
     popUpText.color             = Color.White;
     this.options                = options;
     options.MusicVolumeChanged += new MusicVolumeChangedEventHandler(options_MusicVolumeChanged);
     options.ResolutionChanged  += new ResolutionChangedEventHandler(options_ResolutionChanged);
     audioEngine                 = new AudioEngine(GameConstants.AUDIO_PATH + "Music.xgs");
     waveBank                    = new WaveBank(audioEngine, GameConstants.AUDIO_PATH + "Music.xwb");
     soundBank                   = new SoundBank(audioEngine, GameConstants.AUDIO_PATH + "Music.xsb");
     menuCategory                = audioEngine.GetCategory("Music");
     graphXPackCategory          = menuCategory;
     menuCategory.SetVolume(options.MusicVolumeFloat);
     playList        = FileManager.GetFileDictString(GameConstants.MENU_PLAYLIST);
     currentPlaylist = playList;
     oldVolume       = options.MusicVolumeFloat;
     currentVolume   = options.MusicVolumeFloat;
     currentCategory = menuCategory;
     CreatePopUpRectangle(options.Resolution);
 }
Ejemplo n.º 14
0
 public void Draw(SpriteFont font, Vector2 pos, float scale, bool hover)
 {
     DrawableText.Draw(font, pos, scale, hover);
 }
Ejemplo n.º 15
0
        public void MakeCards()
        {
            var deck = JsonConvert.DeserializeObject <Deck>(File.ReadAllText(@"C:\temp\testdeck.cm"));

            var cards = new List <MagickImage>();

            foreach (var card in deck.Cards)
            {
                var image = new MagickImage(new MagickColor("WhiteSmoke"), deck.Width, deck.Height);
                image.Density = new MagickGeometry(300, 300);
                image.Format  = MagickFormat.Bmp;
                foreach (var element in deck.Elements)
                {
                    var data = card.ElementData[element.Key];
                    if (File.Exists(data))
                    {
                        using (var overlayImage = new MagickImage(data)) {
                            image.Composite(overlayImage, (int)element.Value.X, (int)element.Value.Y, CompositeOperator.Over);
                        }
                    }
                    else
                    {
                        using (var textImage = new MagickImage(MagickColor.Transparent, deck.Width, deck.Height)) {
                            textImage.Density       = new MagickGeometry(300, 300);
                            textImage.Font          = "Arial";
                            textImage.FontPointsize = 12;
                            textImage.FillColor     = new MagickColor("Black");
                            var drawableText = new DrawableText(element.Value.X, element.Value.Y, data);
                            textImage.Draw(drawableText);
                            image.Composite(textImage, CompositeOperator.Over);
                        }
                    }
                }
                image.Write(string.Format(@"c:\temp\CardMaker\{0}.png", card.Name));
                cards.Add(image);
            }
            using (var doc = new Document()) {
                PdfWriter.GetInstance(doc, new FileStream(@"C:\temp\CardMaker\cards.pdf", FileMode.Create));
                doc.Open();
                var columns = (int)Math.Floor(doc.PageSize.Width / (deck.Width + 10));
                var table   = new PdfPTable(columns)
                {
                    WidthPercentage = 100, DefaultCell = { Border = 0, Padding = 5 }
                };

                foreach (var card in cards)
                {
                    var instance = Image.GetInstance(card.ToByteArray());
                    instance.SetDpi(300, 300);
                    var cell = new PdfPCell(instance)
                    {
                        HorizontalAlignment = Element.ALIGN_CENTER,
                        Border  = 0,
                        Padding = 5,
                    };
                    table.AddCell(cell);
                }
                table.CompleteRow();
                doc.Add(table);
            }
        }
Ejemplo n.º 16
0
        private void DebugMaps()
        {
            MainForm.Log("Drawing debug bound images ...", MainForm.LogLevel.warning);
            MainForm.ProgressStartMarquee("Debug bound images ...");

            DirectoryInfo debugDir = new DirectoryInfo(string.Format("{0}\\debug\\bound\\{1}", System.Windows.Forms.Application.StartupPath, zoneConfiguration.ZoneId));

            if (!debugDir.Exists)
            {
                debugDir.Create();
            }
            debugDir.GetFiles().ToList().ForEach(f => f.Delete());

            int boundIndex = 0;

            foreach (List <PointF> allCoords in m_bounds)
            {
                using (MagickImage bound = new MagickImage(MagickColors.Transparent, zoneConfiguration.TargetMapSize, zoneConfiguration.TargetMapSize))
                {
                    List <PointD> coords = allCoords.Select(c => new PointD(zoneConfiguration.ZoneCoordinateToMapCoordinate(c.X), zoneConfiguration.ZoneCoordinateToMapCoordinate(c.Y))).ToList();

                    DrawablePolygon poly = new DrawablePolygon(coords);
                    bound.Settings.FillColor = new MagickColor(0, 0, 0, 256 * 128);
                    bound.Draw(poly);

                    // Print Text
                    for (int i = 0; i < coords.Count; i++)
                    {
                        double x, y;

                        if (coords[i].X > zoneConfiguration.TargetMapSize / 2)
                        {
                            x = coords[i].X - 15;
                        }
                        else
                        {
                            x = coords[i].X + 1;
                        }

                        if (coords[i].Y < zoneConfiguration.TargetMapSize / 2)
                        {
                            y = coords[i].Y + 15;
                        }
                        else
                        {
                            y = coords[i].Y - 1;
                        }

                        bound.Settings.FontPointsize = 10.0;
                        bound.Settings.FillColor     = Color.Black;
                        DrawableText text = new DrawableText(x, y, string.Format("{0} ({1}/{2})", i, zoneConfiguration.MapCoordinateToZoneCoordinate(coords[i].X), zoneConfiguration.MapCoordinateToZoneCoordinate(coords[i].Y)));
                        bound.Draw(text);

                        using (IPixelCollection pixels = bound.GetPixels())
                        {
                            int x2, y2;
                            if (coords[i].X == zoneConfiguration.TargetMapSize)
                            {
                                x2 = zoneConfiguration.TargetMapSize - 1;
                            }
                            else
                            {
                                x2 = (int)coords[i].X;
                            }
                            if (coords[i].Y == zoneConfiguration.TargetMapSize)
                            {
                                y2 = zoneConfiguration.TargetMapSize - 1;
                            }
                            else
                            {
                                y2 = (int)coords[i].Y;
                            }

                            pixels.SetPixel(x2, y2, new ushort[] { 0, 0, 65535, 0 });
                        }
                    }

                    //bound.Quality = 100;
                    bound.Write(string.Format("{0}\\bound_{1}.png", debugDir.FullName, boundIndex));

                    boundIndex++;
                }
            }

            MainForm.ProgressReset();
        }
Ejemplo n.º 17
0
        private static TextSize DrawText(MagickImage image, string line, double[] spaces, double offsetX, double offsetY, Gravity position, bool measureOnly)
        {
            if (string.IsNullOrWhiteSpace(line))
            {
                return(new TextSize(0d, 0d));
            }

            image.Settings.TextAntiAlias = true;
            // image.Settings.TextInterwordSpacing = 0;
            // image.Settings.TextInterlineSpacing = 0;

            if (spaces == null || spaces.Length == 0)
            {
                if (!measureOnly)
                {
                    var gravity  = new DrawableGravity(position);
                    var drawable = new DrawableText(offsetX, offsetY, line);
                    image.Draw(drawable, gravity);
                }

                var metrics = Measure(image, line);
                return(new TextSize(metrics.TextWidth, metrics.Ascent - metrics.Descent));
            }
            else
            {
                var words   = line.Split(' ');
                var metrics = words.Select(x => Measure(image, x, true)).ToArray();

                var totalSpace  = words.Take(words.Length - 1).Select((x, i) => i < spaces.Length ? spaces[i] : spaces.LastOrDefault()).Sum();
                var totalWidth  = metrics.Select(x => x.TextWidth).Sum() + totalSpace;
                var totalHeight = metrics.Select(x => x.Ascent - x.Descent).Max();

                if (!measureOnly)
                {
                    double currentX, currentY;

                    switch (position)
                    {
                    case Gravity.West:
                    case Gravity.Northwest:
                    case Gravity.Southwest:
                    case Gravity.Undefined:
                        currentX = offsetX;
                        break;

                    case Gravity.North:
                    case Gravity.Center:
                    case Gravity.South:
                        currentX = image.Width / 2d - totalWidth / 2 + offsetX;
                        break;

                    case Gravity.East:
                    case Gravity.Northeast:
                    case Gravity.Southeast:
                        currentX = image.Width - totalWidth - offsetX;
                        break;

                    default:
                        currentX = 0d;
                        break;
                    }

                    switch (position)
                    {
                    case Gravity.Northwest:
                    case Gravity.North:
                    case Gravity.Northeast:
                    case Gravity.Undefined:
                        currentY = offsetY;
                        break;

                    case Gravity.West:
                    case Gravity.Center:
                    case Gravity.East:
                        currentY = image.Height / 2d - totalHeight / 2 + offsetY;
                        break;

                    case Gravity.Southwest:
                    case Gravity.South:
                    case Gravity.Southeast:
                        currentY = image.Height - totalHeight - offsetY;
                        break;

                    default:
                        currentY = 0d;
                        break;
                    }

                    var gravity = new DrawableGravity(Gravity.Northwest);
                    for (var i = 0; i < words.Length; i++)
                    {
                        if (!string.IsNullOrWhiteSpace(words[i]))
                        {
                            image.Draw(new DrawableText(currentX, currentY, words[i]), gravity);
                        }

                        currentX += metrics[i].TextWidth + (i < spaces.Length ? spaces[i] : spaces.LastOrDefault());
                    }
                }

                return(new TextSize(totalWidth, totalHeight));
            }
        }
Ejemplo n.º 18
0
 public Vector2 Size(SpriteFont font)
 {
     return(DrawableText.Size(font));
 }
Ejemplo n.º 19
0
 public static IDrawableWidget GetDrawable(Template.IWidget widget, bool preview = false)
 {
     if (widget is Template.Counter counter)
     {
         var result = new DrawableCounter();
         result.Counter = counter;
         foreach (var img in counter.Back)
         {
             using var stream = new MemoryStream();
             img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.Back.Add(new Texture(stream));
         }
         foreach (var img in counter.Icons)
         {
             using var stream = new MemoryStream();
             img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.Icons.Add(new Texture(stream));
         }
         result.InternalText.Font            = Fonts[counter.Font];
         result.InternalText.DisplayedString = counter.Content;
         result.Value = preview ? (int)(Random.NextDouble() * counter.Max) : counter.Value;
         result.Max   = counter.Max;
         result.Style = counter.Style;
         result.InternalText.FillColor = counter.InnerColor.ToSFML();
         result.Position = counter.Location.ToSFML();
         result.InternalText.OutlineColor     = counter.OutsideColor.ToSFML();
         result.InternalText.OutlineThickness = counter.OutsideThickness;
         result.InternalText.CharacterSize    = (uint)counter.Size;
         if (counter.TextImage != null)
         {
             using var stream = new MemoryStream();
             counter.TextImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.TextImage = new Texture(stream);
         }
         return(result);
     }
     else if (widget is Template.Gauge gauge)
     {
         var result = new DrawableGauge();
         result.Gauge = gauge;
         {
             using var stream = new MemoryStream();
             gauge.Bar.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.Bar = new Texture(stream);
         }
         {
             using var stream = new MemoryStream();
             gauge.Back.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.Back = new Texture(stream);
         }
         result.InternalText.Font            = Fonts[gauge.Font];
         result.InternalText.DisplayedString = gauge.Content;
         result.Value = preview ? (float)Random.NextDouble() * gauge.Max : gauge.Value;
         result.Max   = gauge.Max;
         result.Style = gauge.Style;
         result.InternalText.FillColor = gauge.InnerColor.ToSFML();
         result.Position = gauge.Location.ToSFML();
         result.InternalText.OutlineColor     = gauge.OutsideColor.ToSFML();
         result.InternalText.OutlineThickness = gauge.OutsideThickness;
         result.InternalText.CharacterSize    = (uint)gauge.Size;
         if (gauge.TextImage != null)
         {
             using var stream = new MemoryStream();
             gauge.TextImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.TextImage = new Texture(stream);
         }
         return(result);
     }
     else if (widget is Template.Field field)
     {
         var result = new DrawableField();
         result.Field            = field;
         result.Font             = Fonts[field.Font];
         result.DisplayedString  = preview ? "<exemple>" : field.Content;
         result.FillColor        = field.InnerColor.ToSFML();
         result.Position         = field.Location.ToSFML();
         result.OutlineColor     = field.OutsideColor.ToSFML();
         result.OutlineThickness = field.OutsideThickness;
         result.CharacterSize    = (uint)field.Size;
         if (field.TextImage != null)
         {
             using var stream = new MemoryStream();
             field.TextImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.TextImage = new Texture(stream);
         }
         return(result);
     }
     else if (widget is Template.Text text)
     {
         var result = new DrawableText();
         result.Text             = text;
         result.Font             = Fonts[text.Font];
         result.DisplayedString  = text.Content;
         result.FillColor        = text.InnerColor.ToSFML();
         result.Position         = text.Location.ToSFML();
         result.OutlineColor     = text.OutsideColor.ToSFML();
         result.OutlineThickness = text.OutsideThickness;
         result.CharacterSize    = (uint)text.Size;
         if (text.TextImage != null)
         {
             using var stream = new MemoryStream();
             text.TextImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.TextImage = new Texture(stream);
         }
         return(result);
     }
     else if (widget is Template.FieldList fieldList)
     {
         var result = new DrawableFieldList();
         result.FieldList = fieldList;
         result.Position  = fieldList.Location.ToSFML();
         foreach (var subWidget in fieldList.Data)
         {
             var drawableSubWidget = GetDrawable(fieldList.Model, preview);
             result.ToDraw.Add(drawableSubWidget);
             if (drawableSubWidget is DrawableCounter subCounter)
             {
                 subCounter.InternalText.DisplayedString = subWidget.Item1;
                 subCounter.Value = subWidget.Item2;
             }
             else if (drawableSubWidget is DrawableGauge subGauge)
             {
                 subGauge.InternalText.DisplayedString = subWidget.Item1;
                 subGauge.Value = subWidget.Item3;
             }
             else if (drawableSubWidget is DrawableField subField)
             {
                 subField.DisplayedString = subWidget.Item1;
             }
         }
         return(result);
     }
     else if (widget is Template.Image image)
     {
         var result = new DrawableImage();
         result.Image    = image;
         result.Position = image.Location.ToSFML();
         {
             using var stream = new MemoryStream();
             image.Data.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.Texture = new Texture(stream);
         }
         return(result);
     }
     else
     {
         var graph  = widget as Template.StatGraph;
         var result = new DrawableStatGraph();
         result.StatGraph        = graph;
         result.Position         = graph.Location.ToSFML();
         result.CharacterHeight  = graph.CharacterHeight;
         result.HighGraphColor   = graph.HighGraphColor.HasValue ? graph.HighGraphColor.Value.ToSFML() : null as Color?;
         result.LowGraphColor    = graph.LowGraphColor.ToSFML();
         result.InnerColor       = graph.InnerColor.ToSFML();
         result.Max              = graph.Max;
         result.OutsideColor     = graph.OutsideColor.ToSFML();
         result.OutsideThickness = graph.OutsideThickness;
         result.Size             = graph.Size.ToSFML();
         result.IconsSize        = graph.IconsSize.ToSFML();
         if (graph.TextImage != null)
         {
             using var stream = new MemoryStream();
             graph.TextImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             stream.Seek(0, SeekOrigin.Begin);
             result.TextImage = new Texture(stream);
         }
         foreach (var stat in graph.Statistics)
         {
             var header = (new DrawableStatGraph.Header(), stat.Item2);
             header.Item1.Text = new Text
             {
                 CharacterSize    = (uint)result.CharacterHeight,
                 DisplayedString  = stat.Item1.Text,
                 FillColor        = result.InnerColor,
                 Font             = Fonts[graph.Font],
                 OutlineColor     = graph.OutsideColor.ToSFML(),
                 OutlineThickness = graph.OutsideThickness
             };
             result.Statistics.Add(header);
             if (stat.Item1.Image != null)
             {
                 using var stream = new MemoryStream();
                 stat.Item1.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                 stream.Seek(0, SeekOrigin.Begin);
                 header.Item1.Image = new Texture(stream);
             }
         }
         return(result);
     }
 }