uEye dotNetCPP - eiichiromomma/CVMLAB GitHub Wiki

(uEye) uEye .Net Formアプリケーション (C++)

サンプルにはC#しか無かったのでC++でWindows FormアプリケーションでuEyeのGigEカメラを作ったメモ

Visual StudioでのC++/CLR Windows Formアプリ

昔より面倒になったのでメモ

  1. [ファイル]-[新規作成]-[プロジェクト]で「空のCLRプロジェクト」を作成(ここではProject1)
  2. [プロジェクト]-[新しい項目の追加]-[UI]で「Windowsフォーム」を作成(ここではMyFrom.h, MyForm.cpp, MyForm1)
  3. MyForm.cppを下記のように変更
  4. [プロジェクト]-[プロパティ]-[構成プロパティ]-[リンカー]-[システム]でサブシステムを「Windows (/SUBSYSTEM:WINDOWS)」へ
  5. [リンカー]-[詳細設定]でエントリポイントを「main」に
  6. 試しにビルドして実行

何も無いウィンドウが表示されれば成功

MyForm.cpp

#include "MyForm.h"

using namespace Project1;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false);
	Application::Run(gcnew MyForm());
	return 0;
}

uEyeDotNet.dllの利用

dllの参照

  1. [プロジェクト]-[プロパティ]-[共通プロパティ]-[Frameworkと参照]を選択
  2. [新しい参照の追加]を選択し[参照]からuEyeの配布ファイルのDevelop/DotNet/uEyeDotNet.dllを指定
  3. 1のウィンドウの「参照」一覧にuEyeDotNetが加わっていれば成功。ソリューションエクスプローラの外部依存関係一覧にも表示される。

初期化と表示

  1. uEye::Camera を作成
  2. Init()で初期化
  3. uEye Cockpitで作成したProfile file(.ini)をParameter->Load()で読み込み
  4. Memory->Allocate()でメモリを確保
  5. Acquisition->Capture()でLiveVideoを開始
  6. EventFrameにフレーム更新イベントを追加
  7. フレーム更新イベントではMemory->GetActive()→Display->Render()とする

但し、LiveVideo表示用にMyFormにピクチャボックスを追加して名前をDisplayWindowとしておく。

MyFormクラスにprivateで下記のように追加

        	private: System::Windows::Forms::PictureBox^  DisplayWindow; //システムが勝手に追加
        	
		uEye::Camera ^m_Camera;
		Int32 m_s32MemID;
		IntPtr displayHandle;		
		void InitCamera()
		{
			m_Camera = gcnew uEye::Camera();
			uEye::Defines::Status statusRet = uEye::Defines::Status::NO_SUCCESS;
			statusRet = m_Camera->Init();
			if (statusRet != uEye::Defines::Status::SUCCESS)
			{
				MessageBox::Show("Camera Initializing Failed");
			}
			m_Camera->Parameter->Load("pathToProfileFile/uEyeHDRProfile.ini");
			//Memory
			statusRet = m_Camera->Memory->Allocate(m_s32MemID, true);
			if (statusRet != uEye::Defines::Status::SUCCESS)
			{
				MessageBox::Show("Allocate Memory Failed");
			}
			statusRet = m_Camera->Acquisition->Capture();
			if (statusRet != uEye::Defines::Status::SUCCESS)
			{
				MessageBox::Show("Start Live Video Failed");
			}

			m_Camera->EventFrame += gcnew System::EventHandler(this, &MyForm::onFrameEvent);
			
		}
		void onFrameEvent(System::Object^  sender, System::EventArgs^  e)
		{
			m_Camera->Memory->GetActive(m_s32MemID);
			m_Camera->Display->Render(m_s32MemID, displayHandle);
		}		

MyFormのコンストラクタで

			displayHandle = DisplayWindow->Handle;
			InitCamera();

とする。 ビルドして、カメラを接続した状態で実行するとピクチャボックスDisplayWindowにLive画像が表示される。

スナップショットの保存

Memory->GetActive()→Image->Save()とする。 この際12bitの場合はPNG形式を指定しておけば16bit pngで保存される。

ここではbutton_Saveとしてボタンを作成した。

	private: System::Void button_Save_Click(System::Object^  sender, System::EventArgs^  e) {
				 m_Camera->Memory->GetActive(m_s32MemID);
				 m_Camera->Image->Save("test.png",m_s32MemID, System::Drawing::Imaging::ImageFormat::Png,100);
			 }

ここ参照