2013-08-10 2 views
2

Мне нужна помощь с матричными операциями. То, что я пытаюсь достичь: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, но они нашли только подобные проблемы, никаких решений для этого. Я думаю, что мне, возможно, придется применить одну из операций к другим значениям, поскольку они выполняются в последовательности, но я не могу понять, как это сделать.

ответ

4

Попробуйте этот код:

Matrix matrix = new Matrix(); 
matrix.setTranslate(-mShip.getCurrentBitmap().getWidth()/2f, -mShip.getCurrentBitmap().getHeight()/2f); 
matrix.postRotate(mShip.getRotation()); 
matrix.postTranslate(mShip.getX(), mShip.getY()); 
matrix.postScale((1.0f * mShip.getWidth()/mShip.getCurrentBitmap().getWidth()), (1.0f * mShip.getHeight()/mShip.getCurrentBitmap().getHeight()), mShip.getX(), mShip.getY()); 
+0

Спасибо, но теперь перевод слишком далеко сверху и сзади. Я исправил это, изменив postTranslate на postTranslate (getX() + getWidth()/2f, getY() + getHeight()/2f), и теперь он работает! Большое спасибо. Не могли бы вы дать мне подсказку/объяснение, почему эти два перевода необходимы? – damian

+0

Первый перевод необходим для перемещения центра изображения до (0,0), чтобы его можно было вращать вокруг его центра. После этой операции его можно перенести в пункт назначения и масштабировать. –

Смежные вопросы