How to capture and save an image using custom camera in Android?

前端 未结 4 1966
感动是毒
感动是毒 2020-11-28 03:16

How do I capture an image in custom camera and then save that image in android?

4条回答
  •  感动是毒
    2020-11-28 03:50

    Following Snippet will help you

    
    
    
        
        
        
    
        
            
                
                    
    
                    
                
            
        
    
    
    

    main.xml

    
    
    
        

    PhotoHandler.java

    package org.sample;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import android.content.Context;
    import android.hardware.Camera;
    import android.hardware.Camera.PictureCallback;
    import android.os.Environment;
    import android.util.Log;
    import android.widget.Toast;
    
    public class PhotoHandler implements PictureCallback {
    
        private final Context context;
    
        public PhotoHandler(Context context) {
            this.context = context;
        }
    
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
    
            File pictureFileDir = getDir();
    
            if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
    
                Log.d(Constants.DEBUG_TAG, "Can't create directory to save image.");
                Toast.makeText(context, "Can't create directory to save image.",
                        Toast.LENGTH_LONG).show();
                return;
    
            }
    
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
            String date = dateFormat.format(new Date());
            String photoFile = "Picture_" + date + ".jpg";
    
            String filename = pictureFileDir.getPath() + File.separator + photoFile;
    
            File pictureFile = new File(filename);
    
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
                Toast.makeText(context, "New Image saved:" + photoFile,
                        Toast.LENGTH_LONG).show();
            } catch (Exception error) {
                Log.d(Constants.DEBUG_TAG, "File" + filename + "not saved: "
                        + error.getMessage());
                Toast.makeText(context, "Image could not be saved.",
                        Toast.LENGTH_LONG).show();
            }
        }
    
        private File getDir() {
            File sdDir = Environment
              .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
            return new File(sdDir, "CameraAPIDemo");
        }
    }
    

    MakePhotoActivity.java

    package org.sample;
    
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.hardware.Camera;
    import android.hardware.Camera.CameraInfo;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Toast;
    import de.vogella.cameara.api.R;
    
    public class MakePhotoActivity extends Activity {
        private final static String DEBUG_TAG = "MakePhotoActivity";
        private Camera camera;
        private int cameraId = 0;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // do we have a camera?
            if (!getPackageManager()
                    .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
                Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
                        .show();
            } else {
                cameraId = findFrontFacingCamera();
                camera = Camera.open(cameraId);
                if (cameraId < 0) {
                    Toast.makeText(this, "No front facing camera found.",
                            Toast.LENGTH_LONG).show();
                }
            }
        }
    
        public void onClick(View view) {
            camera.takePicture(null, null,
                    new PhotoHandler(getApplicationContext()));
        }
    
        private int findFrontFacingCamera() {
            int cameraId = -1;
            // Search for the front facing camera
            int numberOfCameras = Camera.getNumberOfCameras();
            for (int i = 0; i < numberOfCameras; i++) {
                CameraInfo info = new CameraInfo();
                Camera.getCameraInfo(i, info);
                if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
                    Log.d(DEBUG_TAG, "Camera found");
                    cameraId = i;
                    break;
                }
            }
            return cameraId;
        }
    
        @Override
        protected void onPause() {
            if (camera != null) {
                camera.release();
                camera = null;
            }
            super.onPause();
        }
    
    }
    

提交回复
热议问题