android开发之Camera(相机)

Android Camera系列(一):SurfaceView+Camera 本文介绍了Camera+SurfaceView的基本操作及关键代码,但是你如果看github中代码会发现和文中出入很大。其原因在于文章我想用一种简单的方式让没有做过自定义Camera的人也能明白。而github中的项目我已经进行了多次重构、抽象。其中包括对Camera的抽象,定义ICameraManager接口。对预览的View的重构,定义BaseCameraView接口,以及预览视图的众多超类。 阅读详情

今天学习了android开发中的相机的开发,总结了关于android中相机的开发流程:

*使用surfaceview进行预览

*需要开启的权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

1.布局文件:

<SurfaceView
 android:id="@+id/svPreview"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

2.为surfaceview设置callback
mSfPreview.getHolder().addCallback(new SfCallback());

public class SfCallback implements SurfaceHolder.Callback{

   /**
     * 设置相机属性
     */
void setCamera(){

Camera.Parameters parameters = mCamera.getParameters();
//得到相机支持的拍照分辨率,按大小排列(有的手机从大到小,有的从小到大)
List<Camera.Size> listSize = parameters .getSupportedPictureSizes();
// 从大到小排列的情况下,设置照片的大小,只能设置成支持的size,不能随意设置
//不同的机型,listSize中的值的顺序不同,需要查看本机在哪个值的时候最清晰
parameters.setPictureSize(listSize.get(0).width,listSize.get(0).height);

// 设置图片格式
parameters.setPictureFormat(ImageFormat.JPEG);

//默认情况下相机是横向的,这里只是改变预览的方向
 mCamera.setDisplayOrientation(90);
 //将参数设置到Camera对象中
 mCamera.setParameters(parameters);
}

     /**
         * 创建的时候调用
         * @param holder
         */
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();//打开相机
        try {

            setCamera();
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();

} catch (IOException e) {
            e.printStackTrace();
}

    }
       /**
         * 状态改变的时候调用
         * @param holder
         * @param format
         * @param width
         * @param height
         */
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//自动对焦
mCamera.autoFocus(null);
}
    /**
         * 销毁的时候调用
         * @param holder
         */
@Override
public void surfaceDestroyed(SurfaceHolder holder) {

    //释放camera
    if(mCamera != null){
    mCamera.release();
    mCamera = null;
    }
    }    
}



3.拍照开始


@OnClick(R.id.btBegin)
public void capturePhoto(View view) {

/*第一个参数按下快门时回调,
 *第二个参数处理原始的照片数据,
 *第三个参数处理jpeg格式照片,一般用于存放照片
 */
mCamera.takePicture(null, null, new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
            Bitmap bmSrc = BitmapFactory.decodeByteArray(data,
        0,data.length);
        Bitmap bmRotate = RotateBitmap(bmSrc);//旋转
        saveBitmap(bmRotate);//保存

        //重新开启预览
        mCamera.startPreview();
    }

    });
}

3.1.旋转图片

/**
 * 旋转照片
 *
 * @param bmSrc
*/
public Bitmap RotateBitmap(Bitmap bmSrc) {
    Bitmap bmRotate = null;

    Matrix matrix = new Matrix();
    matrix.setRotate(90);//顺时针旋转90度
    bmRotate = Bitmap.createBitmap(bmSrc, 0, 0,
    bmSrc.getWidth(), bmSrc.getHeight(),matrix, true);

    bmSrc.recycle();
        return bmRotate;
}

3.2.保存照片
/**
 * 保存图片
 * @param bmToSave
 */
public void saveBitmap(Bitmap bmToSave) {
    //以时间为文件名
    SimpleDateFormat simpleDateFormat =
    new SimpleDateFormat("yyyyMMddhhmmss");
    String time = simpleDateFormat.format(new Date());
    File file = new File("/sdcard/" + time + ".jpg");

    BufferedOutputStream bufferedOutputStream = null;
        try {
        bufferedOutputStream = new BufferedOutputStream(new     FileOutputStream(file));
    bmToSave.compress(Bitmap.CompressFormat.JPEG,
    100,bufferedOutputStream);//将图片压缩到流中

    bufferedOutputStream.flush();//输出缓冲区的内容到本地
    bufferedOutputStream.close();//关闭
    } catch (Exception e) {
        e.printStackTrace();
    }
}


Android Camera 相机开发详解 在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口。Camera2在接口和架构上做了巨大的变动, 但是基于众所周知的原因,我们还必须基于 Android 4.+ 系统进行开发。本文介绍的是Camera接口开发及其使用方法,通过本文章,你将全面地学会Camera接口的开发流程。 阅读详情

