首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EDSDK LiveView缩放10倍

EDSDK LiveView缩放10倍
EN

Stack Overflow用户
提问于 2015-07-26 15:03:55
回答 2查看 895关注 0票数 1

在EOS上使用LiveView很有趣,可以帮助对象获得焦点(在不提供自动对焦的目标情况下)。放大LiveView图像(流)确实有助于聚焦。

在相机网站上,您可以使用带有放大镜图标的按钮将LiveView图像放大5倍和10倍。这对我的600D来说很好。

使用EDSDK编程我遇到了一个问题:可以通过编程方式为LiveView设置5倍缩放模式。但是我在10x模式下没有成功。

有没有人成功地实现了缩放LiveView并将LiveView图像缩放到5倍以上?

为了成功实现5倍LiveView缩放,我在600D上使用了以下代码:

//启动LiveView,等待屏幕上出现流,然后执行:

_iZoomStage= 5;

bool Success=_CameraHandler.SetSetting(EDSDK.PropID_Evf_Zoom,(UInt32) _iZoomStage);

这很好用,但是:如果你试图获得更高的缩放因子,那就失败了。成功返回true,但在屏幕上看不到效果。如果你对相机本身进行LiveView缩放,按下“放大镜”按钮10倍就可以了。但在编程上,我没有成功地获得大于5的值。

对这个话题有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-27 14:44:32

好了,非常感谢你的回答。

同时,我做了以下变通方法,这似乎解决了问题。我只是在LiveView流媒体期间裁剪和缩放位图:

代码语言:javascript
复制
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”的理解。但就目前而言,这种变通方法可能会起作用。

向格哈德·考尔致敬

票数 2
EN

Stack Overflow用户

发布于 2017-02-20 05:09:10

我也遇到过同样的问题(在5D Mark IV上)--实际上只有5倍的缩放是可能的,而对于10倍的缩放,你应该自己缩放返回的位图。

然而:它似乎不是一个bug,而是一个非常糟糕的文档功能(即根本没有文档)。SDK实际上会给出额外的数据,提示你应该进行软件缩放,并给出精确的坐标。所以我是这样理解的:

假设我们有一个分辨率为1000 x 1000像素的传感器,我们想要在中心放大10倍。然后在我的测试中会发生这样的事情:

  • 读取kEdsPropID_Evf_ZoomRect会返回450:450的位置和100x100的大小-所有这些都是因为kEdsPropID_Evf_ZoomPosition返回450:450 -这也是预期的。
  • 但是你会收到一个200 x 200像素的位图--“不正确”,因为这是用于x5缩放...你会期望100 x 100,但这在不同的场景中都能观察到,所以这可能是很正常的事情,

  • ,但是通过读取kEdsPropID_Evf_ImagePosition,你可以知道这个位图的实际位置。这将返回400:400位置,因此可用于计算返回位图的最终裁剪和放大。

因此,虽然user3856307的代码应该可以工作,但相机可能有一些限制(例如在可被32整除的位置上返回位图),因此在我看来,合并kEdsPropID_Evf_ImagePosition应该会提供更精确的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31634533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档