0

我正在开发 android 相机应用程序,我想要绿屏色度键效果来捕捉图像。我已经在我的代码中使用了http://code.google.com/p/chroma-key-project/downloads/list这个色度键项目。

我正在使用具有前置摄像头而不是后置摄像头的平板电脑..我还使用了前置摄像头的许可

 <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.front" />

它仍然显示从 preview.java 页面到这一行的错误空指针异常。camera.setPreviewDisplay(holder);// <9> 为什么?

preview.java从色度键项目中的给定链接检查页面。请提出建议。

我遇到这种类型的错误。

10-11 15:37:36.131: W/dalvikvm(11339): threadid=1: 线程退出未捕获异常 (group=0x409ee1f8) 10-11 15:37:36.141: E/AndroidRuntime(11339): 致命异常: main 10-11 15:37:36.141: E/AndroidRuntime(11339): java.lang.UnsupportedOperationException 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 java.lang.Thread.stop(Thread.java: 1076) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 java.lang.Thread.stop(Thread.java:1063) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在com.Activity.new2you4kids.MainClass.startCamera(MainClass.java:179) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 com.Activity.new2you4kids.MainClass$1.handleMessage(MainClass.java:61) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 android.os.Handler.dispatchMessage(Handler.java:99) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 android. os.Looper。循环(Looper.java:137)10-11 15:37:36.141:E/AndroidRuntime(11339):在 android.app.ActivityThread.main(ActivityThread.java:4424)10-11 15:37:36.141:E/ AndroidRuntime(11339): 在 java.lang.reflect.Method.invokeNative(Native Method) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 java.lang.reflect.Method.invoke(Method.java: 511) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-11 15:37:36.141: E/ AndroidRuntime(11339): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 dalvik.system.NativeStart.main(Native方法)lang.reflect.Method.invokeNative(Native Method) 10-11 15:37:36.141: E/AndroidRuntime(11339): at java.lang.reflect.Method.invoke(Method.java:511) 10-11 15:37 :36.141: E/AndroidRuntime(11339): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 com. android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-11 15:37:36.141: E/AndroidRuntime(11339): at dalvik.system.NativeStart.main(Native Method)lang.reflect.Method.invokeNative(Native Method) 10-11 15:37:36.141: E/AndroidRuntime(11339): at java.lang.reflect.Method.invoke(Method.java:511) 10-11 15:37 :36.141: E/AndroidRuntime(11339): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-11 15:37:36.141: E/AndroidRuntime(11339): 在 com. android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-11 15:37:36.141: E/AndroidRuntime(11339): at dalvik.system.NativeStart.main(Native Method)主(ZygoteInit.java:551)10-11 15:37:36.141:E/AndroidRuntime(11339):在 dalvik.system.NativeStart.main(本机方法)主(ZygoteInit.java:551)10-11 15:37:36.141:E/AndroidRuntime(11339):在 dalvik.system.NativeStart.main(本机方法)

谢谢!

4

1 回答 1

2

Camera.open() 尝试打开我认为的默认后置摄像头,因此它返回 null 因为背面没有摄像头。

如果您尝试使用函数 Camera.open(int) 打开前置摄像头会怎样?

像这样:

int getFrontCameraId() {
    CameraInfo ci = new CameraInfo();
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
        Camera.getCameraInfo(i, ci);
        if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
    }
    return -1; // No front-facing camera found
}

得到它是这样的:

int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);

来自:如何检测是否有前置摄像头以及是否有前置摄像头如何到达和使用?

编辑:您使用的代码非常旧并且具有各种旧功能,我认为您遇到的崩溃是由旧线程函数(停止)引起的。

来自链接的代码:

  public void startCamera() {
        setContentView(R.layout.camview);
        fGameView = null;
        fGameThread.stop();
        fGameThread=null;

根据开发者网站:

stop() 此方法已弃用。因为以这种方式停止线程是不安全的,并且会使您的应用程序和 VM 处于不可预测的状态。

看:

java.lang.UnsupportedOperationException 当我的启动画面启动时

http://developer.android.com/reference/java/lang/Thread.html#stop()

编辑二:

将 onCreateOptionsMenu 代码更改为此,您不应使用 myMenu 变量。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, MENU_START, 0, R.string.menu_start);
    menu.add(0, MENU_SEND, 0, R.string.menu_send);
    return true;
}
于 2012-10-11T09:55:00.770 回答