gpt4 book ai didi

javascript - HTML5 Canvas 缩放再次绘制

转载 作者:行者123 更新时间:2023-11-28 00:41:46 26 4
gpt4 key购买 nike

目前我正在尝试缩放 Canvas 并再次绘制整个 Canvas

var painter = document.getElementById('painter');

var cp = painter.getContext('2d');

var scale = 1;
var originx = 0;
var savedData = [];
var originy = 0;
var zoom = 0;

$('#painter').on('mousewheel', function(event) {

var imgData = cp.getImageData(0, 0, painter.width, painter.height);
savedData.push(imgData);
var mousex = event.clientX - painter.offsetLeft;
var mousey = event.clientY - painter.offsetTop;
var wheel = event.deltaY;//n or -n

var zoom = 1 + wheel/2;

cp.translate(
originx,
originy
);
cp.scale(zoom,zoom);
cp.translate(
-( mousex / scale + originx - mousex / ( scale * zoom ) ),
-( mousey / scale + originy - mousey / ( scale * zoom ) )
);

if (savedData.length > 0) {
var imgData = savedData.pop();
cp.putImageData(imgData, 0, 0);
}

originx = ( mousex / scale + originx - mousex / ( scale * zoom ) );
originy = ( mousey / scale + originy - mousey / ( scale * zoom ) );
scale *= zoom;

});

问题是它不起作用。 Canvas 永远不会更新...变量似乎很好,因为我需要再次绘制整个 Canvas ,所以我将所有数据保存到数组中

最佳答案

getImageData 和 context.putImageData 是非常昂贵的操作。

相反,您可以将原始内容存储在使用

创建的第二个仅内存 Canvas 中
var secondCanvas = document.createElement('canvas')
var secondContext = secondCanvas.getContext('2d');
secondCanvas.width=mainCanvas.width;
secondCanvas.height=mainCanvas.height;
secondContext.drawImage(mainCanvas,0,0);

然后使用第二个 Canvas 作为主 Canvas 上缩放绘图的图像源:

mainContext.drawImage(secondCanvas,x,y);

将内容缓存到第二个 Canvas 后,您可以使用此 Stackoverflow 答案通过鼠标滚轮进行缩放:

Zoom and pan in animated HTML5 canvas

关于javascript - HTML5 Canvas 缩放再次绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com