我可以使用在 codeproject Canon EDSDK Library中找到的这个库来使用 canon sdk
使用 SDK 和上面提到的库,我必须向上/向下/向左/向右移动缩放的实时视图。我可以缩放,但我无法移动它以查看调整手动缩放的正确位置。
我已经搜索过,我来到了 zoomRect、zoomPosition、zoomCoordinates 然后我将这两个方法添加到 camera.cs 并在我得到 evfImageRef 之后从 DownloadEvf() 方法调用它们。然后我将它传递给方法。但是创建了一个矩形,但每次都在变化,而且值很疯狂。错误代码是 Properties_unavailable
另一点是 SDK 中的 zoompositon 也不起作用,或者我无法使其工作,因此它给出了不支持的错误。我也在为它添加代码。
Rectangle 对象是 EOSDigital.SDK.Rectangle 对象。CanonSDK 是 EOSDigital.SDK.CanonSDK 对象。MainCamera 是相机对象。
private Rectangle GetEvfZoomRect(IntPtr imgRef)
{
int size = Marshal.SizeOf(typeof(Rectangle));
IntPtr ptr = Marshal.AllocHGlobal(size);
ErrorCode err = CanonSDK.EdsGetPropertyData(imgRef, PropertyID.Evf_ZoomRect, 0, size, ptr);
Rectangle rect = (Rectangle)Marshal.PtrToStructure(ptr, typeof(Rectangle));
Marshal.FreeHGlobal(ptr);
if (err == ErrorCode.OK)
return rect;
else
return new Rectangle();
}
private Size GetEvfCoord(IntPtr imgRef)
{
int size = Marshal.SizeOf(typeof(Size));
IntPtr ptr = Marshal.AllocHGlobal(size);
ErrorCode err = CanonSDK.EdsGetPropertyData(imgRef, PropertyID.Evf_CoordinateSystem, 0, size, ptr);
Size coord = (Size)Marshal.PtrToStructure(ptr, typeof(Size));
Marshal.FreeHGlobal(ptr);
if (err == ErrorCode.OK)
return coord;
else
return new Size();
}
这就是我尝试发送缩放位置的方式
if (MainCamera.IsLiveViewOn)
{
EOSDigital.SDK.Point p = new EOSDigital.SDK.Point(100, 300);
MainCamera.SetSetting(PropertyID.Evf_ZoomPosition, p);
}