2011-09-15 37 views

回答

8

是的,你只需要使用drawImage()putImageData()drawImage()函數調用可以將畫布作爲數據源參數,因此您可以使用屏幕外的畫布作爲源畫到屏幕畫布上。如果您需要維護透明度,則需要使用putImageData(),它可以完全覆蓋現有畫布數據。相反,drawImage()將使用上下文的globalCompositeOperation參數對數據應用混合模式。

var offscreen_canvas = document.getElementById("offscreen_canvas"); 
var onscreen_canvas = document.getElementById("onscreen_canvas"); 
var onscreen_context = onscreen_canvas.getContext("2d"); 

// Don't care about transparency: 
onscreen_context.drawImage(offscreen_canvas, source_x, source_y, source_width, source_height, dest_x, dest_y, dest_width, dest_height); 

// Or, if we care about transparency preservation: 
var offscreen_context = offscreen_canvas.getContext("2d"); 
var offscreen_data = offscreen_context.getImageData(x, y, width, height); 

onscreen_context.putImageData(offscreen_data, dest_x, dest_y); 

參考文獻:drawImage()putImageData()

+0

爲了提高速度,我應該每次都獲取上下文的引用,還是應該將它存儲在某個地方? – Rewind

+1

理論上講,如果在獲取一次後將句柄存儲到上下文中,您應該會獲得更好的性能。在實踐中,你可能不會注意到差異。第一次調用'getContext()'時,它會在您的首選模式(2D或3D)中創建上下文的實例。之後,如果調用'getContext()',它只是返回對已經創建的對象的引用。所以,函數調用會有一些最小的開銷。 – Xenethyl