HTML-буфер пиксельного холста - PullRequest
1 голос
/ 28 марта 2011

Я не знаю правильного термина, но в GTK я считаю, что он назывался пиксельным буфером.Вы можете скопировать всю или некоторую часть области рисования в pixbuf, а затем позже сбросить pixbuf обратно на экран, вместо того, чтобы проходить и рендерить всю вещь заново.Я выполняю менубар, и менубар падает и закрывает все, что находится под ним.Однако рисование всего холста занимает несколько секунд, поэтому мне было интересно, есть ли правильный способ скопировать все, что будет закрыто раскрывающимся меню, затем, когда раскрывающееся меню закрыто, перерисовать его на экране,Я полагаю, что это можно сделать с помощью функции context.getImageData(), но я прочитал, что это крайне неэффективно.

1 Ответ

5 голосов
/ 29 марта 2011

Это правда, getImageData() слишком неэффективно. Но лучше начать именно то, что вы пытаетесь сделать:

С помощью метода drawImage контекста холста вы можете передать изображение, но вы можете передать и другой холст. Поэтому создайте временный холст, который никогда не будет добавлен на страницу:

// only exists in javascript, not on the page
tempcanvas = document.createElement('canvas');
tempcanvas.height = (normal canvas width);
tempcanvas.width = (normal canvas height);

Затем вы можете позвонить tempcanvasContext.drawImage(normalCanvas, 0, 0), чтобы сделать снимок текущего холста непосредственно перед созданием раскрывающегося меню. Когда раскрывающееся меню исчезает, вы вызываете normalcanvasContext.drawImage(tempcanvas, 0, 0), чтобы вернуть его назад.

Я надеюсь, что это дает хорошее общее представление, и оно должно быть намного быстрее, чем getImageData. Вы можете сделать его еще более эффективным, скопировав только те части экрана, которые хотите перерисовать.

...