diff --git a/dlib/image_loader/jpeg_loader.cpp b/dlib/image_loader/jpeg_loader.cpp index 83ad18ee5..710d7586f 100644 --- a/dlib/image_loader/jpeg_loader.cpp +++ b/dlib/image_loader/jpeg_loader.cpp @@ -60,6 +60,13 @@ namespace dlib return (output_components_ == 3); } +// ---------------------------------------------------------------------------------------- + + bool jpeg_loader::is_rgba() const + { + return (output_components_ == 4); + } + // ---------------------------------------------------------------------------------------- struct jpeg_loader_error_mgr @@ -123,7 +130,8 @@ namespace dlib output_components_ = cinfo.output_components; if (output_components_ != 1 && - output_components_ != 3) + output_components_ != 3 && + output_components_ != 4) { fclose( fp ); jpeg_destroy_decompress(&cinfo); diff --git a/dlib/image_loader/jpeg_loader.h b/dlib/image_loader/jpeg_loader.h index 966cdc6e7..0854b7a34 100644 --- a/dlib/image_loader/jpeg_loader.h +++ b/dlib/image_loader/jpeg_loader.h @@ -23,6 +23,7 @@ namespace dlib bool is_gray() const; bool is_rgb() const; + bool is_rgba() const; template void get_image( T& t_) const @@ -37,7 +38,6 @@ namespace dlib COMPILE_TIME_ASSERT(sizeof(T) == 0); #endif image_view t(t_); - t.set_size( height_, width_ ); for ( unsigned n = 0; n < height_;n++ ) { @@ -49,6 +49,14 @@ namespace dlib 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;