精华内容
下载资源
问答
  • Android调用系统摄像头拍照并显示在ImageView上发布时间:2020-10-03 00:05:03来源:脚本之家阅读:235作者:CSDN_陈诚简介现在市面上的apk只要涉及用户中心都会有头像,而且这个头像也是可自定义的,有的会采取读取...

    Android调用系统摄像头拍照并显示在ImageView上

    发布时间:2020-10-03 00:05:03

    来源:脚本之家

    阅读:235

    作者:CSDN_陈诚

    简介

    现在市面上的apk只要涉及用户中心都会有头像,而且这个头像也是可自定义的,有的会采取读取相册选择其中一张作为需求照片,另一种就是调用系统摄像头拍照并获取即时照片,本博文就是讲述如何调用摄像头拍照并显示在指定的控件上。

    先来看看效果图

    63d85a84ecaa85718906d9cba9e876b1.png

    由于这里我用的是模拟器没有摄像头,所以拍照是黑的,至于里面2个红色圆圈那是Genymotion自带的标志。

    实现起来比较简单:

    activity_main.xml

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    tools:context="com.cc.csdndemo1.MainActivity">

    android:id="@+id/takephotoTV"

    android:text="开启相机"

    android:gravity="center"

    android:layout_width="match_parent"

    android:layout_height="wrap_content" />

    android:layout_gravity="center"

    android:id="@+id/imageIV"

    android:layout_width="300dp"

    android:layout_height="300dp"/>

    布局文件最外层一个垂直排列的LinearLayout,里面放着一个Button和ImageView控件。

    MainActivity.class

    package com.cc.csdndemo1;

    import android.content.Intent;

    import android.graphics.Bitmap;

    import android.os.Bundle;

    import android.support.v7.app.AppCompatActivity;

    import android.widget.Button;

    import android.widget.ImageView;

    import butterknife.BindView;

    import butterknife.ButterKnife;

    import butterknife.OnClick;

    public class MainActivity extends AppCompatActivity {

    @BindView(R.id.takephotoTV)

    Button takephotoTV;

    @BindView(R.id.imageIV)

    ImageView imageIV;

    private final int CAMERA_REQUEST = 8888;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ButterKnife.bind(this);

    }

    @OnClick(R.id.takephotoTV)

    public void onClick() {

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    startActivityForResult(cameraIntent, CAMERA_REQUEST);

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {

    Bitmap photo = (Bitmap) data.getExtras().get("data");

    imageIV.setImageBitmap(photo);

    }

    }

    }

    我们来分析下activity的代码,首先我们使用ButterKnife一键注入代码,免去手动findViewById()并设置button的点击事件,对ButterKnife不熟悉的同志可以查看Android Studio使用ButterKnife和Zelezny,点击事件触发后调用系统的action开启摄像头拍照界面,在这里面我们要注意startActivityForResult必须使用这个方法来回调,第一个参数为intent,第二个参数为自定义的Int型标志,重写onActivityResult(),判断requestCode == CAMERA_REQUEST && resultCode == RESULT_OK,最后获取Bitmap,设置给imageview。

    博文内容比较简单,但很实用,不积跬步无以至千里,希望对需要的朋友有一定的帮助。

    完整的参考代码

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

    展开全文
  • 安卓调用系统摄像头拍照

    千次下载 热门讨论 2014-05-06 13:02:02
    安卓调用系统摄像头拍照,并将图像保存在本地
  • Android 调用前置摄像头

    千次阅读 2019-02-10 11:28:44
    Android 调用前置摄像头
                   

    转自:http://www.cnblogs.com/stay/archive/2011/06/24/2089129.html

    首先,鄙人要发泄下对Android小小的不满,为神马2.3才有api来支持front Camera ,为神马2.3之前的版本也会有前置摄像头,为神马每个厂商的调用前置摄像头的方式都不一样。尼玛同样是写程序,至于搞那么多不同版本不同兼容性问题么。生物识别技术你们伤不起啊!!!GOOGLE 您神马时候才能统一啊!!!别折磨我们这群蛋疼的码农了。该死的魂淡厂商们,你们大致统一一下行不行,坑爹的。

    if(model.equals(SUMSUNG&HTC&MOTO)){system.exit(0)}//支持山寨。

    先说如何录频吧。最简单的,调用MediaRecorder,最好开个子线程去写:

    这里网上有很多帖子都说,有bug,问题出在编码上,因为每个厂商支持的视频编码有点差异,所以别指望同一个代码能支持所有的手机。我用H264测试了十部手机,

    9个通过,1个坑爹的HTC 野火不支持。所以还是使用DEFAULT吧。MediaRecorder.VideoEncoder.DEFAULT

     Runnable run = new Runnable() {
      public void run() {
       try {
        myRecAudioFile = new File(Environment.getExternalStorageDirectory(), "video.mp4");// 创建临时文件
        if (myRecAudioFile.exists()) {
         myRecAudioFile.delete();
        }
        myRecAudioFile.createNewFile();
        recorder.reset();
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 视频源
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 录音源为麦克风
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 输出格式为mp4
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);// 视频编码
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 音频编码
        recorder.setVideoFrameRate(15);// 视频帧频率
        recorder.setVideoSize(320, 240);// 视频尺寸
        recorder.setPreviewDisplay(mSurfaceHolder.getSurface());// 预览
        // recorder.setMaxDuration(10000);// 最大期限
        recorder.setOutputFile(myRecAudioFile.getAbsolutePath());// 保存路径
        recorder.prepare();
        recorder.start();
        mHandler.sendEmptyMessageDelayed(1, 10000);
       } catch (Exception e) {
        stop(true);
       }
      }
     };

    现在来说前置摄像的问题

    2.3的api调用前置非常easy

    Camera android.hardware.Camera.open(int cameraId)

    Creates a new Camera object to access a particular hardware camera.

    cameraId the hardware camera to access, between 0 and getNumberOfCameras()-1.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
       for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
        CameraInfo info = new CameraInfo();
        Camera.getCameraInfo(i, info);
        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {//这就是前置摄像头,亲。
         c = Camera.open(i);
        }
       }
      }
      if (c == null) {
       c = Camera.open();
      }

      c.unlock();//注意,要在MediaRecorder设置参数之前就调用unlock来获得camera的控制权。camera是单例的嘛。如果不调用,程序就挂
      recorder.setCamera(c);

    void android.hardware.Camera.unlock()

    Unlocks the camera to allow another process to access it. Normally, the camera is locked to the process with an active Camera object until release() is called. To allow rapid handoff between processes, you can call this method to release the camera temporarily for another process to use; once the other process is done you can call reconnect() to reclaim the camera.

    This must be done before calling android.media.MediaRecorder.setCamera(Camera).

    If you are not recording video, you probably do not need this method.

    这样就大功告成了。最后还有要注意的地方,就是当你停止拍摄或程序down掉的时候,要调用camera.lock()来释放camera的控制权,否则就不能再开启camera。知道抛异常。

    private void stop(boolean force) {
      if (!force) {
       recorder.stop();
      }
      recorder.reset();
      recorder.release();
      recorder = null;
      if (c != null) {
       c.lock();
       c.release();
       c = null;
      }
      setResult(force ? Activity.RESULT_CANCELED : Activity.RESULT_OK);

    //还记得,调用系统的camera来拍照时,intent里会返回文件的uri。你也可以这样做   intent.setData(Uri.fromFile(tempFile))
      this.finish();
     }

    下面再来说2.3之前的如何调用前置的。公司只有HTC野火和SUMSUNG I9000有前置,所以我只研究了这两个,有其他brand的可以用类似的方法去做,如果你弄出来了,请告诉我,mark下

    debug还是比较有趣的事情,我是指能成功的debug的话。。。。。

    测试这两个手机的时候我一行一行的看log。眼睛都花了,一遍咒骂宏达电和三星。

    06-23 17:49:05.058: WARN/CameraService(2374): getParameters(AppShutterSound=0;anti-shake=0;antibanding=auto;antibanding-values=auto,50hz,60hz,off;beauty-shot=0;blur=0;camera-id=1;chk_dataline=0;contrast=2;contrast-max=4;contrast-min=0;effect=none;effect-values=none,mono,negative,sepia;exposure-compensation=0;exposure-compensation-step=0.5;focal-length=3.79;focus-mode=auto;focus-mode-values=auto,macro;horizontal-view-angle=51.2;iso=auto;jpeg-quality=100;jpeg-thumbnail-height=120;jpeg-thumbnail-quality=100;jpeg-thumbnail-size-values=160x120,0x0;jpeg-thumbnail-width=160;max-exposure-compensation=4;max-zoom=30;metering=center;min-exposure-compensation=-4;picture-format=jpeg;picture-format-values=jpeg;picture-size=2560x1920;picture-size-values=2560x1920,2048x1536,1600x1200,640x480,2560x1536,2048x1232,1600x960,800x480;preview-format=yuv420sp;preview-format-values=yuv420sp;preview-frame-rate=30;preview-frame-rate-values=15,30;preview-size=640x480;preview-size-values=320x240,640x480,800x480;rotation=0;saturation=2;saturation-max=4;saturation-min=0;scene-mode=au

    这是三星的Camera.Parameters         你觉得哪个是设置前置摄像头的么    camera-id=1   bingo   就是它了。

    //  Parameters parameters = c.getParameters();
    //  parameters.set("camera-id",2);//sumsung 2.3以前的手机     我的I9000成功设置成前置的了。

    06-23 18:14:50.697: DEBUG/CameraService(1622): getParameters(Make=HTC;antibanding=auto;antibanding-values=auto,50hz,60hz;brightness=0;brightness-def=0;brightness-max=20;brightness-min=-20;contrast=0;contrast-def=0;contrast-max=100;contrast-min=-100;device=;device-list=/dev/video0,/dev/video1,/dev/video2;effect=none;effect-values=none,mono,negative,sepia,aqua;exposure-compensation=0;exposure-compensation-step=0;fnumber=3.5;focal-length=2.76;focus-mode=auto;focus-mode-values=auto;gps-mapdatum=WGS 84;horizontal-view-angle=54;iso=auto;jpeg-quality=85;jpeg-thumbnail-height=240;jpeg-thumbnail-size-values=320x240,0x0;jpeg-thumbnail-width=320;max-exposure-compensation=0;max-zoom=10;meter-mode=meter-average;min-exposure-compensation=0;models=A3360;picture-format=jpeg;picture-format-values=jpeg;picture-size=2048x1536;picture-size-values=2048x1536,1600x1200,1280x1024,1280x960,1024x768,800x600,640x480,384x288,352x288,320x240,176x144;preview-format=yuv420sp;preview-format-values=yuv420sp;preview-frame-rate=15;preview-frame-rate-values=30,15;preview-size=320x240;previ

    好了,这是宏达电的,你猜哪个是?   不好意思,木有这个参数。当时我就郁闷了。Android程序员你们都伤不起啊。一堆的兼容性问题。尼玛你们来试试。

    肿么办,好吧,去看系统自带的Camera吧,如果你懂得观察,还是比较有意思的。野火的后置摄像头叫  (主)   你们有这个机器的可以自己测试下。

    06-23 18:14:50.716: DEBUG/CameraService(1622): setParameters: video_input= main(有意思吧)

    debug吧,坑爹的叫video_input    尼玛弄不一样的key有意思么,搞这么混乱让人肿么活。人家做爱疯的,从底层自己写上来,一遍就ok啦。有木有。我们有一大堆的api,半小时就能写出来的功能,debug就要几天。有木有!!!

    你再试试吧系统的Camera切换成副摄像头叫什么。。。Secondary。有木有!!!

    好吧。video_input= Secondary    去试吧。依旧不行。。。S小写。尼玛伤不起啊

    //  Parameters parameters = c.getParameters();

    //  parameters.set("camera-id",2);//sumsung 2.3以前的手机  前置

    //  parameters.set("camera-id",1);//sumsung 2.3以前的手机  后置

    //  parameters.set("video_input","secondary");//htc2.3以前的手机  前置

    //  parameters.set("video_input","main");//htc2.3以前的手机   后置

    //  c.setParameters(parameters);

    ok,都这里就全部结束了。蛋疼的debug。蛋疼的Android。蛋疼的人生。码农你们伤不起啊!!!!


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • Android调用系统摄像头(不是自定义摄像头的设计,而是调用手机中自带的摄像头) IDE版本:Android Studio 3.5.1
  • 本篇文章主要介绍了Android调用前后摄像头同时工作实例代码,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • MainActivity类是调用系统摄像头 MyCameroActivity类是通过surfaceholder的方式调用camera拍照的,只用拍照功能。适合初学者的。
  • Android调用后置摄像头录制视频

    热门讨论 2012-11-15 22:21:28
    Android调用后置摄像头录制视频,绝对不坑爹版,调用后置摄像头录制视频,网上有N例子,我都试过,没一个OK,在我的平板,手机上都不行。所以决定吧研究成果传上来。
  • 我这有两款摄像头,分别是 KS2A418-2.0、USB HD Camera,这两款摄像头都支持UVC。这两款摄像头接电脑都可以正常打开,但是接到RK3399开发板,USB HD Camera可以正常打开, KS2A418-2.0则提示Camera error cannot ...

    我这有两款摄像头,分别是 KS2A418-2.0、USB HD Camera,这两款摄像头都支持UVC。

    这两款摄像头接电脑都可以正常打开,但是接到RK3399开发板,USB HD Camera可以正常打开, KS2A418-2.0则提示 Camera error  cannot connect the camera。

    查看两款摄像头分辨率,分别如下:

    e1a4767ad72514a4f18a5b23c72ad748.png

    7fcba667363b9c7dd1e3f4616220a118.png

    通过查询资料,可能是系统相机默认打开分辨率问题,遂下载了一款360相机安装到开发板中进行测试,打开下载的360相机,可正常调用。

    若出现该情况,即系统相机无法调用摄像头问题,按以下进行检查:

    1、确认摄像头支持UVC驱动。可通过串口日志查看是否有摄像头接入。

    7c6d4901c0767bc0a049e88c4be9d1a7.png

    2、确认 /dev目录下有video设备,如下图所示:图中video0设备即为摄像头驱动。

    78d9eb4eac4edcd54f5d4b7b9ce963c1.png

    3、下载相机APP调用摄像头测试。

    查资料说的是系统相机只能打开640*480分辨率摄像头,其他的不支持。在哪修改系统相机默认分辨率,暂时还不太清楚。

    参考资料:https://blog.csdn.net/sslinp/article/details/84825530

    展开全文
  • 主要为大家详细介绍了Android调用系统摄像头拍照并显示在ImageView上,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 做应用可能有时候需要调用本地的摄像头,所以这里就记录意下如何调用摄像头预览需要在布局文件添加surfaceview, 这里需要注意,其实用FrameLayout也可以,大家可以参考...

    做应用可能有时候需要调用本地的摄像头,所以这里就记录意下如何调用。

    摄像头预览需要在布局文件添加surfaceview, 这里需要注意,其实用FrameLayout也可以,大家可以参考

    http://www.cnblogs.com/over140/archive/2011/11/16/2251344.html

    1、布局

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:id="@+id/surfaceview"/>

    只要在布局文件添加这个即可。

    2、摄像头预览

    public class MainActivity extends Activity implements SurfaceHolder.Callback

    继承Activity,实现SurfaceHolder.Callback,MainActivity里需要我们复写以下几个方法:

    @Override

    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {

    System.out.println("surfacechanged");

    }

    @Override

    public void surfaceCreated(SurfaceHolder holder) {

    System.out.println("surfacecreated");

    //获取camera对象

    camera = Camera.open();

    try {

    //设置预览监听

    camera.setPreviewDisplay(holder);

    Camera.Parameters parameters = camera.getParameters();

    if (this.getResources().getConfiguration().orientation

    != Configuration.ORIENTATION_LANDSCAPE) {

    parameters.set("orientation", "portrait");

    camera.setDisplayOrientation(90);

    parameters.setRotation(90);

    } else {

    parameters.set("orientation", "landscape");

    camera.setDisplayOrientation(0);

    parameters.setRotation(0);

    }

    camera.setParameters(parameters);

    //启动摄像头预览

    camera.startPreview();

    System.out.println("camera.startpreview");

    } catch (IOException e) {

    e.printStackTrace();

    camera.release();

    System.out.println("camera.release");

    }

    }

    @Override

    public void surfaceDestroyed(SurfaceHolder arg0) {

    System.out.println("surfaceDestroyed");

    if (camera != null) {

    camera.stopPreview();

    camera.release();

    }

    }

    当然还有onCreate方法

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    context = this;

    surfaceview = (SurfaceView)findViewById(R.id.surfaceview);

    surfaceholder = surfaceview.getHolder();

    surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    surfaceholder.addCallback(SafeActivity.this);

    }

    ,

    当然有些变量还需要定义,

    private static Context context = null;

    private SurfaceView surfaceview;

    private SurfaceHolder surfaceholder;

    private Camera camera = null;

    展开全文
  • Android 调用外接摄像头

    热门讨论 2014-08-06 12:01:39
    适合开发需要开发外接摄像头的,可以实现拍照、录像以及上下转动摄像头
  • delphi xe6 android 调用照相机摄像头拍照片,简单非常实用的原代码,无特定组件,真机调试没问题.
  • android 调用摄像头 街拍 android 调用摄像头 街拍 android 调用摄像头 街拍
  • 前端时间有个需求是设备上安装2个USB摄像头实现平台远程拍照功能,需要无界面拍照,就是静默拍照,偷拍那种,在网上看了好多博客,现在整理一下: ...1,android调用相机拍照,有预览界面,主动 ...
  • delphi xe5 android 调用照相机摄像头拍照片camera,简单非常实用的原代码,无特定组件!
  • android调用usb摄像头

    万次阅读 2015-11-28 13:52:24
    前些天老师让看看如何在开发板上调用usb摄像头。捣鼓了半天。晕死了。 从网上搜andorid usb camera 资料时,看到下面这个文章。非常感谢这篇文章。http://m.blog.csdn.net/comment/18269097 在这篇文章里面写的很...
  • Android 调用系统摄像头

    千次阅读 2011-11-22 15:41:29
    在开发android 应用的时候我们经常需要用到摄像头来进行拍照或者是录制视频,这里介绍一种最简单的方法:调用系统摄像头来拍照,并将照片保存起来 启动摄像头的方法: Java代码 startActivityForResult(new ...
  • 同样的问题java.lang.RuntimeException: setParameters failedat android.hardware.Camera.native_setParameters(Native Method)at android.hardware.Camera.setParameters(Camera.java:1945)at edu.usc.cesr.ema_...
  • Android实现调用摄像头

    2021-01-05 09:18:07
    应用场景: 在Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用。 知识点介绍: 使用权限:调用手机自身设备功能(摄像头拍照功能),应该确保已经在AndroidManifest.xml中正确...
  • 有没有哪位大神实现过安卓调用uvc摄像头啊? 我最近查了网上资料都是讲得很不清楚而且不全的。!! 跪求大神赐教啊!!!
  • 在开发android 应用的时候我们经常需要用到摄像头来进行拍照或者是录制视频,这里介绍一种最简单的方法:调用系统摄像头来拍照,并将照片保存起来 启动摄像头的方法: startActivityForResult(new Intent("android...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,209
精华内容 9,683
关键字:

安卓调用多摄像头