我可以使用canon sdk使用codeproject中的这个库 Canon EDSDK Library
除了一个,我完成了所有要求。这是向上/向下/向左/向右移动缩放的实时视图。我可以放大但我无法移动它以查看调整手动变焦的正确位置。
我已经搜索过,我已经来到zoomRect,zoomPosition,zoomCoordinates ......但我不知道它们实际上是什么以及如何使用它们。
任何建议,代码块在使用或不使用此库的情况下都会有很多帮助
答案 0 :(得分:1)
您可以使用属性Evf_ZoomPosition和Point结构来设置缩放矩形的位置。请注意,您将此属性设置为摄像机,但您可以从实时视图框中获取/读取所有与实时视图相关的值。
您设置的位置是缩放矩形的左上角,有效值介于
之间
X:0,Y:0
和
X:CoordinateSystem.Width - ZoomRect.Width
Y:CoordinateSystem.Height - ZoomRect.Height
读取ZoomPosition并不是必需的,因为ZoomRect X和Y的值相同。
答案 1 :(得分:0)
我终于找到了答案。 我使用了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()方法中调用这些方法。从中获取evfImageRef之后 CanonSDK.EdsDownloadEvfImage(CamRef,evfImageRef);
使用图像数据获取evfImageRef后,可以使用evfImageRef作为imgRef调用get方法。 你可以使用相同的方式获得zoomposition。 别忘了重建图书馆。