Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摄像机活动不工作,设置参数失败_Java_Android - Fatal编程技术网

Java 摄像机活动不工作,设置参数失败

Java 摄像机活动不工作,设置参数失败,java,android,Java,Android,我正在尝试在启动应用程序时打开相机活动。 也就是说,当我启动应用程序时,它将通过前置摄像头捕捉图像。 然而,当我启动应用程序时,我发现了一个错误。 我实际上是在尝试运行从github获得的代码;但是,它只是强制重新启动应用程序 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.androidmyway.demo.capturecameraimage, PID: 5697 java.lang.RuntimeException: setPara

我正在尝试在启动应用程序时打开相机活动。 也就是说,当我启动应用程序时,它将通过前置摄像头捕捉图像。 然而,当我启动应用程序时,我发现了一个错误。 我实际上是在尝试运行从github获得的代码;但是,它只是强制重新启动应用程序

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.androidmyway.demo.capturecameraimage, PID: 5697
java.lang.RuntimeException: setParameters failed
  at android.hardware.Camera.native_setParameters(Native Method)
  at android.hardware.Camera.setParameters(Camera.java:1966)
  at com.androidmyway.demo.capturecameraimage.CameraView.surfaceChanged(CameraView.java:140)
  at android.view.SurfaceView.updateWindow(SurfaceView.java:634)
  at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:161)
  at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2205)
  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1250)
  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6311)
  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
  at android.view.Choreographer.doCallbacks(Choreographer.java:683)
  at android.view.Choreographer.doFrame(Choreographer.java:619)
  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
  at android.os.Handler.handleCallback(Handler.java:751)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:241)
  at android.app.ActivityThread.main(ActivityThread.java:6217)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
CameraView.java

public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{
    private static final String TAG = "CameraTest";
    Camera mCamera;
    boolean mPreviewRunning = false;

    @SuppressWarnings("deprecation")
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        Log.e(TAG, "onCreate");

        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.cameraview);
        ImageView img = (ImageView) findViewById(R.id.blankImage);

        if(CaptureCameraImage.isBlack)
            img.setBackgroundResource(android.R.color.black);
        else
            img.setBackgroundResource(android.R.color.white);

        mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
        mSurfaceView.setOnClickListener(this);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
    }


    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {
            // TODO Auto-generated method stub
            if (data != null){
                //Intent mIntent = new Intent();
                //mIntent.putExtra("image",imageData);

                mCamera.stopPreview();
                mPreviewRunning = false;
                mCamera.release();

                try{
                    BitmapFactory.Options opts = new BitmapFactory.Options();
                    Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts);
                    bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
                    int width = bitmap.getWidth();
                    int height = bitmap.getHeight();
                    int newWidth = 300;
                    int newHeight = 300;

                    // calculate the scale - in this case = 0.4f
                    float scaleWidth = ((float) newWidth) / width;
                    float scaleHeight = ((float) newHeight) / height;

                    // createa matrix for the manipulation
                    Matrix matrix = new Matrix();
                    // resize the bit map
                    matrix.postScale(scaleWidth, scaleHeight);
                    // rotate the Bitmap
                    matrix.postRotate(-90);
                    Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                            width, height, matrix, true);
                    CaptureCameraImage.image.setImageBitmap(resizedBitmap);

                }catch(Exception e){
                    e.printStackTrace();
                }
                //StoreByteImage(mContext, imageData, 50,"ImageName");
                //setResult(FOTO_MODE, mIntent);
                setResult(585);
                finish();
            }
        }
    };

    protected void onResume(){
        Log.e(TAG, "onResume");
        super.onResume();
    }

    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
    }

    protected void onStop(){
        Log.e(TAG, "onStop");
        super.onStop();
    }

    @TargetApi(9)
    public void surfaceCreated(SurfaceHolder holder){
        Log.e(TAG, "surfaceCreated");
        mCamera = Camera.open(CaptureCameraImage.cameraID);
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Log.e(TAG, "surfaceChanged");

        // XXX stopPreview() will crash if preview is not running
        if (mPreviewRunning){
            mCamera.stopPreview();
        }

        Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(300, 300);

        if(CaptureCameraImage.cameraID == 0){
            String stringFlashMode = p.getFlashMode();
            if (stringFlashMode.equals("torch"))
                p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode
            else
                p.setFlashMode("torch");
        }

        mCamera.setParameters(p);
        try{
            mCamera.setPreviewDisplay(holder);
        }catch (Exception e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mCamera.startPreview();
        mPreviewRunning = true;
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.e(TAG, "surfaceDestroyed");
        //mCamera.stopPreview();
        //mPreviewRunning = false;
        //mCamera.release();
    }

    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;

    public void onClick(View v) {
        // TODO Auto-generated method stub
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

}
public class CaptureCameraImage extends Activity {

    public static int cameraID = 0;
    public static boolean isBlack = true;
    public static ImageView image;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitycapturecameraimage);
        image = (ImageView) findViewById(R.id.imgView);
    }

    public void onFrontClick(View v){
        RadioButton rdbBlack = (RadioButton) findViewById(R.id.rdb_black);
        if(rdbBlack.isChecked()){
            isBlack = true;
        }else{
            isBlack = false;
        }
        cameraID = 1;
        Intent i = new Intent(CaptureCameraImage.this,CameraView.class);
        startActivityForResult(i, 999);
    }

    public void onBackClick(View v){
        RadioButton rdbBlack = (RadioButton) findViewById(R.id.rdb_black);
        if(rdbBlack.isChecked()){
            isBlack = true;
        }else{
            isBlack = false;
        }
        cameraID = 0;
        Intent i = new Intent(CaptureCameraImage.this,CameraView.class);
        startActivityForResult(i, 999);
    }

}
CameraView.java

