c# wpf bitmap polygon

c#wpf polígono a mapa de bits que no muestra nada



bitmap polygon (1)

Lo siento si crees que esta pregunta ya fue respondida, miré a todas partes tratando de descubrir cómo es que cuando hago esto, no muestra nada. Este es todo mi código:

Polygon hexagon = new Polygon(); PointCollection pc = new PointCollection(); double side = 25; double xOffset = 0, yOffset = 0; double r = System.Math.Cos((System.Math.PI / 180) * 30) * side; double h = System.Math.Sin((System.Math.PI / 180) * 30) * side; //Create the 6 points needed to create a hexagon pc.Add(new Point(xOffset, yOffset)); //Point 1 pc.Add(new Point(xOffset + side, yOffset)); //Point 2 pc.Add(new Point(xOffset + side + h, yOffset + r)); //Point 3 pc.Add(new Point(xOffset + side, yOffset + 2 * r)); //Point 4 pc.Add(new Point(xOffset, yOffset + 2 * r)); //Point 5 pc.Add(new Point(xOffset - h, yOffset + r)); //Point 6 hexagon.Stroke = Brushes.Blue; hexagon.StrokeThickness = 1; hexagon.Fill = Brushes.LightBlue; hexagon.Points = pc; RenderTargetBitmap bmp = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Default); bmp.Render(hexagon); img.Source = bmp;

Creé un hexágono como un objeto polígono y utilicé RenderTargetBitmap para tratar de convertir el polígono a un mapa de bits, pero no parece mostrar nada que pueda ver. También agregué un lienzo y agregué el objeto Polígono allí y parece funcionar. Es solo cuando se convierte a un mapa de bits. Realmente estoy perdido en lo que está mal en mi código. Tengo todo en este momento en el evento principal cargado de Windows.

La ayuda será apreciada, gracias.

La solución puede ser simple o algo que pasé por alto, con suerte la solución es simple :).


Un UIElement de WPF tiene que estar dispuesto antes de ser visible. Tiene que obtener al menos una llamada de Measure y Arrange , donde obtiene un Tamaño disponible y un Rectángulo de arreglos final (generalmente desde su Panel padre). Al renderizar un elemento recién creado en un RenderTargetBitmap, debe llamar a estos métodos de forma manual, con los valores apropiados para el Tamaño y Rect:

... hexagon.Measure(new Size(200, 200)); // adjust this to your needs hexagon.Arrange(new Rect(0, 0, 200, 200)); // adjust this to your needs var bmp = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Default); bmp.Render(hexagon);