Solving issue 1932: "No EXIF field on TIFF file's thumbnails"

This commit is contained in:
natureh 510 2013-07-24 21:53:06 +02:00
parent 1a6619a035
commit 0c563e6645
3 changed files with 8 additions and 4 deletions

View File

@ -849,7 +849,7 @@ void Tag::toRational (int& num, int& denom, int ofs) {
case RATIONAL: num = (int)sget4 (value+ofs, getOrder()); denom = (int)sget4 (value+ofs+4, getOrder()); break; case RATIONAL: num = (int)sget4 (value+ofs, getOrder()); denom = (int)sget4 (value+ofs+4, getOrder()); break;
case FLOAT: num = 0; denom = 0; break; case FLOAT: num = 0; denom = 0; break;
case UNDEFINED: num = 0; denom = 0; break; case UNDEFINED: num = 0; denom = 0; break;
default: num = 0; denom = 0; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) default: num = 0; denom = 0; break; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR)
} }
} }

View File

@ -212,6 +212,7 @@ class ExifManager {
class Interpreter { class Interpreter {
public: public:
Interpreter () {} Interpreter () {}
virtual ~Interpreter() {};
virtual std::string toString (Tag* t) { return ""; } virtual std::string toString (Tag* t) { return ""; }
virtual void fromString (Tag* t, const std::string& value) {} virtual void fromString (Tag* t, const std::string& value) {}
}; };

View File

@ -325,18 +325,21 @@ class UserCommentInterpreter : public Interpreter {
public: public:
UserCommentInterpreter () {} UserCommentInterpreter () {}
virtual std::string toString (Tag* t) { virtual std::string toString (Tag* t) {
char buffer[1024]; char *buffer = new char[t->getCount()];
if (!strncmp((char*)t->getValue(), "ASCII\0\0\0",8)) if (!strncmp((char*)t->getValue(), "ASCII\0\0\0",8))
strncpy (buffer, (char*)t->getValue()+8, t->getCount()-8); strncpy (buffer, (char*)t->getValue()+8, t->getCount()-8);
else else
buffer[0]=0; buffer[0]=0;
return buffer; std::string retVal(buffer);
delete [] buffer;
return retVal;
} }
virtual void fromString (Tag* t, const std::string& value) { virtual void fromString (Tag* t, const std::string& value) {
char buffer[1024]; char *buffer = new char[t->getCount()];
memcpy (buffer, "ASCII\0\0\0", 8); memcpy (buffer, "ASCII\0\0\0", 8);
strcpy (buffer+8, value.c_str()); strcpy (buffer+8, value.c_str());
t->fromString (buffer, value.size() + 9); t->fromString (buffer, value.size() + 9);
delete [] buffer;
} }
}; };
UserCommentInterpreter userCommentInterpreter; UserCommentInterpreter userCommentInterpreter;