【问题标题】:zoomRect, zoomCoordinates brings PROPERTİES_UNAVAILABLE error in Canon EDSDKzoomRect, zoomCoordinates 在 Canon EDSDK 中带来 PROPERTİES_UNAVAILABLE 错误
【发布时间】:2018-02-06 03:50:33
【问题描述】:

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

使用 SDK 和上面提到的库,我必须向上/向下/向左/向右移动缩放的实时视图。我可以缩放,但我无法移动它以查看调整手动缩放的正确位置。

我已经搜索到了 zoomRect、zoomPosition、zoomCoordinates 然后我将这两个方法添加到 camera.cs 并在我得到 evfImageRef 后从 DownloadEvf() 方法调用它们。然后我将它传递给方法。但是创建了一个矩形,但每次都在变化,而且值很疯狂。错误代码是 Properties_unavailable

另一点是 SDK 中的 zoompositon 也无法正常工作,或者我无法使其正常工作,因此会出现不支持的错误。我也在为其添加代码。

Rectangle 对象是 EOSDigital.SDK.Rectangle 对象。 CanonSDK 是 EOSDigital.SDK.CanonSDK 对象。 MainCamera 是相机对象。

    private Rectangle GetEvfZoomRect(IntPtr imgRef)
    {

        int size = Marshal.SizeOf(typeof(Rectangle));
        IntPtr ptr = Marshal.AllocHGlobal(size);
        ErrorCode err = CanonSDK.EdsGetPropertyData(imgRef, PropertyID.Evf_ZoomRect, 0, size, ptr);
        Rectangle rect = (Rectangle)Marshal.PtrToStructure(ptr, typeof(Rectangle));
        Marshal.FreeHGlobal(ptr);
        if (err == ErrorCode.OK)
            return rect;
        else
            return new Rectangle();
    }

    private Size GetEvfCoord(IntPtr imgRef)
    {
        int size = Marshal.SizeOf(typeof(Size));
        IntPtr ptr = Marshal.AllocHGlobal(size);

        ErrorCode err = CanonSDK.EdsGetPropertyData(imgRef, PropertyID.Evf_CoordinateSystem, 0, size, ptr);
        Size coord = (Size)Marshal.PtrToStructure(ptr, typeof(Size));
        Marshal.FreeHGlobal(ptr);
        if (err == ErrorCode.OK)
            return coord;
        else
            return new Size();
    }

这就是我尝试发送缩放位置的方式

        if (MainCamera.IsLiveViewOn)
        {
            EOSDigital.SDK.Point p = new EOSDigital.SDK.Point(100, 300);

            MainCamera.SetSetting(PropertyID.Evf_ZoomPosition, p);

        }

【问题讨论】:

    标签: c# .net zooming canon-sdk


    【解决方案1】:

    这是我找到的解决方案。使用此方法设置相机的变焦位置。我在库的 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);
        }
    

    我已将此数据发送到更改缩放位置的方法

    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);

    不是来自 CanonSDK.EdsCreateEvfImageRef(stream.Reference, out evfImageRef); 这就是为什么我有这个错误

    在获得带有图像数据的 evfImageRef 后,您可以使用 evfImageRef 作为 imgRef 调用 get 方法。

    您可以使用相同的方式获得缩放位置。 注意:顺便说一句,每次进行更改时,都需要重新构建库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多