通过自定义相机拍照并存储以显示下一个活动

时间:2014-04-03 07:11:13

标签: android camera

如何使用自定义相机拍摄并保存图像,并在下一个活动的屏幕上显示保存的图像。 (使用PostTask)

这是我试过的...... 1.相机活动

public static final int CAMERA_REQUEST = 1000; 
private FrameLayout cameraPreview;
private Camera mCamera;
private CameraPreview mCameraPreview;
private  Camera_Activity screen;
private final Context context = this;


 capture_snap.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            mCamera.takePicture(null, null, mPicture);
             PostTask pt = new PostTask();
            pt.execute(screen);
            pdialog = new ProgressDialog(Camera_Activity.this);
            pdialog.setCancelable(false);
            pdialog.setMessage("Please Wait...");
            pdialog.show();*/
         }
    });  

private Camera getCameraInstance() {
    Camera camera = null;
    try {
               camera = Camera.open();

    } catch (Exception e) {
        // cannot get camera or does not exist
    }
    return camera;
}

PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        File pictureFile = getOutputMediaFile();
        if (pictureFile == null) {
            System.out.println("picture file is null");
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
        } catch (FileNotFoundException e) {

        } catch (IOException e) {
        }
    }
};

private static File getOutputMediaFile() {
    File mediaStorageDir = new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            "MyCameraApp");
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
            .format(new Date());
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath() + File.separator
            + "IMG_" + timeStamp + ".jpeg");

    return mediaFile;
}

private class PostTask extends AsyncTask<Activity, String, String>
 {

    @Override
    protected String doInBackground(Activity... params) {


        return "";
    }


    protected void onPostExecute(String result) {

                 if(pdialog != null)
                 {
                     pdialog.setCancelable(true);
                     pdialog.dismiss();

                    Intent i=new Intent(getApplicationContext(),Camera_view.class);
                    //i.putExtra(mediaFile, mediaFile);
                    startActivity(i);



                } 
             else{
                 pdialog.setCancelable(true);
                 pdialog.dismiss();
                    MessageDialog.showMessage("Alert",
                            "Incorrect Path", Camera_Activity.screen);

                }
            } 
    }

private void releaseCamera(){
    if (mCamera != null){
        mCameraPreview.getHolder().removeCallback(mCameraPreview);
        mCamera.release();        // release the camera for other applications
    }
}

2.Camera Preivew

    public class CameraPreview extends SurfaceView implements
SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;

// Constructor that obtains context and camera
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera) {
super(context);
this.mCamera = camera;
this.mSurfaceHolder = this.getHolder();
this.mSurfaceHolder.addCallback(this);
this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
try {
    mCamera.setPreviewDisplay(surfaceHolder);
    mCamera.startPreview();
} catch (IOException e) {
    // left blank for now
}
}

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    //mCamera.stopPreview();
    //mCamera.release();
    if(mCamera != null){
        mCamera.stopPreview();
        mCamera.setPreviewCallback(null);
        mCamera.release();  
    }
}

public void onPause() {
    mCamera.stopPreview();
    //mCamera = null;
}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
    int width, int height) {
// start preview with new settings
try {
    mCamera.setDisplayOrientation(90);
    mCamera.setPreviewDisplay(surfaceHolder);
    mCamera.startPreview();
} catch (Exception e) {
    // intentionally left blank for a test
}
}
}

3.Camera View //这里我正在尝试显示捕获的图像...

1 个答案:

答案 0 :(得分:2)