Có thể ai đó đã làm sai ... Tôi muốn chụp ảnh mà tôi có màn hình xem trước bằng SurfaceView. Tôi có thể hiển thị bản xem trước ở chế độ xem bề mặt.Android: Camera2 Đối số sai được chuyển đến dịch vụ camera
Đây là mã của tôi để chụp ảnh
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);
Dưới đây là thông báo lỗi tôi nhận được.
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)
Chụp một chức năng bức ảnh duy nhất:
public void captureSinglePhoto() {
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.stopRepeating();
mCameraSession.capture(requestBuilder.build(), sessionCaptureListener, 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);
}
};
tôi muốn đưa ra một đánh dấu với Diyoda nhưng cái của bạn trực tiếp hơn. Tôi nhìn vào mẫu, có quá nhiều thứ trong đó AF, AE tôi không có ý tưởng làm thế nào nó hoạt động trong máy ảnh. Tôi không biết nhiều về máy ảnh. – LittleFunny
Có, luồng máy ảnh thực sự khá phức tạp. Nếu bạn chỉ muốn có ảnh, bạn nên sử dụng Camera Intent, http://developer.android.com/training/camera/photobasics.html, chúc may mắn –
Và, TBH, nếu bạn hiểu chi tiết bạn sẽ biết rằng Diyoda tuyên bố trên 'bạn đang gọi một phiên khép kín' thực sự không phải là trường hợp, nghĩa là bạn có thể xem bản xem trước của mình. –