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) 相机状态变化、关机通知
相关推荐
格林威15 小时前
基于轮廓特征的工件分类识别:实现无模板快速分拣的 8 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·目标跟踪·分类·数据挖掘
8K超高清17 小时前
2026科技风口:有哪些前沿场景即将落地?
网络·人工智能·科技·数码相机·计算机视觉
涤生84319 小时前
halcon标定单目相机
数码相机
_李小白20 小时前
【Android 美颜相机】第三天:初识GPUImageView
android·数码相机
PHOSKEY20 小时前
3D应用丨光子精密解锁多个高难度3D相机拼接检测
数码相机·3d·制造
几道之旅2 天前
ROS2相机技术要点
数码相机
格林威2 天前
印刷电路板阻焊层缺失识别:防止短路风险的 7 个核心策略,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·机器学习·计算机视觉·视觉检测·工业相机
中达瑞和-高光谱·多光谱2 天前
MAX-S810机载多光谱相机在草地森林覆盖面统计中的应用
数码相机
_李小白2 天前
【Android 美颜相机】第一天:认识Android-GPUImage项目
android·数码相机
努力犯错2 天前
Qwen-Image-Edit-2511-Multiple-Angles LoRA:多角度AI图像生成完全指南
人工智能·数码相机·计算机视觉