我想lockCanvas(),因为我想在预览前修改相机图片。我在onPreviewFrame上执行。onPreviewFrame和异常锁定表面
代码是在这里:
public class MyPreview implements Camera.PreviewCallback {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d("Camera", "Got a camera frame");
Canvas c = null;
try {
c = mCamSH.lockCanvas(null);
Log.d("SOMETHING", "Got Bitmap");
} finally {
if (c != null) {
mCamSH.unlockCanvasAndPost(c);
}
}
}
} //public class MyPreview implements Camera.PreviewCallback
不幸的是我总是得到一个循环这个错误,问题是与C = mCamSH.lockCanvas(NULL); :
E/SurfaceHolder﹕ Exception locking surface
java.lang.IllegalArgumentException
at android.view.Surface.lockCanvasNative(Native Method)
at android.view.Surface.lockCanvas(Surface.java:76)
at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:831)
at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:811)
at cz.mrp.camera.CamActivity$MyPreview.onPreviewFrame(CamActivity.java:100)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:773)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4517)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
at dalvik.system.NativeStart.main(Native Method)
整个代码是在这里:http://pastebin.com/WJs1kyfq
使用GT-S7562设备上的Android 4.0.4。
我已经尝试过在StackOverflow上搜索并使用谷歌,但没有找到任何可以帮助我的东西。感谢您的时间!
我面临同样的问题,但它只发生在S8 /你是如何解决这个问题的? – 2017-08-07 11:17:58