【发布时间】:2014-03-05 10:42:53
【问题描述】:
我正在制作一个相机应用程序。我使用 SurfaceView 来显示我的相机预览。
preview=(SurfaceView)findViewById(R.id.preview);
previewHolder=preview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Matrix m = preview.getMatrix();
m.setScale(-1,1);
我想要做的是翻转 SurfaceView 矩阵。我尝试使用 preScale() 和 postScale(),并尝试将最后 2 行添加到 Surfaceview.callback 方法,如下所示:
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
initPreview(width, height);
startPreview();
Matrix m = preview.getMatrix();
m.setScale(-1,1);
}
但我到处都遇到相同的错误(以及应用程序崩溃):
java.lang.IllegalStateException: Matrix can not be modified
我做错了什么?是否可以改变 SurfaceView 的比例?如果没有,还有其他方法可以翻转相机预览吗?
【问题讨论】:
-
如果你想进入 OpenGL ES,你可以做各种各样的事情(例如,参见 github.com/google/grafika 中的“显示 + 捕获相机”)。不过,这确实增加了很多复杂性。
标签: android matrix android-camera surfaceview