Camera

来源:互联网 发布:网络推广怎么找广告主 编辑:程序博客网 时间:2024/06/08 18:23

Camera

The Android framework includes support for various cameras and camera features available on devices, allowing you to capture pictures and videos in your applications。
Camera用来拍照和录制视频。

Camera的使用

1.权限申明

<uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera" android:required="false" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" />// 图片使用GPS定位相关 tags images with GPS location information<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2.Using Existing Camera Apps

通过Intent可以使用设备自带的相机拍照或者录制视频。

自带相机拍照

  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 指定输出文件的位置,建议手动设置,如果设置文件将以默认名字保存在默认位置  fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);注意:如果没有设置EXTRA_OUTPUT,则在onActivityResult()通过intent.getData();获取到对应的Bitmap    有设置的话onActivityResult返回的intent为空。看下源码就知道怎么回事!//=======================================f (mSaveUri != null) {                OutputStream outputStream = null;                try {                    outputStream = mContentResolver.openOutputStream(mSaveUri);                    outputStream.write(data);                    outputStream.close();                    setResult(RESULT_OK);                    finish();                } catch (IOException ex) {                    // ignore exception                } finally {                    Util.closeSilently(outputStream);                }            } else {                Bitmap bitmap = createCaptureBitmap(data);                setResult(RESULT_OK,                        new Intent("inline-data").putExtra("data", bitmap));                finish();            }//====================================== 

自带相机摄影

    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);    fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);     // 设置Video的输出质量    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);

Building a Camera App

使用自定义相机拍照录像遵循一下步骤:

Detect and Access Camera  使用相机权限Create a Preview Class  创建包含SurfaceView的视图展示Camera图片的类Build a Preview Layout  创建视图Setup Listeners for Capture 设置监听Capture and Save Files 捕捉保存Release the Camera 释放资源

Capturing pictures

Camera准备好之后,调用Camera.takePicture()

// 拍照mCamera.takePicture(null, null, mPicture);private PictureCallback mPicture = new PictureCallback() {    @Override    public void onPictureTaken(byte[] data, Camera camera) {    // data就是拍照返回的数据,通过流写入文件即可};

Capturing videos

使用Camera拍照步骤如下:

1.Open Camera        Camera.open() 2.Connect Preview    Camera.setPreviewDisplay().3.Start Preview      Camera.startPreview() 4.Start Recording Video:    a.Camera.unlock().    b.Configure MediaRecorder         setCamera()         setAudioSource()  MediaRecorder.AudioSource.CAMCORDER.        setVideoSource()  MediaRecorder.VideoSource.CAMERA.        setOutputFormat() MediaRecorder.OutputFormat.MPEG_4.        setAudioEncoder() MediaRecorder.AudioEncoder.AMR_NB.        setVideoEncoder() MediaRecorder.VideoEncoder.MPEG_4_SP        setOutputFile()        setPreviewDisplay()    c.MediaRecorder.prepare()    d.MediaRecorder.start()5.Stop Recording Video    MediaRecorder.stop()    MediaRecorder.reset()    MediaRecorder.release()    Camera.lock()6.Camera.stopPreview()7.Camera.release()==========================================================Configure MediaRecorder代码如下:private boolean prepareVideoRecorder(){    mCamera = getCameraInstance();    mMediaRecorder = new MediaRecorder();    // Step 1: Unlock and set camera to MediaRecorder    mCamera.unlock();    mMediaRecorder.setCamera(mCamera);    // Step 2: Set sources    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)    mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));    // Step 4: Set output file    mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());    // Step 5: Set the preview output    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());    // Step 6: Prepare configured MediaRecorder    try {        mMediaRecorder.prepare();    } catch (IllegalStateException e) {        Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());        releaseMediaRecorder();        return false;    } catch (IOException e) {        Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());        releaseMediaRecorder();        return false;    }    return true;}

资源释放示例:

   private void releaseMediaRecorder(){        if (mMediaRecorder != null) {            mMediaRecorder.reset();   // clear recorder configuration            mMediaRecorder.release(); // release the recorder object            mMediaRecorder = null;            mCamera.lock();           // lock camera for later use        }    }    private void releaseCamera(){        if (mCamera != null){            mCamera.release();        // release the camera for other applications            mCamera = null;        }    }
0 0
原创粉丝点击