How to save Geometry as an image?
For example, I have a List<Geometry> .
I want it to be as follows:
for (int i = 0; i < GeometryList.Count; i++) { Pen TestPen = new Pen(Brushes.Black, 1); GeometryDrawing TestDrawing = new GeometryDrawing(Brushes.Black, TestPen, TestGeometry); Bitmap b = TestDrawing as Bitmap; b.Save(System.AppDomain.CurrentDomain.BaseDirectory + i + ".png", ImageFormat.Png); }
Update:
The code I wrote a few hours ago:
private void CreateFontMap(string PathTofont) { GlyphTypeface font = new GlyphTypeface(new Uri(PathTofont)); List<ushort> fontNum = new List<ushort>(); foreach (KeyValuePair<int, ushort> kvp in font.CharacterToGlyphMap) { fontNum.Add(kvp.Value); } if (fontNum.Count > 0) { int mapWidth = 50 * 20; int mapHeight = 50 * (getRowNum(fontNum.Count + 1) + 1); Bitmap b = new Bitmap(mapWidth, mapHeight); Graphics g = Graphics.FromImage(b); System.Windows.Media.Pen glyphPen = new System.Windows.Media.Pen(System.Windows.Media.Brushes.Red, 1); Geometry glyphGeometry; for (int i = 0; i < fontNum.Count; i++) { glyphGeometry = font.GetGlyphOutline(fontNum[i], 50, 1); RenderTargetBitmap bmp = new RenderTargetBitmap(50, 50, 96, 96, PixelFormats.Pbgra32); DrawingVisual viz = new DrawingVisual(); DrawingContext dc = viz.RenderOpen(); dc.DrawGeometry(System.Windows.Media.Brushes.Red, null, glyphGeometry); dc.Close(); bmp.Render(viz); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); MemoryStream myStream = new MemoryStream(); encoder.Save(myStream); int rowNum = (getRowNum(i)); g.DrawImage(System.Drawing.Bitmap.FromStream(myStream), new PointF((i - rowNum * 20) * 50, rowNum * 50)); } g.Dispose(); b.Save(System.AppDomain.CurrentDomain.BaseDirectory + "map.png", ImageFormat.Png); b.Dispose(); } } private int getRowNum(int p) { return p / 20; }
But instead
I get Img2 .
Update 2: I changed this:
DrawingVisual viz = new DrawingVisual(); DrawingContext dc = viz.RenderOpen(); dc.DrawGeometry(System.Windows.Media.Brushes.Red, null, glyphGeometry); dc.Close();
in
DrawingVisual viz = new DrawingVisual(); DrawingContext dc = viz.RenderOpen(); dc.DrawImage(geometryImage, new Rect(0, 0, 50, 50)); dc.Close();
and added:
glyphDrawing = new GeometryDrawing(System.Windows.Media.Brushes.Black, glyphPen, glyphGeometry); DrawingImage geometryImage = new DrawingImage(glyphDrawing); geometryImage.Freeze(); img1.Source = geometryImage;
And everything works.