|
|
|
@ -748,24 +748,28 @@ bool imwrite( const String& filename, InputArray _img, |
|
|
|
|
static void* |
|
|
|
|
imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 ) |
|
|
|
|
{ |
|
|
|
|
CV_Assert(!buf.empty() && buf.isContinuous()); |
|
|
|
|
CV_Assert(!buf.empty()); |
|
|
|
|
CV_Assert(buf.isContinuous()); |
|
|
|
|
CV_Assert(buf.checkVector(1, CV_8U) > 0); |
|
|
|
|
Mat buf_row = buf.reshape(1, 1); // decoders expects single row, avoid issues with vector columns
|
|
|
|
|
|
|
|
|
|
IplImage* image = 0; |
|
|
|
|
CvMat *matrix = 0; |
|
|
|
|
Mat temp, *data = &temp; |
|
|
|
|
String filename; |
|
|
|
|
|
|
|
|
|
ImageDecoder decoder = findDecoder(buf); |
|
|
|
|
ImageDecoder decoder = findDecoder(buf_row); |
|
|
|
|
if( !decoder ) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if( !decoder->setSource(buf) ) |
|
|
|
|
if( !decoder->setSource(buf_row) ) |
|
|
|
|
{ |
|
|
|
|
filename = tempfile(); |
|
|
|
|
FILE* f = fopen( filename.c_str(), "wb" ); |
|
|
|
|
if( !f ) |
|
|
|
|
return 0; |
|
|
|
|
size_t bufSize = buf.cols*buf.rows*buf.elemSize(); |
|
|
|
|
if( fwrite( buf.ptr(), 1, bufSize, f ) != bufSize ) |
|
|
|
|
size_t bufSize = buf_row.total()*buf.elemSize(); |
|
|
|
|
if (fwrite(buf_row.ptr(), 1, bufSize, f) != bufSize) |
|
|
|
|
{ |
|
|
|
|
fclose( f ); |
|
|
|
|
CV_Error( CV_StsError, "failed to write image data to temporary file" ); |
|
|
|
|