// 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 "jpeg_loader_abstract.h"
#include "../smart_pointers.h"
#include "image_loader.h"
#include "../pixel.h"
#include "../dir_nav.h"
#include <vector>
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;
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
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_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;
};
}
#ifdef NO_MAKEFILE
#include "jpeg_loader.cpp"
#endif
#endif // DLIB_JPEG_IMPORT