javascript - 如何在缩放 Canvas 中获取像素范围?

标签 javascript html canvas

在下面的代码中,我在中心画了一个圆,但是因为它是缩放的,圆在右下角!

var canvas = document.getElementById('mycanvas');
context = canvas.getContext("2d");
context.canvas.width = 400;
context.canvas.height = 200;

context.clearRect(0, 0, context.canvas.width, context.canvas.height); // Clears the canvas

var scale = 2;
context.scale(scale, scale);
context.beginPath();
context.fillStyle = "#ff2626"; // Red color
context.arc(context.canvas.width / 2, context.canvas.height / 2, 10, 0, Math.PI * 2); //center
context.fill();
context.closePath();
canvas {
	border: solid 1px #ccc;
}
<HTML>
<body>

<canvas id="mycanvas"></canvas>

</body>
</HTML>

您可能知道, Canvas 的宽度和高度与其内部绘制的内容无关,尤其是在缩放时。换句话说,当您使用 context.scale(scale_x, scale_y); 缩放 Canvas 时,它将缩放 Canvas 内的所有形状。我想知道,有什么方法可以获取 Canvas 像素范围吗?

我想知道缩放 Canvas 时左边缘和右边缘的 X 以及顶部和底部边缘的 Y。

最佳答案

将坐标除以 scale 应该可以解决问题:

var canvas = document.getElementById('mycanvas');
context = canvas.getContext("2d");
context.canvas.width = 400;
context.canvas.height = 200;

context.clearRect(0, 0, context.canvas.width, context.canvas.height); // Clears the canvas

var scale = 2;
context.scale(scale, scale);
context.beginPath();
context.fillStyle = "#ff2626"; // Red color
context.arc(context.canvas.width /2/scale, context.canvas.height / 2/scale, 10, 0, Math.PI * 2); //center
context.fill();
context.closePath();
canvas {
	border: solid 1px #ccc;
}
<HTML>
<body>

<canvas id="mycanvas"></canvas>

</body>
</HTML>

附带说明一下,context.canvas.width/(2*scale)context.canvas.width/2/scale 更干净,但我保留了它只是为了显示按 scale 划分。

关于javascript - 如何在缩放 Canvas 中获取像素范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997138/

相关文章:

javascript - JS替换和Regex排除某个单词

javascript - 列标题与表中的数据未对齐

javascript - 图像未出现在 hostgator 中但出现在 localhost 中

java - 使用Seek Bar缩放android Canvas

javascript - 使用 Javascript/React 合并图像

php - 将价格表从 Excel 复制并粘贴到浏览器

html - 如何使 div 固定且有边距?

php - Base64 -> AJAX -> PHP 在 Android 股票浏览器上写入 0 字节文件

javascript - 如何实现更逼真的粒子漂 float 画?

javascript - 让div多次执行-200px?