我最近开始使用OpenCV,以便将基于它的插件集成到现有项目中。 这个使用System :: Drawing :: Bitmap来管理图像和System :: EventArgs衍生物(不确定那个词),其中包含用于在插件之间传输数据的System :: Object元素。
OpenCV在C ++中的使用我必须相应地编写我的插件,但是由于CLR(对此不太确定),我的新c ++类可以继承我的C#“插件”界面。
这个插件很简单,将cv :: Mat转换为Bitmap,然后将其转换为之前引用的数据对象并调用事件。
但是它给了我错误C2440无法从System :: Drawing :: Bitmap转换为System :: Object。
我没有任何问题在C#中将Bitmap转换为Object,但现在我已经使用C ++了,这不再适用了。
怎么可能呢?我的意思是.Net的意思是,无论我是在C#还是C ++中,Bitmap的继承都是一样的?
也许我没有完全掌握clr的事情以及它是如何工作的。 无论如何,提前感谢您的帮助。
.h文件:
namespace PluginCV
{
public ref class Mat2Bitmap : public InterfacePlugin::IPlugin
{
private:
bool _isReady;
System::EventHandler^ evt;
System::Drawing::Bitmap^ Convert(cv::Mat img);
cv::Mat* img;
public:
virtual void __clrcall Start(void) sealed;
virtual void __clrcall Stop(void) sealed;
virtual void __clrcall Handle(Object ^ obj, EventArgs ^ args) sealed;
virtual void __clrcall InitWithNetwork(Object^ obj, int port) sealed;
virtual property EventHandler^ DoneEvent
{
void set (EventHandler^ e) sealed { evt = e; };
EventHandler^ get(void) sealed { return evt; };
}
virtual property bool isReady
{
void set (bool b) sealed { _isReady = b; };
bool get(void) sealed { return _isReady; };
}
};
}
.cpp:
#include "Stdafx.h"
//#include "PluginCV.h"
#include "MatEventArg.h"
void PluginCV::Mat2Bitmap::Stop(void)
{
}
void PluginCV::Mat2Bitmap::Start(void)
{
System::Drawing::Bitmap Bmp = Convert(*img);
DATAMODEL::BBEventArgs bb;
bb.Data = (System::Object)Bmp;
}
System::Drawing::Bitmap^ PluginCV::Mat2Bitmap::Convert(cv::Mat img)
{
cv::Size s = img.size();
System::Drawing::Bitmap^ bmp = gcnew System::Drawing::Bitmap(s.width, s.height, img.step1(), System::Drawing::Imaging::PixelFormat::Format24bppRgb, (System::IntPtr)img.data);
return bmp;
}
void PluginCV::Mat2Bitmap::Handle(Object^ obj, EventArgs^ args)
{
PluginCV::MatEventArg^ e = (PluginCV::MatEventArg^)args;
e->img->copyTo(*img);
Start();
}
void PluginCV::Mat2Bitmap::InitWithNetwork(Object^ obj, int port)
{
}
错误代码(法语):
Erreur 1 error C2440: 'cast de type' : impossible de convertir de 'System::Drawing::Bitmap' en 'System::Object' C:\SIMON\PluginCV\PluginCV\Mat2Bitmap.cpp 16 1 PluginCV
答案 0 :(得分:0)
PC重启就行了。 因为Bitmap继承了Object ...
,所以不知道是什么原因造成了这种情况不起作用无论如何,再见。