summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/image_loader/jpeg_loader.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/image_loader/jpeg_loader.h')
-rw-r--r--ml/dlib/dlib/image_loader/jpeg_loader.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/ml/dlib/dlib/image_loader/jpeg_loader.h b/ml/dlib/dlib/image_loader/jpeg_loader.h
new file mode 100644
index 000000000..097a461f8
--- /dev/null
+++ b/ml/dlib/dlib/image_loader/jpeg_loader.h
@@ -0,0 +1,109 @@
+// Copyright (C) 2010 Davis E. King (davis@dlib.net), Nils Labugt
+// License: Boost Software License See LICENSE.txt for the full license.
+#ifndef DLIB_JPEG_IMPORT
+#define DLIB_JPEG_IMPORT
+
+#include <vector>
+
+#include "jpeg_loader_abstract.h"
+#include "image_loader.h"
+#include "../pixel.h"
+#include "../dir_nav.h"
+#include "../test_for_odr_violations.h"
+
+namespace dlib
+{
+
+ class jpeg_loader : noncopyable
+ {
+ public:
+
+ jpeg_loader( const char* filename );
+ jpeg_loader( const std::string& filename );
+ jpeg_loader( const dlib::file& f );
+
+ bool is_gray() const;
+ bool is_rgb() const;
+ bool is_rgba() const;
+
+ template<typename T>
+ void get_image( T& t_) const
+ {
+#ifndef DLIB_JPEG_SUPPORT
+ /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ You are getting this error because you are trying to use the jpeg_loader
+ object but you haven't defined DLIB_JPEG_SUPPORT. You must do so to use
+ this object. You must also make sure you set your build environment
+ to link against the libjpeg library.
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
+ COMPILE_TIME_ASSERT(sizeof(T) == 0);
+#endif
+ image_view<T> t(t_);
+ t.set_size( height_, width_ );
+ for ( unsigned n = 0; n < height_;n++ )
+ {
+ const unsigned char* v = get_row( n );
+ for ( unsigned m = 0; m < width_;m++ )
+ {
+ if ( is_gray() )
+ {
+ unsigned char p = v[m];
+ assign_pixel( t[n][m], p );
+ }
+ else if ( is_rgba() ) {
+ rgb_alpha_pixel p;
+ p.red = v[m*4];
+ p.green = v[m*4+1];
+ p.blue = v[m*4+2];
+ p.alpha = v[m*4+3];
+ assign_pixel( t[n][m], p );
+ }
+ else // if ( is_rgb() )
+ {
+ rgb_pixel p;
+ p.red = v[m*3];
+ p.green = v[m*3+1];
+ p.blue = v[m*3+2];
+ assign_pixel( t[n][m], p );
+ }
+ }
+ }
+ }
+
+ private:
+ const unsigned char* get_row( unsigned long i ) const
+ {
+ return &data[i*width_*output_components_];
+ }
+
+ void read_image( const char* filename );
+ unsigned long height_;
+ unsigned long width_;
+ unsigned long output_components_;
+ std::vector<unsigned char> data;
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename image_type
+ >
+ void load_jpeg (
+ image_type& image,
+ const std::string& file_name
+ )
+ {
+ jpeg_loader(file_name).get_image(image);
+ }
+
+// ----------------------------------------------------------------------------------------
+
+}
+
+#ifdef NO_MAKEFILE
+#include "jpeg_loader.cpp"
+#endif
+
+#endif // DLIB_JPEG_IMPORT
+
+