【发布时间】:2015-04-23 14:54:17
【问题描述】:
我想用矩阵计算在画布上绘制的位图的中心,它可以用任意值旋转、缩放或平移。在画布上找到此位图中心的最简单方法是什么?
【问题讨论】:
我想用矩阵计算在画布上绘制的位图的中心,它可以用任意值旋转、缩放或平移。在画布上找到此位图中心的最简单方法是什么?
【问题讨论】:
您需要将矩阵应用于位图中心的坐标。
如果使用带有变换矩阵的画布,可以通过Canvas.getMatrix()得到最终的矩阵
如果您使用矩阵在画布上绘制位图:drawBitmap(bitmap, matrix, paint),那么您需要使用该矩阵,或者将其连接到画布的矩阵(如果有的话)。
然后您最终可以使用Matrix.mapPoints 将该矩阵应用到矩阵的中心。
类似:
canvas.drawBitmap(bitmap, bitmap_transform, paint);
Matrix full_transform = new Matrix(canvas.getMatrix());
full_transform.postConcat(bitmap_transform);
float[] center = new float[] {bitmap.getHeight()/2.0, bitmap.getWidth()/2.0};
full_transform.mapPoints(center);
或者,如果您在没有矩阵的情况下对位图应用转换,您可以使用具有相同值的full_transform.postRotate、full_transform.postScale 等。特别是,如果您使用drawBitmap(bitmap, left, top, paint) 绘制位图,那么您需要使用full_transform.postTranslate(left, top)。
【讨论】:
如果您正在寻找“最简单”的方法,那么只需使用 translate 旋转和缩放功能即可解决问题。开发这些的原因是开发人员不必为简单的动画进行矢量演算。此外,从这个意义上说,您必须实际计算的唯一值是考虑原始坐标后的平移值。
【讨论】: