diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index ef342a966..0a1608184 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -806,6 +806,7 @@ HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;(Sensor-Matrix)\nVorverarbeitung\nR
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;(Sensor-Matrix)\nVorverarbeitung\nPDAF-Zeilenfilter
HISTORY_MSG_PRSHARPEN_CONTRAST;(Skalieren) - Schärfen\nKontrastschwelle
HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand
+HISTORY_MSG_RESIZE_ALLOW_UPSCALING;(Skalieren)\nHochskalieren zulassen
HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle
HISTORY_MSG_SOFTLIGHT_ENABLED;(Weiches Licht)
HISTORY_MSG_SOFTLIGHT_STRENGTH;(Weiches Licht)\nIntensität
@@ -1001,6 +1002,7 @@ PARTIALPASTE_PREPROCESS_DEADPIXFILT;Vorverarbeitung: Dead-Pixel-Filter
PARTIALPASTE_PREPROCESS_GREENEQUIL;Vorverarbeitung: Grün-Ausgleich
PARTIALPASTE_PREPROCESS_HOTPIXFILT;Vorverarbeitung: Hot-Pixel-Filter
PARTIALPASTE_PREPROCESS_LINEDENOISE;Vorverarbeitung: Zeilenrauschfilter
+PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;Vorverarbeitung: PDAF-Zeilenfilter
PARTIALPASTE_PRSHARPENING;Schärfung nach Größenänderung
PARTIALPASTE_RAWCACORR_AUTO;Chromatische Aberration: Automatische Korrektur
PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau
@@ -1008,6 +1010,7 @@ PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel
PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor
PARTIALPASTE_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen (EV)
PARTIALPASTE_RAWGROUP;RAW
+PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand
PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung
PARTIALPASTE_RAW_DCBITERATIONS;Farbinterpolation: Anzahl der DCB-Iterationen
PARTIALPASTE_RAW_DMETHOD;Farbinterpolation: Methode
@@ -1927,6 +1930,7 @@ TP_RAW_SENSOR_BAYER_LABEL;Sensor mit Bayer-Matrix
TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Mit “3-Pass“ erzielt man die besten Ergebnisse\n(empfohlen bei Bildern mit niedrigen ISO-Werten).\n\nBei hohen ISO-Werten unterscheidet sich “1-Pass“\nkaum gegenüber “3-Pass“, ist aber deutlich schneller.\n\n"+ schnell" erzeugt weniger Artefakte in kontrast-\narmen Bereichen.
TP_RAW_SENSOR_XTRANS_LABEL;Sensor mit X-Trans-Matrix
TP_RAW_VNG4;VNG4
+TP_RESIZE_ALLOW_UPSCALING;Hochskalieren zulassen
TP_RESIZE_APPLIESTO;Anwenden auf:
TP_RESIZE_CROPPEDAREA;Ausschnitt
TP_RESIZE_FITBOX;Begrenzungsrahmen
@@ -2314,11 +2318,3 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
-!!!!!!!!!!!!!!!!!!!!!!!!!
-! Untranslated keys follow; remove the ! prefix after an entry is translated.
-!!!!!!!!!!!!!!!!!!!!!!!!!
-
-HISTORY_MSG_RESIZE_ALLOW_UPSCALING;(Skalieren)\nHochskalieren zulassen
-PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;Vorverarbeitung: PDAF-Zeilenfilter
-PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand
-TP_RESIZE_ALLOW_UPSCALING;Hochskalieren zulassen
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 0f50b6147..a573146ab 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -771,7 +771,11 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - 振れに対するデモザイクの方式
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値
+HISTORY_MSG_RAW_BORDER;Rawの境界
+HISTORY_MSG_RESIZE_ALLOW_UPSCALING;リサイズ - アップスケーリングを可能にする
HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値
+HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトな明るさ
+HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトな明るさ - 強さ
HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - アンカー
HISTORY_NEWSNAPSHOT;追加
HISTORY_NEWSNAPSHOT_TOOLTIP;ショートカット: Alt-s
@@ -892,6 +896,7 @@ MAIN_TOOLTIP_PREVIEWFOCUSMASK;フォーカス・マスク表示\nショ
MAIN_TOOLTIP_PREVIEWG;グリーン チャンネル表示\nショートカット: g
MAIN_TOOLTIP_PREVIEWL;輝度表示\nショートカット: v\n\n0.299*R + 0.587*G + 0.114*B
MAIN_TOOLTIP_PREVIEWR;レッド チャンネル表示\nショートカット: r
+MAIN_TOOLTIP_PREVIEWSHARPMASK;プレビューで見るシャープ化機能のコントラストマスク\nショートカット: なし\n\nこの機能が使えるのはシャープ化機能が有効で、画像が100%以上に拡大されている場合だけ
MAIN_TOOLTIP_QINFO;画像の情報\nショートカット: i
MAIN_TOOLTIP_SHOWHIDELP1;表示/非表示 左パネル\nショートカット: l
MAIN_TOOLTIP_SHOWHIDERP1;表示/非表示 右パネル\nショートカット: Alt-l
@@ -962,6 +967,7 @@ PARTIALPASTE_PREPROCESS_DEADPIXFILT;デッドピクセルフィルターを適
PARTIALPASTE_PREPROCESS_GREENEQUIL;グリーン 平衡化
PARTIALPASTE_PREPROCESS_HOTPIXFILT;ホットピクセルフィルターを適用
PARTIALPASTE_PREPROCESS_LINEDENOISE;ラインノイズ フィルタ
+PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF ラインフィルタ
PARTIALPASTE_PRSHARPENING;リサイズ後のシャープ化
PARTIALPASTE_RAWCACORR_AUTO;自動色収差補正
PARTIALPASTE_RAWCACORR_CAREDBLUE;色収差 レッドとブルー
@@ -969,6 +975,7 @@ PARTIALPASTE_RAWEXPOS_BLACK;黒レベル
PARTIALPASTE_RAWEXPOS_LINEAR;raw ホワイトポイント リニア補正係数
PARTIALPASTE_RAWEXPOS_PRESER;raw ホワイトポイント ハイライトを保持したまま補正 (EV)
PARTIALPASTE_RAWGROUP;raw 設定
+PARTIALPASTE_RAW_BORDER;Rawの境界
PARTIALPASTE_RAW_DCBENHANCE;DCB 拡張処理適用
PARTIALPASTE_RAW_DCBITERATIONS;DCB反復の数
PARTIALPASTE_RAW_DMETHOD;デモザイクの方法
@@ -984,6 +991,7 @@ PARTIALPASTE_SHADOWSHIGHLIGHTS;シャドウ/ハイライト
PARTIALPASTE_SHARPENEDGE;エッジ
PARTIALPASTE_SHARPENING;シャープ化 (USM/RL)
PARTIALPASTE_SHARPENMICRO;マイクロコントラスト
+PARTIALPASTE_SOFTLIGHT;ソフトな明るさ
PARTIALPASTE_TM_FATTAL;ダイナミックレンジ圧縮
PARTIALPASTE_VIBRANCE;自然な彩度
PARTIALPASTE_VIGNETTING;周辺光量補正
@@ -1794,14 +1802,17 @@ TP_RAWEXPOS_PRESER;ハイライトを保持
TP_RAWEXPOS_RGB;レッド、グリーン、ブルー
TP_RAWEXPOS_TWOGREEN;2つのグリーンを連動
TP_RAW_1PASSMEDIUM;1-パス (ミディアム)
+TP_RAW_2PASS;1-pass+fast
TP_RAW_3PASSBEST;3-Pass (最良)
TP_RAW_4PASS;4-パス
TP_RAW_AHD;AHD
TP_RAW_AMAZE;AMaZE
TP_RAW_AMAZEVNG4;AMaZE+VNG4
+TP_RAW_BORDER;境界
TP_RAW_DCB;DCB
TP_RAW_DCBENHANCE;DCB 拡張処理
TP_RAW_DCBITERATIONS;DCB 反復の数
+TP_RAW_DCBVNG4;DCB+VNG4
TP_RAW_DMETHOD;方式
TP_RAW_DMETHOD_PROGRESSBAR;%1 デモザイク中...
TP_RAW_DMETHOD_PROGRESSBAR_REFINE;デモザイク・リファイン中...
@@ -1853,10 +1864,12 @@ TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;デフォルトで設定している値1.0で基
TP_RAW_PIXELSHIFTSMOOTH;境界部分を滑らかにする
TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;これは振れのある領域と振れがない領域の境を滑らかに補正するものです。\n0に設定すると機能の働きはありません。\n1に設定すると、選択された構成画像にAMaZEかLMMSEが使われた結果が得られます("LMMSEを使う"というオプション次第)、或いは"メディアンを使う"が選択されていれば全ての構成画像にメディアンが使われます。
TP_RAW_RCD;RCD
+TP_RAW_RCDVNG4;RCD+VNG4
TP_RAW_SENSOR_BAYER_LABEL;ベイヤー配列を使ったセンサー
TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-passが最適です(低ISO画像には奨められます)\n高ISO画像の場合、1-passと3-passの違いは殆どありません、処理速度は前者の方が速いです。
TP_RAW_SENSOR_XTRANS_LABEL;X-Transマトリクスを使ったセンサー
TP_RAW_VNG4;VNG4
+TP_RESIZE_ALLOW_UPSCALING;アップスケーリングを可能にする
TP_RESIZE_APPLIESTO;適用領域:
TP_RESIZE_CROPPEDAREA;切り抜き画像
TP_RESIZE_FITBOX;バウンディング・ボックス
@@ -1995,6 +2008,8 @@ TP_SHARPENMICRO_CONTRAST;コントラストのしきい値
TP_SHARPENMICRO_LABEL;マイクロコントラスト
TP_SHARPENMICRO_MATRIX;3×3マトリクスの代わりに 5×5
TP_SHARPENMICRO_UNIFORMITY;均等
+TP_SOFTLIGHT_LABEL;ソフトな明るさ
+TP_SOFTLIGHT_STRENGTH;強さ
TP_TM_FATTAL_AMOUNT;量
TP_TM_FATTAL_ANCHOR;アンカー
TP_TM_FATTAL_LABEL;ダイナミックレンジ圧縮
@@ -2242,22 +2257,3 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ
ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: +
ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
-!!!!!!!!!!!!!!!!!!!!!!!!!
-! Untranslated keys follow; remove the ! prefix after an entry is translated.
-!!!!!!!!!!!!!!!!!!!!!!!!!
-
-!HISTORY_MSG_RAW_BORDER;Raw border
-!HISTORY_MSG_RESIZE_ALLOW_UPSCALING;Resize - Allow upscaling
-!HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light
-!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength
-!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
-!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
-!PARTIALPASTE_RAW_BORDER;Raw border
-!PARTIALPASTE_SOFTLIGHT;Soft light
-!TP_RAW_2PASS;1-pass+fast
-!TP_RAW_BORDER;Border
-!TP_RAW_DCBVNG4;DCB+VNG4
-!TP_RAW_RCDVNG4;RCD+VNG4
-!TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling
-!TP_SOFTLIGHT_LABEL;Soft Light
-!TP_SOFTLIGHT_STRENGTH;Strength
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index 227efe6b9..859aea3a1 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -10043,29 +10043,6 @@ static void expandFloats(Bytef * dst, int tileWidth, int bytesps) {
}
}
-static void copyFloatDataToInt(float * src, ushort * dst, size_t size, float max) {
- bool negative = false, nan = false;
-
-#ifdef _OPENMP
-#pragma omp parallel for
-#endif
- for (size_t i = 0; i < size; ++i) {
- if (src[i] < 0.0f) {
- negative = true;
- src[i] = 0.0f;
- } else if (std::isnan(src[i])) {
- nan = true;
- src[i] = max;
- }
- // Copy the data to the integer buffer to build the thumbnail
- dst[i] = (ushort)src[i];
- }
- if (negative)
- fprintf(stderr, "DNG Float: Negative data found in input file\n");
- if (nan)
- fprintf(stderr, "DNG Float: NaN data found in input file\n");
-}
-
static int decompress(size_t srcLen, size_t dstLen, unsigned char *in, unsigned char *out) {
// At least in zlib 1.2.11 the uncompress function is not thread save while it is thread save in zlib 1.2.8
// This simple replacement is thread save. Used example code from https://zlib.net/zlib_how.html
@@ -10207,9 +10184,6 @@ void CLASS deflate_dng_load_raw() {
}
}
- if (ifd->sample_format == 3) { // Floating point data
- copyFloatDataToInt(float_raw_image, raw_image, raw_width*raw_height, maximum);
- }
}
/* RT: removed unused functions */
diff --git a/rtengine/histmatching.cc b/rtengine/histmatching.cc
index 076a77f64..43b2b48ad 100644
--- a/rtengine/histmatching.cc
+++ b/rtengine/histmatching.cc
@@ -52,7 +52,7 @@ CdfInfo getCdf(const IImage8 &img)
for (int y = 0; y < img.getHeight(); ++y) {
for (int x = 0; x < img.getWidth(); ++x) {
- int lum = LIM(0, int(Color::rgbLuminance(float(img.r(y, x)), float(img.g(y, x)), float(img.b(y, x)))), 255);
+ int lum = LIM(int(Color::rgbLuminance(float(img.r(y, x)), float(img.g(y, x)), float(img.b(y, x)))), 0, 255);
++ret.cdf[lum];
}
}
@@ -101,7 +101,6 @@ void mappingToCurve(const std::vector &mapping, std::vector &curve)
{
curve.clear();
- const int npoints = 8;
int idx = 15;
for (; idx < int(mapping.size()); ++idx) {
if (mapping[idx] >= idx) {
@@ -115,7 +114,6 @@ void mappingToCurve(const std::vector &mapping, std::vector &curve)
}
}
}
- int step = std::max(int(mapping.size())/npoints, 1);
auto coord = [](int v) -> double { return double(v)/255.0; };
auto doit =
@@ -148,9 +146,17 @@ void mappingToCurve(const std::vector &mapping, std::vector &curve)
while (start < idx && (mapping[start] < 0 || start < idx / 2)) {
++start;
}
-
- doit(start, idx, idx > step ? step : idx / 2, true);
- doit(idx, int(mapping.size()), step, idx - step > step / 2 && std::abs(curve[curve.size()-2] - coord(idx)) > 0.01);
+
+ const int npoints = 8;
+ int step = std::max(int(mapping.size())/npoints, 1);
+ int end = mapping.size();
+ if (idx <= end / 3) {
+ doit(start, idx, idx / 2, true);
+ doit(idx, end, (end - idx) / 3, false);
+ } else {
+ doit(start, idx, idx > step ? step : idx / 2, true);
+ doit(idx, int(mapping.size()), step, idx - step > step / 2 && std::abs(curve[curve.size()-2] - coord(idx)) > 0.01);
+ }
if (curve.size() > 2 && (1 - curve[curve.size()-2] <= step / (256.0 * 3))) {
curve.pop_back();
@@ -201,6 +207,9 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, st
int fw, fh;
getFullSize(fw, fh, TR_NONE);
+ if (getRotateDegree() == 90 || getRotateDegree() == 270) {
+ std::swap(fw, fh);
+ }
int skip = 3;
if (settings->verbose) {
diff --git a/rtengine/rawimage.h b/rtengine/rawimage.h
index 95e7aea8d..7595ad196 100644
--- a/rtengine/rawimage.h
+++ b/rtengine/rawimage.h
@@ -167,10 +167,22 @@ public:
{
return top_margin;
}
+
+ int get_rawwidth() const
+ {
+ return raw_width;
+ }
+
int get_FujiWidth() const
{
return fuji_width;
}
+
+ float const * get_FloatRawImage() const
+ {
+ return float_raw_image;
+ }
+
eSensorType getSensorType();
void getRgbCam (float rgbcam[3][4]);
@@ -312,6 +324,11 @@ public:
return filters == 9;
}
+ bool isFloat() const
+ {
+ return float_raw_image;
+ }
+
public:
// dcraw functions
void pre_interpolate()
diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc
index 47a6d7349..9279e8829 100644
--- a/rtengine/rtthumbnail.cc
+++ b/rtengine/rtthumbnail.cc
@@ -66,7 +66,11 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
if (ri->isBayer()) {
const int height = ri->get_iheight();
const int width = ri->get_iwidth();
-
+ const bool isFloat = ri->isFloat();
+ const int top_margin = ri->get_topmargin();
+ const int left_margin = ri->get_leftmargin();
+ const int raw_width = ri->get_rawwidth();
+ const float * const float_raw_image = ri->get_FloatRawImage();
#ifdef _OPENMP
#pragma omp parallel for if(multiThread)
#endif
@@ -76,8 +80,15 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
int col = 0;
for (; col < width - 1; col += 2) {
- float val0 = image[row * width + col][c0];
- float val1 = image[row * width + col + 1][c1];
+ float val0;
+ float val1;
+ if (isFloat) {
+ val0 = float_raw_image[(row + top_margin) * raw_width + col + left_margin];
+ val1 = float_raw_image[(row + top_margin) * raw_width + col + left_margin + 1];
+ } else {
+ val0 = image[row * width + col][c0];
+ val1 = image[row * width + col + 1][c1];
+ }
val0 -= cblack[c0];
val1 -= cblack[c1];
val0 *= scale_mul[c0];
@@ -87,7 +98,12 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
}
if (col < width) { // in case width is odd
- float val0 = image[row * width + col][c0];
+ float val0;
+ if (isFloat) {
+ val0 = float_raw_image[(row + top_margin) * raw_width + col + left_margin];
+ } else {
+ val0 = image[row * width + col][c0];
+ }
val0 -= cblack[c0];
val0 *= scale_mul[c0];
image[row * width + col][c0] = rtengine::CLIP (val0);
@@ -96,6 +112,11 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
} else if (ri->isXtrans()) {
const int height = ri->get_iheight();
const int width = ri->get_iwidth();
+ const bool isFloat = ri->isFloat();
+ const int top_margin = ri->get_topmargin();
+ const int left_margin = ri->get_leftmargin();
+ const int raw_width = ri->get_rawwidth();
+ const float * const float_raw_image = ri->get_FloatRawImage();
#ifdef _OPENMP
#pragma omp parallel for if(multiThread)
@@ -111,7 +132,12 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
for (; col < width - 5; col += 6) {
for (int i = 0; i < 6; ++i) {
const unsigned ccol = c[i];
- float val = image[row * width + col + i][ccol];
+ float val;
+ if (isFloat) {
+ val = float_raw_image[(row + top_margin) * raw_width + col + i + left_margin];
+ } else {
+ val = image[row * width + col + i][ccol];
+ }
val -= cblack[ccol];
val *= scale_mul[ccol];
image[row * width + col + i][ccol] = rtengine::CLIP (val);
@@ -120,7 +146,12 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4],
for (; col < width; ++col) { // remaining columns
const unsigned ccol = ri->XTRANSFC (row, col);
- float val = image[row * width + col][ccol];
+ float val;
+ if (isFloat) {
+ val = float_raw_image[(row + top_margin) * raw_width + col + left_margin];
+ } else {
+ val = image[row * width + col][ccol];
+ }
val -= cblack[ccol];
val *= scale_mul[ccol];
image[row * width + col][ccol] = rtengine::CLIP (val);