1/*M///////////////////////////////////////////////////////////////////////////////////////
2//
3//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4//
5//  By downloading, copying, installing or using the software you agree to this license.
6//  If you do not agree to this license, do not download, install,
7//  copy or use the software.
8//
9//
10//                        Intel License Agreement
11//                For Open Source Computer Vision Library
12//
13// Copyright (C) 2000, Intel Corporation, all rights reserved.
14// Third party copyrights are property of their respective owners.
15//
16// Redistribution and use in source and binary forms, with or without modification,
17// are permitted provided that the following conditions are met:
18//
19//   * Redistribution's of source code must retain the above copyright notice,
20//     this list of conditions and the following disclaimer.
21//
22//   * Redistribution's in binary form must reproduce the above copyright notice,
23//     this list of conditions and the following disclaimer in the documentation
24//     and/or other materials provided with the distribution.
25//
26//   * The name of Intel Corporation may not be used to endorse or promote products
27//     derived from this software without specific prior written permission.
28//
29// This software is provided by the copyright holders and contributors "as is" and
30// any express or implied warranties, including, but not limited to, the implied
31// warranties of merchantability and fitness for a particular purpose are disclaimed.
32// In no event shall the Intel Corporation or contributors be liable for any direct,
33// indirect, incidental, special, exemplary, or consequential damages
34// (including, but not limited to, procurement of substitute goods or services;
35// loss of use, data, or profits; or business interruption) however caused
36// and on any theory of liability, whether in contract, strict liability,
37// or tort (including negligence or otherwise) arising in any way out of
38// the use of this software, even if advised of the possibility of such damage.
39//
40//M*/
41
42#ifndef _HIGH_GUI_
43#define _HIGH_GUI_
44
45#ifndef SKIP_INCLUDES
46
47  #include "cxcore.h"
48  #if defined WIN32 || defined WIN64
49    #include <windows.h>
50  #endif
51
52#else // SKIP_INCLUDES
53
54  #if defined WIN32 || defined WIN64
55    #define CV_CDECL __cdecl
56    #define CV_STDCALL __stdcall
57  #else
58    #define CV_CDECL
59    #define CV_STDCALL
60  #endif
61
62  #ifndef CV_EXTERN_C
63    #ifdef __cplusplus
64      #define CV_EXTERN_C extern "C"
65      #define CV_DEFAULT(val) = val
66    #else
67      #define CV_EXTERN_C
68      #define CV_DEFAULT(val)
69    #endif
70  #endif
71
72  #ifndef CV_EXTERN_C_FUNCPTR
73    #ifdef __cplusplus
74      #define CV_EXTERN_C_FUNCPTR(x) extern "C" { typedef x; }
75    #else
76      #define CV_EXTERN_C_FUNCPTR(x) typedef x
77    #endif
78  #endif
79
80  #ifndef CV_INLINE
81    #if defined __cplusplus
82      #define CV_INLINE inline
83    #elif (defined WIN32 || defined WIN64) && !defined __GNUC__
84      #define CV_INLINE __inline
85    #else
86      #define CV_INLINE static
87    #endif
88  #endif /* CV_INLINE */
89
90  #if (defined WIN32 || defined WIN64) && defined CVAPI_EXPORTS
91    #define CV_EXPORTS __declspec(dllexport)
92  #else
93    #define CV_EXPORTS
94  #endif
95
96  #ifndef CVAPI
97    #define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL
98  #endif
99
100#endif // SKIP_INCLUDES
101
102#if defined(_CH_)
103  #pragma package <chopencv>
104  #include <chdl.h>
105  LOAD_CHDL(highgui)
106#endif
107
108#ifdef __cplusplus
109  extern "C" {
110#endif /* __cplusplus */
111
112#define CV_EVENT_MOUSEMOVE      0
113#define CV_EVENT_LBUTTONDOWN    1
114#define CV_EVENT_RBUTTONDOWN    2
115#define CV_EVENT_MBUTTONDOWN    3
116#define CV_EVENT_LBUTTONUP      4
117#define CV_EVENT_RBUTTONUP      5
118#define CV_EVENT_MBUTTONUP      6
119#define CV_EVENT_LBUTTONDBLCLK  7
120#define CV_EVENT_RBUTTONDBLCLK  8
121#define CV_EVENT_MBUTTONDBLCLK  9
122
123#define CV_EVENT_FLAG_LBUTTON   1
124#define CV_EVENT_FLAG_RBUTTON   2
125#define CV_EVENT_FLAG_MBUTTON   4
126#define CV_EVENT_FLAG_CTRLKEY   8
127#define CV_EVENT_FLAG_SHIFTKEY  16
128#define CV_EVENT_FLAG_ALTKEY    32
129
130
131/* 8bit, color or not */
132#define CV_LOAD_IMAGE_UNCHANGED  -1
133/* 8bit, gray */
134#define CV_LOAD_IMAGE_GRAYSCALE   0
135/* ?, color */
136#define CV_LOAD_IMAGE_COLOR       1
137/* any depth, ? */
138#define CV_LOAD_IMAGE_ANYDEPTH    2
139/* ?, any color */
140#define CV_LOAD_IMAGE_ANYCOLOR    4
141
142/* load image from file
143  iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED
144  overrides the other flags
145  using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED
146  unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit
147*/
148CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
149CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
150
151/* save image to file */
152CVAPI(int) cvSaveImage( const char* filename, const CvArr* image );
153
154#define CV_CVTIMG_FLIP      1
155#define CV_CVTIMG_SWAP_RB   2
156/* utility function: convert one image to another with optional vertical flip */
157CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));
158
159/* wait for key event infinitely (delay<=0) or for "delay" milliseconds */
160CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));
161
162
163/****************************************************************************************\
164*                         Working with Video Files and Cameras                           *
165\****************************************************************************************/
166
167/* "black box" capture structure */
168typedef struct CvCapture CvCapture;
169
170/* start capturing frames from video file */
171CVAPI(CvCapture*) cvCreateSocketCapture( const char *address, const char* port, int width, int height );
172
173/* grab a frame, return 1 on success, 0 on fail.
174  this function is thought to be fast               */
175CVAPI(int) cvGrabFrame( CvCapture* capture );
176
177/* get the frame grabbed with cvGrabFrame(..)
178  This function may apply some frame processing like
179  frame decompression, flipping etc.
180  !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */
181CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture );
182
183/* Just a combination of cvGrabFrame and cvRetrieveFrame
184   !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */
185CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );
186
187/* stop capturing/reading and free resources */
188CVAPI(void) cvReleaseCapture( CvCapture** capture );
189
190#define CV_CAP_PROP_POS_MSEC       0
191#define CV_CAP_PROP_POS_FRAMES     1
192#define CV_CAP_PROP_POS_AVI_RATIO  2
193#define CV_CAP_PROP_FRAME_WIDTH    3
194#define CV_CAP_PROP_FRAME_HEIGHT   4
195#define CV_CAP_PROP_FPS            5
196#define CV_CAP_PROP_FOURCC         6
197#define CV_CAP_PROP_FRAME_COUNT    7
198#define CV_CAP_PROP_FORMAT         8
199#define CV_CAP_PROP_MODE           9
200#define CV_CAP_PROP_BRIGHTNESS    10
201#define CV_CAP_PROP_CONTRAST      11
202#define CV_CAP_PROP_SATURATION    12
203#define CV_CAP_PROP_HUE           13
204#define CV_CAP_PROP_GAIN          14
205#define CV_CAP_PROP_CONVERT_RGB   15
206
207
208/* retrieve or set capture properties */
209CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );
210CVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
211
212/****************************************************************************************\
213*                              Obsolete functions/synonyms                               *
214\****************************************************************************************/
215
216#ifndef HIGHGUI_NO_BACKWARD_COMPATIBILITY
217    #define HIGHGUI_BACKWARD_COMPATIBILITY
218#endif
219
220#ifdef HIGHGUI_BACKWARD_COMPATIBILITY
221
222#define cvCaptureFromFile cvCreateFileCapture
223#define cvCaptureFromCAM cvCreateCameraCapture
224#define cvCaptureFromAVI cvCaptureFromFile
225#define cvCreateAVIWriter cvCreateVideoWriter
226#define cvWriteToAVI cvWriteFrame
227#define cvAddSearchPath(path)
228#define cvvInitSystem cvInitSystem
229#define cvvNamedWindow cvNamedWindow
230#define cvvResizeWindow cvResizeWindow
231#define cvvDestroyWindow cvDestroyWindow
232#define cvvCreateTrackbar cvCreateTrackbar
233#define cvvLoadImage(name) cvLoadImage((name),1)
234#define cvvSaveImage cvSaveImage
235#define cvvAddSearchPath cvAddSearchPath
236#define cvvWaitKey(name) cvWaitKey(0)
237#define cvvWaitKeyEx(name,delay) cvWaitKey(delay)
238#define cvvConvertImage cvConvertImage
239#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
240#define set_preprocess_func cvSetPreprocessFuncWin32
241#define set_postprocess_func cvSetPostprocessFuncWin32
242
243#ifdef WIN32
244
245typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*);
246CVAPI(void) cvSetPreprocessFuncWin32( CvWin32WindowCallback on_preprocess );
247CVAPI(void) cvSetPostprocessFuncWin32( CvWin32WindowCallback on_postprocess );
248
249CV_INLINE int iplWidth( const IplImage* img );
250CV_INLINE int iplWidth( const IplImage* img )
251{
252    return !img ? 0 : !img->roi ? img->width : img->roi->width;
253}
254
255CV_INLINE int iplHeight( const IplImage* img );
256CV_INLINE int iplHeight( const IplImage* img )
257{
258    return !img ? 0 : !img->roi ? img->height : img->roi->height;
259}
260
261#endif
262
263#endif /* obsolete functions */
264
265/* For use with Win32 */
266#ifdef WIN32
267
268CV_INLINE RECT NormalizeRect( RECT r );
269CV_INLINE RECT NormalizeRect( RECT r )
270{
271    int t;
272
273    if( r.left > r.right )
274    {
275        t = r.left;
276        r.left = r.right;
277        r.right = t;
278    }
279
280    if( r.top > r.bottom )
281    {
282        t = r.top;
283        r.top = r.bottom;
284        r.bottom = t;
285    }
286
287    return r;
288}
289
290CV_INLINE CvRect RectToCvRect( RECT sr );
291CV_INLINE CvRect RectToCvRect( RECT sr )
292{
293    sr = NormalizeRect( sr );
294    return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
295}
296
297CV_INLINE RECT CvRectToRect( CvRect sr );
298CV_INLINE RECT CvRectToRect( CvRect sr )
299{
300    RECT dr;
301    dr.left = sr.x;
302    dr.top = sr.y;
303    dr.right = sr.x + sr.width;
304    dr.bottom = sr.y + sr.height;
305
306    return dr;
307}
308
309CV_INLINE IplROI RectToROI( RECT r );
310CV_INLINE IplROI RectToROI( RECT r )
311{
312    IplROI roi;
313    r = NormalizeRect( r );
314    roi.xOffset = r.left;
315    roi.yOffset = r.top;
316    roi.width = r.right - r.left;
317    roi.height = r.bottom - r.top;
318    roi.coi = 0;
319
320    return roi;
321}
322
323#endif /* WIN32 */
324
325#ifdef __cplusplus
326}  /* end of extern "C" */
327#endif /* __cplusplus */
328
329
330#if defined __cplusplus && (!defined WIN32 || !defined (__GNUC__)) && !defined CV_NO_CVV_IMAGE
331
332#define CImage CvvImage
333
334/* CvvImage class definition */
335class CV_EXPORTS CvvImage
336{
337public:
338    CvvImage();
339    virtual ~CvvImage();
340
341    /* Create image (BGR or grayscale) */
342    virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
343
344    /* Load image from specified file */
345    virtual bool  Load( const char* filename, int desired_color = 1 );
346
347    /* Load rectangle from the file */
348    virtual bool  LoadRect( const char* filename,
349                            int desired_color, CvRect r );
350
351#ifdef WIN32
352    virtual bool  LoadRect( const char* filename,
353                            int desired_color, RECT r )
354    {
355        return LoadRect( filename, desired_color,
356                         cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));
357    }
358#endif
359
360    /* Save entire image to specified file. */
361    virtual bool  Save( const char* filename );
362
363    /* Get copy of input image ROI */
364    virtual void  CopyOf( CvvImage& image, int desired_color = -1 );
365    virtual void  CopyOf( IplImage* img, int desired_color = -1 );
366
367    IplImage* GetImage() { return m_img; };
368    virtual void  Destroy(void);
369
370    /* width and height of ROI */
371    int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };
372    int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};
373    int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };
374
375    virtual void  Fill( int color );
376
377
378protected:
379
380    IplImage*  m_img;
381};
382
383#endif /* __cplusplus */
384
385#endif /* _HIGH_GUI_ */
386