使用 HTML5 Canvas - 围绕任意点旋转图像

发布于 2024-10-11 10:15:34 字数 179 浏览 4 评论 0原文

将表盘旋转到半圆形(北半球)图像作为背景。 范围可以是 0 - 180 度。 在输入到进行画布转换的方法时,转盘将旋转并停在匹配的值上。 这是我根据 phrogz 传递的帮助和示例所做的尝试

Rotate the dial on top of a semi circular(Northern Hemisphere) image as background.
range could be 0 - 180 degrees.
on input to the method that does canvas transformation, the dial would rotate and stop over the matched value.
Here's what I was trying based on help and sample passed on by phrogz

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诠释孤独 2024-10-18 10:15:34

一般来说,您想要做的是:

  1. 将上下文转换为画布上对象应围绕其旋转的点。
  2. 旋转上下文。
  3. 通过对象内旋转中心的负偏移量来变换上下文。
  4. 在 0,0 处绘制对象。

在代码中:

ctx.save();
ctx.translate( canvasRotationCenterX, canvasRotationCenterY );
ctx.rotate( rotationAmountInRadians );
ctx.translate( -objectRotationCenterX, -objectRotationCenterY );
ctx.drawImage( myImageOrCanvas, 0, 0 );
ctx.restore();

这是一个工作示例,展示了这一点的实际效果。 (旋转的数学只是通过实验进行修改,以找到适合快速绘制的仪表盘的摆动量和弧度偏移量。)

很明显,您可以替换步骤 # 中的 translate 调用。上面的 3 条带有 drawImage() 调用的偏移量。例如:

ctx.drawImage( myImageOrCanvas, -objectRotationCenterX, -objectRotationCenterY );

当您有多个对象要在同一位置绘制时,建议使用上下文翻译。

In general, what you want to do is:

  1. Transform the context to the point on the canvas that the object should rotate about.
  2. Rotate the context.
  3. Transform the context by the negative offset within the object for the center of rotation.
  4. Draw the object at 0,0.

In code:

ctx.save();
ctx.translate( canvasRotationCenterX, canvasRotationCenterY );
ctx.rotate( rotationAmountInRadians );
ctx.translate( -objectRotationCenterX, -objectRotationCenterY );
ctx.drawImage( myImageOrCanvas, 0, 0 );
ctx.restore();

Here's a working example showing this in action. (The math for the rotation was just experimentally hacked to find a swing amount and offset in radians that fit the quickly-sketched gauge dial.)

As may be evident, you can substitute the translate call in step #3 above with offsets to the drawImage() call. For example:

ctx.drawImage( myImageOrCanvas, -objectRotationCenterX, -objectRotationCenterY );

Using context translation is recommended when you have multiple objects to draw at the same location.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文