Merge branch '2.4'

This commit is contained in:
Andrey Kamaev
2013-01-29 14:16:07 +04:00
14 changed files with 66 additions and 30 deletions

View File

@@ -123,6 +123,15 @@ ImageEncoder BaseImageEncoder::newEncoder() const
return ImageEncoder();
}
void BaseImageEncoder::throwOnEror() const
{
if(!m_last_error.empty())
{
std::string msg = "Raw image encoder error: " + m_last_error;
CV_Error( CV_BadImageSize, msg.c_str() );
}
}
}
/* End of file. */

View File

@@ -100,12 +100,16 @@ public:
virtual string getDescription() const;
virtual ImageEncoder newEncoder() const;
virtual void throwOnEror() const;
protected:
string m_description;
string m_filename;
vector<uchar>* m_buf;
bool m_buf_supported;
string m_last_error;
};
}

View File

@@ -537,8 +537,10 @@ ImageEncoder JpegEncoder::newEncoder() const
return new JpegEncoder;
}
bool JpegEncoder::write( const Mat& img, const vector<int>& params )
bool JpegEncoder::write( const Mat& img, const vector<int>& params )
{
m_last_error.clear();
struct fileWrapper
{
FILE* f;
@@ -633,6 +635,14 @@ bool JpegEncoder::write( const Mat& img, const vector<int>& params )
}
_exit_:
if(!result)
{
char jmsg_buf[JMSG_LENGTH_MAX];
jerr.pub.format_message((j_common_ptr)&cinfo, jmsg_buf);
m_last_error = jmsg_buf;
}
jpeg_destroy_compress( &cinfo );
return result;

View File

@@ -212,7 +212,7 @@ bool Jpeg2KDecoder::readData( Mat& img )
cmptlut[0] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_B );
cmptlut[1] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_G );
cmptlut[2] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_R );
if( cmptlut[0] < 0 || cmptlut[1] < 0 || cmptlut[0] < 0 )
if( cmptlut[0] < 0 || cmptlut[1] < 0 || cmptlut[2] < 0 )
result = false;
ncmpts = 3;
}

View File

@@ -420,6 +420,7 @@ bool imencode( const string& ext, InputArray _image,
if( encoder->setDestination(buf) )
{
code = encoder->write(image, params);
encoder->throwOnEror();
CV_Assert( code );
}
else
@@ -427,8 +428,11 @@ bool imencode( const string& ext, InputArray _image,
string filename = tempfile();
code = encoder->setDestination(filename);
CV_Assert( code );
code = encoder->write(image, params);
encoder->throwOnEror();
CV_Assert( code );
FILE* f = fopen( filename.c_str(), "rb" );
CV_Assert(f != 0);
fseek( f, 0, SEEK_END );