当前位置: 首页 > 知识库问答 >
问题:

在Java中的一点旋转和绘制图像

皮景龙
2023-03-14
final int radiusW = (width / 2);
final int radiusH = (height / 2);
final int angle = 120;

int pointX = (int) (radiusW + (radiusW * Math.cos(Math.toRadians(angle))));
int pointY = (int) (radiusH + (radiusH * Math.sin(Math.toRadians(angle))));

然而,现在我试图在这一点上画一幅图像,这样图像就面向椭圆中心旋转,并以这一点为中心。

因此,为了使图像旋转到点的中心,我做了以下操作;

final AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(angle - 90), image.getWidth() / 2, image.getHeight() / 2);
final AffineTransformOp ato = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);

然后我得到我的新的旋转BufferedImage使用;

BufferedImage rotated = ato.filter(image, null);

然而,我似乎再也无法得到图像的中心点了。

如果角度是0,所以图像是原始方向,那么我会简单地做;

graphics.drawImage(rotated, pointX - rotated.getWidth() / 2, pointY - rotated.getHeight() / 2, this);

然而,我不知道如何找到中心点,并绘制它的基础上旋转的图像。

我知道它涉及到使用cos和sin乘以旋转矩阵的原始pointX和pointY,但每次我试图找到一个解决方案,它总是画完全错误。

任何帮助都将非常感谢,因为我花了一天的大部分时间试图解决这个问题。

共有1个答案

端木震博
2023-03-14

问题是,如果你只是使用sin和cos来旋转图像的角,你最终会得到那个角的新旋转位置--而实际上你想要找到的是新的宽度和高度。

中心是宽度/2高度/2

使用它来计算新的宽度和高度:

从旋转矩形计算边框坐标

 类似资料:
  • 问题内容: 我似乎无法弄清楚如何正确旋转位图字体。我认为您修改了SpriteBatch的转换矩阵。但是,尝试旋转会使文本绕某个点旋转,而且我不知道如何相对于文本本身旋转文本。 问题答案: 您可以尝试以下代码:

  • 我可以绘制图像,但我如何旋转该图像例如45度并绘制它,然后绘制另一个图像与-50度旋转在同一画布? 不适用于我,因为它会旋转所有画布内容。

  • 我试图使用矩阵旋转位图。然后我试着把它画在画布上。但它就这么消失了! 下面是我的代码: } 我已经删除了缩放画布和事件监听器等的函数。使代码小而易读。 我周期性地调用setDirection方法,但是在它被调用之后,“userImage”drawable就消失了。有人能告诉我这里出了什么问题吗。。 谢谢

  • 我已经用Java编写了一个图像旋转的方法(允许旋转90度、180度和270度),但它似乎没有正常工作。很明显,我做错了什么,但我完全不知道是什么。输出的问题是图像确实是旋转的,但图像中有黑色部分,就像图像不在正确的位置一样。 我的第一次尝试是在不使用作为目标的结果变量的情况下执行此操作,而是执行以下操作: 旋转很好,图像中没有黑色部分,但颜色很奇怪,就像有些颜色改变了,皮肤颜色变红了一样。所以当我

  • 下面是java中的一个代码段,用于将坐标为a(10,10),B(20,10),C(20,20),D(10,20)的顶点围绕正方形的中心点旋转一个角度。正方形的边是10分。旋转角度为90度。理想情况下,旋转后A必须变成B,B必须变成C,C必须变成D,D必须变成A。 所取得的结果是不正确的 > 点A(10,10)旋转到(20,10)---正确 点B(20,10)旋转到(30,10)----不正确 nu

  • 问题内容: 我需要能够单独旋转图像(在Java中)。到目前为止,我发现的唯一东西是g2d.drawImage(image,affinetransform,ImageObserver)。不幸的是,我需要在特定点绘制图像,并且没有一种方法带有参数1.分别旋转图像和2.允许我设置x和y。任何帮助表示赞赏 问题答案: 这就是你可以做到的。这段代码假设存在一个名为“ image”的缓冲图像(如你的评论所说)