当前位置: 首页 > 面试题库 >

Android在不调整大小的情况下围绕中心旋转位图

干善
2023-03-14
问题内容

我正在努力围绕其中心绘制旋转的位图,并在不调整位图大小的情况下进行旋转。我正在通过游戏线程将所有子画面绘制到屏幕上,因此我正在寻找一种包含原始位图而不是画布的解决方案。

提前致谢。

到目前为止,这是我的代码,它围绕其中心旋转一个位图,但对其进行了调整。

i = i + 2;
            transform.postRotate(i, Assets.scoresScreen_LevelStar.getWidth()/2, Assets.scoresScreen_LevelStar.getHeight()/2);
            Bitmap resizedBitmap = Bitmap.createBitmap(Assets.scoresScreen_LevelStar, 0, 0, Assets.scoresScreen_LevelStar.getWidth(), Assets.scoresScreen_LevelStar.getHeight(), transform, true);

            game.getGraphics().getCanvasGameScreen().drawBitmap(resizedBitmap, null, this.levelStar.getHolderPolygons().get(0), null);

更新:

我注意到这并不像听起来那么容易。我的旋转代码不是问题。位图旋转,但是dst
rect也必须根据旋转角度增加/减少,否则bimap会显得更小,因为它被绘制为固定的dst rect。所以我猜我将不得不开发一些将返回dst
rect的方法。 因此,需要旋转位图而不显示其大小的方法:

public static Bitmap rotateBitmap(Bitmap bitmap, int rotation) // I've got this method working

public static Rect rotateRect(Rect currentDst, int rotation) // Don't got this

我知道这将需要一些数学(触发),有人愿意挑战吗?:P


问题答案:

这对我有用!

我创建了一个html" target="_blank">返回矩阵的方法。该矩阵可用于以下绘制方法:

public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)

干得好!(可以很容易地替换参数形状,如果您愿意的话,只需发表评论即可):

public static Matrix rotateMatrix(Bitmap bitmap, Shape shape, int rotation) {

        float scaleWidth = ((float) shape.getWidth()) / bitmap.getWidth();
        float scaleHeight = ((float) shape.getHeight()) / bitmap.getHeight();

        Matrix rotateMatrix = new Matrix();
        rotateMatrix.postScale(scaleWidth, scaleHeight);
        rotateMatrix.postRotate(rotation, shape.getWidth()/2, shape.getHeight()/2);
        rotateMatrix.postTranslate(shape.getX(), shape.getY());


        return rotateMatrix;

    }

注意:如果要动画旋转,则必须每帧用新值更新旋转参数,例如。1然后2然后3 …



 类似资料:
  • 问题内容: 我一直试图将一堆线旋转90度(它们一起形成一条折线)。每行包含两个顶点,例如(x1,y1)和(x2,y2)。我当前要执行的操作是绕线的中心点旋转,给定中心点| x1-x2 | 和| y1-y2 |。由于某些原因(我在数学上不是很精明),我无法使线条正确旋转。 有人可以验证这里的数学是正确的吗?我认为这可能是正确的,但是,当我将线的顶点设置为新的旋转顶点时,下一行可能未从前一行抓取新的(

  • 我从供应商那里收到单页pdf文件的邮资标签。这些标签可以贴在A5纸上,但它们在A4纸上是纵向的,也是纵向的。我希望能够在A4纸上打印两个这样的标签,以减少浪费。 这可以通过旋转页面内容而不旋转页面本身来实现。或者通过交换内容的高度和宽度来调整页面的大小。我知道这两种情况都会导致内容丢失,但这对于我的用例来说不是问题。理想情况下,我希望命令行应用程序既可以在Linux机器上运行,也可以在Window

  • 问题内容: 有没有一种简单的方法可以围绕图片中心旋转图片?我首先使用了AffineTransformOp。看起来很简单,而且需要,并且在一个整洁的Google会话中为矩阵找到正确的参数。所以我认为… 我的结果是这样的: 如果您忽略旋转90度的倍数的情况,这非常简单(sin()和cos()无法正确处理)。该解决方案的问题在于,它围绕图片左上角的(0,0)坐标点进行变换,而不是围绕图片中心进行正常的变

  • 我在下面有一个类,我将其附加到一个对象上,以使其围绕其轴旋转。我把雪碧的枢轴通过检查员送来了。 这正是我想要的效果,但是我遇到的问题是,每当我触摸并拖动它,然后再次触摸并拖动它,它就会捕捉到一个新的位置。 我想让它做的是,当它旋转,然后再次旋转时,精灵保持其相同的旋转,而不是捕捉到一个新的位置,我想精灵的角度重置为0。接下来,我想让角度持续旋转。所以如果我朝正方向旋转,角度应该在正方向上不断增加,

  • 问题内容: 我正在用Java制作2D游戏,玩家可以通过障碍物引导多边形。多边形上下移动,游戏世界向左和向右滚动。我需要多边形绕其中心旋转,但是由于它不断地被平移,所以它绕着点旋转。尝试将其平移回原始中心,旋转并重新平移不起作用。如何获得形状的中心? 这是我在2ms计时器上的运动计算: 这是我的paintComponent方法: 其中(xPos,yPos)是屏幕的中心。 问题答案: 转换(通常)是复

  • OpenGL总是围绕(0,0,0)旋转。但是我需要绕着相机旋转。我知道在GL中,没有相机,但是如果我翻译回(0,0,-6.0),它会绕着(0,0,0)旋转,而不是绕着(0,0,-6.0)旋转 所以我的问题是:如何在opengl和c中设置旋转中心 我已经找到了这篇文章:OpenGL围绕一个点旋转相机 显示此解决方案的地方: 旋转函数通常围绕原点旋转。要围绕另一个点P旋转,必须:平移(-P)旋转平移(