diff --git a/src/epsimage.cpp b/src/epsimage.cpp index 239220ba..51741b1a 100644 --- a/src/epsimage.cpp +++ b/src/epsimage.cpp @@ -697,6 +697,7 @@ namespace { nativePreview.size_ = sizeWmf; nativePreview.width_ = 0; nativePreview.height_ = 0; + nativePreview.filter_ = ""; nativePreview.mimeType_ = "image/x-wmf"; nativePreviews.push_back(nativePreview); } @@ -706,6 +707,7 @@ namespace { nativePreview.size_ = sizeTiff; nativePreview.width_ = 0; nativePreview.height_ = 0; + nativePreview.filter_ = ""; nativePreview.mimeType_ = "image/tiff"; nativePreviews.push_back(nativePreview); } diff --git a/src/image.hpp b/src/image.hpp index 896696e5..b4a8172b 100644 --- a/src/image.hpp +++ b/src/image.hpp @@ -64,6 +64,7 @@ namespace Exiv2 { uint32_t size_; uint32_t width_; uint32_t height_; + std::string filter_; std::string mimeType_; }; diff --git a/src/preview.cpp b/src/preview.cpp index b78658dc..4910c377 100644 --- a/src/preview.cpp +++ b/src/preview.cpp @@ -403,10 +403,14 @@ namespace { { if (!(0 <= parIdx && static_cast(parIdx) < image.nativePreviews().size())) return; nativePreview_ = image.nativePreviews()[parIdx]; - size_ = nativePreview_.size_; width_ = nativePreview_.width_; height_ = nativePreview_.height_; valid_ = true; + if (nativePreview_.size_ == 0) { + size_ = getData().size_; + } else { + size_ = nativePreview_.size_; + } } Loader::AutoPtr createLoaderNative(PreviewId id, const Image &image, int parIdx) @@ -452,7 +456,11 @@ namespace { #endif return DataBuf(); } - return DataBuf(data + nativePreview_.position_, nativePreview_.size_); + if (nativePreview_.filter_ == "") { + return DataBuf(data + nativePreview_.position_, nativePreview_.size_); + } else { + throw Error(1, "Invalid native preview filter: " + nativePreview_.filter_); + } } bool LoaderNative::readDimensions() diff --git a/src/psdimage.cpp b/src/psdimage.cpp index db41c55b..bd2d2f41 100644 --- a/src/psdimage.cpp +++ b/src/psdimage.cpp @@ -334,6 +334,7 @@ namespace Exiv2 { if (io_->error() || io_->eof()) throw Error(14); if (format == 1) { + nativePreview.filter_ = ""; nativePreview.mimeType_ = "image/jpeg"; nativePreviews_.push_back(nativePreview); } else {