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
- camera
- Camera
- camera
- Camera
- Camera
- camera
- camera
- Camera
- camera
- Camera
- Camera
- Camera
- camera
- camera
- camera
- camera
- camera
- Camera
- C语言系列(二)有符号数和无符号数详解
- 【水题一道】7的倍数
- Netstat命令详解
- 【Mysql】mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc,mysql_fetch_assoc的区别你知道吗?
- mac proguard混淆打包
- Camera
- JAVA Script 简单学习
- 网络编程——socket套接字编程(二)
- OWL-QN算法
- C语言编程注意事项
- C关键字-共用体union
- 309. Best Time to Buy and Sell Stock with Cooldown 类别:动态规划 难度:medium
- Struts2和Struts1有什么区别
- 深度学习资料汇总(基础篇)