![](/img/trans.png)
[英]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.