如何在 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 方法。 您可以使用相同的方式获得缩放位置。 不要忘记重建库。