2017-06-22 38 views
0

最近OpenCVを使用して、既存のプロジェクトにプラグインを統合しようとしました。 System :: Drawing :: Bitmapを使用して画像を管理し、System :: EventArgs派生物(その単語についてはわからない)には、プラグイン間でデータを転送するために使用されるSystem :: Object要素が含まれています。エラーC2440: 'System :: Drawing :: Bitmap'を 'System :: Object'にキャストできません

C++でOpenCV beeing私のプラグインはそれに応じてプログラムする必要がありますが、CLR(そのことについてはあまりよく分かりません)のおかげで、私の新しいC++クラスはC#の "Plugin"インターフェースを継承できます。

この1つのプラグインは、cv :: Matをビットマップに変換し、それを以前に引用したデータオブジェクトにキャストしてイベントを呼び出すことで、非常に簡単です。

しかし、C2440がSystem :: Drawing :: BitmapからSystem :: Objectにキャストできないというエラーが出ています。

私はビットマップをC#でオブジェクトにキャストするのに問題はありませんでしたが、今はC++で動作していますが、これはもう動作しません。

どうすれば可能ですか?私は、.NETのポイントは、ビットマップの継承は私がC#またはC++のどちらであるかにかかわらず同じであるということですか?

多分私は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

cppファイル内のオブジェクトへのビットマップ・キャスト行(16): 'bb.Data =(System :: Object)Bmp;' –

答えて

0

PCの再起動は、トリックを行いました。 ビットマップがオブジェクトを継承して以来、これがうまくいかない原因は考えられません...

とにかく、

関連する問題