如何在canon sdk c中管理移动的缩放视图#

时间:2018-02-02 09:02:20

标签: c# .net zoom zooming canon-sdk

我可以使用canon sdk使用codeproject中的这个库 Canon EDSDK Library

除了一个,我完成了所有要求。这是向上/向下/向左/向右移动缩放的实时视图。我可以放大但我无法移动它以查看调整手动变焦的正确位置。

我已经搜索过,我已经来到zoomRect,zoomPosition,zoomCoordinates ......但我不知道它们实际上是什么以及如何使用它们。

任何建议,代码块在使用或不使用此库的情况下都会有很多帮助

2 个答案:

答案 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。 别忘了重建图书馆。