android 拍照及录视频简单的实例
来源:互联网 发布:shuttle mac 编辑:程序博客网 时间:2024/06/07 06:39
拍照实现步骤:
<1>界面使用SurfaceView控件,显示照相机的画面
<2>SurfaceView接受摄像头界面变化的信息
surfaceView.getHolder().addCallback()
<3>重写三个方法
surfaceDestroyed—>当预览界面关闭时,触发
一般在这里执行销毁照相机的操作,释放内存
camera.stopPreview();
camera.release();
camera = null;
surfaceCreated—–>预览界面被创建时,调用
一般在这里打开照相机和设置照相机的一些参数
// 打开摄像头 camera = Camera.open(); // 给摄像头设置参数 Parameters parameters = camera.getParameters(); // 设置每秒3栈 parameters.setPreviewFrameRate(3); // 设置照片的输出格式 parameters.setPictureFormat(PixelFormat.JPEG); // 设置照片的质量 parameters.set("jpeg-quality", 85); // 给照相机设置参数 camera.setParameters(parameters); //将摄像头的画面显示到SurfaceView控件上 camera.setPreviewDisplay(sv_main_camera.getHolder()); // 开始预览 camera.startPreview(); surfaceChanged----->当预览界面的格式和大小发生改变时,触发<4>保存 camera.takePicture 将照片保存到内存卡(压缩)
2.视频录制
实现步骤:
<1>将视频动画显示到SurfaceView控件上
<2>使用MediaRecorder类进行视频的录制
常用的方法:
mediaRecorder.reset();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //从照相机采集视频
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setVideoFrameRate(3); //每秒3帧
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); //设置视频编码方式
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
File videoFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+”.3gp”);
mediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
mediaRecorder.prepare();//预期准备
mediaRecorder.start();//开始刻录
mediaRecorder.stop();//停止刻录
注意:权限
<!--打开照相机权限--><uses-permission android:name="android.permission.CAMERA" /><!--创建文件权限--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!--写进内存卡权限--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--录制视频权限--><uses-permission android:name="android.permission.RECORD_AUDIO" />
拍照代码如下:
public class MainActivity extends AppCompatActivity { private SurfaceView sv_main_surface; private Camera camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sv_main_surface = (SurfaceView)findViewById(R.id.sv_main_surface); sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { //打开照相机 camera = Camera.open(); //设置参数 Camera.Parameters parameters=camera.getParameters(); //设置格式 parameters.setPictureFormat(PixelFormat.JPEG); //设置照片质量 parameters.set("jpeg_quality",85); camera.setParameters(parameters); //将画面展示到SurfaceView try { camera.setPreviewDisplay(sv_main_surface.getHolder()); } catch (IOException e) { e.printStackTrace(); } //开启预览效果 camera.startPreview(); } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { if(camera!=null){ camera.stopPreview(); camera.release(); camera=null; } } }); } public void takePhoto(View view){ camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] bytes, Camera camera) { //图片压缩技术 Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length); try { FileOutputStream fos=new FileOutputStream("/mnt/sdcard/G150820_"+System.currentTimeMillis()+".png"); bitmap.compress(Bitmap.CompressFormat.PNG,85,fos); camera.stopPreview(); camera.startPreview(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }); }}
录视频代码:
public class MediarecorderActivity extends AppCompatActivity { private SurfaceView sv_recorder_surface; private MediaRecorder mediaRecorder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mediarecorder); sv_recorder_surface = (SurfaceView) findViewById(R.id.sv_recorder_surface); //实例化媒体录制器 mediaRecorder = new MediaRecorder(); } public void start(View view){ mediaRecorder.reset(); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置保存路径 mediaRecorder.setOutputFile("/mnt/sdcard/G150820_"+System.currentTimeMillis()+".mp4"); mediaRecorder.setPreviewDisplay(sv_recorder_surface.getHolder().getSurface()); try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IOException e) { e.printStackTrace(); } } public void stop(View view){ if(mediaRecorder!=null){ mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder=null; } }}
- android 拍照及录视频简单的实例
- android 拍照及录短视频---练习
- android 拍照及录短视频---练习
- 拍照 录视频 小实例
- Android拍照与录视频
- Android 多媒体拍照以及录视频
- 拍照、录视频
- 关于android下SurfaceView后台录视频牌拍照的思路
- android调用自带拍照和录视频、
- UIImagePickerController 选照片 拍照 录视频
- android 拍照的简单实现
- Android Developers:简单的拍照
- Android 拍照视频音频
- android录视频
- ios 相机 录视频和拍照的封装 保存到相册
- 手机拍照及简单的图片压缩
- Android视录视频示例及代码下载
- Android 拍照 代码实例
- 线性代数复习
- 面试题33:把数组排成最小的数
- 欢迎使用CSDN-markdown编辑器
- 文章标题
- Activiti工作流-笔记2
- android 拍照及录视频简单的实例
- select、poll、epoll比较
- 网易2016研发工程师编程题
- unix 管道符号、gerp、xargs小技巧
- ubuntu登录界面循环登录
- 0213
- springboot构建自己的starter
- java内存模型的原子性、可见性、有序性(先行发生原则)
- ajax前后端(java)实现