android - 无法缩放或翻转 surfaceview 矩阵

标签 android matrix android-camera surfaceview

我正在制作相机应用程序。我使用 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(),并尝试将最后两行添加到 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 的比例?如果没有,是否有其他方法可以翻转相机预览?

最佳答案

为了澄清 Madhusudan 几个月前发布的答案,您必须使用 set() 对矩阵进行深层复制,而不是创建一个空白矩阵然后将其设置为等于您的预览矩阵。

它看起来像这样:

Matrix m = new Matrix(preview.getMatrix());
m.postRotate(90.0f);
canvas.drawBitmap(bitmap, m, NULL);

或者像这样:

Matrix m = new Matrix();
m.set(preview.getMatrix());
m.postRotate(90.0f);
canvas.drawBitmap(bitmap, m, NULL);

关于android - 无法缩放或翻转 surfaceview 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195390/

相关文章:

组织矩阵以使邻居最接近的算法

c - 打印出 double 矩阵

android - react-native-image-picker launchCamera 在 android 中不工作

android - 在 Android 10 中使用相机拍照

ios - 将 iOS OpenGL ES 应用程序中的所有点居中

android - setDisplayOrientation 在 onResume() 时改变

android - 动画网格布局从消失到可见

android - RecyclerView 动 Canvas 局更改无法正常工作

java - 从地理点转换为字符串

android - 我需要在右上角的 Material 芯片上显示徽章。我怎样才能轻松做到呢?