是否可以使用相机 2 API 捕获没有纹理视图的图像?
Posted
技术标签:
【中文标题】是否可以使用相机 2 API 捕获没有纹理视图的图像?【英文标题】:Is it possible to capture the images without texture view using the camera 2 API? 【发布时间】:2019-07-08 02:50:00 【问题描述】:在我的情况下,我不需要向用户显示预览并且想从服务中捕获图像,为此我使用 ImageFormat .JPG
来捕获图像,但输出图像真的很暗。我在 *** 中尝试过这个link,但它不起作用。
val streamConfigurationMap =
mCameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) // Available stream configuration.
mPreviewSize = streamConfigurationMap!!.getOutputSizes(ImageFormat.JPEG)[0]
mCameraID = cameraId
mImageReader =
ImageReader.newInstance(mPreviewSize!!.width, mPreviewSize!!.height, ImageFormat.JPEG, 1)
mImageReader!!.setOnImageAvailableListener(onImageAvailable, mBackgroundHandler)
如果我使用虚拟表面纹理视图低于错误,在应用启动几秒钟后
E/BufferQueueProducer: [SurfaceTexture-1-20857-1] cancelBuffer: BufferQueue 已被放弃
【问题讨论】:
你有什么理由用 Java 标签标记 Kotlin 问题? 谢谢,我忘了添加 Kotlin,现在更新了。有些开发者可能已经使用 java 来解决这个问题,所以我也添加了 java。 【参考方案1】:首先,您不必使用 TextureView。您的预览真的很暗的原因可能是因为您的 CaptureRequest.builder。例如,您想控制自动曝光,我稍后会在下面解释。
首先,当你设置你的表面时,你应该这样设置它:
builder.addTarget(mImageReader.getSurface());
现在谈谈亮度问题,你可以这样控制你的 AE:
builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());
getRange() 在哪里:
private Range<Integer> getRange()
CameraCharacteristics chars = null;
try
CameraManager manager = (CameraManager) ((Activity)getContext()).getSystemService(Context.CAMERA_SERVICE);
chars = manager.getCameraCharacteristics(mCameraId);
Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
Range<Integer> result = null;
for (Range<Integer> range : ranges)
int upper = range.getUpper();
// 10 - min range upper for my needs
if (upper >= 10)
if (result == null || upper < result.getUpper().intValue())
result = range;
if (result == null)
result = ranges[0];
return result;
catch (CameraAccessException e)
e.printStackTrace();
return null;
mImageReader = ImageReader.newInstance(hardcoded_width, hardcoded_height, ImageFormat.YUV_420_888, 2);
mImageReader.setOnImageAvailableListener(mVideoCapture, mBackgroundHandler);
如果您想了解更多关于自定义亮度等的信息,Check this out
【讨论】:
以上是关于是否可以使用相机 2 API 捕获没有纹理视图的图像?的主要内容,如果未能解决你的问题,请参考以下文章