Ami*_*gin 19 html5 canvas image
我在canvas元素上实现了一个放大和缩小功能.它的工作原理是缩放画布,翻译它,然后再重绘整个场景.问题是重绘所有内容需要花费大量时间,因为我的画布上有很多东西.
我需要一种方法将画布复制到图像对象,而不是将图像复制回画布而不会降低质量.将canvas复制到javascript变量以及稍后将此变量复制回画布的具体方法是什么?
如果你写下代码我会很高兴,因为我在互联网上找不到任何好的解释.
谢谢,
and*_*wmu 27
drawImage()方法可以使用另一个画布而不是图像绘制到画布.
您可以创建一个与原始尺寸相同的"备份"画布,将第一个画布绘制到那里,然后在需要时将其绘制回原始画布.
例如
// Assume we have a main canvas
// canvas = <main canvas>
ctx = canvas.getContext('2d');
..
// create backing canvas
var backCanvas = document.createElement('canvas');
backCanvas.width = canvas.width;
backCanvas.height = canvas.height;
var backCtx = backCanvas.getContext('2d');
// save main canvas contents
backCtx.drawImage(canvas, 0,0);
..
// restore main canvas
ctx.drawImage(backCanvas, 0,0);
Run Code Online (Sandbox Code Playgroud)
Lok*_*tar 21
有几个方法可以做到这一点那里有在getImageData
和putImageData
方法参考,但putImageData
并getImageData
是相当缓慢的.另一种方法是将数据保存到image
内存中并从更快的内容中调用它,然后第三种方式是由andrewmu提到的那个涉及复制到另一个canvas元素的方法.我已经包含了第一种和第二种类型的例子.
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
savedData = new Image();
function save(){
// get the data
savedData.src = canvas.toDataURL("image/png");
}
function restore(){
// restore the old canvas
ctx.drawImage(savedData,0,0)
}
Run Code Online (Sandbox Code Playgroud)
// Setup our vars, make a new image to store the canvas data
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
canvasData = '';
function save(){
// get the data
canvasData = ctx.getImageData(0, 0, 100, 100);
}
function restore(){
// restore the old canvas
ctx.putImageData(canvasData, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41778 次 |
最近记录: |