如何在 canon sdk c# 中管理移动缩放视图
How can I manage moving zoomed view in canon sdk c#
我可以使用 codeproject 中的这个库来使用 canon sdk
Canon EDSDK Library
除了一个,我已经完成了我的所有要求。就是移动放大的实时取景up/down/left/right。我可以缩放但我无法移动它以查看调整手动缩放的正确位置。
我搜索了一下,找到了zoomRect, zoomPosition, zoomCoordinates...但是我不知道它们到底是什么以及如何使用它们。
无论是否使用这个库,任何建议、代码块都会有很大帮助
您可以使用 属性 Evf_ZoomPosition 和 Point 结构来设置缩放矩形的位置。请注意,您将此 属性 设置为相机,但您 get/read 来自实时取景帧的所有实时取景相关值。
您设置的位置为缩放矩形的左上角,有效值介于
X:0、Y:0
和
X:CoordinateSystem.宽度 - ZoomRect.Width
Y:CoordinateSystem.身高 - ZoomRect.Height
读取 ZoomPosition 并不是真正必要的,因为 ZoomRect X 和 Y 是相同的值。
我终于找到了答案。
我使用了 zoomposition 来改变缩放矩形。
我使用 zoomRect 来获取缩放矩形的位置和大小。
这是我的做法
使用此方法设置相机的变焦位置。我在 library
的 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 in library
中定义了这些方法
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 方法。
您可以使用相同的方式获得缩放位置。
不要忘记重建库。
我可以使用 codeproject 中的这个库来使用 canon sdk Canon EDSDK Library
除了一个,我已经完成了我的所有要求。就是移动放大的实时取景up/down/left/right。我可以缩放但我无法移动它以查看调整手动缩放的正确位置。
我搜索了一下,找到了zoomRect, zoomPosition, zoomCoordinates...但是我不知道它们到底是什么以及如何使用它们。
无论是否使用这个库,任何建议、代码块都会有很大帮助
您可以使用 属性 Evf_ZoomPosition 和 Point 结构来设置缩放矩形的位置。请注意,您将此 属性 设置为相机,但您 get/read 来自实时取景帧的所有实时取景相关值。
您设置的位置为缩放矩形的左上角,有效值介于
X:0、Y:0
和
X:CoordinateSystem.宽度 - ZoomRect.Width
Y:CoordinateSystem.身高 - ZoomRect.Height
读取 ZoomPosition 并不是真正必要的,因为 ZoomRect X 和 Y 是相同的值。
我终于找到了答案。 我使用了 zoomposition 来改变缩放矩形。 我使用 zoomRect 来获取缩放矩形的位置和大小。 这是我的做法
使用此方法设置相机的变焦位置。我在 library
的 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 in library
中定义了这些方法 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 方法。 您可以使用相同的方式获得缩放位置。 不要忘记重建库。