在EOS上使用LiveView非常有趣并且有助于使对象成为焦点(如果目标不提供自动对焦)。 LiveView图像(流)的放大确实有助于聚焦。
在相机网站上,您可以使用带放大镜图标的按钮将该LiveView图像放大5倍和10倍。这适用于我的600D。
使用EDSDK编程我遇到了一个问题: 可以通过编程方式为LiveView设置5倍变焦模式。 但是我没有成功使用10x模式。
有没有人成功缩放LiveView并将LiveView图像缩放超过5倍?
对于成功的5x LiveView缩放,我使用了以下600D代码:
//启动LiveView等待屏幕上的流apearing然后执行:
_iZoomStage = 5;
bool Success = _CameraHandler.SetSetting(EDSDK.PropID_Evf_Zoom,(UInt32)_iZoomStage);
这很好,但是: 如果您尝试获得更高的缩放因子失败。成功返回true,但屏幕上看不到任何效果。 如果您对相机本身进行LiveView缩放10x可以正常按下放大镜"按钮。但是以编程方式我没有成功超过5的值。
对这个话题有什么看法吗?
答案 0 :(得分:2)
嗯,非常感谢您的回答。
与此同时,我做了以下解决方法,这似乎解决了这个问题。我只是在LiveView流媒体中裁剪和缩放位图:
if(_zoomFactorOfEdskd == true) // That is 1 and 5
g.DrawImage(_LiveViewStreamedBmp,_LvOutput);
else // Our own ones which do not work with EDSDK
{
Int32 newWidth= (Int32)(_LiveViewStreamedBmp.Width / _zoomFactor);
Int32 newHeight= (Int32)(_LiveViewStreamedBmp.Height / _zoomFactor);
// Cropping around the center of the original bitmap
Int32 xOffset= (_LiveViewStreamedBmp.Width-newWidth)/2;
Int32 yOffset= (_LiveViewStreamedBmp.Height-newHeight)/2;
Rectangle rectSource=new Rectangle(xOffset, xOffset, newWidth,newHeight);
Rectangle rectTarget=new Rectangle( 0, 0, _LiveViewStreamedBmp.Width, _LiveViewStreamedBmp.Height);
// Do the zoomed output...
g.DrawImage(_LiveViewStreamedBmp,rectTarget,rectSource,GraphicsUnit.Pixel);
}
请注意"非常好"结果将显示_zoomFactor低于5x (表示2.0到3.0之间的东西)。如果你在这里使用太强的缩放值,你会得到像素"并且图像太大(你可能看不到任何东西)。
或许最好定义_zoomFactor值,以便它更符合佳能对" 5x"的理解。或" 10x"。但目前这种解决方法可能有用。
亲切的问候Gerhard Kauer
答案 1 :(得分:1)
我偶然发现了同样的问题(在5D Mark IV上) - 实际上只有5倍变焦可能,对于10倍变焦,您应该自己缩放返回的位图。
但是:它似乎不是一个错误,而是一个记录非常严重的功能(即根本没有记录)。 SDK实际上提供了额外的数据,暗示您应该进行软件缩放并提供精确的坐标。所以这就是我理解的方式:
假设我们有一个分辨率为1000 x 1000像素的传感器,我们希望在中心放大10倍。然后在我的测试中发生这种情况:
kEdsPropID_Evf_ZoomRect
会返回450:450的位置,大小为100x100 - 完全符合预期。kEdsPropID_Evf_ZoomPosition
返回450:450 - 也是预期的。kEdsPropID_Evf_ImagePosition
,你可以知道,这个位图实际上在哪里。这将返回400:400位置,因此可用于计算最终裁剪和返回位图的放大。因此,虽然user3856307的代码应该有效,但是相机可能存在一些限制(例如将位置返回到32位可归位的位图),因此在我看来,合并kEdsPropID_Evf_ImagePosition
会给出更精确的结果。 / p>