Мне нужна помощь с матричными операциями. То, что я пытаюсь достичь:Bitmap - Матричные операции (масштабирование, поворот и перевод)
- Шкала вниз
- Переход к определенной позиции
- Поворот по какой-то степени (в центре растрового изображения)
Мой код в настоящее время выглядит как это:
Matrix matrix = new Matrix();
matrix.preRotate(mShip.getRotation(), mShip.getX() + mShip.getCurrentBitmap().getWidth()/2f, mShip.getY() + mShip.getCurrentBitmap().getHeight()/2f);
matrix.setScale((1.0f * mShip.getWidth()/mShip.getCurrentBitmap().getWidth()), (1.0f * mShip.getHeight()/mShip.getCurrentBitmap().getHeight()));
matrix.postTranslate(mShip.getX(), mShip.getY());
mCanvas.drawBitmap(mShip.getCurrentBitmap(), matrix, mBasicPaint);
Но вращение имеет неправильный центр, и я не могу понять, как решить эту проблему - я уже lõoke d вокруг на SO, но они нашли только подобные проблемы, никаких решений для этого. Я думаю, что мне, возможно, придется применить одну из операций к другим значениям, поскольку они выполняются в последовательности, но я не могу понять, как это сделать.
Спасибо, но теперь перевод слишком далеко сверху и сзади. Я исправил это, изменив postTranslate на postTranslate (getX() + getWidth()/2f, getY() + getHeight()/2f), и теперь он работает! Большое спасибо. Не могли бы вы дать мне подсказку/объяснение, почему эти два перевода необходимы? – damian
Первый перевод необходим для перемещения центра изображения до (0,0), чтобы его можно было вращать вокруг его центра. После этой операции его можно перенести в пункт назначения и масштабировать. –