确定绘制到画布中的形状/图形的边界
我有一个简单的 HTML5 Canvas 示例,可以让用户在画布上绘制路径。有什么方法可以确定所绘制的路径/形状的矩形边界吗? (即,路径周围的矩形区域的宽度和高度是多少)。
我意识到我可以在绘制形状时进行数学计算以找出边界,但我想看看是否有更简单/内置的方法。
I have a simple HTML5 Canvas example that lets the user draw paths onto a canvas. Is there any way to determine the rectangular bounds of the path / shape that was drawn? (i.e., what is the width, height of the rectangular region surrounding the path).
I realize I could do the math while the shape is being drawn to figure out the bounds, but I wanted to see if there was an easier / built in way.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尽管您必须自己跟踪它,但我建议将其包装在可重用的功能中。这是一个最小的示例,仅跟踪
moveTo
和lineTo
。请参阅此处的实时示例:http://phrogz.net/tmp/canvas_bounding_box.htmlAlthough you have to track it yourself, I would suggest wrapping it up in reusable functionality. Here's a minimal example, tracking it only for
moveTo
andlineTo
. See the live example here: http://phrogz.net/tmp/canvas_bounding_box.html受到@Phrogz答案的启发,答案来自计算任意像素的边界框-基于绘图,以及他的两个略有不同的演示 http://phrogz.net/tmp/canvas_bounding_box .html 和 http://phrogz.net/tmp/canvas_bounding_box2.html ,这是一个不使用 alpha 通道的版本(它在我的情况下不起作用),但仅使用与白色的比较。
Inspired by @Phrogz's answer, the answer from Calculate bounding box of arbitrary pixel-based drawing, and his two slightly different demos http://phrogz.net/tmp/canvas_bounding_box.html and http://phrogz.net/tmp/canvas_bounding_box2.html, here is a version not using the alpha channel (it did not work in my case) but just using a comparison to white color.
我们可以从fabric.js库中学习_calcBoundsFromPath方法。这是基于数学计算完成的。
https://github.com/fabricjs/fabric。 js/blob/master/src/shapes/Path.ts
We can learn the _calcBoundsFromPath method from the fabric.js library.This is done based on mathematical calculations.
https://github.com/fabricjs/fabric.js/blob/master/src/shapes/Path.ts
我假设您正在使用 lineTo ,我能想到的唯一方法是在用户绘制路径时存储高度和宽度的最小/最大。除此之外,从画布中提取信息的唯一方法是使用 getImageData ,它只会为您提供原始像素信息。
展示这一点的快速示例
注意我只是创建了一堆随机点。要记住的主要事情是将最小/最大值设置为用户创建的第一条路径的坐标。
我想你知道这一点,所以真正的答案是否定的,不幸的是目前没有内置的方法可以做到这一点。
I assume you are using
lineTo
s the only way I could think of would be to keep a min/max stored for the height and width as the user is drawing paths. Other than that the only way to pull back info from the canvas would be to usegetImageData
which will only give you raw pixel information.Quick example showing this
note I just create a bunch of random points. The main thing to remember is set the min/max vals to the coords of the first path a user creates.
I guess you knew that though, so the real answer is no there is unfortunately no built in way currently to do it..