|
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] |
1.7.3