android获取图片的rgb,使用ImageReader读取RGB图像
我正在尝试使用ImageReader从相机中获取RGB图像。 我在运行开发者预览版的Nexus 5上使用Android 5.0“L”的Camera2 API。
我已经为RGB图像配置了SurfaceView ,它工作正常,我知道相机硬件会生成RGB数据(因为Android上的所有色调映射和颜色增益设置都指定为在RGB通道上运行)。
我可以通过以下方式创建ImageReader从ImageReader获取YUV_420_888图像:
imageReader = ImageReader.newInstance(W, H, ImageFormat.YUV_420_888, 4);
然后将YUV图像转换为RGB。 然而,这引入了不希望的量化误差(因为我的应用需要RGB图像)和不必要的处理时间。
但是,当我尝试以这种方式创建图像阅读器时:
imageReader = ImageReader.newInstance(W, H, PixelFormat.RGB_888, 4);
图像捕获失败,但出现以下exception:
java.lang.UnsupportedOperationException: The producer output buffer format 0x22 doesn't match the ImageReader's configured buffer format 0x3. at android.media.ImageReader.nativeImageSetup(Native Method) at android.media.ImageReader.acquireNextSurfaceImage(ImageReader.java:293) at android.media.ImageReader.acquireNextImage(ImageReader.java:339) at android.media.ImageReader.acquireLatestImage(ImageReader.java:243) at
我在两条战线上感到困惑。 首先,提到的输出格式0x22不在PixelFormat或ImageFormat中。 它似乎是某种未记录的原始模式,但我不能使用ImageReader.newInstance(W, H, 0x22, 4)来捕获它(我得到java.lang.UnsupportedOperationException: Invalid format specified 34 )。 我希望以原始格式捕获,但我不能说服ImageFormat接受它(并且其他原始格式ImageFormat.RAW_SENSOR由于某种原因非常慢)。
其次, SurfaceView已经很乐意使用RGB_888图像(据我所知),并将它们直接放在屏幕上。 那么为什么ImageReader不能正确接受RGB图像呢? 我做错了什么?
试试这个从图像中获取RGB,它对我有用:
private byte[] rgbValuesFromBitmap(Bitmap bitmap) { ColorMatrix colorMatrix = new ColorMatrix(); ColorFilter colorFilter = new ColorMatrixColorFilter( colorMatrix); Bitmap argbBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(argbBitmap); Paint paint = new Paint(); paint.setColorFilter(colorFilter); canvas.drawBitmap(bitmap, 0, 0, paint); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int componentsPerPixel = 3; int totalPixels = width * height; int totalBytes = totalPixels * componentsPerPixel; byte[] rgbValues = new byte[totalBytes]; @ColorInt int[] argbPixels = new int[totalPixels]; argbBitmap.getPixels(argbPixels, 0, width, 0, 0, width, height); for (int i = 0; i < totalPixels; i++) { @ColorInt int argbPixel = argbPixels[i]; int red = Color.red(argbPixel); int green = Color.green(argbPixel); int blue = Color.blue(argbPixel); rgbValues[i * componentsPerPixel + 0] = (byte) red; rgbValues[i * componentsPerPixel + 1] = (byte) green; rgbValues[i * componentsPerPixel + 2] = (byte) blue; } return rgbValues; }
谢谢。
android获取图片的rgb,使用ImageReader读取RGB图像相关推荐
- android获取图片缩略图,Android系获取图片和视频的缩略图
获取手机里视频缩略图: public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) { Bitmap bitmap = nul ...
- php拍照从手机相册中选择,Android获取图片:拍照和从相册中选择
概述 在Android开发中获取图片主要包括如下两种方式: 打开相机拍照 从图库中选择图片 一.打开相机拍照 打开相机拍照主要包括如下几个部分: 权限申请 打开摄像头 拍照后传回数据处理 1. 权限申 ...
- Android 获取图片尺寸大小的方法
一.获取图片大小有两张情况代码如下: package com.jhq.picdemo;import android.Manifest; import android.content.pm.Packag ...
- Android 获取图片尺寸大小
文章目录 1.简介 2.功能实现 1)添加sd 卡读写权限 2).功能代码 3.log显示 4.不同位置获取图片的路径的转化 Bitmap 1) drawable 里面 2)assets 文件 3)S ...
- android 获取图片
Android获取手机或者内存卡里面的图片有两种方式 1.这是通过一种action Intent intent=new Intent();intent.setAction(Intent.ACTION_ ...
- android 图片拍照,Android获取图片拍照时间
为什么写这篇文章是因为今早有个需求需要获取图片拍照时的时间进行一些处理,有些方法参数名忘记了,所以谷歌百度了一下,Android 图片 时间,Android 图片 拍照 时间,这几个关键字居然无法搜索 ...
- android 获取图片上某一个文字位置_android 获取手机中的所有图片或某一目录下的图片方法...
获取手机中的所有图片,并过滤获取某一目录下的图片.(注释掉的代码可以按照目录分组) private void getAllPhotoInfo() { new Thread(new Runnable() ...
- Android 获取图片颜色
需求:根据图片的颜色显示不同的背景颜色 解决方法1.使用谷歌官方的api中提供的方法Palette来实现. 缺点:不能保证颜色获取的到:也有可能获取部分颜色并不是想要的效果 2.比较笨的方式:遍历整张 ...
- android 获取图片的真实地址
在开发中我们需要获取手机上的图片信息, 系统提供的有时候是一个可以访问展示的uri地址,但是当我们需要对图片进行一定的操作时比如 删除.这个时候去删除是无法操作的,因为系统提供的地址并不是对应图片在手 ...
最新文章
- 国产芯片WiFi物联网智能插座—电耗采集功能设计
- 梦到计算机坏了无法算账,梦见算账,做梦梦见算账是什么征兆?
- Silverlight 里如何实现隐式样式,ImplicitStyleManager 的实现思想
- 微服务模块综合管理(模块视图管理,自动化热部署,前端资源实时刷新......)
- sqrt numpy_NumPy sqrt()–矩阵元素的平方根
- 【C/C++】sizeof(结构体)的计算
- 常见的windows 命令大全
- tomcat 8.0下载
- postman测试JSON参数接口
- 马士兵oracle_,马士兵oracle视频教程学习笔记个人整理
- android中如何取得docx文件,如何显示或读取DOCX文件(how to Show or Read docx file)
- 2021-07-24 centos基础设置
- The Multiversity 的 “非常重要的生命体” NFT 推出
- 第5节 服务器系统简介及用户和组管理
- 机械原理习题-(附答案)
- Win10提示无法更新正在撤销安装怎么解决
- Android Telephony分析(一) ---- Phone详解
- js贝塞尔曲线cubic-bezier 模拟实现附UnitBezier.h
- 不小心点了计算机一键还原怎么操作,怎么一键还原,详细教您怎样还原电脑系统...
- Lua:深拷贝与浅拷贝,强引用与弱引用