【问题标题】:Passing a class as IntPtr将类作为 IntPtr 传递
【发布时间】:2015-06-17 02:11:38
【问题描述】:

当我遇到这段代码时,我正在使用 Emgu CV:

Image<Bgr, byte> image = new Image<Bgr, byte>("test.jpg");
Image<Bgr, byte> image2 = new Image<Bgr, byte>("test2.jpg");
CvInvoke.cvSmooth(image, image2, SMOOTH_TYPE.CV_GAUSSIAN, 5, 5, 9, 9);

根据cvSmooth()的定义,前2个参数为IntPtr

我的问题是,为什么将 Image&lt;Bgr, byte&gt; 类型传递给它是有效的?

【问题讨论】:

  • Image&lt;Bgr, byte&gt; 是从SafeHandle 派生的吗?
  • @ScottChamberlain 据我所知,它的基类包括IDisposable, ICloneable, IEquatable, IXmlSerializable, ISerializable

标签: c# emgucv


【解决方案1】:

看起来Image&lt;TColor,TDepth&gt; 有一个Ptr 属性

Ptr

Image

我会把你的代码改成阅读

Image<Bgr, byte> image = new Image<Bgr, byte>("test.jpg");
Image<Bgr, byte> image2 = new Image<Bgr, byte>("test2.jpg");
CvInvoke.cvSmooth(image.Ptr, image2.Ptr, SMOOTH_TYPE.CV_GAUSSIAN, 5, 5, 9, 9);

您使用的是什么版本?我只是使用“稳定”版本来查找文档

【讨论】:

  • 我使用的是 2.4.10.1940 版本。
  • 有趣。那么这是否意味着在C#下,如果我有一个指针属性,编译器会自动将它包含在里面?意思是我可以直接打电话给image,而不是image.Ptr
  • @JohnTan 如果代码的作者包含显式/隐式转换,那么语法会更简洁一些。如果您想自己动手,SO question 应该可以帮助您入门。不幸的是,你不能为转换器做扩展方法。
猜你喜欢
  • 2015-11-20
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2015-03-22
  • 2012-03-15
相关资源
最近更新 更多