用于拍照的 EDSDK 处理程序
EDSDK Handler for take pictures
我正在尝试为我的 Canon EOS Rebel T7 创建一个程序,但是当我尝试发送命令 EDSDK.EdsSendCommand(CamConn,EDSDK.CameraCommand_TakePicture, 0) 时,程序 returns错误 EDS_ERR_INVALID_HANDLE,如何添加合适的 Handle 来拍照?谢谢!
Print of code here
首先,欢迎来到 Whosebug。
未来提示:copy/paste 在您的问题中编码,不要 link 图片。每个人都可以更轻松地阅读并复制它来自己尝试。
现在回答你的问题:
CamConn
句柄从何而来?很可能 OpenConnection 调用已经 returns 一个无效句柄错误。
要获得有效的相机手柄,您必须执行以下操作:
public IntPtr[] GetConnectedCameraPointers()
{
// get a list of connected cameras
EDSDK.EdsGetCameraList(out IntPtr cameraList);
// get the number of entries in that list
EDSDK.EdsGetChildCount(cameraList, out int cameraCount);
// create an array for the camera pointers and iterate through the list
var cameras = new IntPtr[cameraCount];
for (int i = 0; i < cameraCount; i++)
{
// gets an item of the list at the specified index
EDSDK.EdsGetChildAtIndex(cameraList, i, out IntPtr cameraPtr);
// get a device info for that camera, this is optional but may interesting to have
EDSDK.EdsGetDeviceInfo(cameraPtr, out EdsDeviceInfo cameraInfo);
// store the camera pointer in our array
cameras[i] = cameraPtr;
}
// release the camera list
EDSDK.EdsRelease(cameraList);
return cameras;
}
请注意,为简单起见,我没有检查返回的错误代码,但您一定要检查一下。
我正在尝试为我的 Canon EOS Rebel T7 创建一个程序,但是当我尝试发送命令 EDSDK.EdsSendCommand(CamConn,EDSDK.CameraCommand_TakePicture, 0) 时,程序 returns错误 EDS_ERR_INVALID_HANDLE,如何添加合适的 Handle 来拍照?谢谢! Print of code here
首先,欢迎来到 Whosebug。
未来提示:copy/paste 在您的问题中编码,不要 link 图片。每个人都可以更轻松地阅读并复制它来自己尝试。
现在回答你的问题:
CamConn
句柄从何而来?很可能 OpenConnection 调用已经 returns 一个无效句柄错误。
要获得有效的相机手柄,您必须执行以下操作:
public IntPtr[] GetConnectedCameraPointers()
{
// get a list of connected cameras
EDSDK.EdsGetCameraList(out IntPtr cameraList);
// get the number of entries in that list
EDSDK.EdsGetChildCount(cameraList, out int cameraCount);
// create an array for the camera pointers and iterate through the list
var cameras = new IntPtr[cameraCount];
for (int i = 0; i < cameraCount; i++)
{
// gets an item of the list at the specified index
EDSDK.EdsGetChildAtIndex(cameraList, i, out IntPtr cameraPtr);
// get a device info for that camera, this is optional but may interesting to have
EDSDK.EdsGetDeviceInfo(cameraPtr, out EdsDeviceInfo cameraInfo);
// store the camera pointer in our array
cameras[i] = cameraPtr;
}
// release the camera list
EDSDK.EdsRelease(cameraList);
return cameras;
}
请注意,为简单起见,我没有检查返回的错误代码,但您一定要检查一下。