Andrzej Borucki programista
Temat: Rysowanie w WPF
Jeśli chodzi o Windows Forms i Graphics to jest normalnieprivate void DrawLines()
{
Random rand = new Random();
Graphics grf = this.CreateGraphics();
try
{
Pen pen;
for (int i = 0; i < 15 * 1000; i++)
{
if (rand.Next(2) == 0)
pen = new Pen(Brushes.Aqua);
else
pen = new Pen(Brushes.Brown);
using (pen)
grf.DrawLine(pen, rand.Next(100), rand.Next(100), rand.Next(100), rand.Next(100));
}
}
finally
{
grf.Dispose();
}
}
15 tysięcy linii w ciągu sekundy. (czy da się to jakoś zoptymalizować?)
Gdy rysuję z wykorzystaniem WPF i DrawingContext to postępuję według http://stackoverflow.com/questions/1150060/how-to-draw....
Pierwszy problem to bardzo długi czas oczekiwania, który skrócił się zdecydowanie gdy zamroziłem pen : drawingPen.Freeze();
public void DrawLines()
{
// _children = new VisualCollection(this);
Random rand = new Random();
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dx = dv.RenderOpen())
{
Pen drawingPen = new Pen(Brushes.Black, 1);
drawingPen.Freeze();
for (double i = 0; i < 10000; i = i + 0.1)
{
double x0 = rand.Next(100);
double y0 = rand.Next(100);
double x1 = rand.Next(100);
double y1 = rand.Next(100);
dx.DrawLine(drawingPen, new Point(x0, y0), new Point(x1, y1));
}
}
// _children.Add(dv);
}
Tylko problem, bo nic u mnie nie rysuje. Opuściłem _children.Add(dv) - co to jest _children? zmienna, property? W przykładzie jest FrameworkElement, u mnie MainWindow : Window, które też dziedziczy z FrameworkElement, ale nie ma czegoś takiego jak _children.
Zamrażanie pena bardzo przyśpiesza, jednak nie chcę rysować wszystkich linii w jednym kolorze, mam tysiące elementów, każdy w swoim kolorze, jak to wydajnie narysować?