我正在使用Camera2 API创建一个可以扫描条形码的相机组件,并且能够在扫描过程中拍照。它有点工作,但预览是闪烁的 - 看起来像以前的帧,有时绿色帧正在中断实时预览。
我的代码基于Google的Camera2Basic。我只是再添加一个ImageReader
及其表面作为CaptureRequest.Builder
的新输出和目标。其中一个读者使用JPEG和另一个YUV。当我从输出中删除JPEG阅读器的表面时,闪烁消失(不将其传递到createCaptureSession
)。
有很多代码,所以我创建了一个要点:click - 试图摆脱完全不相关的代码。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果有人在努力解决这个问题。 docs中有表格显示如果指定了3个目标,YUV ImageReader可以使用最大尺寸等于预览尺寸的图像(最大1920x1080)。减少这个有帮助!
答案 2 :(得分:0)
是的,你可以。假设您配置预览以向ImageReader提供YUV帧(因为您也可以将JPEG放在那里,请检查它),如下所示:
mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 1);
您可以在OnImageAvailable侦听器中处理这些帧:
@Override
public void onImageAvailable(ImageReader reader) {
Image mImage = reader.acquireNextImage();
if (mImage == null) {
return;
}
try {
// Do some custom processing like YUV to RGB conversion, cropping, etc.
mFrameProcessor.setNextFrame(mImage));
mImage.close();
} catch (IllegalStateException e) {
Log.e("TAG", e.getMessage());
}