将 CameraX 捕获的 ImageProxy 转换为位图

2024-03-11

我正在使用 CameraX,并且很难将捕获的 ImageProxy 转换为位图。经过搜索和尝试,我制定了解决方案。后来我发现这不是最佳的,所以我改变了设计。这迫使我放弃了工作时间。

由于我(或其他人)将来可能需要它,我决定在这里发布一个问题并发布并回答它以供参考和审查。如果您有更好的答案,请随时添加。

相关代码是:

class ImagePickerActivity : AppCompatActivity() {
    private var width = 325
    private var height = 205

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image_picker)

        view_finder.post { startCamera() }
    }

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun startCamera() {
        // Create configuration object for the viewfinder use case
        val previewConfig = PreviewConfig.Builder().apply {
            setTargetAspectRatio(Rational(1, 1))
            //setTargetResolution(Size(width, height))
            setLensFacing(CameraX.LensFacing.BACK)
            setTargetAspectRatio(Rational(width, height))
        }.build()

        }

        // Create configuration object for the image capture use case
        val imageCaptureConfig = ImageCaptureConfig.Builder()
            .apply {
                setTargetAspectRatio(Rational(1, 1))
                // We don't set a resolution for image capture instead, we
                // select a capture mode which will infer the appropriate
                // resolution based on aspect ration and requested mode
                setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
            }.build()

        // Build the image capture use case and attach button click listener
        val imageCapture = ImageCapture(imageCaptureConfig)
        capture_button.setOnClickListener {

            imageCapture.takePicture(object : ImageCapture.OnImageCapturedListener() {
                override fun onCaptureSuccess(image: ImageProxy?, rotationDegrees: Int) {
                        //How do I get the bitmap here?
                        //imageView.setImageBitmap(someBitmap)
                }

                override fun onError(useCaseError: ImageCapture.UseCaseError?, message: String?, cause: Throwable?) {
                    val msg = "Photo capture failed: $message"
                    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
                    Log.e(localClassName, msg)
                    cause?.printStackTrace()
                }
            })
        }
        CameraX.bindToLifecycle(this, preview, imageCapture)
    }

}

所以解决方案是添加扩展方法Image这是代码

class ImagePickerActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image_picker)
    }

    private fun startCamera() {

        val imageCapture = ImageCapture(imageCaptureConfig)
        capture_button.setOnClickListener {

            imageCapture.takePicture(object : ImageCapture.OnImageCapturedListener() {
                override fun onCaptureSuccess(image: ImageProxy?, rotationDegrees: Int) {
                    imageView.setImageBitmap(image.image?.toBitmap())
                }
                //.....
            })
        }
    }

}

