微距能力设置(C/C++)
从API version 19开始,支持设置微距能力。微距能力是指通过光学设计与算法优化,实现近距离对焦并清晰捕捉微小物体细节的相机功能。
开发步骤
详细的API说明请参考Camera API参考。
-
导入NDK接口。选择系统提供的NDK接口能力,导入NDK接口的方法如下。
// 导入NDK接口头文件。 #include "hilog/log.h" #include "ohcamera/camera.h" #include "ohcamera/camera_input.h" #include "ohcamera/capture_session.h" #include "ohcamera/camera_manager.h" -
在CMake脚本中链接相关动态库。
target_link_libraries(entry PUBLIC libace_napi.z.so libohcamera.so libhilog_ndk.z.so ) -
通过OH_CaptureSession_IsMacroSupported()方法,检测当前设备是否支持微距能力。
bool IsMacroSupported(Camera_CaptureSession* captureSession) { // 判断设备是否支持微距能力。 bool isMacroSupported = false; if (captureSession == nullptr) { OH_LOG_ERROR(LOG_APP, "captureSession is nullptr."); return isMacroSupported; } Camera_ErrorCode ret = OH_CaptureSession_IsMacroSupported(captureSession, &isMacroSupported); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_IsMacroSupported failed."); } if (isMacroSupported) { OH_LOG_INFO(LOG_APP, "Support macro capability."); } else { OH_LOG_ERROR(LOG_APP, "No Support macro capability."); } return isMacroSupported; } -
使用OH_CaptureSession_EnableMacro()方法开启或关闭微距能力。
void EnableMacro(Camera_CaptureSession* captureSession, bool enabled) { if (IsMacroSupported(captureSession)) { Camera_ErrorCode ret = OH_CaptureSession_EnableMacro(captureSession, enabled); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_EnableMacro failed."); } } }
状态监听
从API version 20开始,支持监听微距能力是否发生改变。
通过OH_CaptureSession_RegisterMacroStatusChangeCallback()函数注册回调,返回监听结果。
void MacroStatusCallback(Camera_CaptureSession* captureSession, bool isMacroDetected)
{
if (isMacroDetected) {
OH_LOG_INFO(LOG_APP, "Entering macro mode");
}
else {
OH_LOG_INFO(LOG_APP, "Not entering macro mode");
}
}
// 注册回调函数。
Camera_ErrorCode RegisterMacroStatusCallback(Camera_CaptureSession* captureSession)
{
Camera_ErrorCode ret = OH_CaptureSession_RegisterMacroStatusChangeCallback(captureSession, MacroStatusCallback);
if (ret != CAMERA_OK) {
OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_RegisterMacroStatusChangeCallback failed.");
}
return ret;
}
// 解注册。
Camera_ErrorCode UnregisterMacroStatusCallback(Camera_CaptureSession* captureSession)
{
Camera_ErrorCode ret = OH_CaptureSession_UnregisterMacroStatusChangeCallback(captureSession, MacroStatusCallback);
if (ret != CAMERA_OK) {
OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_UnregisterMacroStatusChangeCallback failed.");
}
return ret;
}