多媒体拍照+摄像
来源:互联网 发布:java中工厂模式是什么 编辑:程序博客网 时间:2024/05/16 13:40
首先拍照就是要用到相机所以我们需要在清单文件中配置权限:
<!--照相机的权限--> <uses-permission android:name="android.permission.CAMERA"></uses-permission>
当拍完照之后我们是存在sd卡中的所以我们还需要加的权限就是获得内存卡的写的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
当然还可以在清单文件中设置横屏:
<activity android:name=".MediaplayActivity" android:screenOrientation="landscape"> </activity>
展示画面用的还是SurfceView,布局文件:
<SurfaceView android:id="@+id/sv_main_surface" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="takePhoto" android:text="拍照" />
surfaceview里有一个gethodler然后里面有一个回掉函数,里面重写了三个方法就是在里面打开相机和关闭相机。代码:
surface = (SurfaceView) findViewById(R.id.sv_main_surface); 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); try { //展示画面到sufaceview camera.setPreviewDisplay(surface.getHolder()); //开启预览 camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { //关闭相机 if(camera!=null){ camera.release();//释放资源 camera.stopPreview();//停止 camera=null; } } });
当你点击拍照的时候就把照片存进SD卡里。要将图片进行压缩。将字节数组转成Bitmap。
代码:
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/dcim/camera/G150831_"+System.currentTimeMillis()+".png"); bitmap.compress(Bitmap.CompressFormat.PNG,85,fos); //重新继续拍照 camera.stopPreview(); camera.startPreview(); } catch (FileNotFoundException e) { e.printStackTrace(); } } });}
上效果图:
接下来要讲的就是摄像了
我们也要在这里加权限,和照相一样只不过要多加一个允许摄像的权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
摄影用的也是surfaceview 布局文件:
<SurfaceView android:id="@+id/sv_media_recorder_surface" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="start" android:text="开始" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" /> </LinearLayout>
在这边用到的就是 mediaRecorder(媒体录制器)了。
实例化媒体录制器在,可以通过 mediaRecorder来设置音频与视频来源。
代码:
public class MediaplayActivity extends AppCompatActivity{ private SurfaceView surfaceView; private MediaRecorder mediaRecorder; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mediaplay); surfaceView = (SurfaceView) findViewById(R.id.sv_media_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/mt_video"+System.currentTimeMillis()+".mp4"); //画面 mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); //准备 try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IOException e) { e.printStackTrace(); } } public void stop(View view){ mediaRecorder.stop(); }}
最后上效果图:
0 0
- 多媒体拍照+摄像
- 拍照/摄像
- Android开发之基础----------多媒体图片加载、拍照和摄像(一)
- symbian拍照摄像流程图
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- ios 拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- UIImagePickerController拍照与摄像
- 60.拍照和摄像
- Thinkpad 笔记本VMware Workstation 安装虚拟机出现“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”解决方法
- PAT 1047
- HDU杭电1426-Realtime Status 数独问题
- HM编码器代码阅读(46)——SAO总结
- B-树 构建
- 多媒体拍照+摄像
- MySQL高可用性之Keepalived+Mysql
- 多项式输出
- android弹出窗口-----dialog半透明、透明的圆角activity
- 语言模型(N-Gram)
- Android温习 —— 内存
- numpy使用
- 事件总线程之EventBus
- leetcode_middle_57_215. Kth Largest Element in an Array