fun Image.toBitmap(): Bitmap {
    val buffer = planes[0].buffer
    buffer.rewind()
    val bytes = ByteArray(buffer.capacity())
    buffer.get(bytes)
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CameraX 捕获的 ImageProxy 转换为位图 的相关文章

  • 代码如何从 Android Gallery 加载图像

    我有用于从图库加载图像的代码 但我真的不明白它是如何工作的 这是代码 Override protected void onActivityResult int requestCode int resultCode Intent data s
  • 如何在flutter android插件包中处理android生命周期

    我需要知道 android 插件包中 flutter 应用程序视图的当前状态 现在 我观察颤振视图中的状态https docs flutter io flutter widgets WidgetsBindingObserver class
  • 如何设计Android建筑物室内地图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想设计一个 Android 应用程序 它可以帮助学生和其他人在特定建筑物 一层 中导航 显示前往教室的步行方向 我需要帮助 这是您通
  • Android Volley:意外响应代码 405

    我的 Android Volley JsonObjectRequest 遇到 onErrorResponse 并出现以下问题 BasicNetwork performRequest Unexpected response code 405
  • 将 React Native 应用程序嵌入到现有的 ios/android 应用程序中

    我需要知道是否可以在现有的 ios android 应用程序中 嵌入 一个 React Native 应用程序 而不共享 React Native 应用程序代码 我们目前有一个 React Native 应用程序 它使用一些插件依赖项 并被
  • 使用 ViewPager 从 Activity 到 Fragment 的通信

    我有一个 Activity 和两个 Fragmentstablayout含有一个viewpager 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信 但我怎样才能以另一种方式沟通从活动到片段 如果活动中发生了一些事情 外部事件 我想
  • Android 操作栏 SearchView 作为自动完成功能?

    我在操作栏中使用 SearchView 我想在搜索视图上使用自动完成功能来从数据库中获取结果 这可能吗 或者我是否需要使用自定义文本框 然后添加自动完成功能 所以我只需要对 v7 版本执行此操作 并沮丧地发现我不能简单地使用 ArrayAd
  • Ionic 4:硬件后退按钮重新加载应用程序

    从事项目并陷入问题 硬件后退按钮重新加载应用程序 我在此应用程序中使用 Angular Router 我退出应用程序的代码 ionViewDidEnter this subscription this platform backButton
  • 彩信数据总是错误

    我正在从 Galaxy S6 读取短信和彩信数据 所有 SMS 消息都有一个date像这样的字段1456252633000 该数字是 unix 时间戳 1000 我发送 未收到 的彩信具有如下日期字段 1440628863时间戳是正确的 u
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 如何以编程方式关闭画中画

    我在使用画中画模式时遇到了这个问题 当从 PIP 本身以外的其他位置再次打开 Activity 时 我想关闭 PIP 画中画 不是来自关闭按钮 我想要与 youtube 相同的场景 即当用户单击 PIP 画中画 时 它会打开相同的活动 但是
  • 在 Unity 中构建 apk 应用程序时包含文件

    在unity中构建apk文件时如何将文件和文件夹添加到apk文件中 我需要的是在Android上安装应用程序后 在应用程序的父目录 android data com company product files 中存在一些文件和文件夹 这是我
  • Android 中的 BLE Gatt onConnectionStateChanged 失败,状态为 257

    我正在开发一个同时连接到多个BLE设备的Android应用程序 之后我从这些设备永久读取特征 但过了一会儿 我在onConnectionStateChanged 函数中得到状态257 android文档没有解释错误的原因是什么 或者如何修复
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • Android 导航 DeepLinks - 如何区分使用导航操作进行导航与深层链接

    我有导航操作和深层链接 根据您导航的位置 将您带到某个片段 我想确定是使用了深层链接还是仅使用了导航操作 这正是KEY DEEP LINK INTENT https developer android com reference andro
  • Meteor:即使设置了 ANDROID_HOME 也未设置

    操作系统 Ubuntu 14 04 框架 流星1 1 0 2 应用名称 Songofy 这是输出meteor install sdk android meteor install sdk android Found Android bund
  • 使用Gradle组装时如何更改Android应用程序包名称?

    是否可以使用 Gradle 更改 Android 应用程序的包名称 我需要编译同一应用程序的两个副本 并具有唯一的包名称 这样我就可以向市场发布两次 作为使用的更简单的替代方案产品口味 正如伊森的回答 https stackoverflow
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe
  • 无法 ACTION_VIEW 外部存储上的文件

    我的 Android 手机的外部存储中有一个文件 在本例中是模拟的 知道通往它的路径和 或拥有File代表它的对象 我如何使用Intent在适当的应用程序中打开它 我尝试的第一件事是 startActivity new Intent Int

随机推荐

  • 独立 Java SE 应用程序的项目目录结构是什么?

    独立 Java SE 基于命令行 应用程序的标准项目目录结构是什么 src文件夹将包含我的所有 java正确组织的包中的文件 除此之外我还有bin文件夹将包含我的 class files 我的项目中有属性文件和 XML 配置文件 我应该将它
  • 使用 .htaccess 通过 index.php 重新路由除一组特定请求之外的所有请求

    所以我只是继承了一个网站 我想做的第一件事是构建一个漂亮的小标准 简单易用的 CMS 允许使用任何 URL 创建页面 例如 whatever html 因此 如果用户点击 example com whatever html 它应该获取wha
  • Android Webview - 当用户滚动时检测标题名称

    我有这种模式的 html 文件 a a h2 First Heading h2 a Some Text goes here a br br a a h2 Second Heading h2 Some Text goes here br br
  • 如何在 C++ 中将成员变量指针转换为泛型类型

    我的应用程序中有与此类似的代码 class A public int b class C public int d void DoThings void arg1 MYSTERYTYPE arg2 A obj a C obj c DoThi
  • 如何从 R 调用 Fortran 程序

    我对 Fortran 完全陌生 但对 R 很熟悉 我得到了一个巨大的 Fortran 程序 其中包含大约 30 个子例程和大约 15 个函数以及许多其他代码行 有人告诉我需要从R中调用Fortran程序 我一直在网上寻找方法 在 R 和 F
  • 如何使用 SBCL 正确保存 Common Lisp 图像?

    如果我想创建我的程序的 Lisp 映像 我该如何正确地做到这一点 有什么先决条件吗 它与 QUICKLISP 配合得很好吗 现在 如果我启动 SBCL 仅预加载 QUICKLISP 并保存图像 save lisp and die core
  • 如何用Java解析ini文件? [复制]

    这个问题在这里已经有答案了 这是一个示例 ini 文件 link 1 alias My Link 1 link https www yandex ru link 2 alias My Link 2 link https mail ru li
  • Python中的变量插值[重复]

    这个问题在这里已经有答案了 可能的重复 在Python中打印变量的非Pythonic方式 https stackoverflow com questions 3534803 unpythonic way of printing variab
  • kafka 是否有默认的 Web UI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有几个关于卡夫卡的问题 1 Kafka 有默认的 Web UI 吗 2 我们如何优雅地关闭独立的kafka服务器 kafka控制台
  • 如何在悬停图像时向下滚动?

    我想当悬停图像时 它会向下滚动到图像的末尾 我有两个问题 当用户将鼠标悬停在图像上时如何滚动到图像的末尾 目前 我开始将鼠标悬停在图像上 它没有滚动到图像的末尾 如何控制鼠标悬停在图像上时滚动的速度 My code body margin
  • 用户未定义:Nodejs/Express + Passport

    我的问题非常类似于这个问题 https stackoverflow com questions 16434893 node express passport req user undefined然而答案似乎对我不起作用 我看到用户也从未选择
  • ASC2.0 和帧元标记

    显然 新的 ActionScript Compiler 2 0 不再支持旧的 frame 元标记 该元标记允许您将预加载器添加到纯 ActionScript 项目中 我已经验证了这个 IntelliJ 切换 首选 ActionScript
  • Eclipse DDMS 窗口不显示任何内容 +android

    在模拟器中运行我的应用程序时 我的 Eclipse DDms 窗口未显示任何内容 空 logcat 空文件浏览 等 有时 如果我重新启动 Eclipse 它会起作用 但并非总是如此 为什么要这样挂 即使我多次遇到同样的问题 我用来做的是转到
  • Blazor Timer 调用异步 API 任务来更新 UI

    我正在 Blazor 服务器端页面中设置计时器 目标是每 x 秒调用一次 API 并根据返回值更新 UI 我得到这个代码 private string Time get set protected override void OnIniti
  • Firefox 在 FF2 中加载 Google Analytics 时出现“加载脚本错误”

    我正在开发的项目使用 window onerror 事件处理程序来报告用户问题 我注意到有一个用户似乎无法加载 Google Analytics 脚本 我们的网站没有看到很多流量 所以我不确定这种情况有多普遍 但到目前为止 它似乎只影响了一
  • 如何从 Spark 堆中删除/处置广播变量?

    要广播变量以使变量在集群上每个节点的内存中只出现一次 可以执行以下操作 val myVarBroadcasted sc broadcast myVar 然后在 RDD 转换中检索它 如下所示 myRdd map blar gt val my
  • Javascript中的累积分布函数

    我正在寻找一种在 Javascript 中计算累积分布函数的方法 有没有实现这个的类 您有想法让它发挥作用吗 它不需要 100 准确 但我需要对其值有一个很好的了解 http en wikipedia org wiki Cumulative
  • 如何将视图放入 Bundle

    我将动态创建的 EditText 添加到布局 onClick 按钮方法 当我旋转屏幕时 添加的编辑文本消失 如何将它们添加到捆绑包中以将它们放入 onSavedInstanceState 方法中 或者 还有其他方法可以做到这一点吗 我知道我
  • 使用 dplyr 中转换后的数据替换 SQL 数据库表

    我经常在 dplyr 中转换数据时替换数据 尤其是在处理大型数据集时 当我使用 SQL 支持的数据集时 我不知道如何优雅地做到这一点 至少不是使用 SQLite 我在 dplyr DB vignettes 或 SO 中找不到任何关于这个目标
  • 将 CameraX 捕获的 ImageProxy 转换为位图

    我正在使用 CameraX 并且很难将捕获的 ImageProxy 转换为位图 经过搜索和尝试 我制定了解决方案 后来我发现这不是最佳的 所以我改变了设计 这迫使我放弃了工作时间 由于我 或其他人 将来可能需要它 我决定在这里发布一个问题并