多媒体(拍照-录像)
来源:互联网 发布:耐玩的网络游戏知乎 编辑:程序博客网 时间:2024/05/03 09:58
多媒体拍照界面主要是用SurfaceView控件来显示照相机的画面
通过这个重写了3个方法
surfaceView.getHolder().addCallback()
方法为:
surfaceDestroyed--->当预览界面关闭时,触发surfaceCreated----->预览界面被创建时,调用surfaceChanged----->当预览界面的格式和大小发生改变时,触发
来看下界面:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"android:layout_width="match_parent" android:layout_height="match_parent"><SurfaceView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sv_main_view" /><Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="takephoto" android:text="拍照" /></RelativeLayout>
java代码:
//当预览界面被创建时 @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); try { //将摄像头的画面显示到SurfaceView控件上 camera.setPreviewDisplay(sv_main_view.getHolder()); //开始预览 camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } }
//当预览界面关闭时 @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { // 关闭照相机 if (camera!=null){ camera.release(); camera.stopPreview(); camera=null; } }
写了一个点击的方法:
public void takephoto(View view){ camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] bytes, Camera camera) { //实例化文件输出流 //写 //压缩(图片) //将字节数组转成bitmap //这样来写的话图片大小会很小,只不过图片的清晰度不是好 Bitmap bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length); try { //图片的名字以及路径 FileOutputStream fos=new FileOutputStream("/mnt/sdcard/1/G150831_"+System.currentTimeMillis()+".png"); bitmap.compress(Bitmap.CompressFormat.PNG,85,fos); //重新拍照 camera.stopPreview(); camera.startPreview(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }); }
来看下录制视频的:
java代码如下:
sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_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/1/G150831_"+System.currentTimeMillis()+".mp4"); //画面 mediaRecorder.setPreviewDisplay(sv_main_surface.getHolder().getSurface()); //准备 try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IOException e) { e.printStackTrace(); } } public void stop(View view){ //停止 mediaRecorder.stop(); }
要加的权限有3个:
<!-- 打开照相机的权限 --> <uses-permission android:name="android.permission.CAMERA" /> <!--SD卡权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--录音权限--> <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
0 0
- 多媒体(拍照+录像)
- 多媒体(拍照-录像)
- 多媒体(拍照录像)
- 多媒体(视频播放器-拍照-录像)
- Android 多媒体(拍照-录像)
- 多媒体(视频播放,拍照,录像)
- Android多媒体(视频播放器-拍照-录像)
- Android------多媒体(视频播放器-拍照-录像)
- Android 多媒体 通过MediaRecorder+SurfaceView实现拍照,录像
- 28.Android-多媒体(视频播放器-拍照-录像)
- 拍照 录像
- 拍照录像
- 录像、录音和拍照
- 录像和拍照
- android--拍照,录像
- Android-SurfaceView拍照录像
- Android 拍照/录像
- Android 实现拍照、录像
- OC 运行时(Runtime)浅析(1)
- 网站分析的10个要点
- Selenium3.0 文档——selenium.webdriver.support.wait
- [JAVA] sychronized用法
- Kafka common command
- 多媒体(拍照-录像)
- 图的深度遍历(dfs)
- Vim 常用命令
- caffe在windows平台上的编译
- 遍历Map
- JS浅拷贝和深拷贝详解
- css样式float造成的浮动“塌陷”问题的解决办法
- Android 刷机模式学习笔记
- <hadoop>分布式缓存