[英]c# Canon SDK: No callback after CameraCommand_TakePicture
[英]How can I manage moving zoomed view in canon sdk c#
我可以使用在codeproject Canon EDSDK库中找到的该库来使用canon sdk
除了一个,我已经完成了所有的要求。 就是向上/向下/向左/向右移动缩放的实时取景。 我可以缩放,但无法移动以查看调整手动缩放的正确位置。
我进行了搜索,来到了zoomRect,zoomPosition,zoomCoordinates ...,但我不知道它们实际上是什么以及如何使用它们。
任何建议,无论是否使用此库,代码块都会有很大帮助
您可以将Evf_ZoomPosition属性与Point结构一起使用,以设置缩放矩形的位置。 请注意,您将此属性设置为相机,但从实时显示框架中获取/读取了所有实时显示相关值。
您设置的位置是缩放矩形的左上角,有效值介于
X:0,Y:0
和
X:CoordinateSystem.Width-ZoomRect.Width
Y:CoordinateSystem.Height-ZoomRect.Height
确实没有必要读取ZoomPosition,因为ZoomRect X和Y是相同的值。
我终于找到了答案。 我使用过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。 不要忘记重建库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.