Я работаю над программой java, которая рисует сложные фрактальные фигуры на экране и позволяет пользователю «приближать» и перемещаться, чтобы исследовать эти фигуры. Это означает, что необходимо вычислить, чтобы отобразить фрактал и что должна быть достигнута определенная частота кадров (около 20 кадров в секунду или более).Java2D vs Javafx Canvas performance
У меня есть несколько методов, которые я мог бы использовать для достижения этого, но мне интересно, какой из них будет иметь лучшую производительность.
Во-первых, я думаю, что можно было использовать пустой Image
(BufferedImage
, в частности), и это Graphics2D
контекст, чтобы нарисовать фрактал закадровый, а затем передать его в пользовательский интерфейс, который рисует его на экран. Это означало бы создание большого количества типов изображений, которые, как я полагаю, являются дорогостоящими.
Аналогичным вариантом будет создание двух изображений, а затем чередование между рисунком на втором, показывая первый, и наоборот. Будет ли этот метод лучше работать?
Мой третий вариант заключается в том, чтобы пойти с API холста javafx и использовать Canvas
вместо Image
, в то же время делая то же самое (внешний экран).
Что даст мне лучший результат? Или есть что-то еще, что я должен рассмотреть?
Благодаря
Знаете ли вы, что лучше иметь два WritableImages, которые я передаю между Задачей и пользовательским интерфейсом, а не всегда повторно создавая экземпляр? – Olivier
Я сомневаюсь, что это будет иметь значение. Я думаю, что стоимость создания WritableImage совершенно ничтожно по сравнению с затратами на вычисление данных пикселя. Если бы он работал лучше, тогда я думаю, что использование одного WritableImage и позволить вычислить Task массив из ints или bytes будет работать одинаково хорошо и, вероятно, сохранит код чище. Вам может потребоваться просто экспериментировать ... –
Ну, вы используете задачу, поэтому поток GUI должен синхронизироваться с потоком, который выполнил задачу: он может долго ждать (достаточно, чтобы быть видимым), он может сделать задержки анимации или быть нелинейными (иногда быстрая, иногда медленная). Я думаю, что лучше использовать Canvas, потому что результат будет более плавным. – zenbeni