3 EDSDK 对象(EDSDK Objects)


markdown 复制代码
# 3 EDSDK 对象(EDSDK Objects)

EDSDK 采用分层对象模型 来表示主机 PC 与相机之间的所有可控资源。

所有对象都通过 引用(Reference) 的形式进行访问与管理。


3.1 对象层级结构(Hierarchical Structure)

markdown 复制代码
## 3.1 对象层级结构(Hierarchical Structure)

EDSDK 使用一个以 相机列表(Camera List) 为根节点的层级结构来管理对象:

markdown 复制代码
CameraList
 ├─ Camera
 │   ├─ Volume(存储卡)
 │   │   ├─ Folder
 │   │   │   ├─ Image File
 │   │   │   └─ Audio File
  • 所有连接到主机 PC 的相机都会包含在 EdsCameraListRef
  • 每个相机、存储卡、文件夹、文件都被表示为一个对象
  • 父对象可以通过 API 枚举其子对象

3.2 对象类型总览(Object Types Overview)

markdown 复制代码
## 3.2 对象类型总览(Object Types Overview)

EDSDK 中主要包含以下对象类型:

对象类型 说明
EdsCameraListRef 已连接相机的列表
EdsCameraRef 单个相机对象
EdsVolumeRef 相机中的存储介质(存储卡)
EdsDirectoryItemRef 文件夹或文件对象
EdsImageRef 已下载到主机的图像对象
EdsStreamRef 文件或内存流对象
EdsEvfImageRef 实时取景(Live View / EVF)图像对象

所有对象类型都继承自 EdsBaseRef


3.3 EdsCameraListRef(相机列表对象)

markdown 复制代码
## 3.3 EdsCameraListRef(相机列表对象)

EdsCameraListRef 表示当前通过 USB 或网络连接到主机 PC 的所有相机。

主要用途:

  • 枚举已连接的相机数量
  • 获取指定索引的相机对象(EdsCameraRef

典型流程:

markdown 复制代码
1. 调用 `EdsGetCameraList`
2. 调用 `EdsGetChildCount` 获取相机数量
3. 调用 `EdsGetChildAtIndex` 获取具体相机对象

3.4 EdsCameraRef(相机对象)

markdown 复制代码
## 3.4 EdsCameraRef(相机对象)

EdsCameraRef 表示一台具体的 Canon 数码相机。

该对象用于:

  • 打开 / 关闭会话(Session)
  • 发送拍摄、对焦、变焦等命令
  • 设置和获取相机属性
  • 注册事件回调
  • 获取存储卡对象(EdsVolumeRef

所有对相机的控制操作,都必须在 已打开 Session 的情况下 进行。


3.5 EdsVolumeRef(存储卡对象)

markdown 复制代码
## 3.5 EdsVolumeRef(存储卡对象)

EdsVolumeRef 表示相机中的一张存储卡。

  • 如果相机支持双卡,则每张卡对应一个 EdsVolumeRef
  • 该对象用于访问存储卡上的文件和文件夹

可执行操作:

  • 获取存储卡容量信息
  • 枚举文件夹和文件
  • 格式化存储卡(⚠️高风险操作)

3.6 EdsDirectoryItemRef(目录项对象)

markdown 复制代码
## 3.6 EdsDirectoryItemRef(目录项对象)

EdsDirectoryItemRef 表示:

  • 文件夹(Folder)
  • 文件(Image / Movie / Audio)

该对象用于:

  • 获取文件或文件夹信息
  • 下载文件
  • 删除文件
  • 设置文件属性(只读、隐藏等)

文件在 相机端主机端 使用的是不同的对象模型


3.7 EdsStreamRef(流对象)

markdown 复制代码
## 3.7 EdsStreamRef(流对象)

EdsStreamRef 表示一个 I/O 数据流,用于文件传输。

支持的流类型:

  • 文件流(磁盘文件)
  • 内存流(内存缓冲区)

主要用途:

  • 将相机中的文件下载到主机
  • 将主机文件加载为图像对象
  • 存储实时取景数据

3.8 EdsImageRef(图像对象)

markdown 复制代码
## 3.8 EdsImageRef(图像对象)

EdsImageRef 表示 已下载到主机 PC 的图像数据

特点:

  • 不能直接从相机端文件创建

  • 必须先通过 EdsDownload 下载,再创建 EdsImageRef

  • 可用于读取:

    • 图像属性
    • 缩略图
    • 图像参数(拍摄时的 Av / Tv / ISO 等)

3.9 EdsEvfImageRef(实时取景图像对象)

markdown 复制代码
## 3.9 EdsEvfImageRef(实时取景图像对象)

EdsEvfImageRef 表示实时取景(Live View / EVF)图像数据。

包含内容:

  • 实时画面
  • 变焦信息
  • 对焦点信息
  • 直方图数据

使用前提:

  • 相机必须支持 Live View
  • 必须先启用 EVF 输出到 PC

3.10 对象生命周期与引用计数(Reference Counting)

markdown 复制代码
## 3.10 对象生命周期与引用计数(Reference Counting)

EDSDK 使用 引用计数(Reference Count) 来管理对象生命周期。

规则:

  • 对象创建时,引用计数 = 1
  • 每次 EdsRetain → 引用计数 +1
  • 每次 EdsRelease → 引用计数 −1
  • 引用计数为 0 时,对象会被自动释放

⚠️ 开发注意事项

markdown 复制代码
- 通过 API 获取的对象通常已经隐式增加了引用计数
- 每一个获取的对象,最终都必须对应一次 `EdsRelease`
- 否则会导致内存泄漏或 SDK 状态异常
相关推荐
光_辉5 小时前
使用代码访问海康相机
数码相机
格林威6 小时前
相机的“对焦”和“变焦”,这二者有什么区别?
开发语言·人工智能·数码相机·opencv·算法·计算机视觉·视觉检测
光_辉6 小时前
关于相机拍照的一些说明
数码相机
光_辉6 小时前
调用海康相机实现事件监测并拍照
数码相机
JMchen1236 小时前
Android相机硬件抽象层(HAL)逆向工程:定制ROM的相机优化深度指南
android·开发语言·c++·python·数码相机·移动开发·android studio
psp之魂16 小时前
Unity2d Cinemachine Confine 2d失效的问题
数码相机
中达瑞和-高光谱·多光谱21 小时前
中达瑞和VIX-N220推扫式高光谱相机:助力中医舌苔面诊迈向客观化、智能化新时代
数码相机
工业相机定制与开发1 天前
云钥科技AI智能相机为图文印刷行业提供全流程检测解决方案
人工智能·数码相机
G***技1 天前
嵌入式计算机AF208:焊接机器人高效精准作业的核心引擎
数码相机
问水っ1 天前
Qt Creator快速入门 第三版 第14章 相机和音频录制
数码相机