【已解决】 SurfaceHolder.lockCanvas()报错 Exception locking surface怎么解决
大佬帮帮忙,想在预览的时候画圈 结果就报这个错了 网上的解决方法用了个遍不顶用啊。
public void doDraw(){
mPaint.setAntiAlias(true); // 反锯齿
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
Canvas canvas = holder.lockCanvas();//<===================================这里报错
Log.d(TAG, "onDraw: ");
android.graphics.Rect recta = new android.graphics.Rect(rect.x, rect.y, rect.width, rect.height);
canvas.drawRect(recta,mPaint);
holder.unlockCanvasAndPost(canvas); //提交绘制内容
}
b把holder换成 getHolder()也会报错
报错log
2021-07-28 15:44:14.509 2330-2399/com.zmrobo.opencv_test1 E/SurfaceHolder: Exception locking surface//主要就是这个bug
java.lang.IllegalArgumentException
at android.view.Surface.nativeLockCanvas(Native Method)
at android.view.Surface.lockCanvas(Surface.java:358)
at android.view.SurfaceView$3.internalLockCanvas(SurfaceView.java:1087)
at android.view.SurfaceView$3.lockCanvas(SurfaceView.java:1047)
at com.kongqw.ObjectTrackingView.doDraw(ObjectTrackingView.java:127)
at com.kongqw.ObjectTrackingView.onCameraFrame(ObjectTrackingView.java:106)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:846)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:347)
at java.lang.Thread.run(Thread.java:764)
2021-07-28 15:44:14.511 2330-2399/com.zmrobo.opencv_test1 E/AndroidRuntime: FATAL EXCEPTION: Thread-9
Process: com.zmrobo.opencv_test1, PID: 2330
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Canvas.drawRect(android.graphics.Rect, android.graphics.Paint)' on a null object reference
at com.kongqw.ObjectTrackingView.doDraw(ObjectTrackingView.java:130)
at com.kongqw.ObjectTrackingView.onCameraFrame(ObjectTrackingView.java:106)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:846)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:347)
at java.lang.Thread.run(Thread.java:764)
您的每一个用心回答,都会让这个世界变得更美好一些!