问题标签 [android-camera2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 最小未排队缓冲区计数超过 camera2
我有一个 Android 应用程序,它可以在没有预览表面的情况下拍照。我已经使用 Lollipop 的新 camera2 - api 21 实现了这一点
代码是这样的:
我已经在带有 Android 6 的 nexus 5x 上对此进行了测试,并且可以正常工作。previews 设置为 20 - 您需要捕获更多图像才能使相机适应光线。
我已经用 Galaxy s5 - Android 5 测试了这段代码,但它不起作用。我收到此错误:超出最小未排队缓冲区计数
即使我将预览设置为 0,我也会收到相同的错误。
我发现了一些有关“超出最小未排队缓冲区计数”错误的主题,但所有这些主题都与不推荐使用的相机类有关。你知道我是否可以在 Android 5 上解决这个问题吗?
谢谢
android - 使用 android.hardware.Camera2 进行人脸检测
我正在使用https://github.com/googlesamples/android-Camera2Basic。
我将人脸识别模式设置为 FULL。
CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL);
我的捕获回调:
Output: faces : 0 , mode : 2
人脸长度始终为 0。看起来它无法正确识别人脸,或者我错过了一些东西。
android - 拍摄的 Camera2 API 图片不会在图库应用中显示
我有一个相机项目,我camera2 API
特别使用这个链接
https://github.com/googlesamples/android-Camera2Basic
例如,我可以将拍摄的照片保存到我的文件管理器中DCIM/camera
,但是当我打开我的画廊时,它不会显示我的最后一张照片。
谁能帮我?
还有一个问题,我想让我的相机可以是一个列表:例如,当我打开“LINE”并想用相机拍照时,我希望我的相机出现并且可以选择。
这是我尝试将图片保存到自定义路径的示例代码:
android - Android中某些相机分辨率的不同捕获输出大小
我正在使用 Android Camera2 API 开发一个自定义相机应用程序,您可以在其中切换手机中可用的不同相机和视频分辨率。它还提供了拍摄平方 1:1 照片的可能性。为了拍摄方形照片,我拍摄了一张普通的 4:3 照片,然后对其进行裁剪以保持 1:1。(所以 4032x3024 将是 3024x3024)。
在某些分辨率下拍摄 1:1 图片时,我注意到一个问题,输出被略微裁剪(缩放)。这是用两种不同分辨率拍摄的同一张照片的结果:
我的 Nexus 5X 在 4:3 上支持 12MP、8MP、5MP 和 2MP。当我使用大于 5MP 的任何分辨率时会发生此问题。
我用来裁剪图像的方法如下:
cropSquareImageByteArray 方法:
我猜裁剪的原因是 16:9 容器中的 4:3 图像。因为我注意到打电话的时候
生成的位图输出的尺寸在 2MP 中为 1280x960 (4:3),在 5MP 中为 1600x1200 (4:3),但更大的分辨率为 1920x1080 (16:9),因此 4:3 图像调整为 16:9位图,可能会导致裁剪。
我试图弄清楚如何解决这个问题。我还检查了这篇文章Android 5.0 Wrong crop regions on preview surface 并捕获了静止图像,但在那里没有找到解决方案。
*编辑:我的 ImageReader 配置如下:
的值pictureSizeValue
是我想要的输出。所以对于一个正方形的图像,它类似于 3024x3024。
android - 如何在 Android 中使用 Camera2 API 以编程方式拍摄照片
我想在使用 camera2 API 录制视频时捕获图像。
我试图将它们组合成一个应用程序。但在很多事情上感到困惑。喜欢
- CameraDevice 是单一的,它表示连接到 Android 设备的单个相机。
- 请求中需要不同的模板。对于图像:
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
和视频mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
- 在 createCaptureSession 方法中,需要 ImageReader 的表面,而对于视频,则需要 MediaRecorder。
图像和视频的 createCaptureSession 方法中都需要 CameraCaptureSession.StateCallback。
camera2 API 是新的。所以谷歌上没有更多的例子。
有人对此有任何想法吗?喜欢如何在 android 中录制时拍摄照片?
android - 无法解析方法 newinstance()
我正在尝试了解如何使用 Api.camera2,并且我正在关注此链接中的谷歌示例 https://github.com/googlesamples/android-Camera2Basic
当我打开项目时它可以工作,但是当我尝试重建应用程序以查看代码各部分的效果时,出现以下错误无法解析方法 newinstance() 它是主要的 java 类
我尝试从原始项目中导出项目设置,但它不起作用
android - 三星 Galaxy S7 (Camera2) 上的 YUV_420_888 解读
考虑到以下逻辑(据我了解),我编写了从 YUV_420_888 到 Bitmap 的转换:
总结该方法:内核的坐标 x 和 y 与 Y 平面(2d 分配)的非填充部分的 x 和 y 以及输出位图的 x 和 y 一致。然而,U 平面和 V 平面具有与 Y 平面不同的结构,因为它们使用 1 个字节来覆盖 4 个像素,此外,它们的 PixelStride 可能大于 1,此外它们可能也有一个可以与 Y 平面不同的填充。因此,为了让内核有效地访问 U 和 V,我将它们放入一维分配中并创建了一个索引“uvIndex”,它给出了对应的 U 和 V 在该一维分配中的位置,对于给定的 ( x,y) 在(未填充的)Y 平面(以及输出位图)中的坐标。
为了保持 rs-Kernel 精简,我通过 LaunchOptions 限制 x 范围,排除了 yPlane 中的填充区域(这反映了 y 平面的 RowStride,因此可以在内核中忽略)。所以我们只需要考虑 uvIndex 中的 uvPixelStride 和 uvRowStride,即用于访问 u 值和 v 值的索引。
这是我的代码:
渲染脚本内核,命名为 yuv420888.rs
Java端:
在 Nexus 7 (API 22) 上进行测试会返回漂亮的彩色位图。然而,该设备具有微不足道的像素步幅 (=1) 并且没有填充(即行步幅=宽度)。在全新的三星 S7 (API 23) 上进行测试,我得到的图片颜色不正确——除了绿色。但图片并没有显示出对绿色的普遍偏见,只是似乎没有正确再现非绿色。请注意,S7 应用 u/v 像素步幅为 2,并且没有填充。
由于最关键的代码行在 rs 代码中,因此我认为 u/v 平面的访问 uint uvIndex= (...) 可能存在问题,可能是此处对像素步幅的考虑不正确。有没有人看到解决方案?谢谢。
更新:我检查了一切,我很确定有关 y,u,v 访问的代码是正确的。所以问题一定出在 u 和 v 值本身。非绿色有紫色的倾斜,从 u,v 值来看,它们似乎在大约 110-150 的相当窄的范围内。我们真的有可能需要处理特定于设备的 YUV -> RBG 转换......?!我错过了什么吗?
更新 2:已更正代码,现在可以使用,感谢 Eddy 的反馈。
android - Android:Camera Crop Intent Lollipop 及更高版本提供吐司消息,因为此图像不支持编辑
对于从 Lollipop 及以上版本的 android 手机拍摄的裁剪图像一个应该使用文件提供程序这里是我的代码。
现在,当它成功返回 onActivityResult 时,我收到一条错误消息,因为无法编辑此图像
android - Android N 开发者预览版:相机支持需要第三个价值
我有一个 Nexus 6P。我正在调查为什么OpenCamera停止在 Android N Developer Preview 上工作(我不是开发人员,只是一个用户)。我发现以下可能导致问题的代码:CameraControllerManager2.java :62
我创建了一个新的 Android 项目,并添加了以下功能:
调用test(0)
,我设备上的控制台输出为:
当我查找support
( docs ) 的可能值时,它们必须是0、1 或 2,但是如何support
取 3 的值?它应该是位掩码还是发生了更糟糕的事情?