Android 용 게임을 만들고있어 이미지를 회전해야합니다. 그것이 분명히 회전 할 때 치수가 바뀝니다. 예를 들어 그것이 45도 회전하면 (사각형이지만 사각형 대신 사용할 수 있기 때문에 좀 더 일반적인 해결책입니다) 폭과 높이가 대각선의 길이가되어 원본보다 길어집니다. 일부 대수가 끝나면 스케일 인자는 sqrt (2)라고 계산할 수 있습니다. 그러나 비트 맵을 회전하는 방법을 알고있는 유일한 방법은 행렬을 사용하는 것입니다. 예 :이 방법은 비트 맵의 크기를 사용이미지가 회전하면서 크기가 변합니다. 어떻게 그만합니까?
matrix.postRotate(degrees);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
정도로 수축해야하는 화상의 내용으로 회전 된 이미지에 맞게 일정하게 유지된다. 내 문제가 생겼어.
내가 지금해야하는 것은 작동해야하지만 실행하지 않아야합니다. 그것이 지나치게 복잡한 결코 적은이다 아마 때문에, 여기있다 :
float totalRotated = 0;
public void rotate(float degrees){
if(mBitmap != null){
float increment = (float)((mBitmap.getWidth()/45.0)*(Math.sqrt(2)-1));
totalRotated += degrees;
totalRotated -= (float)((int)totalRotated/360)*360;
matrix.reset();
matrix.setRotate(totalRotated);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
rotated = Bitmap.createScaledBitmap(rotated, (int)(mBitmap.getWidth()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), (int)(mBitmap.getHeight()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), true);
}
}
내가 마지막 문에 설정된 치수는 내가 그들로 기대 것을 확인할 수 있었다 Log.d
기능을 사용하지만 이미지는 '아무튼 t 크기를 변경하십시오. 이 방법은 효과가 없기 때문에이 방법이나 내 방법을 수정하는 방법이 필요합니다. 또한 내 방법은 사각형에 대해서만 작동합니다. 그래서, 어떻게해야합니까?
편집 : 내 방법이 작동하지만 방금 호출하지 않았습니다. setBounds()
이렇게하는 것이 유일한 방법 일 수는 없습니다. 너무 비효율적입니다.
귀하의 질문이 무엇인지 명확히하십시오. 나는 꽤 말할 수 없다. – Gabe