1 // Copyright (C) 2014  Davis E. King (davis@dlib.net)
2 // License: Boost Software License   See LICENSE.txt for the full license.
3 #ifndef DLIB_MATRIX_GENERIC_iMAGE_Hh_
4 #define DLIB_MATRIX_GENERIC_iMAGE_Hh_
5 
6 #include "matrix.h"
7 #include "../image_processing/generic_image.h"
8 
9 namespace dlib
10 {
11     template <
12         typename T,
13         long NR,
14         long NC,
15         typename MM
16         >
17     struct image_traits<matrix<T,NR,NC,MM> >
18     {
19         typedef T pixel_type;
20     };
21 
22     template <
23         typename T,
24         long NR,
25         long NC,
26         typename MM
27         >
28     struct image_traits<const matrix<T,NR,NC,MM> >
29     {
30         typedef T pixel_type;
31     };
32 
33     template <
34         typename T,
35         long NR,
36         long NC,
37         typename MM
38         >
39     inline long num_rows( const matrix<T,NR,NC,MM>& img) { return img.nr(); }
40 
41     template <
42         typename T,
43         long NR,
44         long NC,
45         typename MM
46         >
47     inline long num_columns( const matrix<T,NR,NC,MM>& img) { return img.nc(); }
48 
49     template <
50         typename T,
51         long NR,
52         long NC,
53         typename MM
54         >
55     inline void set_image_size(
56         matrix<T,NR,NC,MM>& img,
57         long rows,
58         long cols
59     ) { img.set_size(rows,cols); }
60 
61     template <
62         typename T,
63         long NR,
64         long NC,
65         typename MM
66         >
67     inline void* image_data(
68         matrix<T,NR,NC,MM>& img
69     )
70     {
71         if (img.size() != 0)
72             return &img(0,0);
73         else
74             return 0;
75     }
76 
77     template <
78         typename T,
79         long NR,
80         long NC,
81         typename MM
82         >
83     inline const void* image_data(
84         const matrix<T,NR,NC,MM>& img
85     )
86     {
87         if (img.size() != 0)
88             return &img(0,0);
89         else
90             return 0;
91     }
92 
93     template <
94         typename T,
95         long NR,
96         long NC,
97         typename MM
98         >
99     inline long width_step(
100         const matrix<T,NR,NC,MM>& img
101     )
102     {
103         return img.nc()*sizeof(T);
104     }
105 
106 }
107 
108 #endif // DLIB_MATRIX_GENERIC_iMAGE_Hh_
109 
110 
111