Android Camera实现图像复制

Android Camera2+HAL3架构 文章目录整体架构概述 整体架构概述 Android Camera2整体架构如下图: 大致分为这几个部分: Application framework 这一层是用于给APP提供访问hardware的Camera API2,通过binder来访问camera service。有两个主要的类:这一层是用于给APP提供访问hardware的Camera API2,通过binder来访问camera s... 阅读详情

做VR产品的时候,有个产品的目标是做一个左右眼的摄像头,实现两个摄像头采集数据,左右分屏的显示在手机屏幕上,当时调研发现,手机因为只有一颗ISP所有一般情况下只能打开一个摄像头,所以当时考虑可以使用手机的摄像头外接一个USB camera。由于当时时间比较紧,所以调研过程中只做了屏幕的分屏显示,而没有做摄像头的输入方式。
当时采用的方法是修改图形显卡(framebuffer)的参数,使得图像在输出的时候能够左右分屏,但是不同的平台下也会出现有的能work有的不work的情况。
所以到现在也没有很好的解决方案。
最近在学习camera相关知识的时候假想了一种使用场景,使用单个摄像头完成摄像头图像的复制,做一个类似左右眼的效果。

设定的方法是在布局文件中设定一个surfaceView和一个ImageView:
这里写图片描述
记得之前描述过,我们可以通过onPreviewFrame回调函数拿到data数据。既然如此,我们便可以把这部分数据复制到一份显示在屏幕上,实现左右分屏。

要注意的是,此处返回的数组图像格式为NV21(YUV420SP),并不支持直接BitmapFactory.decodeByteArray()方法,需要进行格式转换。参考网上的博客https://blog.youkuaiyun.com/d276031034/article/details/73276495
//将rawImage转换成bitmap
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
bitmap = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length, options);
最终调用icon.setImageBitmap(bitmap); 将图像显示出来。

但是正如原作者所说,显示的延时现象很明显。

可以参考网上的多线程的优化方式,https://www.2cto.com/kf/201605/511009.htmlAndroid性能优化典范之多线程篇
我们可以使用HandlerThread的方式来进行实现,
//创建一个HandlerThread并启动
mHandlerThread=new HandlerThread(“my_handlerthread”);
mHandlerThread.start();
创建handler来启动我们定义的任务
subHandler=new Handler(mHandlerThread.getLooper());
subHandler.post(newMyTask());
在MyTask中实现具体功能:
classMyTaskimplementsRunnable{
@SuppressLint(“NewApi”)@Override
public void run(){
doChange(surfaceView.getHolder());
}
}

Android Camera 框架全景解析2 截至2025年,Google Play新应用强制要求使用Camera2/CameraX。:CameraX+Camera2扩展组合(需自定义图像处理管线):采用CameraX减少70%代码量(电商/社交应用):选择Camera2实现底层操作(如医疗/工业场景):优先使用Camera1(需处理API兼容) 阅读详情

相关推荐

camera功能真的那么难用吗

Android开发工作过程中,经常需要用到camera相关能力,比如:人脸识别,ai识别,拍照预览,摄像头录制等等需求。都需要使用到camera,且需要拿到camera的预览数据。但是每次开发这块代码都比较繁琐,一大堆的接口(尤其是camera2),用错一个就容易出现意想不到的结果。所以这里我们将Android的camera做一次简单易用的封装,再也不用担心API用错了。

LVEfrist的博客 1379

android调用虚拟摄像头方法,Android设备虚拟摄像头技术实现

实际生活中经常遇到要使用一个摄像头做多个事情的情况,但在开发中,一个摄像头只能被一个应用程序所占有,当一个应用程序在使用摄像头时,其他所有应用程序都无法在使用这个摄像头。怎么解决这个问题呢?其实可以采用虚拟摄像头技术。从网上找的虚拟摄像头技术一个比较容易理解的框架图。 根据这个图很容易理解就是需要实现一个camera proxy,来实现把真实摄像头的数据时时放入虚拟摄像头。以rk3288 andr...

weixin_30166291的博客 1万+

opencv-android笔记1:android studio 2.3 + opencv-android-sdk 实现 camera预览

opencv-android笔记,android studio 2.3 + opencv-android-sdk 实现 camera预览。搭建Android studio中的opencv应用开发环境,实现camera预览,对预览进行简单Canny边缘检测操作,用最少最简洁的代码带你入门。

