add,计划采集16:

解决切换相机时的图片不切换问题
解决设置高光谱相机帧率和积分时间失效问题
拷贝航线路径文件到数据文件夹
单反弹窗报错:添加描述
图像控制添加2%拉伸
This commit is contained in:
tangchao0503
2026-06-18 10:13:50 +08:00
parent 5372a7806c
commit 55609b7b3b
9 changed files with 302 additions and 30 deletions

View File

@ -6,6 +6,124 @@
// 全局变量用于回调函数访问
static SingleLensReflexCameraOperation* g_cameraOperation = nullptr;
// 将Canon EDSDK错误码转换为中文描述
QString getEDSDKErrorMessage(EdsError err)
{
switch (err)
{
case EDS_ERR_OK:
return QString::fromLocal8Bit("操作成功,错误码:%1").arg(err);
case EDS_ERR_UNIMPLEMENTED:
return QString::fromLocal8Bit("功能未实现,错误码:%1").arg(err);
case EDS_ERR_INTERNAL_ERROR:
return QString::fromLocal8Bit("内部错误,错误码:%1").arg(err);
case EDS_ERR_MEM_ALLOC_FAILED:
return QString::fromLocal8Bit("内存分配失败,错误码:%1").arg(err);
case EDS_ERR_MEM_FREE_FAILED:
return QString::fromLocal8Bit("内存释放失败,错误码:%1").arg(err);
case EDS_ERR_OPERATION_CANCELLED:
return QString::fromLocal8Bit("操作已取消,错误码:%1").arg(err);
case EDS_ERR_INCOMPATIBLE_VERSION:
return QString::fromLocal8Bit("版本不兼容,错误码:%1").arg(err);
case EDS_ERR_NOT_SUPPORTED:
return QString::fromLocal8Bit("不支持该操作,错误码:%1").arg(err);
case EDS_ERR_UNEXPECTED_EXCEPTION:
return QString::fromLocal8Bit("意外异常,错误码:%1").arg(err);
case EDS_ERR_PROTECTION_VIOLATION:
return QString::fromLocal8Bit("保护违规,错误码:%1").arg(err);
case EDS_ERR_MISSING_SUBCOMPONENT:
return QString::fromLocal8Bit("缺少子组件,错误码:%1").arg(err);
case EDS_ERR_SELECTION_UNAVAILABLE:
return QString::fromLocal8Bit("选择不可用,错误码:%1").arg(err);
case EDS_ERR_FILE_IO_ERROR:
return QString::fromLocal8Bit("文件IO错误,错误码:%1").arg(err);
case EDS_ERR_FILE_NOT_FOUND:
return QString::fromLocal8Bit("文件未找到,错误码:%1").arg(err);
case EDS_ERR_FILE_OPEN_ERROR:
return QString::fromLocal8Bit("文件打开失败,错误码:%1").arg(err);
case EDS_ERR_DEVICE_NOT_FOUND:
return QString::fromLocal8Bit("设备未找到,错误码:%1").arg(err);
case EDS_ERR_DEVICE_BUSY:
return QString::fromLocal8Bit("设备忙,错误码:%1").arg(err);
case EDS_ERR_DEVICE_INVALID:
return QString::fromLocal8Bit("设备无效,错误码:%1").arg(err);
case EDS_ERR_DEVICE_MEMORY_FULL:
return QString::fromLocal8Bit("设备内存已满,错误码:%1").arg(err);
case EDS_ERR_DEVICE_INTERNAL_ERROR:
return QString::fromLocal8Bit("设备内部错误,错误码:%1").arg(err);
case EDS_ERR_DEVICE_NO_DISK:
return QString::fromLocal8Bit("设备无存储介质,错误码:%1").arg(err);
case EDS_ERR_DEVICE_DISK_ERROR:
return QString::fromLocal8Bit("设备磁盘错误,错误码:%1").arg(err);
case EDS_ERR_DEVICE_CF_GATE_CHANGED:
return QString::fromLocal8Bit("CF卡仓已改变,错误码:%1").arg(err);
case EDS_ERR_DEVICE_DIAL_CHANGED:
return QString::fromLocal8Bit("拨盘已改变,错误码:%1").arg(err);
case EDS_ERR_DEVICE_NOT_INSTALLED:
return QString::fromLocal8Bit("设备未安装,错误码:%1").arg(err);
case EDS_ERR_SESSION_NOT_OPEN:
return QString::fromLocal8Bit("会话未打开,错误码:%1").arg(err);
case EDS_ERR_INVALID_TRANSACTIONID:
return QString::fromLocal8Bit("无效的事务ID,错误码:%1").arg(err);
case EDS_ERR_INCOMPLETE_TRANSFER:
return QString::fromLocal8Bit("传输不完整,错误码:%1").arg(err);
case EDS_ERR_INVALID_STRAGEID:
return QString::fromLocal8Bit("无效的存储ID,错误码:%1").arg(err);
case EDS_ERR_DEVICEPROP_NOT_SUPPORTED:
return QString::fromLocal8Bit("设备属性不支持,错误码:%1").arg(err);
case EDS_ERR_INVALID_OBJECTFORMATCODE:
return QString::fromLocal8Bit("无效的对象格式代码,错误码:%1").arg(err);
case EDS_ERR_SELF_TEST_FAILED:
return QString::fromLocal8Bit("自检失败,错误码:%1").arg(err);
case EDS_ERR_UNKNOWN_VENDOR_CODE:
return QString::fromLocal8Bit("未知的厂商代码,错误码:%1").arg(err);
case EDS_ERR_CAPTURE_ALREADY_TERMINATED:
return QString::fromLocal8Bit("拍摄已终止,错误码:%1").arg(err);
case EDS_ERR_PTP_DEVICE_BUSY:
return QString::fromLocal8Bit("PTP设备忙,错误码:%1").arg(err);
case EDS_ERR_UNKNOWN_COMMAND:
return QString::fromLocal8Bit("未知命令,错误码:%1").arg(err);
case EDS_ERR_OPERATION_REFUSED:
return QString::fromLocal8Bit("操作被拒绝,错误码:%1").arg(err);
case EDS_ERR_LENS_COVER_CLOSE:
return QString::fromLocal8Bit("镜头盖未关闭,错误码:%1").arg(err);
case EDS_ERR_LOW_BATTERY:
return QString::fromLocal8Bit("电池电量低,错误码:%1").arg(err);
case EDS_ERR_OBJECT_NOTREADY:
return QString::fromLocal8Bit("对象未就绪,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_AF_NG:
return QString::fromLocal8Bit("自动对焦失败,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_MIRROR_UP_NG:
return QString::fromLocal8Bit("反光镜升起失败,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_SENSOR_CLEANING_NG:
return QString::fromLocal8Bit("传感器清洁失败,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_SILENCE_NG:
return QString::fromLocal8Bit("静音拍摄失败,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_NO_CARD_NG:
return QString::fromLocal8Bit("未检测到存储卡,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_CARD_NG:
return QString::fromLocal8Bit("存储卡错误,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG:
return QString::fromLocal8Bit("存储卡被保护,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_MOVIE_CROP_NG:
return QString::fromLocal8Bit("短片裁切模式不支持,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_STROBO_CHARGE_NG:
return QString::fromLocal8Bit("闪光灯充电失败,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_NO_LENS_NG:
return QString::fromLocal8Bit("未安装镜头,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_SPECIAL_MOVIE_MODE_NG:
return QString::fromLocal8Bit("特殊短片模式不支持,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_LV_REL_PROHIBIT_MODE_NG:
return QString::fromLocal8Bit("实时显示释放被禁止,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_MOVIE_MODE_NG:
return QString::fromLocal8Bit("短片模式下不支持,错误码:%1").arg(err);
case EDS_ERR_TAKE_PICTURE_RETRUCTED_LENS_NG:
return QString::fromLocal8Bit("伸缩镜头不支持,错误码:%1").arg(err);
default:
return QString::fromLocal8Bit("未知错误: 0x%1").arg(err, 8, 16, QChar('0'));
}
}
SingleLensReflexCameraWindow::SingleLensReflexCameraWindow(QWidget* parent)
: QDialog(parent)
, m_isCapturing(false)
@ -192,7 +310,7 @@ void SingleLensReflexCameraWindow::onImageCaptured(const QString& filePath)
void SingleLensReflexCameraWindow::onError(const QString& errorMsg)
{
QMessageBox::warning(this, QString::fromLocal8Bit("相机错误"), errorMsg);
QMessageBox::warning(this, QString::fromLocal8Bit("单反相机错误"), errorMsg);
}
void SingleLensReflexCameraWindow::onStartCapture()
@ -764,7 +882,7 @@ void SingleLensReflexCameraOperation::OpenSLRCamera()
err = initializeSDK();
if (err != EDS_ERR_OK)
{
emit ErrorSignal(QString::fromLocal8Bit("初始化SDK失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("初始化SDK失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -773,7 +891,7 @@ void SingleLensReflexCameraOperation::OpenSLRCamera()
if (err != EDS_ERR_OK)
{
terminateSDK();
emit ErrorSignal(QString::fromLocal8Bit("打开相机失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("打开相机失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -783,7 +901,7 @@ void SingleLensReflexCameraOperation::OpenSLRCamera()
{
closeCamera();
terminateSDK();
emit ErrorSignal(QString::fromLocal8Bit("设置保存位置失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("设置保存位置失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -829,7 +947,7 @@ void SingleLensReflexCameraOperation::OpenAndTakePhotoSLRCamera()
err = initializeSDK();
if (err != EDS_ERR_OK)
{
emit ErrorSignal(QString::fromLocal8Bit("初始化SDK失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("初始化SDK失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -838,7 +956,7 @@ void SingleLensReflexCameraOperation::OpenAndTakePhotoSLRCamera()
if (err != EDS_ERR_OK)
{
terminateSDK();
emit ErrorSignal(QString::fromLocal8Bit("打开相机失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("打开相机失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -848,7 +966,7 @@ void SingleLensReflexCameraOperation::OpenAndTakePhotoSLRCamera()
{
closeCamera();
terminateSDK();
emit ErrorSignal(QString::fromLocal8Bit("设置保存位置失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("设置保存位置失败: %1").arg(getEDSDKErrorMessage(err)));
return;
}
@ -934,7 +1052,7 @@ void SingleLensReflexCameraOperation::onCaptureTimer()
// 如果是设备忙,不发送错误信号,等待下次重试
if (err != EDS_ERR_DEVICE_BUSY)
{
emit ErrorSignal(QString::fromLocal8Bit("拍照失败,错误码: %1").arg(err));
emit ErrorSignal(QString::fromLocal8Bit("拍照失败: %1").arg(getEDSDKErrorMessage(err)));
}
}