refactored code for extracting image dimensions from metadata
(cherry picked from commit 0ece9c5bfad09bc9052238d83fa696ef39effaaa)
This commit is contained in:
parent
0102fca563
commit
92befa7e81
@ -81,7 +81,9 @@ FramesData::FramesData(const Glib::ustring &fname) :
|
|||||||
lens("Unknown"),
|
lens("Unknown"),
|
||||||
sampleFormat(IIOSF_UNKNOWN),
|
sampleFormat(IIOSF_UNKNOWN),
|
||||||
isPixelShift(false),
|
isPixelShift(false),
|
||||||
isHDR(false)
|
isHDR(false),
|
||||||
|
w_(-1),
|
||||||
|
h_(-1)
|
||||||
{
|
{
|
||||||
make.clear();
|
make.clear();
|
||||||
model.clear();
|
model.clear();
|
||||||
@ -374,6 +376,8 @@ FramesData::FramesData(const Glib::ustring &fname) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
meta.getDimensions(w_, h_);
|
||||||
|
|
||||||
// -----------------------
|
// -----------------------
|
||||||
// Special file type detection (HDR, PixelShift)
|
// Special file type detection (HDR, PixelShift)
|
||||||
// ------------------------
|
// ------------------------
|
||||||
@ -773,3 +777,17 @@ void FramesData::fillBasicTags(Exiv2::ExifData &exif) const
|
|||||||
strftime(buf, 256, "%Y:%m:%d %H:%M:%S", &t);
|
strftime(buf, 256, "%Y:%m:%d %H:%M:%S", &t);
|
||||||
set_exif(exif, "Exif.Photo.DateTimeOriginal", buf);
|
set_exif(exif, "Exif.Photo.DateTimeOriginal", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FramesData::getDimensions(int &w, int &h) const
|
||||||
|
{
|
||||||
|
w = w_;
|
||||||
|
h = h_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FramesData::setDimensions(int w, int h)
|
||||||
|
{
|
||||||
|
w_ = w;
|
||||||
|
h_ = h;
|
||||||
|
}
|
||||||
|
@ -57,6 +57,8 @@ private:
|
|||||||
IIOSampleFormat sampleFormat;
|
IIOSampleFormat sampleFormat;
|
||||||
bool isPixelShift;
|
bool isPixelShift;
|
||||||
bool isHDR;
|
bool isHDR;
|
||||||
|
int w_;
|
||||||
|
int h_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit FramesData(const Glib::ustring& fname);
|
explicit FramesData(const Glib::ustring& fname);
|
||||||
@ -84,8 +86,11 @@ public:
|
|||||||
std::string getOrientation() const override;
|
std::string getOrientation() const override;
|
||||||
Glib::ustring getFileName() const override;
|
Glib::ustring getFileName() const override;
|
||||||
int getRating() const override;
|
int getRating() const override;
|
||||||
|
void getDimensions(int &w, int &h) const override;
|
||||||
|
|
||||||
void fillBasicTags(Exiv2::ExifData &exif) const;
|
void fillBasicTags(Exiv2::ExifData &exif) const;
|
||||||
|
|
||||||
|
void setDimensions(int w, int h);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -448,6 +448,29 @@ void Exiv2Metadata::setExifKeys(const std::vector<std::string> *keys)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Exiv2Metadata::getDimensions(int &w, int &h) const
|
||||||
|
{
|
||||||
|
if (image_) {
|
||||||
|
if (dynamic_cast<const Exiv2::XmpSidecar *>(image_.get())) {
|
||||||
|
auto &exif = image_->exifData();
|
||||||
|
auto itw = exif.findKey(Exiv2::ExifKey("Exif.Image.ImageWidth"));
|
||||||
|
auto ith = exif.findKey(Exiv2::ExifKey("Exif.Image.ImageLength"));
|
||||||
|
if (itw != exif.end() && ith != exif.end()) {
|
||||||
|
w = itw->toLong();
|
||||||
|
h = ith->toLong();
|
||||||
|
} else {
|
||||||
|
w = h = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
w = image_->pixelWidth();
|
||||||
|
h = image_->pixelHeight();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
w = h = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Glib::ustring Exiv2Metadata::xmpSidecarPath(const Glib::ustring &path)
|
Glib::ustring Exiv2Metadata::xmpSidecarPath(const Glib::ustring &path)
|
||||||
{
|
{
|
||||||
Glib::ustring fn = path;
|
Glib::ustring fn = path;
|
||||||
|
@ -58,6 +58,8 @@ public:
|
|||||||
|
|
||||||
void setExifKeys(const std::vector<std::string> *keys);
|
void setExifKeys(const std::vector<std::string> *keys);
|
||||||
|
|
||||||
|
void getDimensions(int &w, int &h) const;
|
||||||
|
|
||||||
static Glib::ustring xmpSidecarPath(const Glib::ustring& path);
|
static Glib::ustring xmpSidecarPath(const Glib::ustring& path);
|
||||||
static Exiv2::XmpData getXmpSidecar(const Glib::ustring& path);
|
static Exiv2::XmpData getXmpSidecar(const Glib::ustring& path);
|
||||||
|
|
||||||
|
@ -690,7 +690,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
|
|||||||
{
|
{
|
||||||
MyMutex::MyLock lock(getImageMutex);
|
MyMutex::MyLock lock(getImageMutex);
|
||||||
|
|
||||||
tran = defTransform (tran);
|
tran = defTransform(ri, tran);
|
||||||
|
|
||||||
// compute channel multipliers
|
// compute channel multipliers
|
||||||
double r, g, b;
|
double r, g, b;
|
||||||
@ -1009,8 +1009,41 @@ void RawImageSource::convertColorSpace(Imagefloat* image, const ColorManagementP
|
|||||||
|
|
||||||
void RawImageSource::getFullSize (int& w, int& h, int tr)
|
void RawImageSource::getFullSize (int& w, int& h, int tr)
|
||||||
{
|
{
|
||||||
|
computeFullSize(ri, tr, w, h);
|
||||||
|
|
||||||
tr = defTransform (tr);
|
// tr = defTransform(ri, tr);
|
||||||
|
|
||||||
|
// if (fuji) {
|
||||||
|
// w = ri->get_FujiWidth() * 2 + 1;
|
||||||
|
// h = (H - ri->get_FujiWidth()) * 2 + 1;
|
||||||
|
// } else if (d1x) {
|
||||||
|
// w = W;
|
||||||
|
// h = 2 * H;
|
||||||
|
// } else {
|
||||||
|
// w = W;
|
||||||
|
// h = H;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if ((tr & TR_ROT) == TR_R90 || (tr & TR_ROT) == TR_R270) {
|
||||||
|
// int tmp = w;
|
||||||
|
// w = h;
|
||||||
|
// h = tmp;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// w -= 2 * border;
|
||||||
|
// h -= 2 * border;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RawImageSource::computeFullSize(const RawImage *ri, int tr, int &w, int &h)
|
||||||
|
{
|
||||||
|
tr = defTransform(ri, tr);
|
||||||
|
|
||||||
|
const int W = ri->get_width();
|
||||||
|
const int H = ri->get_height();
|
||||||
|
const bool fuji = ri->get_FujiWidth() != 0;
|
||||||
|
const bool d1x = !ri->get_model().compare("D1X");
|
||||||
|
const int border = (ri->getSensorType() == ST_BAYER ? 4 : (ri->getSensorType() == ST_FUJI_XTRANS ? 7 : 0));
|
||||||
|
|
||||||
if (fuji) {
|
if (fuji) {
|
||||||
w = ri->get_FujiWidth() * 2 + 1;
|
w = ri->get_FujiWidth() * 2 + 1;
|
||||||
@ -1253,6 +1286,11 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly)
|
|||||||
// Load complete Exif information
|
// Load complete Exif information
|
||||||
idata = new FramesData(fname); // TODO: std::unique_ptr<>
|
idata = new FramesData(fname); // TODO: std::unique_ptr<>
|
||||||
idata->setDCRawFrameCount (numFrames);
|
idata->setDCRawFrameCount (numFrames);
|
||||||
|
{
|
||||||
|
int ww, hh;
|
||||||
|
getFullSize(ww, hh);
|
||||||
|
idata->setDimensions(ww, hh);
|
||||||
|
}
|
||||||
|
|
||||||
green(W, H);
|
green(W, H);
|
||||||
red(W, H);
|
red(W, H);
|
||||||
@ -2718,7 +2756,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R
|
|||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
int RawImageSource::defTransform (int tran)
|
int RawImageSource::defTransform(const RawImage *ri, int tran)
|
||||||
{
|
{
|
||||||
|
|
||||||
int deg = ri->get_rotateDegree();
|
int deg = ri->get_rotateDegree();
|
||||||
@ -4466,7 +4504,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double
|
|||||||
Probably (sure) there are improvement to do...
|
Probably (sure) there are improvement to do...
|
||||||
|
|
||||||
I have create a table temperature with temp and white point with 118 values between 2000K and 12000K we can obviously change these values, more...with different steps
|
I have create a table temperature with temp and white point with 118 values between 2000K and 12000K we can obviously change these values, more...with different steps
|
||||||
I have create a table for tint (green)with 134 values between 0.4 to 4.
|
I have create a table for tint (green)with 134 values between 0.4 to 4.
|
||||||
I have create or recuparate and transformed 201 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough.
|
I have create or recuparate and transformed 201 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough.
|
||||||
I think this value of 201 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized
|
I think this value of 201 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized
|
||||||
Of course we can increase this number :)
|
Of course we can increase this number :)
|
||||||
@ -4519,7 +4557,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double
|
|||||||
itcwb_precis : 5 by default - can be set to 3 or 9 - 3 best sampling but more time...9 "old" settings - but low differences in times with 3 instead of 9 about twice time 160ms instead of 80ms for a big raw file
|
itcwb_precis : 5 by default - can be set to 3 or 9 - 3 best sampling but more time...9 "old" settings - but low differences in times with 3 instead of 9 about twice time 160ms instead of 80ms for a big raw file
|
||||||
*/
|
*/
|
||||||
// BENCHFUN
|
// BENCHFUN
|
||||||
|
|
||||||
TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB");
|
TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix("sRGB");
|
||||||
const float wp[3][3] = {
|
const float wp[3][3] = {
|
||||||
{static_cast<float>(wprof[0][0]), static_cast<float>(wprof[0][1]), static_cast<float>(wprof[0][2])},
|
{static_cast<float>(wprof[0][0]), static_cast<float>(wprof[0][1]), static_cast<float>(wprof[0][2])},
|
||||||
@ -5064,7 +5102,7 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double
|
|||||||
}
|
}
|
||||||
|
|
||||||
estimchrom /= sizcu4;
|
estimchrom /= sizcu4;
|
||||||
if (settings->verbose) {
|
if (settings->verbose) {
|
||||||
printf("estimchrom=%f\n", estimchrom);
|
printf("estimchrom=%f\n", estimchrom);
|
||||||
}
|
}
|
||||||
if (settings->itcwb_sort) { //sort in ascending with chroma values
|
if (settings->itcwb_sort) { //sort in ascending with chroma values
|
||||||
@ -5366,7 +5404,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int
|
|||||||
if (settings->itcwb_precis == 5) {
|
if (settings->itcwb_precis == 5) {
|
||||||
precision = 5;
|
precision = 5;
|
||||||
} else if (settings->itcwb_precis < 5) {
|
} else if (settings->itcwb_precis < 5) {
|
||||||
precision = 3;
|
precision = 3;
|
||||||
} else if (settings->itcwb_precis > 5) {
|
} else if (settings->itcwb_precis > 5) {
|
||||||
precision = 9;
|
precision = 9;
|
||||||
}
|
}
|
||||||
@ -5628,11 +5666,11 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref
|
|||||||
if (settings->itcwb_precis == 5) {
|
if (settings->itcwb_precis == 5) {
|
||||||
precision = 5;
|
precision = 5;
|
||||||
} else if (settings->itcwb_precis < 5) {
|
} else if (settings->itcwb_precis < 5) {
|
||||||
precision = 3;
|
precision = 3;
|
||||||
} else if (settings->itcwb_precis > 5) {
|
} else if (settings->itcwb_precis > 5) {
|
||||||
precision = 9;
|
precision = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ;
|
const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ;
|
||||||
const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0);
|
const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0);
|
||||||
WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw);
|
WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw);
|
||||||
@ -6093,7 +6131,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coor
|
|||||||
void RawImageSource::transformPosition (int x, int y, int tran, int& ttx, int& tty)
|
void RawImageSource::transformPosition (int x, int y, int tran, int& ttx, int& tty)
|
||||||
{
|
{
|
||||||
|
|
||||||
tran = defTransform (tran);
|
tran = defTransform(ri, tran);
|
||||||
|
|
||||||
x += border;
|
x += border;
|
||||||
y += border;
|
y += border;
|
||||||
|
@ -46,7 +46,7 @@ private:
|
|||||||
static LUTf invGrad; // for fast_demosaic
|
static LUTf invGrad; // for fast_demosaic
|
||||||
static LUTf initInvGrad ();
|
static LUTf initInvGrad ();
|
||||||
static void colorSpaceConversion_ (Imagefloat* im, const procparams::ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double cam[3][3], const std::string &camName);
|
static void colorSpaceConversion_ (Imagefloat* im, const procparams::ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double cam[3][3], const std::string &camName);
|
||||||
int defTransform (int tran);
|
static int defTransform (const RawImage *ri, int tran);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MyMutex getImageMutex; // locks getImage
|
MyMutex getImageMutex; // locks getImage
|
||||||
@ -228,6 +228,8 @@ public:
|
|||||||
virtual float operator()(int row) const { return 1.f; }
|
virtual float operator()(int row) const { return 1.f; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void computeFullSize(const RawImage *ri, int tr, int &w, int &h);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef unsigned short ushort;
|
typedef unsigned short ushort;
|
||||||
void processFalseColorCorrection(Imagefloat* i, const int steps);
|
void processFalseColorCorrection(Imagefloat* i, const int steps);
|
||||||
|
@ -157,6 +157,7 @@ public:
|
|||||||
static FramesMetaData* fromFile(const Glib::ustring& fname);
|
static FramesMetaData* fromFile(const Glib::ustring& fname);
|
||||||
|
|
||||||
virtual Glib::ustring getFileName() const = 0;
|
virtual Glib::ustring getFileName() const = 0;
|
||||||
|
virtual void getDimensions(int &w, int &h) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** This listener interface is used to indicate the progress of time consuming operations */
|
/** This listener interface is used to indicate the progress of time consuming operations */
|
||||||
@ -371,7 +372,7 @@ public :
|
|||||||
virtual void adapCamChanged(double cadap) = 0;
|
virtual void adapCamChanged(double cadap) = 0;
|
||||||
virtual void ybCamChanged(int yb) = 0;
|
virtual void ybCamChanged(int yb) = 0;
|
||||||
virtual void wbCamChanged(double tem, double tin) = 0;
|
virtual void wbCamChanged(double tem, double tin) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class AutoChromaListener
|
class AutoChromaListener
|
||||||
@ -574,7 +575,7 @@ public:
|
|||||||
virtual void getCamWB (double& temp, double& green) = 0;
|
virtual void getCamWB (double& temp, double& green) = 0;
|
||||||
virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) = 0;
|
virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) = 0;
|
||||||
virtual bool getFilmNegativeSpot(int x, int y, int spotSize, procparams::FilmNegativeParams::RGB &refInput, procparams::FilmNegativeParams::RGB &refOutput) = 0;
|
virtual bool getFilmNegativeSpot(int x, int y, int spotSize, procparams::FilmNegativeParams::RGB &refInput, procparams::FilmNegativeParams::RGB &refOutput) = 0;
|
||||||
|
|
||||||
virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) = 0;
|
virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) = 0;
|
||||||
|
|
||||||
virtual void saveInputICCReference (const Glib::ustring& fname, bool apply_wb) = 0;
|
virtual void saveInputICCReference (const Glib::ustring& fname, bool apply_wb) = 0;
|
||||||
|
@ -968,6 +968,9 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, eSensorType &sens
|
|||||||
}
|
}
|
||||||
|
|
||||||
tpp->init();
|
tpp->init();
|
||||||
|
|
||||||
|
RawImageSource::computeFullSize(ri, TR_NONE, tpp->full_width, tpp->full_height);
|
||||||
|
|
||||||
delete ri;
|
delete ri;
|
||||||
return tpp;
|
return tpp;
|
||||||
}
|
}
|
||||||
@ -1025,7 +1028,9 @@ Thumbnail::Thumbnail () :
|
|||||||
gammaCorrected (false),
|
gammaCorrected (false),
|
||||||
colorMatrix{},
|
colorMatrix{},
|
||||||
scaleGain (1.0),
|
scaleGain (1.0),
|
||||||
isRaw (true)
|
isRaw (true),
|
||||||
|
full_width(-1),
|
||||||
|
full_height(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1236,7 +1241,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
|
|||||||
|
|
||||||
ipf.dehaze(baseImg, params.dehaze);
|
ipf.dehaze(baseImg, params.dehaze);
|
||||||
ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0);
|
ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0);
|
||||||
|
|
||||||
// perform transform
|
// perform transform
|
||||||
int origFW;
|
int origFW;
|
||||||
int origFH;
|
int origFH;
|
||||||
@ -2125,7 +2130,7 @@ bool Thumbnail::readData (const Glib::ustring& fname)
|
|||||||
colorMatrix[i][j] = cm[ix++];
|
colorMatrix[i][j] = cm[ix++];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyFile.has_key ("LiveThumbData", "ScaleGain")) {
|
if (keyFile.has_key ("LiveThumbData", "ScaleGain")) {
|
||||||
scaleGain = keyFile.get_double ("LiveThumbData", "ScaleGain");
|
scaleGain = keyFile.get_double ("LiveThumbData", "ScaleGain");
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,8 @@ class Thumbnail
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
bool isRaw;
|
bool isRaw;
|
||||||
|
int full_width;
|
||||||
|
int full_height;
|
||||||
|
|
||||||
~Thumbnail ();
|
~Thumbnail ();
|
||||||
Thumbnail ();
|
Thumbnail ();
|
||||||
@ -94,7 +96,7 @@ public:
|
|||||||
void getDimensions (int& w, int& h, double& scaleFac);
|
void getDimensions (int& w, int& h, double& scaleFac);
|
||||||
|
|
||||||
static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode = false, bool forHistogramMatching = false);
|
static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode = false, bool forHistogramMatching = false);
|
||||||
static Thumbnail* loadFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, bool rotate, bool forHistogramMatching = false);
|
static Thumbnail* loadFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, bool rotate, bool forHistogramMatching=false);
|
||||||
static Thumbnail* loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh, double wbEq, bool inspectorMode = false);
|
static Thumbnail* loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh, double wbEq, bool inspectorMode = false);
|
||||||
|
|
||||||
void getCamWB (double& temp, double& green);
|
void getCamWB (double& temp, double& green);
|
||||||
|
@ -56,7 +56,9 @@ CacheImageData::CacheImageData() :
|
|||||||
greenAWBMul(-1.0),
|
greenAWBMul(-1.0),
|
||||||
blueAWBMul(-1.0),
|
blueAWBMul(-1.0),
|
||||||
rotate(0),
|
rotate(0),
|
||||||
thumbImgType(0)
|
thumbImgType(0),
|
||||||
|
width(-1),
|
||||||
|
height(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,6 +210,12 @@ int CacheImageData::load (const Glib::ustring& fname)
|
|||||||
if (keyFile.has_key ("FileInfo", "SampleFormat")) {
|
if (keyFile.has_key ("FileInfo", "SampleFormat")) {
|
||||||
sampleFormat = (rtengine::IIO_Sample_Format)keyFile.get_integer ("FileInfo", "SampleFormat");
|
sampleFormat = (rtengine::IIO_Sample_Format)keyFile.get_integer ("FileInfo", "SampleFormat");
|
||||||
}
|
}
|
||||||
|
if (keyFile.has_key("FileInfo", "Width")) {
|
||||||
|
width = keyFile.get_integer("FileInfo", "Width");
|
||||||
|
}
|
||||||
|
if (keyFile.has_key("FileInfo", "Height")) {
|
||||||
|
height = keyFile.get_integer("FileInfo", "Height");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (format == FT_Raw && keyFile.has_group ("ExtraRawInfo")) {
|
if (format == FT_Raw && keyFile.has_group ("ExtraRawInfo")) {
|
||||||
@ -298,6 +306,8 @@ int CacheImageData::save (const Glib::ustring& fname)
|
|||||||
keyFile.set_string ("FileInfo", "Filetype", filetype);
|
keyFile.set_string ("FileInfo", "Filetype", filetype);
|
||||||
keyFile.set_integer ("FileInfo", "FrameCount", frameCount);
|
keyFile.set_integer ("FileInfo", "FrameCount", frameCount);
|
||||||
keyFile.set_integer ("FileInfo", "SampleFormat", sampleFormat);
|
keyFile.set_integer ("FileInfo", "SampleFormat", sampleFormat);
|
||||||
|
keyFile.set_integer("FileInfo", "Width", width);
|
||||||
|
keyFile.set_integer("FileInfo", "Height", height);
|
||||||
|
|
||||||
if (format == FT_Raw) {
|
if (format == FT_Raw) {
|
||||||
keyFile.set_integer ("ExtraRawInfo", "ThumbImageType", thumbImgType);
|
keyFile.set_integer ("ExtraRawInfo", "ThumbImageType", thumbImgType);
|
||||||
|
@ -80,6 +80,9 @@ public:
|
|||||||
QUICK_THUMBNAIL = 1 // was the thumbnail generated from embedded jpeg
|
QUICK_THUMBNAIL = 1 // was the thumbnail generated from embedded jpeg
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
CacheImageData ();
|
CacheImageData ();
|
||||||
|
|
||||||
int load (const Glib::ustring& fname);
|
int load (const Glib::ustring& fname);
|
||||||
@ -110,4 +113,9 @@ public:
|
|||||||
bool getHDR() const override { return isHDR; }
|
bool getHDR() const override { return isHDR; }
|
||||||
std::string getImageType() const override { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; }
|
std::string getImageType() const override { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; }
|
||||||
rtengine::IIOSampleFormat getSampleFormat() const override { return sampleFormat; }
|
rtengine::IIOSampleFormat getSampleFormat() const override { return sampleFormat; }
|
||||||
|
void getDimensions(int &w, int &h) const override
|
||||||
|
{
|
||||||
|
w = width;
|
||||||
|
h = height;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@ -1357,8 +1357,13 @@ void EditorPanel::info_toggled ()
|
|||||||
escapeHtmlChars (Glib::path_get_dirname (openThm->getFileName())) + G_DIR_SEPARATOR_S,
|
escapeHtmlChars (Glib::path_get_dirname (openThm->getFileName())) + G_DIR_SEPARATOR_S,
|
||||||
escapeHtmlChars (Glib::path_get_basename (openThm->getFileName())) );
|
escapeHtmlChars (Glib::path_get_basename (openThm->getFileName())) );
|
||||||
|
|
||||||
int ww = ipc->getFullWidth();
|
int ww = -1, hh = -1;
|
||||||
int hh = ipc->getFullHeight();
|
idata->getDimensions(ww, hh);
|
||||||
|
if (ww <= 0) {
|
||||||
|
ww = ipc->getFullWidth();
|
||||||
|
hh = ipc->getFullHeight();
|
||||||
|
}
|
||||||
|
|
||||||
//megapixels
|
//megapixels
|
||||||
infoString = Glib::ustring::compose ("%1\n<span size=\"small\">%2 MP (%3x%4)</span>",
|
infoString = Glib::ustring::compose ("%1\n<span size=\"small\">%2 MP (%3x%4)</span>",
|
||||||
infoString,
|
infoString,
|
||||||
|
@ -241,6 +241,10 @@ void Thumbnail::_generateThumbnailImage ()
|
|||||||
cfs.format = FT_Raw;
|
cfs.format = FT_Raw;
|
||||||
cfs.thumbImgType = quick ? CacheImageData::QUICK_THUMBNAIL : CacheImageData::FULL_THUMBNAIL;
|
cfs.thumbImgType = quick ? CacheImageData::QUICK_THUMBNAIL : CacheImageData::FULL_THUMBNAIL;
|
||||||
infoFromImage (fname);
|
infoFromImage (fname);
|
||||||
|
if (!quick) {
|
||||||
|
cfs.width = tpp->full_width;
|
||||||
|
cfs.height = tpp->full_height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -893,6 +897,8 @@ int Thumbnail::infoFromImage (const Glib::ustring& fname)
|
|||||||
cfs.filetype = "";
|
cfs.filetype = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
idata->getDimensions(cfs.width, cfs.height);
|
||||||
|
|
||||||
delete idata;
|
delete idata;
|
||||||
return deg;
|
return deg;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user