static ImageDecoder findDecoder( const Mat& buf ) { size_t i, maxlen = 0; if( buf.rows*buf.cols < 1 || !buf.isContinuous() ) return ImageDecoder(); for( i = 0; i < codecs.decoders.size(); i++ ) { size_t len = codecs.decoders[i]->signatureLength(); maxlen = std::max(maxlen, len); } string signature(maxlen, ' '); size_t bufSize = buf.rows*buf.cols*buf.elemSize(); maxlen = std::min(maxlen, bufSize); memcpy( &signature[0], buf.data, maxlen ); for( i = 0; i < codecs.decoders.size(); i++ ) { if( codecs.decoders[i]->checkSignature(signature) ) return codecs.decoders[i]->newDecoder(); } return ImageDecoder(); }
static ImageDecoder findDecoder( const string& filename ) { size_t i, maxlen = 0; for( i = 0; i < codecs.decoders.size(); i++ ) { size_t len = codecs.decoders[i]->signatureLength(); maxlen = std::max(maxlen, len); } FILE* f= fopen( filename.c_str(), "rb" ); if( !f ) return ImageDecoder(); string signature(maxlen, ' '); maxlen = fread( &signature[0], 1, maxlen, f ); fclose(f); signature = signature.substr(0, maxlen); for( i = 0; i < codecs.decoders.size(); i++ ) { if( codecs.decoders[i]->checkSignature(signature) ) return codecs.decoders[i]->newDecoder(); } return ImageDecoder(); }
/** * Find the decoders * * @param[in] filename File to search * * @return Image decoder to parse image file. */ static ImageDecoder findDecoder( const String& filename ) { size_t i, maxlen = 0; /// iterate through list of registered codecs for( i = 0; i < codecs.decoders.size(); i++ ) { size_t len = codecs.decoders[i]->signatureLength(); maxlen = std::max(maxlen, len); } /// Open the file FILE* f= fopen( filename.c_str(), "rb" ); /// in the event of a failure, return an empty image decoder if( !f ) return ImageDecoder(); // read the file signature String signature(maxlen, ' '); maxlen = fread( (void*)signature.c_str(), 1, maxlen, f ); fclose(f); signature = signature.substr(0, maxlen); /// compare signature against all decoders for( i = 0; i < codecs.decoders.size(); i++ ) { if( codecs.decoders[i]->checkSignature(signature) ) return codecs.decoders[i]->newDecoder(); } /// If no decoder was found, return base type return ImageDecoder(); }
ImageDecoder findDecoder( const Vector<uchar>& buf ) { size_t i, maxlen = 0; if( buf.size() < 1 ) return ImageDecoder(); for( i = 0; i < decoders.size(); i++ ) { size_t len = decoders[i]->signatureLength(); maxlen = std::max(maxlen, len); } maxlen = std::min(maxlen, buf.size()); String signature(maxlen, ' '); memcpy( &signature[0], &buf[0], maxlen ); for( i = 0; i < decoders.size(); i++ ) { if( decoders[i]->checkSignature(signature) ) return decoders[i]->newDecoder(); } return ImageDecoder(); }
ImageDecoder BaseImageDecoder::newDecoder() const { return ImageDecoder(); }