2013-10-10 8 views
0

У меня есть растровое изображение, и я хочу создать новое растровое изображение, полученное первым, повернутым вокруг его центра. На самом деле я использую этот код, но он не работает.Как повернуть растровое изображение вокруг центральной точки с помощью холста?

Bitmap source = ((BitmapDrawable)r.getDrawable(R.drawable.rectangle)).getBitmap(); 

int targetWidth = (int)(mWidth * Math.sin(rotationAngle) + mHeight * Math.cos(rotationAngle)); 
int targetHeight = (int)(mWidth * Math.cos(rotationAngle) + mHeight * Math.sin(rotationAngle)); 

Bitmap target = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(target); 
Matrix m = new Matrix(); 
m.setRotate(rotationAngle, targetWidth/2f, targetHeight/2f); 
c.drawBitmap(source, m, null); 

Я также пробовал этот код, но это не помогает.

Bitmap source = ((BitmapDrawable)r.getDrawable(R.drawable.rectangle)).getBitmap(); 

int targetWidth = (int)(mWidth * Math.sin(rotationAngle) + mHeight * Math.cos(rotationAngle)); 
int targetHeight = (int)(mWidth * Math.cos(rotationAngle) + mHeight * Math.sin(rotationAngle)); 

Bitmap target = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(target); 
c.rotate(rotationAngle, targetWidth/2f, targetHeight/2f); 
c.drawBitmap(temp, 0, 0, null); 

В этом случае поворот команды (но то же самое происходит с помощью команды масштаба) называется на холсте полностью игнорируется для любого параметра. Я также пытался использовать:

c.drawColor(Color.BLACK) 

вместо

c.drawBitmap(temp, 0, 0, null); 

рисовать все полотно, и это подтверждает, что команды игнорируются.

ответ

1

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

Canvas c = new Canvas(target); 

c.rotate(rotationAngle, centerX, centerY); 

c.drawBitmap(source, null); 

Надеется, что это помогает :)

+0

К сожалению, не :(Я уже пробовал, но это, кажется, холст полностью игнорировать команду поворота – VanDir

+0

@VanDir Это должно работать. , вы вращаете холст ** перед ** вы рисуете растровое изображение? Можете ли вы опубликовать обновленный код? – Day

+0

Я отредактировал вопрос ... спасибо за вашу помощь – VanDir

0
int count = canvas.save(); 
canvas.rotate(rotationAngle, centerX, centerY); 
c.drawBitmap(source, null); 
canvas.restoreToCount(count); 
Смежные вопросы