root/lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/IplImage.h @ 26101

Revision 26101, 9.0 kB (checked in by schima, 4 years ago)

WPF除外時の#ifdefの範囲がおかしかったので修正

Line 
1/**
2 * (C) 2008 Schima
3 * This code is licenced under the LGPL.
4 */
5
6#pragma once
7
8#include "AllEnums.h"
9#include "ICvArr.h"
10#include "CvFont.h"
11#include "CvPoint.h"
12#include "CvRect.h"
13#include "CvScalar.h"
14#include "CvSize.h"
15#include "CvTermCriteria.h"
16#include "BitmapConverter.h"
17#include "WriteableBitmapConverter.h"
18
19typedef struct _IplImage __IplImage;
20
21using namespace System;
22using namespace System::Runtime::InteropServices;
23namespace N = KwsmLab::OpenCvSharp;
24namespace SD = System::Drawing;
25namespace SDI = System::Drawing::Imaging;
26#ifdef WPF_ENABLED
27namespace SWM = System::Windows::Media;
28namespace SWMI = System::Windows::Media::Imaging;
29#endif
30
31namespace KwsmLab {
32namespace OpenCvSharp
33{
34        /// <summary>
35        /// IPL 画像ヘッダ
36        /// </summary>
37        public ref class IplImage : public CvArr, public ICvArr<IplImage^>
38        {
39        private:
40
41        internal:
42                /// <summary>
43                /// IPL画像ヘッダへのポインタ [ (__IplImage*)Ptr ]
44                /// </summary>
45                property __IplImage* ImagePtr{
46                        __IplImage* get(void){ return (__IplImage*)this->Ptr; }
47                }
48                IplImage(__IplImage* ptr);
49                IplImage(__IplImage* ptr, Boolean isEnabledDispose);
50                virtual void Release( void ) override; 
51
52        public:         
53                IplImage( String^ filename);
54                IplImage( String^ filename, LoadMode flags );
55                IplImage( CvSize size, BitDepth depth, Int32 channels );
56                IplImage( Int32 width, Int32 height, BitDepth depth, Int32 channels );
57                static N::IplImage^ FromPtr( IntPtr ptr );
58                static N::IplImage^ FromBitmap( SD::Bitmap^ bitmap );
59#ifdef WPF_ENABLED
60                static N::IplImage^ FromWriteableBitmap( SWMI::WriteableBitmap^ wb );
61#endif
62                static IplImage^ CreateHeader(CvSize size, BitDepth depth, Int32 channels);
63
64                #pragma region プロパティ
65                /// <summary>
66                /// 元データポインタのバイトサイズ、
67                /// すなわち sizeof(IplImage) を取得する.
68                /// </summary>
69                static property Int32 SizeOf{
70                        Int32 get(void){ return sizeof(__IplImage); }
71                }
72                /// <summary>
73                /// 画像の行のアライメント(4 あるいは 8)を取得する.
74        /// OpenCV はこれを無視して,代わりに widthStep を使用する.
75                /// </summary>
76                [Obsolete]
77                property int Align {
78                        int get(){ return ImagePtr->align; }
79                };
80                /// <summary>
81        /// OpenCVでは無視される.
82                /// </summary>
83                [Obsolete]
84                property int AlphaChannel{
85                        int get(){ return ImagePtr->alphaChannel; }
86                }
87                /// <summary>
88        /// OpenCVでは無視される.
89                /// </summary>
90                [Obsolete]
91                property IntPtr BorderMode{
92                        IntPtr get(){ return IntPtr(ImagePtr->BorderMode); }
93                }
94                /// <summary>
95        /// OpenCVでは無視される.
96                /// </summary>
97                [Obsolete]
98                property IntPtr BorderConst{
99                        IntPtr get(){ return IntPtr(ImagePtr->BorderConst); }
100                }
101                /// <summary>
102        /// OpenCVでは無視される.
103                /// </summary>
104                [Obsolete]
105                property IntPtr ColorModel{
106                        IntPtr get(){ return IntPtr(ImagePtr->colorModel); }
107                }
108                /// <summary>
109        /// OpenCVでは無視される.
110                /// </summary>
111                [Obsolete]
112                property IntPtr ChannelSeq{
113                        IntPtr get(){ return IntPtr(ImagePtr->channelSeq); }
114                }
115                /// <summary>
116                /// 画像の COI(channel of interest)を取得・設定する
117                /// </summary>
118                property Int32 COI{
119                        Int32 get(){ return GetCOI(); }
120                        void set(Int32 value){ SetCOI(value); }
121                }
122                /// <summary>
123                /// 0 - インタリーブカラーチャンネル, 1 - 分離カラーチャンネル,
124        /// cvCreateImage が作成できるのは,インタリーブ画像のみ
125                /// </summary>
126                property int DataOrder{
127                        int get(){ return ImagePtr->dataOrder; }
128                }
129                /// <summary>
130                /// ピクセルの色深度のビット数を取得する
131                /// </summary>
132                property BitDepth Depth{
133                        BitDepth get(){ return (BitDepth)(ImagePtr->depth); }
134                }
135                /// <summary>
136                /// 画像のピクセル高さを取得する
137                /// </summary>
138                property int Height {
139                        int get(){ return ImagePtr->height; }
140                };
141                /// <summary>
142                /// バージョン (=0) を取得する
143                /// </summary>
144                property int ID{
145                        int get(){ return ImagePtr->ID; }
146                }
147                /// <summary>
148                /// アライメントが調整された画像データへのポインタを取得する. これを通してピクセルデータにアクセスできる。
149                /// 利用する際は System::Byte* にキャストすべし。
150                /// </summary>
151                property IntPtr ImageData{
152                        IntPtr get(){ return IntPtr(ImagePtr->imageData); }
153                }
154                /// <summary>
155                /// アライメントが調整された画像データへのポインタを取得する. これを通してピクセルデータにアクセスできる。
156                /// ImageDataプロパティでbyte*にキャストする手間を省くため定義されている。
157                /// しかしプロパティ呼び出しによるオーバーヘッドがあるため、高速化のためにはbyte* p = image.ImageDataPtr; のように一旦変数へ移し替えるべし。
158                /// </summary>
159                property Byte* ImageDataPtr{
160                        Byte* get(){ return (Byte*)ImagePtr->imageData; }
161                }
162                /// <summary>
163                /// オリジナル画像データへのポインタを取得する
164        ///(アライメントが調整されているとは限らない)- これは画像を正しく解放するために必要.
165                /// </summary>
166                property IntPtr ImageDataOrigin{
167                        IntPtr get(){ return IntPtr(ImagePtr->imageDataOrigin); }
168                }
169                /// <summary>
170                /// 画像データのバイトサイズを取得する
171        /// (インタリーブデータの場合は,=image->height*image->widthStep)
172                /// </summary>
173                property int ImageSize{
174                        int get(){ return ImagePtr->imageSize; }
175                }
176                /// <summary>
177                /// OpenCVでは必ずNULL
178                /// </summary>
179                [Obsolete]
180                property IntPtr MaskROI{
181                        IntPtr get(){ return IntPtr(ImagePtr->maskROI); }
182                }
183                /// <summary>
184                /// チャンネル数をを取得する. OpenCV のほとんどの関数が,1,2,3および4チャンネルをサポートする
185                /// </summary>
186                property int NChannels{
187                        int get(){ return ImagePtr->nChannels; }
188                }
189                /// <summary>
190                /// sizeof(IplImage)
191                /// </summary>
192                property int NSize {
193                        int get(){ return ImagePtr->nSize; }
194                };
195                /// <summary>
196                /// 画像の原点をを取得する.
197                /// 0 - 左上原点,1 - 左下原点(Windowsのビットマップ形式)
198                /// </summary>
199                property int Origin {
200                        int get(){ return ImagePtr->origin; }
201                };
202                /// <summary>
203                /// 画像 ROI の矩形を取得、設定する
204                /// </summary>
205                property N::CvRect ROI{
206                        N::CvRect get(){ return GetROI(); }
207                        void set(CvRect rect){ SetROI(rect); }
208                }
209                /// <summary>
210                /// 画像のサイズを取得する(ROIのサイズではなく、元々のサイズ)
211                /// </summary>
212                property N::CvSize Size{
213                        N::CvSize get(){ return N::CvSize(Width, Height); }
214                }
215                /// <summary>
216                /// 画像のピクセル幅を取得する
217                /// </summary>
218                property int Width {
219                        int get(){ return ImagePtr->width; }
220                };
221                /// <summary>
222                /// アライメントが調整された画像の行のバイトサイズを取得する
223                /// </summary>
224                property int WidthStep {
225                        int get(){ return ImagePtr->widthStep; }
226                };
227                #pragma endregion
228
229                #pragma region ICvArrメソッド
230                virtual N::IplImage^ Clone( void );     
231                virtual array<N::IplImage^>^ Split( void );
232                #pragma endregion
233
234                #pragma region IplImage独自メソッド
235                Int32 GetCOI( void );
236                N::CvRect GetROI( void );
237                N::IplImage^ InitHeader( N::CvSize size, BitDepth depth, Int32 channels );
238                N::IplImage^ InitHeader( N::CvSize size, BitDepth depth, Int32 channels, ImageOrigin origin );
239                N::IplImage^ InitHeader( N::CvSize size, BitDepth depth, Int32 channels, ImageOrigin origin, Int32 align );
240                void PutText( String^ text, CvPoint org, N::CvFont^ font, CvColor color );
241                void PyrSegmentation( N::IplImage^ dst, Int32 level, Double threshold1, Double threshold2 );
242                void PyrSegmentation( N::IplImage^ dst, N::CvMemStorage^ storage, N::CvSeq^ comp, Int32 level, Double threshold1, Double threshold2 );
243                void ReleaseHeader( void );
244                void ResetROI( void );
245                void SetCOI( Int32 coi );
246                void SetROI( N::CvRect rect );
247                void SnakeImage( array<N::CvPoint>^ points, Single alpha, Single beta, Single gamma, N::CvSize win, N::CvTermCriteria^ criteria );
248                void SnakeImage( array<N::CvPoint>^ points, Single alpha, Single beta, Single gamma, N::CvSize win, N::CvTermCriteria^ criteria, Boolean calc_gradient );
249                void SnakeImage( array<N::CvPoint>^ points, array<Single>^ alpha, array<Single>^ beta, array<Single>^ gamma, N::CvSize win, N::CvTermCriteria^ criteria );
250                void SnakeImage( array<N::CvPoint>^ points, array<Single>^ alpha, array<Single>^ beta, array<Single>^ gamma, N::CvSize win, N::CvTermCriteria^ criteria, Boolean calc_gradient );
251                SD::Bitmap^ ToBitmap( void );
252                SD::Bitmap^ ToBitmap( SDI::PixelFormat pf );
253#ifdef WPF_ENABLED
254                SWMI::WriteableBitmap^ ToWriteableBitmap( SWM::PixelFormat pf );
255                SWMI::WriteableBitmap^ ToWriteableBitmap( Double dpiX, Double dpiY, SWM::PixelFormat pf, SWMI::BitmapPalette^ bp );
256#endif
257                #pragma endregion
258        };
259
260}
261}
Note: See TracBrowser for help on using the browser.