相关推荐

Android之Camera1实现相机开发

一、前言 现在很多app都会有拍照功能,一般调用系统进行拍照裁剪就能满足平时的需求,但有些场景或者特殊情况下如:持续不间断拍多张照片或者是进行人脸识别的时候,这时候之间调用系统原生相机拍照时不能满足自己的开发需求,就需要使用原生Camera来进行自定义开发,本文会采用android.hardware.CameraAPI来进行开发。在Android生态中,Camera是碎片化较为严重的一块,因为现在Android本身有三套API: Camera:Android 5.0以下 Camera2:Android 5

Android061503的博客 2289

android 自定义相机拍照的两种方式

部分代码 import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content

u010152805的专栏 1706

Android 相机开发入门指南:CameraX 与 Camera2 的终极对比与实践

在移动应用开发中,相机功能已成为社交、电商、工具类应用的标配能力。但 Android 相机开发因其碎片化设备和复杂的硬件交互,一直是开发者面临的高难度领域。Google 先后推出 Camera2(API 21+)和 CameraX(Jetpack 组件)两套解决方案,本文将深度解析两者的差异与最佳实践。另外,对2025年依然奋战在Android开发前线的战友们问个好,祝我们这些移动开发者越来越棒!

懒人的技术笔记 1976

Android平台Camera开发实践指南

关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse@163.com与我交流。 文章目录 一 Camera实践指南 1.1 打开相机 1.2 关闭相机 1.3 开启预览 1.4 关闭预览 1.5 拍照 1.6 开始视频录制 1.7 结束视频录制 二 Camera2...

weixin_34199405的博客 717

Android Camera相机开发实战项目Demo