public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{
    private static final String TAG = "CameraTest";
    Camera mCamera;
    boolean mPreviewRunning = false;

    @SuppressWarnings("deprecation")
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        Log.e(TAG, "onCreate");

        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.cameraview);
        ImageView img = (ImageView) findViewById(R.id.blankImage);

        if(CaptureCameraImage.isBlack)
            img.setBackgroundResource(android.R.color.black);
        else
            img.setBackgroundResource(android.R.color.white);

        mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
        mSurfaceView.setOnClickListener(this);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
    }


    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {
            // TODO Auto-generated method stub
            if (data != null){
                //Intent mIntent = new Intent();
                //mIntent.putExtra("image",imageData);

                mCamera.stopPreview();
                mPreviewRunning = false;
                mCamera.release();

                try{
                    BitmapFactory.Options opts = new BitmapFactory.Options();
                    Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts);
                    bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
                    int width = bitmap.getWidth();
                    int height = bitmap.getHeight();
                    int newWidth = 300;
                    int newHeight = 300;

                    // calculate the scale - in this case = 0.4f
                    float scaleWidth = ((float) newWidth) / width;
                    float scaleHeight = ((float) newHeight) / height;

                    // createa matrix for the manipulation
                    Matrix matrix = new Matrix();
                    // resize the bit map
                    matrix.postScale(scaleWidth, scaleHeight);
                    // rotate the Bitmap
                    matrix.postRotate(-90);
                    Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                            width, height, matrix, true);
                    CaptureCameraImage.image.setImageBitmap(resizedBitmap);

                }catch(Exception e){
                    e.printStackTrace();
                }
                //StoreByteImage(mContext, imageData, 50,"ImageName");
                //setResult(FOTO_MODE, mIntent);
                setResult(585);
                finish();
            }
        }
    };

    protected void onResume(){
        Log.e(TAG, "onResume");
        super.onResume();
    }

    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
    }

    protected void onStop(){
        Log.e(TAG, "onStop");
        super.onStop();
    }

    @TargetApi(9)
    public void surfaceCreated(SurfaceHolder holder){
        Log.e(TAG, "surfaceCreated");
        mCamera = Camera.open(CaptureCameraImage.cameraID);
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Log.e(TAG, "surfaceChanged");

        // XXX stopPreview() will crash if preview is not running
        if (mPreviewRunning){
            mCamera.stopPreview();
        }

        Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(300, 300);

        if(CaptureCameraImage.cameraID == 0){
            String stringFlashMode = p.getFlashMode();
            if (stringFlashMode.equals("torch"))
                p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode
            else
                p.setFlashMode("torch");
        }

        mCamera.setParameters(p);
        try{
            mCamera.setPreviewDisplay(holder);
        }catch (Exception e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mCamera.startPreview();
        mPreviewRunning = true;
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.e(TAG, "surfaceDestroyed");
        //mCamera.stopPreview();
        //mPreviewRunning = false;
        //mCamera.release();
    }

    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;

    public void onClick(View v) {
        // TODO Auto-generated method stub
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

}
public class CaptureCameraImage extends Activity {

    public static int cameraID = 0;
    public static boolean isBlack = true;
    public static ImageView image;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitycapturecameraimage);
        image = (ImageView) findViewById(R.id.imgView);
    }

    public void onFrontClick(View v){
        RadioButton rdbBlack = (RadioButton) findViewById(R.id.rdb_black);
        if(rdbBlack.isChecked()){
            isBlack = true;
        }else{
            isBlack = false;
        }
        cameraID = 1;
        Intent i = new Intent(CaptureCameraImage.this,CameraView.class);
        startActivityForResult(i, 999);
    }

    public void onBackClick(View v){
        RadioButton rdbBlack = (RadioButton) findViewById(R.id.rdb_black);
        if(rdbBlack.isChecked()){
            isBlack = true;
        }else{
            isBlack = false;
        }
        cameraID = 0;
        Intent i = new Intent(CaptureCameraImage.this,CameraView.class);
        startActivityForResult(i, 999);
    }

}

之所以发生这种情况,是因为前面的
摄像头可能有
闪光灯
。尝试使用
flash\u MODE\u off

Camera.Parameters p = mCamera.getParameters();
    p.setPreviewSize(300, 300);

    if(CaptureCameraImage.cameraID == 0){
        String stringFlashMode = p.getFlashMode();
        if (stringFlashMode.equals("torch"))
            p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode
        else
            p.setFlashMode("torch");
    }else{
       p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    }

    mCamera.setParameters(p);

尽管有些设备支持任意预览大小,但有些设备不支持。因此,您必须在surfaceChanged方法上执行此操作

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    Camera.Parameters param = camera.getParameters();
    List<Camera.Size> previewSizes = param.getSupportedPreviewSizes();
    Camera.Size ps = // .... select a previewSize 
    param.setPreviewSize(ps.width, ps.height);
    camera.setParameters(param);
    camera.startPreview();
}
public void surfaceChanged(SurfaceHolder holder,int格式,int w,int h){
Camera.Parameters param=Camera.getParameters();
List previewSizes=param.getSupportedPreviewSizes();
照相机。大小ps=/…选择预览大小
参数setPreviewSize(ps.width,ps.height);
摄像机参数设置(参数);
camera.startPreview();
}

当您遇到错误时?是前置还是后置
摄像头
。您好,是前置摄像头ps.width和ps.height?预览大小。你必须给出尺寸、高度和宽度。