Каков наилучший подход для рендеринга диаграмм в WPF? - PullRequest
0 голосов
/ 09 августа 2010

Каков наилучший подход для рендеринга диаграмм, а затем сохранения их на жестком диске для дальнейшего распространения с использованием WPF? Я нашел несколько способов сделать это, используя следующие типы:

  1. DrawingVisual - создание объекта этого типа с последующей визуализацией графики в его контексте;
  2. Shape - наследуется от класса Shape и затем переопределяет его свойство DefiningGeometry , в котором происходит фактическое отображение;
  3. PathFigure - добавление LineSegment -s к экземпляру этого класса и затем добавление этого экземпляра в Canvas;
  4. Adorner - производный от него и затем переопределяющий его OnRender метод;
  5. WritableBitmap - рендеринг на нем и добавление растрового изображения в Canvas.

Конечно, я собираюсь написать приложение, чтобы проверить, насколько быстрым будет каждый из них. Но кто-нибудь может сказать мне:

  • на правильном ли я пути?
  • есть ли другие способы сделать такой рендеринг?
  • , какой из них лучший в сроки исполнения?

1 Ответ

1 голос
/ 09 августа 2010

Все зависит от вашего фактического использования, в вашем случае вы упоминаете сохранение на жестком диске для «дальнейшего распространения» - я собираюсь предположить, что вы сохраняете их как изображение (jpg или png), а не как объекты wpf(xaml).

  1. Следует учитывать, является ли WPF подходящим инструментом для работы, WPF - это структура пользовательского интерфейса, а не универсальная библиотека обработки изображений, может быть лучше использовать что-то ещеполностью для генерации изображений.

  2. Для разумного количества точек узким местом вашей производительности будет кодирование изображения и его сохранение на диск, а не его рендеринг, поэтому вы должны выбрать метод, которыйВам будет легче кодировать.

  3. Все статьи о высокопроизводительных диаграммах WPF: a) о диаграммах с 10000 точками и более (потому что именно здесь возникают проблемы с производительностью), b: одиаграммы, которые вы отображаете в своем графическом интерфейсе (потому что в противном случае вы можете использовать библиотеку обработки изображений для создания растрового изображения) и диаграммы c:, которые изменяют все времяe (поэтому они прекрасно работают с привязкой данных) - есть причина, по которой они не говорят о сохранении диаграмм на диск.

  4. Для очень большого количества точек:

    • Самый быстрый способ рисовать в WPF - это наследовать от FrameworkElement (не Adorner) и переопределять OnRender.
    • Когда данные часто изменяются, рекомендуется использовать несколько объектов DrawingVisual, потому что тогда вы этого не сделаетепридется заново визуализировать все при изменении одного значения - но это не имеет значения для вас, так как изображение все равно не изменится после того, как вы его сохраните.
    • WritableBitmap используется для доступа к необработанному растровому изображению, вы используете его, когдарешите отказаться от всего хорошего макета, и рисование WPF дает вам, потому что вы не можете взять на себя накладные расходы, в этом случае вам следует перечитать мой первый пункт выше.

Итак, подводя итог, вы задаете не тот вопрос :-), если вам нужно сохранить изображения на диск, то скорость рендеринга WPF не является вашим узким местом или вам не следуетнг WPF для начала.Если вы используете WPF, просто выберите то, что вам удобнее кодировать.

Кстати: Adorners используются для отображения «плавающих» элементов над обычным пользовательским интерфейсом, вы можете использовать их для функций, похожих на подсказки, но не дляFrameworkElement - базовый класс, который вы ищете. FrameworkElement - базовый класс, который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...