4 对象管理与属性(Object Management & Properties)

markdown 复制代码
## 4.1 对象管理(Object Management)

EDSDK 中的所有对象都通过 引用计数机制(Reference Counting) 进行管理。

应用程序必须正确管理对象的生命周期,否则可能导致资源泄漏或 SDK 状态异常。


4.1.1 使用引用计数进行对象管理

(Object Management Using a Reference Counter)

markdown 复制代码
### 4.1.1 使用引用计数进行对象管理

EDSDK 会为每一个对象维护一个引用计数:

  • 当对象被创建或获取时,引用计数被设置为 1
  • 当对象被程序继续使用时,应调用 EdsRetain 增加引用计数
  • 当对象不再需要时,必须调用 EdsRelease 减少引用计数
  • 当引用计数变为 0 时,对象会被 EDSDK 自动释放
markdown 复制代码
引用计数变化规则:

- 创建 / 获取对象        → 引用计数 = 1
- EdsRetain              → 引用计数 +1
- EdsRelease             → 引用计数 −1
- 引用计数为 0           → 对象被自动销毁

⚠️ 开发者必须显式声明对象的使用与释放,否则可能造成内存泄漏。


4.1.2 退出库时释放资源

(Releasing Resources when Exiting the Library)

markdown 复制代码
### 4.1.2 退出库时释放资源

当应用程序调用 EdsTerminateSDK 时:

  • EDSDK 会释放所有由 SDK 分配的内部资源
  • 包括仍然存在的对象引用
markdown 复制代码
注意:
- `EdsTerminateSDK` 应只在应用程序生命周期内调用一次
- 必须确保在此之前不再使用任何 EDSDK 对象

4.2 属性(Properties)

markdown 复制代码
## 4.2 属性(Properties)

属性(Property) 用于表示相机或图像对象的各种状态与参数,例如:

  • 光圈值(Av)
  • 快门速度(Tv)
  • ISO
  • 白平衡
  • 图像质量
  • 实时取景设置

属性可以附属于以下对象:

  • EdsCameraRef
  • EdsImageRef

4.2.1 获取与设置属性

(Getting and Setting Properties)

markdown 复制代码
### 4.2.1 获取与设置属性

EDSDK 提供以下 API 用于访问属性:

API 用途
EdsGetPropertyData 获取属性值
EdsSetPropertyData 设置属性值
EdsGetPropertySize 获取属性数据大小与类型
EdsGetPropertyDesc 获取可设置的属性取值范围
markdown 复制代码
重要说明:
- 并非所有属性都可以在任意时刻获取或设置
- 可用性取决于:
  - 相机型号
  - 当前相机模式
  - 其他属性的当前值

4.2.2 属性的对象依赖关系

markdown 复制代码
### 4.2.2 属性的对象依赖关系

同一属性 ID,在不同对象上可能含义不同:

markdown 复制代码
- EdsCameraRef:
  表示当前相机的实时设置(例如当前 Av / Tv)

- EdsImageRef:
  表示图像拍摄时记录下来的参数

示例说明:

markdown 复制代码
- 从 EdsCameraRef 读取 Av → 当前相机光圈值
- 从 EdsImageRef 读取 Av  → 图像拍摄时的光圈值

4.2.3 可设置属性列表

(Property Description)

markdown 复制代码
### 4.2.3 可设置属性列表(Property Description)

某些属性具有 可设置取值范围,例如:

  • 拍摄模式
  • ISO
  • 光圈
  • 快门速度
  • 白平衡

在设置这些属性之前,必须先调用:

markdown 复制代码
EdsGetPropertyDesc

用于获取当前可用的取值列表。

markdown 复制代码
⚠️ 开发注意事项:
- 直接设置不在可用列表中的值会导致 API 返回错误
- 可用取值可能会随相机状态变化而变化

4.3 相机状态(Camera Status)

markdown 复制代码
## 4.3 相机状态(Camera Status)

通过 EDSDK 远程连接的相机,可能处于以下几种状态之一:


4.3.1 UI Lock(界面锁定)

markdown 复制代码
### UI Lock(界面锁定)
  • 相机本体的所有按键操作被禁用
  • 仅接受来自主机 PC 的控制命令
  • 用于避免用户在相机端操作引发冲突

4.3.2 UI Lock Release(解除界面锁定)

markdown 复制代码
### UI Lock Release(解除界面锁定)
  • 相机本体操作恢复可用
  • PC 仍然可以向相机发送命令
  • 存在潜在操作冲突风险

4.3.3 Direct Transfer(直接传输模式)

markdown 复制代码
### Direct Transfer(直接传输模式)
  • 相机正在执行直接传输操作
  • 相机功能被限制为与传输相关的操作
  • 当用户在相机端触发下载时,会向应用程序发送事件通知

4.3.4 Direct Transfer Release(结束直接传输)

markdown 复制代码
### Direct Transfer Release(结束直接传输)
  • 表示当前不处于直接传输状态
  • 相机恢复正常控制流程

4.4 异步事件(Asynchronous Events)

markdown 复制代码
## 4.4 异步事件(Asynchronous Events)

EDSDK 通过 异步事件机制 向应用程序通知以下变化:

  • 文件创建 / 删除
  • 属性变化
  • 相机状态变化
  • 拍摄完成
  • 断开连接

4.4.1 事件处理机制

markdown 复制代码
### 4.4.1 事件处理机制
  • 应用程序需注册 回调函数(Callback)
  • 当事件发生时,EDSDK 会在内部线程中调用回调函数
  • 回调函数需要根据事件类型进行处理
markdown 复制代码
注意:
- 回调函数中获取的对象同样需要调用 `EdsRelease`
- 不正确的事件处理极易导致资源泄漏

4.4.2 事件类型分类

markdown 复制代码
### 4.4.2 事件类型分类
事件类型 说明
对象事件(Object Event) 文件创建、删除、传输请求
属性事件(Property Event) 相机属性变化
状态事件(State Event) 相机状态变化、关机通知
相关推荐
leiming61 天前
Qt视频监控系统开发实战:从视频捕获到照片管理
linux·数码相机·音视频
ZPC82101 天前
机器人手眼标定
人工智能·python·数码相机·算法·机器人
格林威1 天前
Baumer相机碳纤维布纹方向识别:用于复合材料铺层校验的 5 个核心技巧,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测
格林威1 天前
Baumer相机视野内微小缺陷增强检测:提升亚像素级瑕疵可见性的 7 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·工业相机
格林威2 天前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
格林威2 天前
Baumer相机金属弹簧圈数自动计数:用于来料快速检验的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
码农三叔2 天前
(8-2)传感器系统与信息获取:外部环境传感
人工智能·嵌入式硬件·数码相机·机器人·人形机器人
暮志未晚Webgl3 天前
UE5使用CameraShake相机震动提升游戏体验
数码相机·游戏·ue5
哎呦 你干嘛~3 天前
相机+二维舵机云台的人员追踪
数码相机
木子啊3 天前
ProCamera 智能水印相机解决方案 (UniApp)
数码相机·uni-app·水印相机·小程序水印