Changeset 23212

Show
Ignore:
Timestamp:
11/11/08 12:53:30 (5 years ago)
Author:
schima
Message:

cvCreateTrackbarの引数の参照渡しがGCのためうまくいかないので廃止

Location:
lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CV.cpp

    r23095 r23212  
    66#include "stdafx.h" 
    77#include "CV.h" 
     8#include "CvWindow.h" 
    89 
    910using namespace System; 
     
    20332034        /// <summary> 
    20342035        /// 指定された名前と範囲のトラックバー(スライダ,レンジコントロールとも呼ばれる)を作成する. 
    2035         /// この関数の引数には,トラックバーの位置に同期する変数と,トラックバーの位置変化に応じて呼び出されるコールバック関数を指定する. 
    2036         /// 作成されたトラックバーは,与えられたウィンドウの最上段に表示される. 
    2037         /// </summary> 
    2038         /// <param name="trackbar_name">トラックバーの名前</param> 
    2039         /// <param name="window_name">トラックバーの親ウィンドウの名前</param> 
    2040         /// <param name="value">スライダの初期位置。refで渡すので、この変数に現在のスライダの位置が随時更新される。</param> 
    2041         /// <param name="count">スライダの最大値.最小値は常に 0.</param> 
    2042         /// <param name="on_change">スライダの位置が変更されるたびに呼び出されるデリゲート</param> 
    2043         /// <returns></returns> 
    2044         Int32 CV::CreateTrackbar( String^ trackbar_name, String^ window_name, [In][Out] Int32% value, Int32 count, CvTrackbarCallbackHandler^ on_change ) 
    2045         { 
    2046                 CHECK_NULL(trackbar_name); 
    2047                 CHECK_NULL(window_name); 
    2048                 StringConverter^ conv1 = gcnew StringConverter(trackbar_name); 
    2049                 StringConverter^ conv2 = gcnew StringConverter(window_name); 
    2050                 pin_ptr<int> v_pin = &value; 
    2051                 if(on_change != nullptr){ 
    2052                         CvTrackbarCallback callbackPtr = (CvTrackbarCallback)(void*)Marshal::GetFunctionPointerForDelegate(on_change); 
    2053                         return ::cvCreateTrackbar(conv1->ToCharPtr(), conv2->ToCharPtr(), v_pin, count, callbackPtr); 
    2054                 }else{ 
    2055                         return ::cvCreateTrackbar(conv1->ToCharPtr(), conv2->ToCharPtr(), v_pin, count, NULL); 
    2056                 } 
    2057         } 
    2058         /// <summary> 
    2059         /// 指定された名前と範囲のトラックバー(スライダ,レンジコントロールとも呼ばれる)を作成する. 
    2060         /// この関数の引数には,トラックバーの位置に同期する変数と,トラックバーの位置変化に応じて呼び出されるコールバック関数を指定する. 
    2061         /// 作成されたトラックバーは,与えられたウィンドウの最上段に表示される. 
    2062         /// </summary> 
    2063         /// <param name="trackbar_name">トラックバーの名前</param> 
    2064         /// <param name="window_name">トラックバーの親ウィンドウの名前</param> 
    2065         /// <param name="value">スライダの初期位置。refで渡すので、この変数に現在のスライダの位置が随時更新される。</param> 
    2066         /// <param name="count">スライダの最大値.最小値は常に 0.</param> 
    2067         /// <returns></returns> 
    2068         Int32 CV::CreateTrackbar( String^ trackbar_name, String^ window_name, [In][Out] Int32% value, Int32 count ) 
    2069         { 
    2070                 CHECK_NULL(trackbar_name); 
    2071                 CHECK_NULL(window_name); 
    2072                 pin_ptr<int> v_pin = &value; 
    2073                 int* v_ptr = v_pin; 
    2074                 StringConverter^ conv1 = gcnew StringConverter(trackbar_name); 
    2075                 StringConverter^ conv2 = gcnew StringConverter(window_name); 
    2076                 return ::cvCreateTrackbar(conv1->ToCharPtr(), conv2->ToCharPtr(), v_ptr, count, NULL); 
    2077         } 
    2078         /// <summary> 
    2079         /// 指定された名前と範囲のトラックバー(スライダ,レンジコントロールとも呼ばれる)を作成する. 
    2080         /// この関数の引数には,トラックバーの位置に同期する変数と,トラックバーの位置変化に応じて呼び出されるコールバック関数を指定する. 
    20812036        /// 作成されたトラックバーは,与えられたウィンドウの最上段に表示される. 
    20822037        /// </summary> 
     
    20882043                CHECK_NULL(trackbar_name); 
    20892044                CHECK_NULL(window_name); 
    2090                 StringConverter^ conv1 = gcnew StringConverter(trackbar_name); 
    2091                 StringConverter^ conv2 = gcnew StringConverter(window_name); 
    2092                 return ::cvCreateTrackbar(conv1->ToCharPtr(), conv2->ToCharPtr(), 0, 100, NULL); 
    2093         } 
     2045                CvWindow^ w = CvWindow::GetWindowByName(window_name); 
     2046                if(w == nullptr){ 
     2047                        throw gcnew Exception("指定されたウィンドウは存在しません."); 
     2048                } 
     2049                try{ 
     2050                        w->CreateTrackbar(trackbar_name); 
     2051                        return 1; 
     2052                }catch(Exception^){ 
     2053                        return 0; 
     2054                } 
     2055        } 
     2056        /// <summary> 
     2057        /// 指定された名前と範囲のトラックバー(スライダ,レンジコントロールとも呼ばれる)を作成する. 
     2058        /// 作成されたトラックバーは,与えられたウィンドウの最上段に表示される. 
     2059        /// </summary> 
     2060        /// <param name="trackbar_name">トラックバーの名前</param> 
     2061        /// <param name="window_name">トラックバーの親ウィンドウの名前</param> 
     2062        /// <param name="value">スライダの初期位置</param> 
     2063        /// <param name="count">スライダの最大値.最小値は常に 0.</param> 
     2064        /// <returns></returns> 
     2065        Int32 CV::CreateTrackbar( String^ trackbar_name, String^ window_name, Int32 value, Int32 count ) 
     2066        { 
     2067                CHECK_NULL(trackbar_name); 
     2068                CHECK_NULL(window_name); 
     2069                CvWindow^ w = CvWindow::GetWindowByName(window_name); 
     2070                if(w == nullptr){ 
     2071                        throw gcnew Exception("指定されたウィンドウは存在しません."); 
     2072                } 
     2073                try{ 
     2074                        w->CreateTrackbar(trackbar_name, value, count); 
     2075                        return 1; 
     2076                }catch(Exception^){ 
     2077                        return 0; 
     2078                } 
     2079        } 
     2080        /// <summary> 
     2081        /// 指定された名前と範囲のトラックバー(スライダ,レンジコントロールとも呼ばれる)を作成する. 
     2082        /// 作成されたトラックバーは,与えられたウィンドウの最上段に表示される. 
     2083        /// </summary> 
     2084        /// <param name="trackbar_name">トラックバーの名前</param> 
     2085        /// <param name="window_name">トラックバーの親ウィンドウの名前</param> 
     2086        /// <param name="value">スライダの初期位置</param> 
     2087        /// <param name="count">スライダの最大値.最小値は常に 0.</param> 
     2088        /// <param name="on_change">スライダの位置が変更されるたびに呼び出されるデリゲート</param> 
     2089        /// <returns></returns> 
     2090        Int32 CV::CreateTrackbar( String^ trackbar_name, String^ window_name, Int32 value, Int32 count, CvTrackbarCallbackHandler^ on_change ) 
     2091        { 
     2092                CHECK_NULL(trackbar_name); 
     2093                CHECK_NULL(window_name); 
     2094                CvWindow^ w = CvWindow::GetWindowByName(window_name); 
     2095                if(w == nullptr){ 
     2096                        throw gcnew Exception("指定されたウィンドウは存在しません."); 
     2097                } 
     2098                try{ 
     2099                        w->CreateTrackbar(trackbar_name, value, count, on_change); 
     2100                        return 1; 
     2101                }catch(Exception^){ 
     2102                        return 0; 
     2103                } 
     2104        }        
    20942105        #pragma endregion  
    20952106        #pragma region CreateVideoWriter 
     
    22372248        void CV::DestroyAllWindows( void ) 
    22382249        { 
    2239                 ::cvDestroyAllWindows(); 
     2250                //::cvDestroyAllWindows(); 
     2251                CvWindow::DestroyAllWindows(); 
    22402252        } 
    22412253        #pragma endregion  
     
    22472259        void CV::DestroyWindow( String^ name ) 
    22482260        { 
    2249                 if(name == nullptr){ 
    2250                         throw gcnew ArgumentNullException(); 
    2251                 } 
    2252                 StringConverter^ conv = gcnew StringConverter(name); 
    2253                 ::cvDestroyWindow(conv->ToCharPtr()); 
     2261                CHECK_NULL(name);                
     2262                CvWindow^ w = CvWindow::GetWindowByName(name); 
     2263                if(w != nullptr){ 
     2264                        w->Close(); 
     2265                } 
    22542266        } 
    22552267        #pragma endregion  
     
    60746086        { 
    60756087                CHECK_NULL(name); 
    6076                 StringConverter^ conv = gcnew StringConverter(name); 
    6077                 return ::cvNamedWindow(conv->ToCharPtr()); 
     6088                try{ 
     6089                        gcnew N::CvWindow(name); 
     6090                        return 0; 
     6091                }catch(Exception^){ 
     6092                        return 1; 
     6093                } 
    60786094        } 
    60796095        /// <summary> 
     
    60876103        { 
    60886104                CHECK_NULL(name); 
    6089                 StringConverter^ conv = gcnew StringConverter(name); 
    6090                 return ::cvNamedWindow(conv->ToCharPtr(), (int)flags); 
     6105                try{ 
     6106                        gcnew N::CvWindow(name, flags); 
     6107                        return 0; 
     6108                }catch(Exception^){ 
     6109                        return 1; 
     6110                } 
    60916111        } 
    60926112        #pragma endregion  
     
    84198439                CHECK_NULL(name); 
    84208440                CHECK_NULL(image); 
    8421                 StringConverter^ conv = gcnew StringConverter(name); 
    8422                 ::cvShowImage(conv->ToCharPtr(), image->Ptr); 
     8441                CvWindow^ w = CvWindow::GetWindowByName(name); 
     8442                if(w != nullptr){ 
     8443                        w->Image = image; 
     8444                }                
    84238445        } 
    84248446        #pragma endregion  
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CV.h

    r23095 r23212  
    1919 
    2020using namespace System; 
     21using namespace System::Collections::Generic; 
    2122using namespace System::Runtime::InteropServices; 
    2223namespace N = KwsmLab::OpenCvSharp; 
     
    169170                static N::CvSubdiv2D^ CreateSubdiv2D( SeqType subdiv_type, Int32 header_size, Int32 vtx_size, Int32 quadedge_size, N::CvMemStorage^ storage ); 
    170171                static Int32 CreateTrackbar( String^ trackbar_name, String^ window_name ); 
    171                 static Int32 CreateTrackbar( String^ trackbar_name, String^ window_name, [In][Out] Int32% value, Int32 count ); 
    172                 static Int32 CreateTrackbar( String^ trackbar_name, String^ window_name, [In][Out] Int32% value, Int32 count, N::CvTrackbarCallbackHandler^ on_change ); 
     172                static Int32 CreateTrackbar( String^ trackbar_name, String^ window_name, Int32 value, Int32 count ); 
     173                static Int32 CreateTrackbar( String^ trackbar_name, String^ window_name, Int32 value, Int32 count, N::CvTrackbarCallbackHandler^ on_change ); 
    173174                static N::CvVideoWriter^ CreateVideoWriter( String^ filename, String^ fourcc, Double fps, N::CvSize frame_size ); 
    174175                static N::CvVideoWriter^ CreateVideoWriter( String^ filename, String^ fourcc, Double fps, N::CvSize frame_size, Boolean is_color );      
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CvTrackbar.cpp

    r22623 r23212  
    1212        CvTrackbar::CvTrackbar(String^ name, String^ window) 
    1313        { 
    14                 CHECK_NULL(name); 
    15                 CHECK_NULL(window);              
    16                 this->name = name; 
    17                 this->window = window; 
    18                 this->max = 100;                 
    19                 this->callback = nullptr; 
    20                 int value = 0; 
    21                 CV::CreateTrackbar(name, window, value, max, callback); 
     14                this->value = 0; 
     15                Initialize(name, window, this->value, 100, nullptr); 
    2216        } 
    2317        /// <summary> 
     
    2923        CvTrackbar::CvTrackbar(String^ name, String^ window, CvTrackbarCallbackHandler^ callback) 
    3024        { 
    31                 CHECK_NULL(name); 
    32                 CHECK_NULL(window);              
    33                 this->name = name; 
    34                 this->window = window; 
    35                 this->max = 100;                 
    36                 this->callback = callback; 
    37                 int value = 0; 
    38                 CV::CreateTrackbar(name, window, value, max, callback); 
     25                this->value = 0; 
     26                Initialize(name, window, this->value, 100, callback); 
    3927        } 
    4028        /// <summary> 
     
    4331        /// <param name="name">�g���b�N�o�[�̖��O</param> 
    4432        /// <param name="window">�g���b�N�o�[�̐e�E�B���h�E��</param> 
    45         /// <param name="value">�X���C�_�̈ʒu����C�����^�ϐ��̎Q�ƁD�쐬���̃X���C�_�ʒu�́C���̕ϐ��ɂ��Ē�����. ref�œn���̂ŁA�X���C�_�������Ƃ����Ɋ��蓖�Ă��ϐ��̒l��������/param> 
     33        /// <param name="value">�X���C�_�̏���</param> 
    4634        /// <param name="max">�X���C�_�̍ő��D�ŏ��l�͏� 0.</param> 
    47         CvTrackbar::CvTrackbar(String^ name, String^ window, [In][Out] Int32% value, Int32 max) 
     35        CvTrackbar::CvTrackbar( String^ name, String^ window, Int32 value, Int32 max) 
    4836        { 
    49                 CHECK_NULL(name); 
    50                 CHECK_NULL(window); 
    51                 this->name = name; 
    52                 this->window = window; 
    53                 this->max = max; 
    54                 this->callback = nullptr; 
    55                 CV::CreateTrackbar(name, window, value, max, callback); 
     37                this->value = value; 
     38                Initialize(name, window, this->value, max, nullptr); 
    5639        } 
    5740        /// <summary> 
     
    5942        /// <param name="name">�g���b�N�o�[�̖��O</param> 
    6043        /// <param name="window">�g���b�N�o�[�̐e�E�B���h�E��</param> 
    61         /// <param name="value">�X���C�_�̈ʒu����C�����^�ϐ��̎Q�ƁD�쐬���̃X���C�_�ʒu�́C���̕ϐ��ɂ��Ē�����. ref�œn���̂ŁA�X���C�_�������Ƃ����Ɋ��蓖�Ă��ϐ��̒l��������/param> 
     44        /// <param name="value">�X���C�_�̏���</param> 
    6245        /// <param name="max">�X���C�_�̍ő��D�ŏ��l�͏� 0.</param> 
    6346        /// <param name="callback">�X���C�_�̈ʒu���ύX�������тɌĂяo�����f���Q�[�g</param> 
    64         CvTrackbar::CvTrackbar(String^ name, String^ window, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback) 
     47        CvTrackbar::CvTrackbar(String^ name, String^ window, Int32 value, Int32 max, CvTrackbarCallbackHandler^ callback) 
     48        { 
     49                this->value = value; 
     50                Initialize(name, window, this->value, max, callback); 
     51        } 
     52 
     53        /// <summary> 
     54        /// �e�R���X�g���N�^���ʂ̏���    /// </summary> 
     55        /// <param name="name">�g���b�N�o�[�̖��O</param> 
     56        /// <param name="window">�g���b�N�o�[�̐e�E�B���h�E��</param> 
     57        /// <param name="value">�X���C�_�̏���. �Q�Ɠn���ɂ��A���̕ϐ��Ɍ��݂̃X���C�_�̈ʒu�������X�V���� (!!!���AGC�ɂ��ǐՎQ�ƕs�\�ɂȂ��\����������tatic�ϐ���肷�邱��!!)</param> 
     58        /// <param name="max">�X���C�_�̍ő��D�ŏ��l�͏� 0.</param> 
     59        /// <param name="callback">�X���C�_�̈ʒu���ύX�������тɌĂяo�����f���Q�[�g</param> 
     60        void CvTrackbar::Initialize(String^ name, String^ window, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback) 
    6561        { 
    6662                CHECK_NULL(name); 
     
    7066                this->max = max; 
    7167                this->callback = callback; 
    72                 CV::CreateTrackbar(name, window, value, max, callback); 
     68 
     69                StringConverter^ conv_n = gcnew StringConverter(name); 
     70                StringConverter^ conv_w = gcnew StringConverter(window);                 
     71                int result; 
     72                this->gch_value = GCHandle::Alloc(value, GCHandleType::Pinned); 
     73                pin_ptr<int> v_pin = &value; 
     74                if(callback != nullptr){ 
     75                        this->gch_callback = GCHandle::Alloc(callback); 
     76                        CvTrackbarCallback callbackPtr = static_cast<CvTrackbarCallback>(Marshal::GetFunctionPointerForDelegate(callback).ToPointer()); 
     77                        result = ::cvCreateTrackbar(conv_n->ToCharPtr(), conv_w->ToCharPtr(), v_pin, max, callbackPtr); 
     78                }else{ 
     79                        result = ::cvCreateTrackbar(conv_n->ToCharPtr(), conv_w->ToCharPtr(), v_pin, max, NULL); 
     80                } 
     81                if(result == 0){ 
     82                        throw gcnew Exception("CvTrackbar�̐����Ɏ��s���܂���."); 
     83                } 
     84        } 
     85 
     86        /// <summary> 
     87        /// ���� 
     88        /// </summary> 
     89        void CvTrackbar::Release( void ) 
     90        { 
     91                if ( this->gch_callback.IsAllocated ) { 
     92                        this->gch_callback.Free(); 
     93        } 
     94                if ( this->gch_value.IsAllocated ) { 
     95                        this->gch_value.Free(); 
     96        } 
    7397        } 
    7498 
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CvTrackbar.h

    r22623 r23212  
    1010 
    1111using namespace System; 
     12using namespace System::Collections::Generic; 
    1213using namespace System::Runtime::InteropServices; 
    1314namespace N = KwsmLab::OpenCvSharp; 
     
    2425                String^ name; 
    2526                String^ window; 
     27                Int32 value; 
    2628                Int32 max; 
    2729                CvTrackbarCallbackHandler^ callback; 
     30                GCHandle gch_value; 
     31                GCHandle gch_callback; 
     32 
     33                void Initialize(String^ name, String^ window, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback); 
     34 
    2835        internal: 
    2936                CvTrackbar(String^ name, String^ window); 
    3037                CvTrackbar(String^ name, String^ window, CvTrackbarCallbackHandler^ callback); 
    31                 CvTrackbar(String^ name, String^ window, [In][Out] Int32% value, Int32 max); 
    32                 CvTrackbar(String^ name, String^ window, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback); 
     38                CvTrackbar(String^ name, String^ window, Int32 value, Int32 max); 
     39                CvTrackbar(String^ name, String^ window, Int32 value, Int32 max, CvTrackbarCallbackHandler^ callback); 
     40                void Release( void ); 
     41 
    3342        public: 
    3443                /// <summary> 
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CvWindow.cpp

    r23095 r23212  
    55namespace OpenCvSharp 
    66{ 
     7        #pragma region ������ 
    78        /// <summary> 
    89        /// �K���ȃE�B���h�E���ŏ���      /// </summary> 
    910        CvWindow::CvWindow(void) 
    1011        {                
    11                 this->name = GetDefaultWindowName(); 
    12                 CV::NamedWindow(this->name); 
    13                 this->isDisposed = false; 
    14                 this->image = nullptr; 
     12                Initialize(nullptr, WindowMode::AutoSize, nullptr); 
    1513        } 
    1614        /// <summary> 
     
    1917        CvWindow::CvWindow(WindowMode flags) 
    2018        {                
    21                 this->name = GetDefaultWindowName(); 
    22                 CV::NamedWindow(this->name, flags); 
    23                 this->isDisposed = false; 
    24                 this->image = nullptr; 
     19                Initialize(nullptr, WindowMode::AutoSize, nullptr); 
    2520        } 
    2621        /// <summary> 
     
    2924        CvWindow::CvWindow(N::CvArr^ image) 
    3025        {                
    31                 this->name = GetDefaultWindowName(); 
    32                 CV::NamedWindow(this->name); 
     26                Initialize(nullptr, WindowMode::AutoSize, image); 
     27        } 
     28        /// <summary> 
     29        /// �K���ȃE�B���h�E���ŁA�摜�̕\�����[�h�Ǝn�߂��������Ă����摜��肵�ď���        /// </summary> 
     30        /// <param name="flags">�E�B���h�E�̃t���O</param> 
     31        /// <param name="image">�E�B���h�E�ɕ\��������</param> 
     32        CvWindow::CvWindow(WindowMode flags, N::CvArr^ image) 
     33        {                
     34                Initialize(nullptr, WindowMode::AutoSize, image); 
     35        } 
     36        /// <summary> 
     37        /// �E�B���h�E����肵�ď���        /// </summary> 
     38        /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
     39        CvWindow::CvWindow(String^ name) 
     40        {                
     41                Initialize(name, WindowMode::AutoSize, nullptr); 
     42        } 
     43        /// <summary> 
     44        /// �E�B���h�E���Ɖ摜�̕\�����[�h��肵�ď���  /// </summary> 
     45        /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
     46        /// <param name="flags">�E�B���h�E�̃t���O</param> 
     47        CvWindow::CvWindow(String^ name, WindowMode flags) 
     48        { 
     49                Initialize(name, flags, nullptr); 
     50        } 
     51        /// <summary> 
     52        /// �E�B���h�E���Ǝn�߂��������Ă����摜��肵�ď���     /// </summary> 
     53        /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
     54        /// <param name="image">�E�B���h�E�ɕ\��������</param> 
     55        CvWindow::CvWindow(String^ name, N::CvArr^ image)  
     56        {                
     57                Initialize(name, WindowMode::AutoSize, image); 
     58        } 
     59        /// <summary> 
     60        /// �E�B���h�E���Ɖ摜�̕\�����[�h�Ǝn�߂��������Ă����摜��肵�ď���       /// </summary> 
     61        /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
     62        /// <param name="flags">�E�B���h�E�̃t���O</param> 
     63        /// <param name="image">�E�B���h�E�ɕ\��������</param> 
     64        CvWindow::CvWindow(String^ name, WindowMode flags, N::CvArr^ image)  
     65        {        
     66                Initialize(name, flags, image); 
     67        } 
     68        /// <summary> 
     69        /// �R���X�g���N�^�̊e�I�[�o�[���[�h���ʂ̏����� 
     70        /// </summary> 
     71        /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
     72        /// <param name="flags">�E�B���h�E�̃t���O</param> 
     73        /// <param name="image">�E�B���h�E�ɕ\��������</param> 
     74        void CvWindow::Initialize(String^ name, WindowMode flags, N::CvArr^ image) 
     75        { 
     76                this->name = (name == nullptr) ? GetDefaultWindowName() : name; 
     77                 
     78                StringConverter^ conv = gcnew StringConverter(this->name); 
     79                int status = ::cvNamedWindow(conv->ToCharPtr(), (int)flags); 
     80                if(status == 0){ 
     81                        throw gcnew Exception("CvWindow�̐����Ɏ��s���܂���."); 
     82                } 
     83 
    3384                this->isDisposed = false; 
    3485                this->Image = image; 
    35         } 
    36         /// <summary> 
    37         /// �K���ȃE�B���h�E���ŁA�摜�̕\�����[�h�Ǝn�߂��������Ă����摜��肵�ď���        /// </summary> 
    38         /// <param name="flags">�E�B���h�E�̃t���O</param> 
    39         /// <param name="image">�E�B���h�E�ɕ\��������</param> 
    40         CvWindow::CvWindow(WindowMode flags, N::CvArr^ image) 
    41         {                
    42                 this->name = GetDefaultWindowName(); 
    43                 CV::NamedWindow(this->name, flags); 
    44                 this->isDisposed = false; 
    45                 this->Image = image; 
    46         } 
    47         /// <summary> 
    48         /// �E�B���h�E����肵�ď���        /// </summary> 
    49         /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
    50         CvWindow::CvWindow(String^ name) 
    51         {                
    52                 CV::NamedWindow(name); 
    53                 this->name = name; 
    54                 this->isDisposed = false; 
    55                 this->image = nullptr; 
    56         } 
    57         /// <summary> 
    58         /// �E�B���h�E���Ɖ摜�̕\�����[�h��肵�ď���  /// </summary> 
    59         /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
    60         /// <param name="flags">�E�B���h�E�̃t���O</param> 
    61         CvWindow::CvWindow(String^ name, WindowMode flags) 
    62         { 
    63                 CV::NamedWindow(name, flags); 
    64                 this->name = name; 
    65                 this->isDisposed = false; 
    66                 this->image = nullptr; 
    67         } 
    68         /// <summary> 
    69         /// �E�B���h�E���Ǝn�߂��������Ă����摜��肵�ď���     /// </summary> 
    70         /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
    71         /// <param name="image">�E�B���h�E�ɕ\��������</param> 
    72         CvWindow::CvWindow(String^ name, N::CvArr^ image) 
    73         {                
    74                 CV::NamedWindow(name); 
    75                 this->name = name; 
    76                 this->isDisposed = false; 
    77                 this->Image = image; 
    78         } 
    79         /// <summary> 
    80         /// �E�B���h�E���Ɖ摜�̕\�����[�h�Ǝn�߂��������Ă����摜��肵�ď���       /// </summary> 
    81         /// <param name="name">�E�B���h�E�̎��ʂɗp�������B���h�E���ŁC�E�B���h�E�̃^�C�g���o �[�ɕ\�������D</param> 
    82         /// <param name="flags">�E�B���h�E�̃t���O</param> 
    83         /// <param name="image">�E�B���h�E�ɕ\��������</param> 
    84         CvWindow::CvWindow(String^ name, WindowMode flags, N::CvArr^ image) 
    85         {                
    86                 CV::NamedWindow(name, flags); 
    87                 this->name = name; 
    88                 this->isDisposed = false; 
    89                 this->Image = image; 
     86                this->trackbars = gcnew Dictionary<String^, CvTrackbar^>(); 
     87                windows->Add(this->name, this); 
    9088        } 
    9189        /// <summary> 
     
    118116        { 
    119117                if(!this->isDisposed){ 
    120                         this->isDisposed = true; 
    121                         CV::DestroyWindow(this->name); 
    122                 } 
    123         } 
     118                        this->isDisposed = true;                         
     119                        StringConverter^ conv = gcnew StringConverter(name); 
     120                        ::cvDestroyWindow(conv->ToCharPtr()); 
     121                        for each(KeyValuePair<String^, CvTrackbar^>^ pair in trackbars){ 
     122                                if(pair->Value != nullptr){ 
     123                                        pair->Value->Release(); 
     124                                } 
     125                        } 
     126                        try{ 
     127                                windows->Remove(this->Name); 
     128                        }catch(Exception^){} 
     129                } 
     130        } 
     131        /// <summary> 
     132        /// �w�肵�����O�ɑΉ������B���h�E��� 
     133        /// </summary> 
     134        CvWindow^ CvWindow::GetWindowByName(String^ name){ 
     135                CHECK_NULL(name); 
     136                if(windows->ContainsKey(name)){ 
     137                        return windows[name]; 
     138                }else{ 
     139                        return nullptr; 
     140                } 
     141        } 
     142        /// <summary> 
     143        /// �S�Ă�HighGUI �E�B���h�E��� 
     144        /// </summary> 
     145        void CvWindow::DestroyAllWindows( void ) 
     146        { 
     147                for each(KeyValuePair<String^, CvWindow^>^ pair in windows){ 
     148                        if(pair->Value != nullptr){ 
     149                                pair->Value->Close(); 
     150                        } 
     151                } 
     152        } 
     153        #pragma endregion 
    124154 
    125155        /// <summary> 
     
    129159        CvTrackbar^ CvWindow::CreateTrackbar( String^ name ) 
    130160        { 
    131                 return gcnew CvTrackbar(name, this->Name); 
     161                CvTrackbar^ trackbar = gcnew CvTrackbar(name, this->Name); 
     162                this->trackbars->Add(name, trackbar); 
     163                return trackbar; 
    132164        } 
    133165        /// <summary> 
     
    138170        CvTrackbar^ CvWindow::CreateTrackbar( String^ name, CvTrackbarCallbackHandler^ callback ) 
    139171        { 
    140                 return gcnew CvTrackbar(name, this->Name, callback); 
    141         } 
    142         /// <summary> 
    143         /// �E�B���h�E�Ƀg���b�N�o�[������A�쐬�����g���b�N�o�[��� 
    144         /// </summary> 
    145         /// <param name="name">�g���b�N�o�[�̖��O</param> 
    146         /// <param name="value">�X���C�_�̈ʒu����C�����^�ϐ��̎Q�ƁD�쐬���̃X���C�_�ʒu�́C���̕ϐ��ɂ��Ē�����. ref�œn���̂ŁA�X���C�_�������Ƃ����Ɋ��蓖�Ă��ϐ��̒l��������/param> 
     172                CvTrackbar^ trackbar = gcnew CvTrackbar(name, this->Name, callback); 
     173                this->trackbars->Add(name, trackbar); 
     174                return trackbar; 
     175        } 
     176        /// <summary> 
     177        /// �E�B���h�E�Ƀg���b�N�o�[������A�쐬�����g���b�N�o�[��� 
     178        /// </summary> 
     179        /// <param name="name">�g���b�N�o�[�̖��O</param> 
     180        /// <param name="value">�X���C�_�̈ʒu.</param> 
    147181        /// <param name="max">�X���C�_�̍ő��D�ŏ��l�͏� 0.</param> 
    148         CvTrackbar^ CvWindow::CreateTrackbar( String^ name, [In][Out] Int32% value, Int32 max ) 
    149         { 
    150                 return gcnew CvTrackbar(name, this->Name, value, max); 
    151         } 
    152         /// <summary> 
    153         /// �E�B���h�E�Ƀg���b�N�o�[������A�쐬�����g���b�N�o�[��� 
    154         /// </summary> 
    155         /// <param name="name">�g���b�N�o�[�̖��O</param> 
    156         /// <param name="value">�X���C�_�̈ʒu����C�����^�ϐ��̎Q�ƁD�쐬���̃X���C�_�ʒu�́C���̕ϐ��ɂ��Ē�����. ref�œn���̂ŁA�X���C�_�������Ƃ����Ɋ��蓖�Ă��ϐ��̒l��������/param> 
     182        CvTrackbar^ CvWindow::CreateTrackbar( String^ name, Int32 value, Int32 max ) 
     183        { 
     184                CvTrackbar^ trackbar = gcnew CvTrackbar(name, this->Name, value, max); 
     185                this->trackbars->Add(name, trackbar); 
     186                return trackbar; 
     187        } 
     188        /// <summary> 
     189        /// �E�B���h�E�Ƀg���b�N�o�[������A�쐬�����g���b�N�o�[��� 
     190        /// </summary> 
     191        /// <param name="name">�g���b�N�o�[�̖��O</param> 
     192        /// <param name="value">�X���C�_�̏���</param> 
    157193        /// <param name="max">�X���C�_�̍ő��D�ŏ��l�͏� 0.</param> 
    158194        /// <param name="callback">�X���C�_�̈ʒu���ύX�������тɌĂяo�����f���Q�[�g</param> 
    159         CvTrackbar^ CvWindow::CreateTrackbar( String^ name, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback ) 
    160         { 
    161                 return gcnew CvTrackbar(name, this->Name, value, max, callback); 
     195        CvTrackbar^ CvWindow::CreateTrackbar( String^ name, Int32 value, Int32 max, CvTrackbarCallbackHandler^ callback ) 
     196        { 
     197                CvTrackbar^ trackbar = gcnew CvTrackbar(name, this->Name, value, max, callback); 
     198                this->trackbars->Add(name, trackbar); 
     199                return trackbar; 
    162200        } 
    163201 
     
    188226        void CvWindow::ShowImage(N::CvArr^ image) 
    189227        { 
    190                 this->image = image; 
    191                 CV::ShowImage(this->name, image); 
     228                if(image != nullptr){ 
     229                        this->image = image;                             
     230                        StringConverter^ conv = gcnew StringConverter(name); 
     231                        ::cvShowImage(conv->ToCharPtr(), image->Ptr); 
     232                }                
    192233        } 
    193234 
  • lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CvWindow.h

    r23095 r23212  
    2525        { 
    2626        private: 
     27                static Dictionary<String^, CvWindow^>^ windows = gcnew Dictionary<String^, CvWindow^>(); 
     28 
    2729                Boolean isDisposed; 
    2830                String^ name; 
    2931                N::CvArr^ image; 
    3032                CvMouseCallbackHandler^ mouseCallback; 
     33                Dictionary<String^, CvTrackbar^>^ trackbars; 
    3134                 
     35                void Initialize(String^ name, WindowMode flags, N::CvArr^ image); 
    3236                String^ GetDefaultWindowName(void); 
    3337 
     38        internal: 
     39                /// <summary> 
     40                /// �S�ẴE�B���h�E������邽�߂̎��� 
     41                /// </summary> 
     42                static property Dictionary<String^, CvWindow^>^ Windows{ 
     43                        Dictionary<String^, CvWindow^>^ get(){ return windows; } 
     44                }                
     45 
    3446        public: 
     47                #pragma region ���\�b�h 
    3548                CvWindow(void); 
    3649                CvWindow(WindowMode flags); 
     
    4255                CvWindow(String^ name, WindowMode flags, N::CvArr^ image); 
    4356                !CvWindow(void); 
    44                 ~CvWindow(void);         
     57                ~CvWindow(void); 
     58 
    4559                void Close(void); 
    4660                CvTrackbar^ CreateTrackbar( String^ name ); 
    4761                CvTrackbar^ CreateTrackbar( String^ name, CvTrackbarCallbackHandler^ callback ); 
    48                 CvTrackbar^ CreateTrackbar( String^ name, [In][Out] Int32% value, Int32 max ); 
    49                 CvTrackbar^ CreateTrackbar( String^ name, [In][Out] Int32% value, Int32 max, CvTrackbarCallbackHandler^ callback ); 
     62                CvTrackbar^ CreateTrackbar( String^ name, Int32 value, Int32 max ); 
     63                CvTrackbar^ CreateTrackbar( String^ name, Int32 value, Int32 max, CvTrackbarCallbackHandler^ callback ); 
    5064                void Move( Int32 x, Int32 y ); 
    5165                void Resize( Int32 width, Int32 height ); 
    5266                void ShowImage( CvArr^ image ); 
     67 
    5368                static Int32 WaitKey( void ); 
    5469                static Int32 WaitKey( Int32 delay ); 
    5570                static void ShowImages( ...array<N::CvArr^>^ images ); 
    5671                static void ShowImages( WindowMode flags, ...array<N::CvArr^>^ images ); 
     72                static CvWindow^ GetWindowByName(String^ name); 
     73                static void DestroyAllWindows( void ); 
     74                #pragma endregion 
     75 
     76                #pragma region �v���p�e�B 
     77                /// <summary> 
     78                /// �o�^�����������b�N�o�[�������               /// </summary> 
     79                property Dictionary<String^, CvTrackbar^>^ Trackbars{ 
     80                        Dictionary<String^, CvTrackbar^>^ get(){ return trackbars; } 
     81                } 
    5782                /// <summary> 
    5883                /// �}�E�X�C�x���g�����������Ƃ��̃C�x���g�n���h�� 
     
    81106                        }        
    82107                        void set(N::CvArr^ value){  
    83                                 this->image = value; 
    84                                 CV::ShowImage(this->name, image); 
     108                                if(image != nullptr){ 
     109                                        this->image = value;                             
     110                                        StringConverter^ conv = gcnew StringConverter(name); 
     111                                        ::cvShowImage(conv->ToCharPtr(), image->Ptr); 
     112                                } 
    85113                        } 
    86114                } 
     
    96124                        IntPtr get(void){ return CV::GetWindowHandle(name); } 
    97125                } 
     126                #pragma endregion 
    98127        }; 
    99128