htmltable {th, td {th {pre {简介:在Android开发中,Camera相机功能广泛应用于拍照和视频录制。本CameraDemo项目完整演示了如何使用Android原生Camera API实现相机核心功能,包括相机初始化、预览显示设置、拍照流程控制及图片保存,并涵盖闪光灯、变焦、自动对焦等高级特性。

weixin_35756637的博客 1177

Android Camera开发完整示例

一个完整的android Camera的示例,包括了触摸对焦功能的实现。来自简化后的项目代码

Android学习20 -- NDK5--操作camera(TODO)

在 Android NDK 环境中,直接用 C++ 操作摄像头,可以使用(通过NdkCamera2提供的接口)。以下是一个完整的示例,展示如何在 NDK 环境中用 C++ 打开摄像头并预览图像。

fanged的专栏 1043

Android相机开发代码

简单的Android相机程序,可实现以下功能: 1、预览 2、对焦拍照保存 3、查看图片,并且能够更新按钮的图像缩略图

安卓相机开发:Camera、Camera2与CameraX的使用对比及选型指南

本文对比分析了安卓相机开发中的三种API:传统Camera API、Camera2 API和CameraX。Camera API已逐渐被废弃,仅支持基础功能且存在兼容性问题;Camera2 API提供更精细的硬件控制但开发复杂度高;CameraX则简化了开发流程,提供生命周期管理并自动处理兼容性问题。文章通过具体示例说明了各API的使用方法,并建议开发者根据项目需求选择:简单应用优先CameraX,专业摄影应用可选Camera2。

故事不长丨的博客 1481

解密UFS Explorer:Drobo BeyondRAID数据恢复实战指南

本文详细介绍了使用UFS Explorer Professional Recovery软件中的Drobo BeyondRAID助手进行数据恢复的完整实战流程。当Drobo设备因BeyondRAID配置信息丢失而无法访问时,该工具能安全、只读地扫描硬盘,虚拟重建存储池,帮助用户找回宝贵数据。指南涵盖了从前期准备、硬盘选择、配置扫描到数据安全导出的每一步关键操作与常见问题解决方案。

weixin_29219539的博客 269

【WSL】window11 安装WSL2配置conda环境及mlatom环境搭建

写这篇文章之前自己安装过两次环境,可能每次都会产生碰到同样的问题,为了搭建适合自己的虚拟环境保证每一步的正确性,按顺序记录一下。

wangxiancao的博客 1629

Android camera相机开发拍照功能

在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口。Camera2在接口和架构上做了巨大的变动,但是基于众所周知的原因,我们还必须基于 Android 4.+ 系统进行开发。本文介绍的是Camera接口开发及其使用方法,全面地学会Camera接口的开发流程。一、调用系统相机/其它App完成拍摄操作 如果你的App的需求只是调用摄像头拍照并拿到照片,老司

jing__jie的博客 4632

华北理工大学以升实验班蓝桥杯选拔赛题解

文章目录华北理工大学以升实验班蓝桥杯选拔赛题解A:期末考试题目描述题目讲解代码B:月份题目描述题目讲解代码C:打饭题目描述题目讲解代码D : 正弦波信号题目描述题目讲解代码E : 亲爱的长方形题目描述题目讲解代码F:挖金子题目描述题目讲解代码G : 金金的游戏题目描述题目讲解代码H : 区间和题目描述题目讲解代码详细视频讲解请关注华北理工大学b站账号。 华北理工大学以升实验班蓝桥杯选拔赛题解 A:期末考试 题目描述 Description 期末考试过去许多天了,如今成绩都出来了,那么现在让我们对成绩我分个类

Qq1739206233的博客 1128

Android 相机开发:Camera1、Camera2 与 CameraX API 全解析

Android 相机 API 的演进体现了 "从功能实现到体验优化" 的趋势:Camera1 满足了早期简单场景的需求,Camera2 释放了硬件潜力却带来了复杂度,CameraX 则在易用性和功能之间找到了平衡。对于开发者而言,新应用应优先选择 CameraX—— 它大幅降低了开发成本,同时通过Camera2Interop保留了扩展空间;维护旧应用时,若需升级相机功能,建议逐步迁移到 CameraX 而非直接切换到 Camera2,以减少重构成本。

weixin_37794278的博客 1776

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 2993

NSFC结题报告下载脚本失效?3步教你手动修复下载按钮问题(2024最新版)

针对NSFC官网域名变更导致结题报告下载脚本失效的问题,本文提供了详细的手动修复指南。通过三步操作,教你如何修改用户脚本的域名匹配规则,恢复下载按钮功能,确保NSFC结题报告下载器能继续高效工作。

vscode6remote的博客 751

Android Camera 相机开发第一篇

相机现实知识: Camera SurfaceView (SurfaceView 也是TextureView,最常用的当然是SurfaceView 所以主讲SurfaceView) 俩者关系脑图 一、SurfaceView 、Surface 、 SurfaceHolder 关系图 S...

景高旭 5285

基于 MFC C++ 的心电监测客户端

4. **报警功能**:使用 `PlaySound` 播放报警音(需准备 `alert.wav` 文件),界面显示报警状态。

寒寒豆豆软件公司的博客 92

Android Camera2 开发相机,实现拍照,预览,录像等功能

文章目录布局文件请求有关权限加载布局,设置surface。避免画面拉升等问题 学习Camera2 时,开发一个简单自定义相机。具体流程看代码 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation

Yrainy_D的博客 7672

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9550

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android Camera Util:解决Android相机开发的痛点

Android Camera Util:解决Android相机开发的痛点 在Android应用开发中,使用内置相机功能看似简单,实则充满了挑战。从空意图返回、图片方向问题到内存溢出错误,这些问题在不同设备上表现各异,给开发者带来了极大的困扰。今天,我们将介绍一个开源项目——Android Camera Util,它旨在解决这些常见问题,确保在多种设备上都能稳定运行。 项目介绍 Android Ca...

gitblog_00109的博客 429

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

探索 Android 相机开发的艺术:Android Camera Demos 深度解析

探索 Android 相机开发的艺术:Android Camera Demos 深度解析 去发现同类优质开源项目:https://gitcode.com/ 如果你是一名热衷于 Android 应用开发的程序员,特别是对相机功能有深度研究需求的开发者,那么 项目绝对值得你投入时间和精力。该项目是一个丰富的示例集合,展示了如何在 Android 平台上利用不同的 API 来实现各种相机功能。 项目简...

gitblog_00075的博客 529

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android Camera2Basic完全指南:从零开始掌握现代相机开发

想要快速掌握Android相机开发吗?Android Camera2Basic项目是你的完美起点!这个官方示例项目展示了如何使用Camera2 API构建功能完整的相机应用,让初学者能够轻松上手现代Android相机开发技术。🚀 ## 📱 项目概览与快速入门 Android Camera2Basic是一个完整的相机应用示例,包含Java和Kotlin两种实现版本。项目结构清晰,适合各种学习

gitblog_00128的博客 895
上一篇: Android高级Picasso
下一篇: android开发之二维码
program008
博客等级 码龄11年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值