有人可能我做错了…我想用SurfaceView捕获我有预览屏幕的图像.我能够在表面视图上显示预览.
这是我捕获图像的代码
if (mCameraSession == null && mCameraDevice == null) return; ImageReader reader = ImageReader.newInstance(mTexturePreviewSize.getWidth(),mTexturePreviewSize.getHeight(),ImageFormat.JPEG,1); reader.setonImageAvailableListener(imageAvailableListener,mBackgroundHandler); Surface surface = reader.getSurface(); try { CaptureRequest.Builder requestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); requestBuilder.addTarget(surface); mCameraSession.capture(requestBuilder.build(),sessionCaptureListener,null);
以下是我收到的错误消息.
java.lang.IllegalArgumentException: Bad argument passed to camera service at android.hardware.camera2.utils.CamerabinderDecorator.throwOnError(CamerabinderDecorator.java:114) at android.hardware.camera2.utils.CamerabinderDecorator$CamerabinderDecoratorListener.onAfterInvocation(CamerabinderDecorator.java:73) at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:81) at java.lang.reflect.Proxy.invoke(Proxy.java:397) at $Proxy2.submitRequestList(UnkNown Source) at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest(CameraDeviceImpl.java:617) at android.hardware.camera2.impl.CameraDeviceImpl.capture(CameraDeviceImpl.java:503) at android.hardware.camera2.impl.CameraCaptureSessionImpl.capture(CameraCaptureSessionImpl.java:161) at Control.CameraApi21Plus.captureSinglePhoto(CameraApi21Plus.java:171) at com.CameraActivity$2.onClick(CameraActivity.java:108)
捕获单个照片功能:
public void captureSinglePhoto() { if (mCameraSession == null && mCameraDevice == null) return; ImageReader reader = ImageReader.newInstance(mTexturePreviewSize.getWidth(),mBackgroundHandler); Surface surface = reader.getSurface(); try { CaptureRequest.Builder requestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); requestBuilder.addTarget(surface); mCameraSession.stopRepeating(); mCameraSession.capture(requestBuilder.build(),null); } catch (CameraAccessException e) { e.printstacktrace(); } } private ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Image img = reader.acquireLatestimage(); } }; private CameraCaptureSession.CaptureCallback sessionCaptureListener = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session,CaptureRequest request,TotalCaptureResult result) { //super.onCaptureCompleted(session,request,result); } };
解决方法
您只能捕获为会话配置的曲面,因此您应该在创建会话之前准备曲面.
在官方文件中:
IllegalArgumentException if the request targets no Surfaces or
Surfaces that are not configured as outputs for this session; …
就像那里一样,您需要在创建会话时准备好表面mImageReader.getSurface()
mCameraDevice.createCaptureSession(Arrays.asList(surface,mImageReader.getSurface()),new CameraCaptureSession.StateCallback() { ... },null);
官方样本:
原文地址:https://www.jb51.cc/android/310077.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。