我有一个能够捕捉图像和录制视频的相机应用程序。但是,当从设备前置摄像头捕获图像或录制视频时,结果会翻转,就像您正在看镜子一样。我想再翻一遍,看起来很正常。我设法通过使用Bitmap
Matrix
来处理图片
public Bitmap flip(Bitmap bitmap) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
float[] mirrorY = {-1, 0, 0, 0, 1, 0, 0, 0, 1};
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);
matrix.postConcat(matrixMirrorY);
matrix.postRotate(90);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
}
我无法弄清楚如何翻转MediaRecorder
拍摄的视频,我知道我可以运行ffmpeg
命令:
-i /pathtooriginalfile/originalfile.mp4 -vf hflip -c:a copy /pathtosave/flippedfile.mp4
但我不知道如何从代码中运行ffmpeg
命令,而我无法找到不同的方法。有很多主题讨论这个问题,但我找不到工作的解决方案。注意:有可能,Snapchat以某种方式使用它。
感谢。
P.S抱歉我的英文
答案 0 :(得分:0)
使用前置摄像头捕捉图像或录制视频将始终提供翻转图像,这可以像前视镜一样工作。
从相机获取照片后,通过将图像绘制到新的上下文中来翻转图像。
请尝试以下代码段。请参阅Android- Taking a picture from front facing camera rotates the photo
Matrix rotateRight = new Matrix();
rotateRight.preRotate(90);
if(android.os.Build.VERSION.SDK_INT>13 && CameraActivity.frontCamera) {
float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
rotateRight = new Matrix();
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);
rotateRight.postConcat(matrixMirrorY);
rotateRight.preRotate(270);
}
final Bitmap rImg= Bitmap.createBitmap(img, 0, 0,
img.getWidth(), img.getHeight(), rotateRight, true);