首页 > 学院 > 开发设计 > 正文

多媒体(拍照-录像)

2019-11-08 01:04:40
字体:
来源:转载
供稿:网友

多媒体拍照界面主要是用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>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表