В настоящее время я работаю над веб-приложение, в котором известны только единичные изменения пикселов, которые реализуются как событие:оптимизация Canvas, когда изменения пиксельные известны
function pixelChanged(x, y, color)
Они должны быть обращено на холсте , Я попробовал два способа сделать это:
- ничья пиксели непосредственно FillRect
- запоминания пикселей и положить их на холст с putImageData каждые несколько микросекунд
Теперь оба этих метода, кажется, низкая производительность. Первая приводит к многократным перерисовкам, вторая перерисовывает весь образ, даже если изменилась только небольшая область.
Мой конкретный вопрос: если есть лучший способ реализовать это (может быть, что-то вроде 1., но каким-то образом отложен?).
А если нет, какой из этих методов я должен предпочесть? Как я могу оптимизировать его в этом случае?
Спасибо заранее и наилучшими пожеланиями,
копия
Вы пытались использовать getImageData(), изменяя там пиксели, а затем putImageData(), когда будете готовы? –
в случае 1. выполняют ли вызовы pixelchanged в одном и том же «цикле вызовов», или существует ли задержка между ними (настройка, пользовательская и т. Д.)? Вы можете попробовать двойную буферизацию. Рисуем на экранном холсте и копируем весь холст на видимый каждые несколько секунд. Не уверен, улучшится ли ваш метод без 2. – Gerben
@JamesClark Нет. Это действительно хорошее улучшение. :-) – copy