nne*_*neo 18 android android-camera
我正在尝试用来ImageReader从相机中获取RGB图像.我在运行开发者预览版的Nexus 5上使用Android 5.0"L"的Camera2 API.
我已经SurfaceView配置了RGB图像,工作正常,我知道相机硬件产生RGB数据(因为Android上的所有色调映射和颜色增益设置都指定在RGB通道上运行).
我可以通过以下方式创建ImageReader从ImageReader获取YUV_420_888图像:
imageReader = ImageReader.newInstance(W, H, ImageFormat.YUV_420_888, 4);
Run Code Online (Sandbox Code Playgroud)
然后将YUV图像转换为RGB.然而,这引入了不希望的量化误差(因为我的应用需要RGB图像)和不必要的处理时间.
但是,当我尝试以这种方式创建图像阅读器时:
imageReader = ImageReader.newInstance(W, H, PixelFormat.RGB_888, 4);
Run Code Online (Sandbox Code Playgroud)
图像捕获失败,但出现以下异常:
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 <my code...>
Run Code Online (Sandbox Code Playgroud)
我在两条战线上感到困惑.首先,提到的输出格式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图像呢?我做错了什么?
小智 -1
错误异常是因为 与
PixelFormat.RGB_888不一样ImageFormat.RGB_888。
PixelFormat.RGB_888就相当于ImageFormat.RGB_565不是你用的那个ImageFormat.RGB_888。
你必须使用ImageFormat.RGB_888而不是PixelFormat.RGB_888像这样:
imageReader = ImageReader.newInstance(W, H, ImageFormat.RGB_565, 4);
Run Code Online (Sandbox Code Playgroud)
这允许使用从相机捕获RGBImageReader。
| 归档时间: |
|
| 查看次数: |
4473 次 |
| 最近记录: |