【发布时间】:2016-07-25 00:03:10
【问题描述】:
我正在使用 camera2 api 捕获图像并在缩略图中显示。在所有设备上一切正常,但是当使用Micromax Q382 设备时,然后在缩略图预览中显示黑色图像。我遇到了以下问题
Unable to acquire a lockedBuffer, very likely client tries to lock more than maxImages buffers
我正在使用下面的代码来捕获侦听器回调
final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback()
{
@Override
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
TotalCaptureResult result)
{
super.onCaptureCompleted(session, request, result);
startPreview();
}
};
mCameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback()
{
@Override
public void onConfigured(CameraCaptureSession session)
{
try {
session.capture(captureBuilder.build(), captureListener, backgroudHandler);
} catch (CameraAccessException e) {
AppLogger.exception(myContext, getClass().getSimpleName(), e);
// e.printStackTrace();
}
}
@Override
public void onConfigureFailed(CameraCaptureSession session)
{
}
}, backgroudHandler);
} catch (CameraAccessException e) {
AppLogger.exception(myContext, getClass().getSimpleName(), e);
// e.printStackTrace();
}
以下代码用于 OnImageAvailableListener
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener()
{
@Override
public void onImageAvailable(ImageReader reader)
{
Image image = null;
try {
image = reader.acquireLatestImage();
// ByteBuffer buffer = image.getPlanes()[0].getBuffer();
// final byte[] bytes = new byte[buffer.capacity()];
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
final byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
save(bytes);
buffer.clear();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
mThumbnail.setVisibility(View.VISIBLE);
filePathLabel.setVisibility(View.VISIBLE);
filePathValue.setText(file.getAbsolutePath());
Bitmap bmp =
UtilityMethods.getScaledBitmap(CameraImageTestActivityLoliipop.this, bytes);
mThumbnail.setImageBitmap(bmp);
}
});
} catch (FileNotFoundException e) {
AppLogger.exception(myContext, getClass().getSimpleName(), e);
// e.printStackTrace();
} catch (IOException e) {
AppLogger.exception(myContext, getClass().getSimpleName(), e);
// e.printStackTrace();
} finally {
if (image != null) {
image.close();
}
}
}
【问题讨论】:
-
请同时提供错误前的日志输出,以及整个异常堆栈跟踪,以查看错误是在哪里产生的以及在什么情况下产生的。
-
它没有抛出任何异常,但我发现当我捕捉图片时,最后移动相机预览一秒钟变黑,这意味着我正在捕捉的照片是黑色的。我认为这应该是问题所在。但我试图改变财产,但还没有得到任何解决方案......
-
你解决过这个问题吗?
-
你在初始化
ImageReader时设置了什么ImageFormat? -
@tropicalfish ImageFormat.JPEG
标签: android image-processing camera android-camera