thehighhomie
@thehighhomie

HTML5 Canvas: возможно ли сделать скриншот канваса при изменении объекта без лагов?

Пишу приложение где есть рабочая область (canvas, и работа с элементами в нем - картинки, текст) и есть панель слайдов.

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

Все работает, но есть один неприятный нюанс: при скриншоте канваса, если к примеру элемент передвигается (а скриншот делается при каждом изменении канваса), то он подлагивает.

Подскажите пожалуйста, возможно ли как-нибудь решить эту проблему?
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Всё просто.
Чтобы снять скрин - нужно время: T1
Чтобы перерисовать сцену/объект - нужно время: T2
А вот чтобы сделать копию региона canvas - нужно время T3.
Подытожим: T1>T2>T3

Чтобы снять быстро скрин, нужно:
1. Получить нужный регион из визуальной сцены (игрового canvas'a) в переменную
2. Создать новый объект канваса в памяти (без помещения в DOM!)
3. Скопировать в него изображение из переменной
4. Сохранить куда нужно

Копирование - тут.
После того, как заберёте фрагмент - сразу переходите в асинхронный режим, передав сохранение воркеру. Ну и каждый кадр сохранять (60fps) - не советую, если это возможно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы