【问题标题】:Android - paint rotated bitmap into a specific location on canvasAndroid - 将旋转的位图绘制到画布上的特定位置
【发布时间】:2012-05-26 10:54:07
【问题描述】:

好吧,也许我在这里遗漏了一些东西,但我被困了几个小时。我制作了一个应用程序,用户在图片上绘制尺寸线。现在我还想绘制一些选择点,以显示该线已被选中。这些点是一个特定的位图,必须在行的末端(箭头之后)并根据箭头进行旋转。我创建了一个扩展 View 的类 DrawSelectionPoint,我可以用这样的方式旋转位图:

selectionPoint = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.selectionpoint);
Matrix matrix = new Matrix();
        matrix.postRotate((float)Math.toDegrees(angle));        
canvas.drawBitmap(selectionPoint, matrix, null);

(其中角度是线的角度)这样我的位图会按照我想要的方式旋转,但它会绘制在点 0,0(屏幕的左上角)。

如果我使用类似的东西

canvas.save();

canvas.rotate();

canvas.drawBitmap(selectionPoint, x, y, null);

canvas.restore(); 

然后我发现在我想要的确切位置绘制位图太难了(因为我在旋转的画布上绘制,然后我将其旋转回来)。我尝试了一些欧几里得旋转变换,但没有运气。

有什么方法可以应用矩阵旋转并给出我需要绘制位图的点吗?提前谢谢!

【问题讨论】:

    标签: android canvas matrix bitmap rotation


    【解决方案1】:

    假设您要绘制位图 center 将位于 (px,py) 画布坐标处的位图。有一个成员变量

    Matrix matrix = new Matrix();
    

    在你的 onDraw 中:

    matrix.reset();
    matrix.postTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2); // Centers image
    matrix.postRotate(angle);
    matrix.postTranslate(px, py);
    canvas.drawBitmap(bitmap, matrix, null);
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多