surfaceview调用Camera功能和使用Canvas画板
先用实体机自带的摄像头拍照,然后再派的照片上画正方形。
业务如上,当我获得Canvas时(获得方法列2),系统抛出(列1)错误。
之后进行了一些调试,发现surfaceview的holder,给camera的setPreviewDisplay附上后,在获得Canvas时就会出错。
不明白为什么?那位高手帮忙给解释一下!
列1:
03-19 15:59:28.140: E/Surface(14822): dequeueBuffer failed (No such device)
03-19 15:59:28.150: E/SurfaceHolder(14822): Exception locking surface
03-19 15:59:28.150: E/SurfaceHolder(14822): java.lang.IllegalArgumentException
03-19 15:59:28.150: E/SurfaceHolder(14822): at android.view.Surface.lockCanvasNative(Native Method)
03-19 15:59:28.150: E/SurfaceHolder(14822): at android.view.Surface.lockCanvas(Surface.java:346)
03-19 15:59:28.150: E/SurfaceHolder(14822): at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:774)
03-19 15:59:28.150: E/SurfaceHolder(14822): at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:750)
03-19 15:59:28.150: E/SurfaceHolder(14822): at com.carmer.test.AjisCarmeraView$MyLoop.run(AjisCarmeraView.java:395)
03-19 15:59:28.150: E/SurfaceHolder(14822): at java.lang.Thread.run(Thread.java:1020)
列2:
class MyLoop implements Runnable {
public void run() {
while (true) {
if (bolIsRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(); synchronized (mSurfaceHolder) {
doDraw(c);
}
Thread.sleep(20);
} catch (Exception e) {
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}
}