iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android SurfaceView拍照录像实现方法
  • 567
分享到

Android SurfaceView拍照录像实现方法

方法surfaceviewAndroid 2022-06-06 04:06:28 567人浏览 泡泡鱼
摘要

Surface的拍照实现也是很简单,一个小demo就可以把流程看懂了。 话不多说,直接上代码 布局文件 <SurfaceView Android:layou

Surface的拍照实现也是很简单,一个小demo就可以把流程看懂了。

话不多说,直接上代码

布局文件


<SurfaceView
    Android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/sv_main_surface"
    />
  <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="tackPhoto"
    android:text="拍照"
    />

Activity


public class MainActivity extends AppCompatActivity {
  private SurfaceView sv_main_surface;
  private Camera camera;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface);
    //添加surface回调函数
    sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() {
      @Override//控件创建时,打开照相机
      public void surfaceCreated(SurfaceHolder holder) {
        //打开照相机
        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 holder, int format, int width, int height) {
      }
      @Override//控件销毁
      public void surfaceDestroyed(SurfaceHolder holder) {
        //照相同一时刻只能允许一个软件打开
        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) {
        //技术:图片压缩技术(如果图片不压缩,图片大小会过大,会报一个oom内存溢出的错误)
        Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
        try {
          FileOutputStream fos = new FileOutputStream("/mnt/sdcard/qq"+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.CAMERA"></uses-permission>
  <!--创建文件的权限-->
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
  <!--写内存卡的权限-->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

就这样一个小案例就完成了

既然可以拍照,那肯定也是可以录像的,所以我们再来看看录像是怎么实现的

布局文件


<?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_media_recorder"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.zking.familyapp.MediaRecorderActivity">
  <SurfaceView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/sv_media_surface"
    />
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    ></LinearLayout>
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开始"
    android:onClick="start"
    />
 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="停止"
    android:onClick="stop"
    />
</RelativeLayout>

Activity


public class MediaRecorderActivity extends AppCompatActivity {
  private SurfaceView sv_media_surface;
  private MediaRecorder mediaRecorder;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_media_recorder);
    sv_media_surface = (SurfaceView) findViewById(R.id.sv_media_surface);
    //实例化媒体录制器
    mediaRecorder = new MediaRecorder();
  }
  public void start(View view){
    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/uu"+System.currentTimeMillis()+".mp4");
    mediaRecorder.setPreviewDisplay(sv_media_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;
    }
  }
}

添加权限


<!-- 录像的权限-->
  <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
您可能感兴趣的文章:Android编程实现拍照功能的2种方法分析Android判断是否有拍照权限的实例代码Android编程调用系统自带的拍照功能并返回JPG文件示例【附demo源码下载】Android仿微信单击拍照长按录像功能实例代码Android 7.0中拍照和图片裁剪适配的问题详解Android自定义组件获取本地图片和相机拍照图片Android 实现IOS选择拍照相册底部弹出的实例


--结束END--

本文标题: Android SurfaceView拍照录像实现方法

本文链接: https://www.lsjlt.com/news/22311.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android webview实现拍照的方法
    Android webview实现拍照的方法 html <div id="pnlVideo1"> <input type="hidden" name="imgNric1" id="im...
    99+
    2023-05-30
    android webview 拍照
  • Android实现控制摄像头拍照
    现在的手机一般都会提供相机功能,有些相机的镜头甚至支持1300万以上像素,有些甚至支持独立对焦、光学变焦这些只有单反才有的功能,甚至有些手机直接宣传可以拍到星星。可以说手机已经变成了...
    99+
    2024-04-02
  • Android Camera2-预览、拍照、录像流程
    一、Camera2实现预览、拍照、录像三大基础功能的流程框架图 Camera2关键几个类: CameraManager 管理手机上的所有摄像头设备。管理手机上的所有摄像头设备,它的作用主要是获取摄像头列表和打开(openCamera)指定...
    99+
    2023-09-01
    android
  • Android如何实现控制摄像头拍照
    这篇文章主要介绍Android如何实现控制摄像头拍照,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用Camera控制手机拍照的步骤如下: 1) 调用Camera的open()方法打开相机。该方法默认打开后...
    99+
    2023-06-29
  • Android实现调用摄像头拍照并存储照片
    目录1、前期准备2、主要方法1、需要使用Intent调用摄像头2、需要检查SD卡(外部存储)状态3、获取图片及其压缩图片3、案例展示1、Layout2、MainActivity1、前...
    99+
    2024-04-02
  • Android中怎么实现拍照功能
    这期内容当中小编将会给大家带来有关Android中怎么实现拍照功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。解析:1)判断是否有摄像头checkCameraHardware(this) 2)获得相机c...
    99+
    2023-05-30
    android
  • Android调用手机摄像头拍照和录音功能
    本文实例为大家分享了Android调用手机摄像头拍照和录音功能的具体代码,供大家参考,具体内容如下 调用摄像头拍照: public class MainActivity extend...
    99+
    2024-04-02
  • html5拍照功能的实现方法
    这篇文章主要介绍“html5拍照功能的实现方法”,在日常操作中,相信很多人在html5拍照功能的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5拍照功能的实现...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个单击拍照长按录像功能
    怎么在Android应用中实现一个单击拍照长按录像功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在modlue gradle中添加compile '...
    99+
    2023-05-31
    android roi
  • win10摄像头打开拍照的方法
    这篇文章主要讲解了“win10摄像头打开拍照的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10摄像头打开拍照的方法”吧!首先我们使用快捷键“Win+i”打开设置。 打开后,进入其...
    99+
    2023-07-02
  • Android编程实现拍照功能的2种方法分析
    本文实例讲述了Android编程实现拍照功能的2种方法。分享给大家供大家参考,具体如下:Android系统的照相功能,已实现2种方法,可供大家参考:1. 调用系统摄像头来拍照首先,找到AndroidManifest.xml文件里加入用户权限...
    99+
    2023-05-30
    android 拍照功能 roi
  • Android Camera实现毫秒级拍照实例
    我们知道自定义Camera需要以下几步 打开相机,即实例化Camera对象,Camera camera = Camera.open(); 设置Camera的相关参数,Camera.Parameters parameter...
    99+
    2023-05-31
    android camera 拍照
  • Android怎么调用手机摄像头拍照和录音功能
    本文小编为大家详细介绍“Android怎么调用手机摄像头拍照和录音功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么调用手机摄像头拍照和录音功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。调...
    99+
    2023-06-29
  • Android实现Camera2预览和拍照效果
    简介网上对于 Camera2 的介绍有很多,在 Github 上也有很多关于 Camera2 的封装库,但是对于那些库,封装性太强,有时候我们仅仅是需要个简简单单的拍照功能而已,因此,自定义一个 Camera 使之变得轻量级那是非常重要的了...
    99+
    2023-05-30
    android camera2 预览
  • Python实现调用摄像头拍摄照片
    目录步骤代码实现效果步骤 用opencv打开摄像头并拍照保存照片到本地获取邮箱(如qq邮箱)的授权码,方法可自行百度将照片以附件的形式发送到指定邮箱删除本地照片 代码 import ...
    99+
    2024-04-02
  • Android实现拍照添加时间水印
    本文实例为大家分享了Android实现拍照添加时间水印的具体代码,供大家参考,具体内容如下 效果如下图 : 1、拍照 // 非空判断 拍照  if (mCamera0 != nul...
    99+
    2024-04-02
  • C#获取摄像头拍照显示图像的方法
    本文实例为大家分享了C#获取摄像头拍照显示图像的具体代码,供大家参考,具体内容如下 概述 之前有个需求,就是在web界面可以实现调用摄像头,用户把手机的个人二维码展示给摄像头,摄像头...
    99+
    2024-04-02
  • Android自定义Camera实现拍照小功能
    本文实例为大家分享了Android自定义Camera实现拍照的具体代码,供大家参考,具体内容如下 本篇文章就项目开发遇到问题记录下; 1.拍照图片被压缩问题2.拍照图片被旋转问题 首...
    99+
    2024-04-02
  • Android如何实现拍照及图片裁剪
    这篇文章主要介绍Android如何实现拍照及图片裁剪,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近做项目中涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。...
    99+
    2023-05-30
    android6.0
  • python调用摄像头实现拍照功能
    目录 1.介绍 2.系统依赖 (1)OpenCV-Python库 (2)Tkinter库 (3)Pillow库 (4)Time库 3.系统代码 4.效果展示 5.注意事项 1.介绍         这是一个有趣的项目,通过Python程...
    99+
    2023-09-21
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作