2015-07-30 5 views
0

Этот вопрос был изменен в соответствии с прогрессом, для будущего использованияКак сохранить изображение после анимации?

У меня есть изображение в ImageView. Там находится . Вращайте кнопку рядом с ней. Это то, что он делает:

imageView.animate().rotation(imageView.getRotation()+45); 

А потом сохранить изображение после изменения:

Bitmap bm = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 

Но когда я извлечь изображение после изменений, старое изображение показывает вверх (повёрнутый):

rotatedImageView.setImageBitmap(bm); 

Как получить новое изображение как Bitmap после анимации?

EDIT:

После ответа @Droid Криса, это то, что я получаю:

Я установил черный фон, чтобы вы лучше понять. В конце концов, это будет прозрачно

До:

before

После:

after

НАБЛЮДЕНИЯ:

ответ @Droid Криса работает, когда я повернуть изображение по кратные 90. Но кратные 45 например проблематичны ...

мне нужно, чтобы это было 45, хотя

РЕШЕНИЕ:

Так что я использовал функцию @Droid Криса, но почему-то его была понижающая дискретизация моего изображения. Поэтому мне нужно было установить android:scaleType="center" в xml для ImageView. Это решило понижающую дискретизацию.

Кроме того, чтобы сохранить анимации перехода, я должен был сделать:

imageView.animate().rotation(imageView.getRotation()+45); 

на каждой операции вращения, и следующий только один раз, когда я хочу, чтобы сохранить его:

Bitmap oldBitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap().copy(((BitmapDrawable)imageView.getDrawable()).getBitmap().getConfig(), true); 

Bitmap bitmapAfterRotation = getRotatedBitmap(oldBitmap,imageView.getRotation()); 

Кроме того, в getRotatedBitmap(), я написал mat.setRotate(angle);, а не mat.postRotate(angle);

Теперь он работает должным образом.

+0

пожалуйста, проверьте мой ответ –

+0

Постараюсь это скоро ... –

ответ

0

Нанести матрицу изображения таким образом, принимая во внимание тот угол, который вы повернута при получении ширины и высоты так:

((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().height() 
or 
((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().width() 

private Bitmap getRotatedBitmap(Bitmap bm, int angle, int width, int height) { 
    Matrix mat = new Matrix(); 
    mat.postRotate(angle); 

    Bitmap newBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, mat, true); 

    bm.recycle(); 

    return newBitmap; 
} 
+0

этот как-то также изменяет размер изображения (он уменьшает его). По какой-то причине «Bitmap newBitmap = Bitmap.createBitmap (bm, 0, 0, bm.getWidth(), bm.getHeight(), mat, true),' возвращает 'mWidth' и' mHeight' равные ** - 1 * * (отрицательный 1) –

+0

где вы устанавливаете растровое изображение для изображения? –

+0

проверить мои изменения –

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