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) 相机状态变化、关机通知
相关推荐
PHOSKEY2 小时前
产能翻倍 光子精密QM系列闪测仪赋能鼠标外壳全检
数码相机
wh_xia_jun4 小时前
1.3 支持的相机(Supported Cameras)
数码相机
春日见18 小时前
眼在手上外参标定保姆级教学(vscode + opencv)
linux·运维·服务器·数码相机·opencv·ubuntu·3d
OBS插件网1 天前
OBS直播教程:OBS如何添加歌词显示?OBS怎么把歌词放上去?
人工智能·数码相机·语音识别·产品经理
sali-tec1 天前
C# 基于halcon的视觉工作流-章71 深度学习-预处理OCR
开发语言·人工智能·深度学习·数码相机·算法·计算机视觉·ocr
春日见1 天前
如何提升手眼标定精度?
linux·运维·开发语言·数码相机·matlab
jamie_chu2 天前
显微图像采集 - 工业摄像机与图像采集软件介绍
图像处理·数码相机·camera·摄像头·图像测量·jcamerapro
格林威2 天前
双目视觉标定:消除视差误差的7种核心方案,附OpenCV+Halcon实现代码!
人工智能·数码相机·opencv·计算机视觉·视觉检测·制造
徐行tag2 天前
平面运动模型下的特性及应用
数码相机·平面·slam