我正在使用 android ndk 将相机预览渲染到 ui 中。这是通过一些本机 C++ 调用完成的。我一启动应用程序就已经看到了实时预览。
现在我想获取并修改图像。这怎么办?
我使用以下代码来设置我的相机预览
ACameraIdList *cameraIdList = NULL;
ACameraMetadata *cameraMetadata = NULL;
const char *selectedCameraId = NULL;
camera_status_t camera_status = ACAMERA_OK;
ACameraManager *cameraManager = ACameraManager_create();
camera_status = ACameraManager_getCameraIdList(cameraManager, &cameraIdList);
selectedCameraId = cameraIdList->cameraIds[0];
camera_status = ACameraManager_getCameraCharacteristics(cameraManager, selectedCameraId, &cameraMetadata);
deviceStateCallbacks.onDisconnected = camera_device_on_disconnected;
deviceStateCallbacks.onError = camera_device_on_error;
camera_status = ACameraManager_openCamera(cameraManager, selectedCameraId, &deviceStateCallbacks, &cameraDevice);
camera_status = ACameraDevice_createCaptureRequest(cameraDevice, templateId, &captureRequest);
ACaptureSessionOutputContainer_create(&captureSessionOutputContainer);
captureSessionStateCallbacks.onReady = capture_session_on_ready;
captureSessionStateCallbacks.onActive = capture_session_on_active;
captureSessionStateCallbacks.onClosed = capture_session_on_closed;
captureSessionCaptureCallbacks.onCaptureCompleted = capture_session_capture_on_completed;
captureSessionCaptureCallbacks.onCaptureProgressed = capture_session_capture_on_progressed;
ACameraMetadata_free(cameraMetadata);
ACameraManager_deleteCameraIdList(cameraIdList);
ACameraManager_delete(cameraManager);
之后,在每一帧上执行以下回调,所以我假设图像将被保存在任何一个结构中。
static void capture_session_capture_on_completed(void *context, ACameraCaptureSession *aCameraCaptureSession, ACaptureRequest *aCaptureRequest, const ACameraMetadata *aCameraMetadata) {
}
不幸的是,在https://developer.android.com/ndk/reference/group/camera#functions的帮助下,我找不到从
ACameraCaptureSession
、ACaptureRequest
或ACameraMetadata
读取图像的正确方法
如何使用 android ndk 在 C++ 中读取/修改当前相机实时预览帧的图像对象/数据?