CLAW Library (a C++ Library Absolutely Wonderful) 1.5.5
|
This class read data from a jpeg file and store it in an image. More...
#include <jpeg.hpp>
Classes | |
class | grayscale_to_pixel32 |
Functor converting a grey level pixel to a ARGB pixel. More... | |
class | RGB_to_pixel32 |
Functor converting a RGB pixel to a ARGB pixel. More... | |
struct | source_manager |
Source manager that allow us to read from a std::istream. More... | |
Public Member Functions | |
reader (image &img) | |
Constructor. | |
reader (image &img, std::istream &f) | |
Constructor. Load an image from a jpeg file. | |
void | load (std::istream &f) |
Load an image from a jpeg file. | |
Private Member Functions | |
template<class Convert > | |
void | read_data (jpeg_decompress_struct &cinfo, const Convert &pixel_convert) |
Decompress a RGB jpeg image. | |
void | read_from_file (std::istream &f) |
Load an image from a jpeg file. | |
void | decompress (std::istream &f, jpeg_decompress_struct &cinfo) |
Decompress the data of a Jpeg file. | |
void | create_decompress_info (jpeg_decompress_struct &cinfo, source_manager &infile) const |
Initialize the jpeg decompression structure. | |
Private Attributes | |
image & | m_image |
The image in which we store the data we read. |
This class read data from a jpeg file and store it in an image.
claw::graphic::jpeg::reader::reader | ( | image & | img | ) |
Constructor.
img | The image in which the data will be stored. |
Definition at line 218 of file jpeg_reader.cpp.
: m_image( img ) { } // jpeg::reader::reader()
claw::graphic::jpeg::reader::reader | ( | image & | img, |
std::istream & | f | ||
) |
Constructor. Load an image from a jpeg file.
img | The image in which the data will be stored. |
f | The file from which we read the data. |
Definition at line 231 of file jpeg_reader.cpp.
References load().
void claw::graphic::jpeg::reader::create_decompress_info | ( | jpeg_decompress_struct & | cinfo, |
source_manager & | infile | ||
) | const [private] |
Initialize the jpeg decompression structure.
cinfo | The structure to initialize. |
infile | The source manager. |
Definition at line 344 of file jpeg_reader.cpp.
References claw__graphic__jpeg__source_manager__fill_input_buffer(), claw__graphic__jpeg__source_manager__init_source(), claw__graphic__jpeg__source_manager__skip_input_data(), claw__graphic__jpeg__source_manager__term_source(), and claw::graphic::jpeg::reader::source_manager::pub.
{ jpeg_create_decompress(&cinfo); cinfo.src = &infile.pub; cinfo.client_data = &infile; infile.pub.fill_input_buffer = claw__graphic__jpeg__source_manager__fill_input_buffer; infile.pub.skip_input_data = claw__graphic__jpeg__source_manager__skip_input_data; infile.pub.init_source = claw__graphic__jpeg__source_manager__init_source; infile.pub.resync_to_restart = jpeg_resync_to_restart; infile.pub.term_source = claw__graphic__jpeg__source_manager__term_source; } // jpeg::reader::create_decompress_info()
void claw::graphic::jpeg::reader::decompress | ( | std::istream & | f, |
jpeg_decompress_struct & | cinfo | ||
) | [private] |
Decompress the data of a Jpeg file.
f | Jpeg file. |
cinfo | Info on the decompression process (libjpeg concerned). |
Definition at line 298 of file jpeg_reader.cpp.
References CLAW_EXCEPTION, claw::graphic::jpeg::error_manager::error_string, claw::graphic::jpeg__error_manager__error_exit(), claw::graphic::jpeg::error_manager::pub, and claw::graphic::jpeg::error_manager::setjmp_buffer.
{ error_manager jerr; jpeg_error_mgr* jerr_saved = cinfo.err; cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = jpeg__error_manager__error_exit; if ( setjmp(jerr.setjmp_buffer) ) { jpeg_abort_decompress(&cinfo); throw CLAW_EXCEPTION(jerr.error_string); } jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress( &cinfo ); try { m_image.set_size( cinfo.image_width, cinfo.image_height ); if ( cinfo.out_color_components == 3 ) read_data( cinfo, RGB_to_pixel32() ); else if ( cinfo.out_color_components == 1 ) read_data( cinfo, grayscale_to_pixel32() ); else throw CLAW_EXCEPTION( "invalid number of colors per channel" ); jpeg_finish_decompress(&cinfo); } catch(...) { jpeg_abort_decompress(&cinfo); throw; } cinfo.err = jerr_saved; } // jpeg::reader::decompress()
void claw::graphic::jpeg::reader::load | ( | std::istream & | f | ) |
Load an image from a jpeg file.
f | JPEG file. |
Definition at line 242 of file jpeg_reader.cpp.
References CLAW_PRECOND.
Referenced by reader().
{ CLAW_PRECOND( !!f ); std::istream::pos_type init_pos = f.tellg(); try { read_from_file(f); } catch(...) { f.clear(); f.seekg( init_pos, std::ios_base::beg ); throw; } } // jpeg::reader::load()
void claw::graphic::jpeg::reader::read_data | ( | jpeg_decompress_struct & | cinfo, |
const Convert & | pixel_convert | ||
) | [private] |
Decompress a RGB jpeg image.
cinfo | Informations about the decompression process. |
pixel_convert | Operator to use to convert pixels from input. |
Definition at line 42 of file jpeg_reader.tpp.
References CLAW_EXCEPTION, claw::graphic::jpeg::error_manager::error_string, claw::graphic::jpeg__error_manager__error_exit(), claw::graphic::jpeg::error_manager::pub, and claw::graphic::jpeg::error_manager::setjmp_buffer.
{ const unsigned int pixel_size = cinfo.output_components; JSAMPLE* buffer = new JSAMPLE[cinfo.output_width * pixel_size]; error_manager jerr; jpeg_error_mgr* jerr_saved = cinfo.err; cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = jpeg__error_manager__error_exit; if ( setjmp(jerr.setjmp_buffer) ) { delete[] buffer; throw CLAW_EXCEPTION(jerr.error_string); } while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, &buffer, 1); scanline::iterator pixel = m_image[cinfo.output_scanline-1].begin(); for ( unsigned int i=0; i!=pixel_size*m_image.width(); i+=pixel_size, ++pixel ) *pixel = pixel_convert( &buffer[i] ); } delete[] buffer; cinfo.err = jerr_saved; } // jpeg::reader::read_data()
void claw::graphic::jpeg::reader::read_from_file | ( | std::istream & | f | ) | [private] |
Load an image from a jpeg file.
f | Jpeg file. |
Definition at line 265 of file jpeg_reader.cpp.
References CLAW_EXCEPTION, claw::graphic::jpeg::error_manager::error_string, claw::graphic::jpeg__error_manager__error_exit(), claw::graphic::jpeg::error_manager::pub, and claw::graphic::jpeg::error_manager::setjmp_buffer.
{ source_manager infile(f); jpeg_decompress_struct cinfo; error_manager jerr; cinfo.err = jpeg_std_error(&jerr.pub); if ( setjmp(jerr.setjmp_buffer) ) throw CLAW_EXCEPTION(jerr.error_string); create_decompress_info( cinfo, infile ); jerr.pub.error_exit = jpeg__error_manager__error_exit; try { decompress(f, cinfo); jpeg_destroy_decompress(&cinfo); } catch(...) { jpeg_destroy_decompress(&cinfo); throw; } } // jpeg::reader::read_from_file()
image& claw::graphic::jpeg::reader::m_image [private] |