C# 改进画布';速度反应
我有大约70条多段线的画布,每一条都有很多点。对于这个画布,我制作了一个C# 改进画布';速度反应,c#,wpf,canvas,C#,Wpf,Canvas,我有大约70条多段线的画布,每一条都有很多点。对于这个画布,我制作了一个鼠标移动函数,虽然代码很重,但它的工作速度非常慢。我用更少的多段线尝试了这个方法,效果更好。 有人能帮我想办法让鼠标移动更好地处理所有原始多段线吗? 下面是我如何创建每条多段线(nStep的数字约为10000): 谢谢。除非我们知道你在做什么,否则我们帮不了你。如果您有一个特定的问题或慢点,请向我们显示与该问题相关的代码,否则,这里实际上没有特定的问题。如果您只是在执行用户控制的动画时尝试重新渲染背景,而不是从状态渲染绘图,
鼠标移动
函数,虽然代码很重,但它的工作速度非常慢。我用更少的多段线尝试了这个方法,效果更好。
有人能帮我想办法让鼠标移动
更好地处理所有原始多段线吗?
下面是我如何创建每条多段线(nStep
的数字约为10000):
谢谢。除非我们知道你在做什么,否则我们帮不了你。如果您有一个特定的问题或慢点,请向我们显示与该问题相关的代码,否则,这里实际上没有特定的问题。如果您只是在执行用户控制的动画时尝试重新渲染背景,而不是从状态渲染绘图,您希望使用
var imgData=canvasContext.getImageData(0,0,画布宽度,画布高度);
和画布上下文.putImageData(imgData,0,0)
。使用“撤消”和“重做”时,必须使用“状态”,但当设置动画以仅删除几行时,代码将不得不做太多的工作。@PHPglue问题是关于WPF,而不是HTML。请创建一个,以便我们能够更具体地理解您的问题。我添加了相关代码。除非我们知道您实际在做什么,否则我们无法帮助您。我如果您有一个特定的问题或慢点,请向我们展示与该问题相关的代码,否则,这里实际上没有特定的问题。如果您只是在执行用户控制的动画时尝试重新渲染背景,而不是从状态渲染绘图,您希望使用var imgData=canvasContext.getImageData(0,0,画布宽度,画布高度);
和画布上下文.putImageData(imgData,0,0)
。使用“撤消”和“重做”时,您必须使用状态,但当设置动画以仅删除几行时,您的代码将不得不做太多的工作。@PHPglue问题是关于WPF,而不是HTML。请创建一个状态,以便我们能够更具体地理解您的问题。我添加了相关代码。
for (int j = 0; j < nSteps; j++)
{
linesCounter++;
helpString = rayLines[linesCounter].Split(' ');
p.X = Convert.ToDouble(helpString[1]);
p.Y = Convert.ToDouble(helpString[2]);
beam.Add(p);
}
plotRay();
private void plotRay()
{
double x, y;
PointCollection fitPoints = new PointCollection();
for (int i = 0; i < nSteps; i++)
{
x = beam[i].X;
y = beam[i].Y;
Point p = new Point();
p.Offset(x, y);
fitPoints.Add(p);
}
Polyline ray = new Polyline();
ray = setBrush();
ray.Points = fitPoints;
Form.workingCanvas.Children.Add(ray);
}
public void mouseMove(Point currentPos)
{
if (firstUse)
{
double currentY = Math.Round((currentPos.Y) / (Yresulotion), 2);
double currentX = Math.Round((currentPos.X) / (Xresulotion), 2);
Form.WidthLine.Y1 = currentPos.Y;
Form.WidthLine.Y2 = currentPos.Y;
Form.HeightLine.X1 = currentPos.X;
Form.HeightLine.X2 = currentPos.X;
Form.DotOnGraph.Visibility = System.Windows.Visibility.Visible;
Canvas.SetLeft(Form.DotOnGraph, currentPos.X - (Form.DotOnGraph.Width / 2));
Canvas.SetTop(Form.DotOnGraph, currentPos.Y - (Form.DotOnGraph.Height / 2));
}
}