ja33son的博客 3333

Android 消息机制和HandleThread

Android 消息机制和HandleThread

m0_47135641的博客 491

MTK Camera技术栈深度解析:从驱动移植到图像质量调试实战

在移动设备开发中,Camera子系统是连接硬件传感器与上层应用的核心模块,其稳定性和性能直接影响用户体验。其技术原理基于分层架构,从应用层通过标准API发起请求,经由框架层调度,最终由硬件抽象层(HAL)和内核驱动与图像传感器、ISP等硬件交互。这一过程实现了对自动对焦、自动曝光、自动白平衡等3A算法的集成与图像信号处理。其技术价值在于为拍照、录像、视频通话等核心场景提供了稳定高效的图像采集能力,并支撑了双摄、AI场景识别等高级功能。在联发科(MTK)平台上,Camera技术栈进行了深度定制,涉及Senso

weixin_30423977的博客 349

安卓Android人脸识别实战——Camera_face源码剖析

人脸识别技术作为生物识别领域的一种,越来越受到人们的关注。在安卓Android平台上,开发者可以利用各种开源库和API来实现这一功能,这为开发者的应用提供了巨大的便捷性。安卓人脸识别技术已广泛应用于用户解锁、支付验证、访客登记等多种场景。本文将带领读者从基础的人脸检测开始,逐步深入到复杂的人脸识别技术实现,探究在Android平台上实现高效、准确的人脸识别系统的方法和技巧。人脸识别领域常用的机器学习算法包括:支持向量机(SVM):一种基于统计学的分类器,用于将特征向量分类。

weixin_42181686的博客 974

android拷贝图片副本

android不可以对原图直接操作可以拷贝图片生产副本,在副本进行操作 ImageView originalImage, copyImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_copy_image); //原图

YanLong_Lin的博客 602

波克 上海 Unity开发笔试题 2024

主要分为四部分,如果没有准备好,不要点击笔试链接,进入就会自动开始。

z2014z的博客 3396

Android ION 内存管理

ION的设计初衷Android为了更好的针对移动设备内存的管理,设计出了ION内存管理机制,主要是为了解决以下几个问题: 预留大块连续内存,比如camera,display,GPU等模块 避免内存随便花 用户控件和硬件之间实现”零拷贝”(zero-copy)的内存共享 做Android系统的,特别是跟Display,camera模块相关的 ION的官方介绍和历史...

zhangjie201412的专栏 5299

无人机开发平台全解析:从开源飞控到企业级应用实战指南

无人机开发平台是无人机从飞行器演变为智能空中机器人的核心,其本质是提供了一套标准化的软硬件接口与工具链,使开发者能够基于稳定可靠的底层系统,专注于上层应用创新。从技术原理上看,一个完整的开发平台通常包含飞行控制器、机载计算机、传感器套件等硬件层,以及飞控固件、机器人操作系统(ROS/ROS 2)、软件开发套件(SDK)等软件层,通过分层架构实现飞行控制、感知决策与任务执行的解耦。其技术价值在于大幅降低了无人机行业应用的开发门槛,使开发者无需从零构建飞行控制系统,即可快速实现自动巡检、精准农业、物流配送等复杂

weixin_28712491的博客 412

IAR安装成功的关键:STM32设备支持文件导入方法

IAR安装常卡在设备支持缺失这一步——尤其对STM32新手,没导入对应芯片包,编译直接报错。实测发现,必须通过IAR的Tools→Options→IDE→Configuration→Device Support手动加载STM32设备支持文件,否则新建工程时连芯片型号都选不到。IAR安装是否顺利,往往就差这一步。

weixin_42527589的博客 680

视频播放surfaceView camera,获取预览图像显示setPreviewCallback()

同事找我做一个视频预览复制,实现屏幕一分为二,同时显示相同画面。这里写个demo版 视频预览 界面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id

风晴 7880

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

qq_50001789的博客 1006

Android Camera NV21图像裁剪

