#include "tags.hpp" #include "exif.hpp" #include #include using namespace Exif; void exifPrint(const ExifData& exifData); int main(int argc, char* const argv[]) { if (argc != 2) { std::cout << "Usage: exiftest path\n"; return 1; } int rc; try { // Add usecase ExifData ed; Value* v1 = Value::create(signedRational); v1->read("1/2 1/3"); RationalValue* rv = dynamic_cast(v1); if (rv == 0) return -1; rv->value_.push_back(std::make_pair(2,3)); rv->value_.push_back(std::make_pair(-5,4)); std::string key = "Thumbnail.ImageStructure.Compression"; std::cout << "add(\"" << key << "\", " << *rv << ")\n"; ed.add(key, rv); delete rv; key = "Image.DateTime.DateTimeOriginal"; Value* v2 = Value::create(asciiString); v2->read("1999:12:31 23:59:59\0"); ed.add(key, v2); std::cout << "add(\"" << key << "\", " << *v2 << ")\n"; delete v2; // Modify usecase key = "Image.DateTime.DateTimeOriginal"; ExifData::iterator md = ed.findKey(key); if (md == ed.end()) return -2; md->setValue("abcd"); exifPrint(ed); } catch (Error& e) { std::cout << "Caught Exif exception '" << e << "'\n"; } return rc; } void exifPrint(const ExifData& exifData) { ExifData::const_iterator beg = exifData.begin(); ExifData::const_iterator end = exifData.end(); ExifData::const_iterator i = beg; for (; i != end; ++i) { std::cout << "0x" << std::hex << std::setw(4) << std::setfill('0') << std::right << i->tag() << " " << std::setw(27) << std::setfill(' ') << std::left << i->tagName() << " " << std::setw(17) << std::setfill(' ') << std::left << i->typeName() << " " << std::dec << std::setw(3) << std::setfill(' ') << std::right << i->count() << " " << std::dec << i->value() << " | " << i->key() << " | " << i->ifdName() << " | " << i->ifdIdx() << "\n"; } }