1

我正在尝试使用 EOS 40D 进行高速拍摄。当在 UI 中将驱动模式设置为“高速连拍”进行手动操作时,该相机可维持约 6 fps。

如何使用 EDSDK 复制它?

下面的代码选择“高速连续”驱动模式(0x4)并kEdsCameraCommand_TakePicture尽可能快地发送。每次拍摄后,相机保持“忙碌”状态约 1 秒钟。这与单张拍摄的速度相同。我测试了所有可用的驱动模式,虽然有些较慢,但没有一个比 1 fps 快。

请注意,EOS 40D 不支持kEdsCameraCommand_PressShutterButton. 使用它给出EDS_ERR_INVALID_PARAMETER. EDSDK 文档说:“EOS 50D 或 EOS 5D Mark II 或更高版本的相机支持此命令”所以 40D 太旧了。

printf("============= Testing drive mode %08X\n", drive_mode);

result = EdsSetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &drive_mode);
assert(result == EDS_ERR_OK);

EdsUInt32 new_drive_mode;
result = EdsGetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &new_drive_mode);
assert(result == EDS_ERR_OK);
assert(new_drive_mode == drive_mode);

int n_captured = 0;
for (int i = 0; i < count; i++)
{
    do
    {
        result = EdsSendCommand(m_CameraRef, kEdsCameraCommand_TakePicture, 3);
        printf("  %d", result);
        Wait(1); // Process Windows messages for a few ms
    } while (result == EDS_ERR_DEVICE_BUSY);
    printf("\n");
    if (result == EDS_ERR_OK)
        n_captured++;
    else
        printf(" Burst capture error code for frame %d: %d!\n", i, result);
}
printf(" Burst capture end!\n");

典型输出如下所示:

============= Testing drive mode 00000004
  0
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  0
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129  129
  129  129  129  129  129  129  129  129  129  129  129  0
 Burst capture end!

代码 129 是EDS_ERR_DEVICE_BUSY.

4

1 回答 1

1

使用 40D 是不可能的,因为正如您已经指出的,不支持 PressShutterButton 命令。

您可以通过将 SaveTo 设置为 Host 并在收到 DownloadReady 对象事件后立即拍照,使用 TakePicture 命令加快速度。
您需要保存该事件的指针,完成后,下载所有图像。
请注意,缓冲区大小是有限的,并且取决于图像质量(jpg/raw,大/小尺寸)可能只适合三个或四个图像。

或者,使用速度更快的 CF 卡,这样当您将图像保存在相机上时,它会更快地再次准备就绪。

于 2018-04-13T12:15:30.227 回答