gpt4 book ai didi

javascript - canvas - putImageData 并不总是有效

转载 作者:行者123 更新时间:2023-12-03 07:36:47 42 4
gpt4 key购买 nike

在 Canvas 中恢复背景时遇到问题。我有一个 Canvas ,它可以根据选项的内容改变大小(它可以变得非常大),我在上面绘制图像,现在我想要一个指示器以类似网格的格式显示鼠标所在的位置。问题是绘制了红色框,但下次更改 curXcurY 时背景不会重新绘制。

我注意到一个奇怪的地方是,当我将鼠标移至黑色区域时,红色框似乎是深红色,但是当我在同一位置来回移动时,红色似乎变得更强。有时,我之前画的红框也会变得更强,而无需重新访问这些区域,就像一条正在形成的痕迹。

仅有时背景会返回,但通常是在我离开该区域时。

<canvas id="leveldraw" onmousemove="getMouse(event)" onmouseout="stopMouse()" width="0" height="0"></canvas>

...

var oldBlk = null;
...
function getMouse(e)
{
var offsetpos = recursive_offset(canvas);
var oldX = curX;
var oldY = curY;
mouseX = e.clientX + offsetpos.x + (canvas.offsetLeft/2);
mouseY = e.clientY + offsetpos.y + (canvas.offsetTop/2)+24;
curX = Math.floor(mouseX/24);
curY = Math.floor(mouseY/24);
if(oldX!=curX || oldY!=curY)
{
if(oldBlk != null)
ctx.putImageData(oldBlk,(oldX*24)-24,(oldY*24)-24);
oldBlk = ctx.getImageData((curX*24)-24,(curY*24)-24,72,72);
ctx.lineWidth="1";
ctx.strokeStyle="red";
ctx.rect(curX*24,curY*24,24,24);
ctx.stroke();
}
}
function stopMouse()
{
ctx.putImageData(oldBlk,(curX*24)-24,(curY*24)-24);
oldBlk = null;
}

recursive_offset():Get mouse position in scrollable div

我什至在整个 Canvas 上尝试过 getImageData,但这似乎不起作用。离开 Canvas 时,它可能确实恢复了整个背景,但是当我返回 Canvas 时,红色框又回来了。

最佳答案

在进行下一次绘图操作之前,您应该使用ctx.beginPath()。调用 lines()fill() 不会清除堆栈,并且下次会再次绘制,从而导致形成轨迹。

关于javascript - canvas - putImageData 并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35578378/

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