我可以使用在 codeproject Canon EDSDK Library中找到的这个库来使用 canon sdk
我已经完成了我的所有要求,除了一个。就是向上/向下/向左/向右移动缩放的实时视图。我可以缩放,但我无法移动它以查看调整手动缩放的正确位置。
我已经搜索过,我来到了 zoomRect、zoomPosition、zoomCoordinates ......但我不知道它们实际上是什么以及如何使用它们。
任何建议,无论是否使用这个库,代码块都会有很大帮助
我可以使用在 codeproject Canon EDSDK Library中找到的这个库来使用 canon sdk
我已经完成了我的所有要求,除了一个。就是向上/向下/向左/向右移动缩放的实时视图。我可以缩放,但我无法移动它以查看调整手动缩放的正确位置。
我已经搜索过,我来到了 zoomRect、zoomPosition、zoomCoordinates ......但我不知道它们实际上是什么以及如何使用它们。
任何建议,无论是否使用这个库,代码块都会有很大帮助
我终于找到了答案。我使用 zoomposition 来更改缩放矩形。我使用 zoomRect 来获取缩放矩形的位置和大小。这是我的做法
使用此方法设置相机的变焦位置。我在库的 camera.cs 中定义了这个方法
public void SetZoomPositionSetting(PropertyID propID, Point value, int inParam = 0)
{
CheckState();
int size = Marshal.SizeOf(typeof(Point));
ErrorCode err = CanonSDK.EdsSetPropertyData(CamRef, propID, inParam, size, value);
}
我已从代码中的任何位置将此数据发送到该方法,以更改 zoomPosition
MainCamera.SetZoomPositionSetting(PropertyID.Evf_ZoomPosition, p);
这里的 p 是 EOSDigital.SDK.Point 实例。
下面是获取zoomCoordinates、zoomRect的方法。我在库的 camera.cs 中定义了这些方法
private Rectangle GetEvfZoomRect(IntPtr imgRef)
{
Rectangle rect = new Rectangle();
ErrorCode err = CanonSDK.GetPropertyData(imgRef, PropertyID.Evf_ZoomRect, 0, out rect);
if (err == ErrorCode.OK)
return rect;
else
return rect = new Rectangle();
}
private Size GetEvfCoord_Size(IntPtr imgRef)
{
Size size = new Size();
ErrorCode err = CanonSDK.GetPropertyData(imgRef, PropertyID.Evf_CoordinateSystem, 0, out size);
if (err == ErrorCode.OK)
return size;
else
return new Size();
}
您需要在 camera.cs 的 DownloadEvf() 方法中调用这些方法。刚从
CanonSDK.EdsDownloadEvfImage(CamRef, evfImageRef) 获取 evfImageRef 之后;
获得带有图像数据的 evfImageRef 后,您可以使用 evfImageRef 作为 imgRef 调用 get 方法。您可以使用相同的方式获得缩放位置。不要忘记重建图书馆。
您可以使用属性 Evf_ZoomPosition 和 Point 结构来设置缩放矩形的位置。请注意,您将此属性设置为相机,但您从实时取景框中获取/读取所有与实时取景相关的值。
您设置的位置是缩放矩形的左上角,有效值介于
X:0、Y:0
和
X:CoordinateSystem.Width - ZoomRect.Width
Y:CoordinateSystem.Height - ZoomRect.Height 之间
读取 ZoomPosition 并不是真正必要的,因为 ZoomRect X 和 Y 是相同的值。