Я выполняю приведенные ниже переводы в мою матрицу
fun updateMatrix() {
// init matrix to E - identity matrix
matrix.reset()
// calculate params
var rotationInDegree = layer.rotationInDegrees
var scaleX = layer.scale
val scaleY = layer.scale
if (layer.isFlipped) {
// flip (by X-coordinate) if needed
rotationInDegree *= -1.0f
scaleX *= -1.0f
}
// applying transformations : L = S * R * T
// scale
matrix.preScale(scaleX, scaleY, absoluteCenterX(), absoluteCenterY())
// rotate
matrix.preRotate(rotationInDegree, absoluteCenterX(), absoluteCenterY())
// translate
matrix.preTranslate(getTopLeftX(), getTopLeftY())
// applying holy scale - S`, the result will be : L = S * R * T * S`
matrix.preScale(holyScale, holyScale)
}
И затем сохраняю эту матрицу в моей базе данных.Я хочу получить координаты своего растрового изображения без поворота.Пока что я указал следующий код
float[] values = new float[9];
tempMatrix.getValues(values);
int rotation = (int) Math.round((-Math.atan2(values[Matrix.MSKEW_X], values[Matrix.MSCALE_X]) * (180 / Math.PI)));
if (rotation != 0) {
tempMatrix.preRotate(-rotation);
tempMatrix.getValues(values);
}
final float panX = values[Matrix.MTRANS_X];
final float panY = values[Matrix.MTRANS_Y];
Однако panX
и panY
не верны и всегда одинаковы, даже если я не выполняю tempMatrix.preRotate(-rotation);
.Есть ли что-то еще, что я могу сделать, чтобы получить эти правильные координаты?