From 6fb5d5ee33ec9e8f930c092fc14fa77e5fade375 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 9 Jan 2018 16:03:54 +0100 Subject: [PATCH 1/4] Speedup for saturation slider in exposure tool and for HSV equalizer --- rtengine/improcfun.cc | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 569ba42f1..d137453a8 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -3929,22 +3929,14 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } if (sat != 0 || hCurveEnabled || sCurveEnabled || vCurveEnabled) { + const float satby100 = sat / 100.f; for (int i = istart, ti = 0; i < tH; i++, ti++) { for (int j = jstart, tj = 0; j < tW; j++, tj++) { - - const float satby100 = sat / 100.f; - float r = rtemp[ti * TS + tj]; - float g = gtemp[ti * TS + tj]; - float b = btemp[ti * TS + tj]; float h, s, v; - Color::rgb2hsv (r, g, b, h, s, v); - + Color::rgb2hsvtc(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], h, s, v); + h /= 6.f; if (sat > 0) { - s = (1.f - satby100) * s + satby100 * (1.f - SQR (SQR (1.f - min (s, 1.0f)))); - - if (s < 0.f) { - s = 0.f; - } + s = std::max(0.f, intp(satby100, 1.f - SQR(SQR(1.f - std::min(s, 1.0f))), s)); } else { /*if (sat < 0)*/ s *= 1.f + satby100; } @@ -3999,7 +3991,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } - Color::hsv2rgb (h, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]); + Color::hsv2rgbdcp(h * 6.f, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]); } } } From 6824f613e933fc93d37ab2f9842028db3b7b3c15 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Wed, 10 Jan 2018 09:21:54 +0100 Subject: [PATCH 2/4] HDR tone mapping: fixed typo in setting the defaults --- rtgui/fattaltonemap.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/fattaltonemap.cc b/rtgui/fattaltonemap.cc index a6f4c5190..5e4aa20d9 100644 --- a/rtgui/fattaltonemap.cc +++ b/rtgui/fattaltonemap.cc @@ -26,7 +26,7 @@ using namespace rtengine::procparams; FattalToneMapping::FattalToneMapping(): FoldableToolPanel(this, "fattal", M("TP_TM_FATTAL_LABEL"), true, true) { - amount = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_AMOUNT"), 1., 100., 30., 0.0)); + amount = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_AMOUNT"), 1., 100., 1., 30.)); threshold = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_THRESHOLD"), -100., 100., 1., 0.0)); amount->setAdjusterListener(this); From e29e9ca0d889dffb6bbacf3242a0773fcb6fa0f3 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Wed, 10 Jan 2018 17:38:18 +0100 Subject: [PATCH 3/4] Fixed segfault when saving reference image (due to metadata in TIFF not present) Fixes #4289 --- rtengine/imageio.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 88274cdb4..4cd762d0b 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1485,9 +1485,9 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) } #if __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ - bool needsReverse = (bps == 16 || bps == 32) && exifRoot->getOrder() == rtexif::MOTOROLA; + bool needsReverse = (bps == 16 || bps == 32) && exifRoot && exifRoot->getOrder() == rtexif::MOTOROLA; #else - bool needsReverse = (bps == 16 || bps == 32) && exifRoot->getOrder() == rtexif::INTEL; + bool needsReverse = (bps == 16 || bps == 32) && exifRoot && exifRoot->getOrder() == rtexif::INTEL; #endif for (int row = 0; row < height; row++) { From 91e494a7098e760d2422003011e8311d7032bba5 Mon Sep 17 00:00:00 2001 From: Hombre Date: Wed, 10 Jan 2018 18:22:50 +0100 Subject: [PATCH 4/4] Fix issue #4291 : "Bug when edit current image in external editor" Is also add metadata to the "ICC Reference image" (ICM tool). --- rtengine/imageio.cc | 21 --------------------- rtengine/improccoordinator.cc | 2 ++ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 4cd762d0b..1b6a4ad20 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1484,30 +1484,9 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) TIFFSetField (out, TIFFTAG_ICCPROFILE, profileLength, profileData); } -#if __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ - bool needsReverse = (bps == 16 || bps == 32) && exifRoot && exifRoot->getOrder() == rtexif::MOTOROLA; -#else - bool needsReverse = (bps == 16 || bps == 32) && exifRoot && exifRoot->getOrder() == rtexif::INTEL; -#endif - for (int row = 0; row < height; row++) { getScanline (row, linebuffer, bps); - if (needsReverse) { - if (bps == 16) { - for (int i = 0; i < lineWidth; i += 2) { - char c = linebuffer[i]; - linebuffer[i] = linebuffer[i + 1]; - linebuffer[i + 1] = c; - } - } else { - for (int i = 0; i < lineWidth; i += 4) { - std::swap(linebuffer[i], linebuffer[i+3]); - std::swap(linebuffer[i+1], linebuffer[i+2]); - } - } - } - if (TIFFWriteScanline (out, linebuffer, row, 0) < 0) { TIFFClose (out); delete [] linebuffer; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 97e356f18..34478c983 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1284,6 +1284,8 @@ void ImProcCoordinator::saveInputICCReference (const Glib::ustring& fname, bool im = tempImage; } + im->setMetadata (imgsrc->getMetaData()->getRootExifData ()); + im->saveTIFF (fname, 16, true); delete im;