zoomRect、zoomCoordinates 在佳能 EDSDK 中带来 PROPERTİES_UNAVAILABLE 错误
zoomRect, zoomCoordinates brings PROPERTİES_UNAVAILABLE error in Canon EDSDK
我可以使用 codeproject 中的这个库来使用 canon sdk
Canon EDSDK Library
使用 SDK 和上面提到的库,我必须移动缩放的实时视图 up/down/left/right。我可以缩放,但我无法移动它来查看调整手动缩放的正确位置。
我已经搜索过,我找到了 zoomRect、zoomPosition、zoomCoordinates 然后我将这两个方法添加到 camera.cs 并在我获得 evfImageRef 后立即从 DownloadEvf() 方法调用它们。然后我将它传递给方法。但是创建了一个矩形,但每次都在变化,而且值很疯狂。错误代码是 Properties_unavailable
另一点是 SDK 中的 zoompositon 也不起作用,或者我无法使其起作用,所以它给出了不受支持的错误。我也在为它添加代码。
矩形对象是 EOSDigital.SDK.Rectangle 对象。
CanonSDK 是 EOSDigital.SDK.CanonSDK 对象。
MainCamera 是 Camera 对象。
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);
}
这是我找到的解决方案。使用此方法设置相机的变焦位置。我在 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);
不是来自 CanonSDK.EdsCreateEvfImageRef(stream.Reference,出 evfImageRef);
这就是为什么我得到那个错误
在获得带有图像数据的 evfImageRef 后,您可以使用 evfImageRef 作为 imgRef 调用 get 方法。
你可以用同样的方法得到缩放位置。
注意:顺便说一句,每次更改后,都需要重建库。
我可以使用 codeproject 中的这个库来使用 canon sdk Canon EDSDK Library
使用 SDK 和上面提到的库,我必须移动缩放的实时视图 up/down/left/right。我可以缩放,但我无法移动它来查看调整手动缩放的正确位置。
我已经搜索过,我找到了 zoomRect、zoomPosition、zoomCoordinates 然后我将这两个方法添加到 camera.cs 并在我获得 evfImageRef 后立即从 DownloadEvf() 方法调用它们。然后我将它传递给方法。但是创建了一个矩形,但每次都在变化,而且值很疯狂。错误代码是 Properties_unavailable
另一点是 SDK 中的 zoompositon 也不起作用,或者我无法使其起作用,所以它给出了不受支持的错误。我也在为它添加代码。
矩形对象是 EOSDigital.SDK.Rectangle 对象。 CanonSDK 是 EOSDigital.SDK.CanonSDK 对象。 MainCamera 是 Camera 对象。
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);
}
这是我找到的解决方案。使用此方法设置相机的变焦位置。我在 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);
不是来自 CanonSDK.EdsCreateEvfImageRef(stream.Reference,出 evfImageRef); 这就是为什么我得到那个错误
在获得带有图像数据的 evfImageRef 后,您可以使用 evfImageRef 作为 imgRef 调用 get 方法。
你可以用同样的方法得到缩放位置。 注意:顺便说一句,每次更改后,都需要重建库。