WPF绘制矢量图形并绑定到界面的方法

这里先封装一个方法,使用的时候先创建一个Draw,拿到DrawingContext 之后就可以通过DrawingContext 去绘制想要的图形,绘制完成后通过GetDraw拿到所有绘制的结果

添加一个PrintImage()用于测试当前绘图的样子用于测试

csharp 复制代码
   public class DrawVector
   {
       public DrawingVisual? visual { get; set; }

       public DrawingContext CreateDraw()
       {
           if (visual == null)
               visual = new DrawingVisual();
           var dc = visual.RenderOpen();

           return dc;
       }

       public DrawingGroup? GetDraw(DrawingContext? dc)
       {
           if (visual == null)
               return null;
           if (dc == null)
               return null;

           Dispose(dc);
           var draw = visual.Drawing.Frozen();
           //PrintImage();

           return draw;

       }

       /// <summary>
       /// 测试打印绘图结果
       /// </summary>
       private void PrintImage()
       {
           var bmp = new RenderTargetBitmap(2000, 2000, 96, 96, PixelFormats.Pbgra32);
           bmp.Render(visual);
           var encoder = new PngBitmapEncoder();
           encoder.Frames.Add(BitmapFrame.Create(bmp));

           using (var stream = new FileStream($"D:\\{Guid.NewGuid()}.png", FileMode.Create))
           {
               encoder.Save(stream);
           }
       }

       public void RotationAngle(DrawingContext dc, Rect rect, double angleInDegrees)
       {
           var rotateTransform = new RotateTransform(angleInDegrees, rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
           dc.PushTransform(rotateTransform);
       }

       private void Dispose(DrawingContext? dc)
       {
           if (dc != null)
               dc.Close();
       }

   }

使用实例

csharp 复制代码
   var drawVector = new DrawVector();
   var dc = drawVector.CreateDraw();
   
   dc.DrawRectangle(System.Windows.Media.Brushes.White, new System.Windows.Media.Pen(System.Windows.Media.Brushes.White, 1).Frozen(), new Rect(0, 0, MapBackCanvasWidth, MapBackCanvasHeight));
   DrawVectorContent(dc);

   return drawVector.GetDraw(dc);
相关推荐
❀always❀20 小时前
深入浅出分布式限流(更新中)
分布式·wpf
深漂阿碉1 天前
WPF打包exe应用的图标问题
wpf
三千道应用题1 天前
WPF学习笔记(26)CommunityToolkit.Mvvm与MaterialDesignThemes
wpf
SEO-狼术4 天前
DevExpress WPF Crack, DevExpress WPF v25.1
wpf
小老鼠爱大米4 天前
C# WPF - Prism 学习篇:搭建项目(一)
c#·wpf·prism
博睿谷IT99_4 天前
Hadoop 分布式存储与计算框架详解
wpf
qq_392397125 天前
Redis常用操作
数据库·redis·wpf
三千道应用题5 天前
WPF学习笔记(25)MVVM框架与项目实例
wpf
厦门德仔6 天前
【WPF】WPF(样式)
android·java·wpf
三千道应用题6 天前
WPF学习笔记(24)命令与ICommand接口
wpf