/** * 任意裁剪YUV420SP格式,这种存储格式决定了 left, top, clipW, clipH 必须是偶数。 * 如果传进来的不是偶数,函数内部会处理成偶数,left、top会向右下或者左上偏移一个像素 * 显示的图像颜色不对,不是绿就是蓝。 * 裁剪的原理: * 1. NV21(YUV420SP)的存储格式:先逐行存储Y,再交叉存储VU,Y的大小是width*height,VU的大小是 width*height/2; * 2. 裁剪时,可以想象原始数据byte[] src是一个二

half_bottle的博客 2437

Unity必学:Protobuf-net预编译实战

本文深入解析Unity项目使用Protobuf-net Precompile的必要性。作为高效跨平台序列化方案,Protobuf-net解决了Unity工程在网络同步、存档系统中的性能瓶颈,特别是针对iOS等AOT平台的兼容问题。通过预编译模式,将运行时反射转为静态代码生成,显著提升移动端性能表现,支持协议平滑升级,已成为大厂项目的标配方案。文章从原理、实践到多平台适配,全面展示了这一"序列化发动机"如何支撑现代Unity项目的数据传输需求。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 495

Python从0到100(一):初识Python及安装Pycharm

Python从0到100(一):初识Python及安装Pycharm。Python是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户群体的编程语言。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 8万+

Android摄像头采集选Camera1还是Camera2?

Android Camera2 API控制更灵活,性能、图像处理能力优异、适配性和扩展性也好,在版本支持的前提下,一般建议采用Camera2实现摄像头采集技术诉求,以上是Camera1和Camera2技术扫盲和技术探讨,感兴趣的开发者,可以单独跟我沟通探讨。

大牛直播SDK 2039

【软考中级网络工程师】知识点之常用网络诊断和配置命令

本文聚焦软考中级网络工程师必备的网络诊断和配置命令,详细解析 ipconfig、ping、arp 等 11 类核心命令。涵盖各命令的功能、语法、常用参数及应用场景,如 ipconfig 查看配置、ping 测试连通性等。还通过图呈现命令执行逻辑与流程,助读者理解原理。最后结合软考考点回顾重点并提供真题练习,为备考和实际运维提供全面指导,是掌握网络命令的实用参考。

邓邓子的博客 1550

Android Camera2 与 Camera API技术探究和RAW数据采集

Android Camera2 API 是从 Android 5.0(Lollipop)开始引入的,相对Camera API,优势非常明显,如果需要通过Android平台采集视频数据,在设备支持的前提下,建议尽可能用Camera2做数据采集。

大牛直播SDK 3148

【LIN总线测试】——LIN主节点物理层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点物理层如何测试?

测试领域技术分享 5530

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android用live555 rtsp服务器传输camera图像

本程序的硬件编码是基于下文的示例代码修改,再加上live555和libyuv Android硬编解码接口MediaCodec使用完全解析 这篇文件写得很好,值得一看 live555和libyuv的编译可以看我前面几篇文章的介绍,编译的部分就不介绍了,主要是讲下怎么把camera图像传递给live555服务器 camera预览数据被MediaCodec编码成H264码流后,放到一个阻塞队列里...

HelloWorld 5199

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android Camera MIPI接口知识总结

Android Camera MIPI接口知识总结

汽车以太网和SOA 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android camera Hal 杂谈

camera id 的生成是更具在v4l2 camera hal 文件中遍历/dev下面video节点,并通过capture能力校验,并对同相同格式的流去重,而得到的。在camera hal 生成camera id时,会自动创建关于camera id 对应节点的v4l2 camera 和v4l2 wrapper 这两个类。由这两个类对camera的buffer轮转进行操作。

meiyoumajia的博客 505

android camera图像采集系统,(爱加密系列教程二十一)Android开发之初识Camera图像采集...

复制代码/*Android开发之初识camera图像采集北京Android俱乐部群:167839253Created on: 2011-8-24Author: blueeagleEmail: liujiaxiang@gmail.com*/下面记录一个简单的相机的制作方法。制作相机,首先需要添加照相的权限。添加方法是在AndroidManifest.xml文件中添加即可。其次:修改布局文件:如下代码...

weixin_31491381的博客 294

android摄像头图像增强,Android Camera-CameraView和CameraX使用

前面两篇介绍了Camera1和Camera2的使用,发现Camera API从1到2的变化非常大,Camera2的复杂度提升了不少,官方为了让我们更容易使用Camera,出了个一个官方的库cameraview。不过这个库已经Deprecated,官方建议使用Jetpack CameraX 替代。本篇文章就介绍下CameraView和CameraX的使用CameraViewCameraView的目的...

weixin_29182481的博客 1601
上一篇: Android Camera获取预览流
下一篇: kdump--基于kexec的崩溃存储解决方案
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值