uEye dotNetCPP - eiichiromomma/CVMLAB GitHub Wiki
uEye) uEye .Net Formアプリケーション (C++)
(サンプルにはC#しか無かったのでC++でWindows FormアプリケーションでuEyeのGigEカメラを作ったメモ
Visual StudioでのC++/CLR Windows Formアプリ
昔より面倒になったのでメモ
- [ファイル]-[新規作成]-[プロジェクト]で「空のCLRプロジェクト」を作成(ここではProject1)
- [プロジェクト]-[新しい項目の追加]-[UI]で「Windowsフォーム」を作成(ここではMyFrom.h, MyForm.cpp, MyForm1)
- MyForm.cppを下記のように変更
- [プロジェクト]-[プロパティ]-[構成プロパティ]-[リンカー]-[システム]でサブシステムを「Windows (/SUBSYSTEM:WINDOWS)」へ
- [リンカー]-[詳細設定]でエントリポイントを「main」に
- 試しにビルドして実行
何も無いウィンドウが表示されれば成功
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の参照
- [プロジェクト]-[プロパティ]-[共通プロパティ]-[Frameworkと参照]を選択
- [新しい参照の追加]を選択し[参照]からuEyeの配布ファイルのDevelop/DotNet/uEyeDotNet.dllを指定
- 1のウィンドウの「参照」一覧にuEyeDotNetが加わっていれば成功。ソリューションエクスプローラの外部依存関係一覧にも表示される。
初期化と表示
- uEye::Camera を作成
- Init()で初期化
- uEye Cockpitで作成したProfile file(.ini)をParameter->Load()で読み込み
- Memory->Allocate()でメモリを確保
- Acquisition->Capture()でLiveVideoを開始
- EventFrameにフレーム更新イベントを追加
- フレーム更新イベントでは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);
}
ここ参照