added the possibility to rescale the image during loading, especially useful with JPEGs (#8390) (change to the sample accidentally committed as r56820)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56821 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -228,11 +228,17 @@ static inline void wx_cmyk_to_rgb(unsigned char* rgb, const unsigned char* cmyk)
|
||||
|
||||
bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int WXUNUSED(index) )
|
||||
{
|
||||
wxCHECK_MSG( image, false, "NULL image pointer" );
|
||||
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
wx_error_mgr jerr;
|
||||
unsigned char *ptr;
|
||||
|
||||
// save this before calling Destroy()
|
||||
const unsigned maxWidth = image->GetOptionInt(wxIMAGE_OPTION_MAX_WIDTH),
|
||||
maxHeight = image->GetOptionInt(wxIMAGE_OPTION_MAX_HEIGHT);
|
||||
image->Destroy();
|
||||
|
||||
cinfo.err = jpeg_std_error( &jerr );
|
||||
jerr.error_exit = wx_error_exit;
|
||||
|
||||
@@ -268,9 +274,20 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos
|
||||
bytesPerPixel = 3;
|
||||
}
|
||||
|
||||
// scale the picture to fit in the specified max size if necessary
|
||||
if ( maxWidth > 0 || maxHeight > 0 )
|
||||
{
|
||||
unsigned& scale = cinfo.scale_denom;
|
||||
while ( (maxWidth && (cinfo.image_width / scale > maxWidth)) ||
|
||||
(maxHeight && (cinfo.image_height / scale > maxHeight)) )
|
||||
{
|
||||
scale *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
jpeg_start_decompress( &cinfo );
|
||||
|
||||
image->Create( cinfo.image_width, cinfo.image_height );
|
||||
image->Create( cinfo.output_width, cinfo.output_height );
|
||||
if (!image->Ok()) {
|
||||
jpeg_finish_decompress( &cinfo );
|
||||
jpeg_destroy_decompress( &cinfo );
|
||||
|
Reference in New Issue
Block a user