Этот вопрос задавали бесчисленное количество раз, но ни один из них на самом деле не решает проблему поворота при сохранении файла Bitmap
.
Вот как я изначально сохранил Bitmap
на своем устройстве:
FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(mStringFilePath);
//Time is us
int mPresentationTime = mPlayer.getPresentationTime();
Bitmap mBitmap = mmr.getFrameAtTime(mPresentationTime, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
File mFileBitmap = new File(directoryToStore, "test.png");
try {
FileOutputStream outputStream = new FileOutputStream(mFileBitmap);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Приведенное выше сохраняет .png
с неправильной ориентацией.
Затем я увидел этот ответ, но проблема в том, что он поворачивает уже сохраненный Bitmap
в правильную ориентацию. Это нормально, если вы хотите, например, установить Bitmap
на ImageView
. Но что, если я захочу поделиться Bitmap
или открыть его в галерее устройств, ориентация все равно будет неправильной. Затем мне пришлось бы выполнить тот же процесс, что и выше - FileOutputStream
и т. д. Тогда это вызовет ту же проблему.
Как сохранить Bitmap
на устройство с правильной ориентацией?
Изменить 1
Попытка ответа, предоставленного Long.
Я создал новый класс под названием RotateBit
с помощью предоставленного вами метода 2. Затем я изменил свой код на это:
FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(mStringFilePath);
//Time is us
int mPresentationTime = mPlayer.getPresentationTime();
Bitmap mBitmapBeforeRotation = mmr.getFrameAtTime(mPresentationTime, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
int rotatingInt = RotateBit.getBitmapOriention(mStringFilePath);
Bitmap mBitmap = RotateBit.rotateBitmap(mBitmapBeforeRotation, rotatingInt);
File mFileBitmap = new File(directoryToStore, "test.png");
try {
FileOutputStream outputStream = new FileOutputStream(mFileBitmap);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Но все же вращение неправильное.
Редактировать 2
Я заметил, что эта проблема связана с FFmpegMediaMetadataRetriever
, при использовании MediaMetadataRetriever
этой проблемы не возникает.