WPF绘图性能问题
2024-10-07 22:19:40
代码:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DrawPanel chart_ = new DrawPanel();
LineCanvas _mask = new LineCanvas();
grid1.Children.Add(chart_);
grid1.Children.Add(_mask);
chart_.plot();
}
}
public class LineCanvas : Canvas
{
public LineCanvas()
{
Background = Brushes.Transparent;
var line = new Line()
{
StrokeThickness = 2,
Stroke = System.Windows.Media.Brushes.Black,
};
this.Children.Add(line);
MouseMove += (send, e) =>
{
Point point = e.GetPosition(this);
line.X1 = point.X;
line.Y1 = 0;
line.X2 = point.X;
line.Y2 = ActualHeight;
};
}
}
public class DrawPanel : Panel
{
private DrawingVisual _drawingVisual = new DrawingVisual();
public DrawPanel()
{
this.AddVisualChild(_drawingVisual);
IsHitTestVisible = false;
}
public Pen p = new Pen(Brushes.Gainsboro, 1.0);
public void plot()
{
p.Freeze();
var dc = _drawingVisual.RenderOpen();
_drawingVisual.CacheMode = new BitmapCache();//这句话是关键,加了性能直接提升
for (int x = 0; x < 10000; x++)
{
double xx = 700.0 / 2 + ((x / 10000.0) * (700.0 / 2.0));
Point p1 = new Point(xx, 0);
Point p2 = new Point(xx, 353);
dc.DrawLine(p, p1, p2);
}
dc.Close();
}
protected override int VisualChildrenCount
{
get { return 1; }
}
protected override Visual GetVisualChild(int index)
{
if (index == 0)
return _drawingVisual;
throw new IndexOutOfRangeException();
}
}
最新文章
- UIDynamic(捕捉行为)
- Qt编程&#39;";";hello world
- deepin linux字体渲染(转)
- io端口与io内存详解
- 06- Shell脚本学习--其它
- Linux Shell 文本处理工具集锦
- Linux 基础入门(新版)”实验报告一~十二
- 常考的算法及Java知识总结
- SQL 使用经验
- 如何实现Linux下的U盘(USB Mass Storage)驱动
- IO流程中IO向量iovec
- 关于css的层叠上下文和层叠顺序问题
- Rhino学习教程——1.2
- Object constraint language for code generation from activity models
- 自写juqery插件实现左右循环滚动效果图
- Python 枚举【一】
- 【Hadoop学习之五】win7+Eclipse+hadoop3搭建本机开发环境
- Mysql的唯一性索引unique
- html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?
- Web项目--------原Oracle数据库的项目同时兼容MySql