Метод контекстов drawImage()
позволяет использовать существующий холст в качестве источника. Это также позволяет вам указывать субрегионы исходного «изображения» для рисования. Вы также можете создать новый элемент холста программно. Объедините их, и вы сможете создавать свои собственные закадровые буферы и перенаправлять их в / из них, не обращаясь к getImageData()/putImageData()
или URL-адресам данных.
Я поместил пример этого онлайн .
Обратите внимание, что, хотя в данном примере происходит добавление динамически созданного холста к документу, чтобы вы могли его видеть (строка 29 источника), в этом нет необходимости. Элементы холста, созданные в документе, работают независимо от того, присоединены они к иерархии или нет.
Короче говоря:
function copyCanvasRegionToBuffer( canvas, x, y, w, h, bufferCanvas ){
if (!bufferCanvas) bufferCanvas = document.createElement('canvas');
bufferCanvas.width = w;
bufferCanvas.height = h;
bufferCanvas.getContext('2d').drawImage( canvas, x, y, w, h, 0, 0, w, h );
return bufferCanvas;
}
Редактировать : I сравнивал эту технику с getImageData/putImageData
; если важна скорость, используйте drawImage
для областей блиттинга. Вот что я увидел:
http://phrogz.net/tmp/canvas_copy_benchmark.png
Тесты производительности, выполняемые путем сохранения и восстановления области 125x180 10000 раз в OS X на MacBook Pro Core i7 с частотой 2,8 ГГц. Ваш пробег может варьироваться. В частности, сохранение / восстановление областей, которые либо намного больше, либо меньше, могут привести к разной относительной производительности.