image seismi c collect Извините за мой плохой Engli sh.
Я создаю визуализацию для сейсмических c наборов. Сбор содержит около 100-300 следов. Каждая трасса (polyline
) содержит более 1000 точек.
Если я попытаюсь добавить List<polyline>
к холсту как canvas.Children.Add
, у меня возникнет проблема. Приложение тратит много ресурсов.
Я обнаружил, что одним из ключей к решению этой проблемы является использование растрового изображения (RenderTargetBitmap
). Но я не могу понять, как избежать рендеринга полилиний на холсте и сразу экспортировать полилинии в растровое изображение, а затем загрузить на холст.
xaml
<Canvas x:Name="Canvas_Pic">
</Canvas>
wpf
public void ViewData(Canvas canvas)
{
DrawTraces(canvas);
ConvertToBitmap(canvas);
}
public void DrawTraces(Canvas canvas)
{
List<Polyline> traces = CreatePointsCollection(); // convert double array to polyline list
for (int p = 0; p < traces.Count; p++)
{
traces[p].StrokeThickness = 0.5;
traces[p].Stroke = Brushes.Black;
canvas.Children.Add(traces[p]);
}
}
public void Function(Canvas canvas)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(canvas);
var rtb = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96,
96, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(canvas);
dc.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}
rtb.Render(dv);
var bitmap = new PngBitmapEncoder() { Frames = { BitmapFrame.Create(rtb) } };
using (var file = File.Create("file.png"))
bitmap.Save(file);
canvas.Children.Clear(); // clear existing polilines
ImageBrush brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri("file.png", UriKind.Relative));
canvas.Background = brush;
}
Также у меня есть проблема с загрузкой растрового изображения на холсте. Я не могу создать растровое изображение, пока холст не отрисовывается с помощью полилиний. Вот почему я дважды вижу одно изображение: сначала, когда на холсте нарисованы полилинии, а затем растровое изображение - это фон холста.
Как я могу его оптимизировать. Чтобы создать прямое растровое изображение, избегая добавления полилиний на холст?
С уважением.