Updated translations
Corrected bug for displaying correct WB Reintroduced progress bar bugfix for correction of badpixel
This commit is contained in:
@@ -79,6 +79,9 @@ FILEBROWSER_PROCESSINGSETTINGS;Settings
|
||||
FILEBROWSER_PROCESSINGSETTINGSHINT;Set the file format and output directory
|
||||
FILEBROWSER_RENAMEDLGLABEL;Rename file
|
||||
FILEBROWSER_RENAMEDLGMSG;Rename file "%1" to:
|
||||
FILEBROWSER_AUTODARKFRAME;Auto dark frame
|
||||
FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory
|
||||
FILEBROWSER_SELECTDARKFRAME;Select dark frame...
|
||||
FILEBROWSER_SHOWDIRHINT;Show all images of the directory <b>D</b>
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info <b>i</b>
|
||||
FILEBROWSER_SHOWQUEUEHINT;Show content of the processing queue
|
||||
@@ -400,6 +403,7 @@ PREFERENCES_CLEARDLG_LINE2;This may take a few seconds.
|
||||
PREFERENCES_CLEARDLG_TITLE;Please wait
|
||||
PREFERENCES_CLIPPINGIND;Clipping indication
|
||||
PREFERENCES_CMETRICINTENT;Colorimetric Intent
|
||||
PREFERENCES_DARKFRAME;Dark frame
|
||||
PREFERENCES_DATEFORMAT;Date Format
|
||||
PREFERENCES_DATEFORMATHINT;<i>You can use the following formatting strings:</i>\n<b>%y</b><i> : year</i>\n<b>%m</b><i> : month</i>\n<b>%d</b><i> : day</i>\n<i>\nFor example, the hungarian date format is:</i>\n<b>%y/%m/%d</b>
|
||||
PREFERENCES_DCBENHANCE;Apply DCB enhancement step
|
||||
@@ -407,6 +411,7 @@ PREFERENCES_DCBITERATIONS;Number of DCB iterations
|
||||
PREFERENCES_DEFAULTLANG;Default language
|
||||
PREFERENCES_DEFAULTTHEME;Default theme
|
||||
PREFERENCES_DEMOSAICINGALGO;Demosaicing Algorithm
|
||||
PREFERENCES_DIRDARKFRAMES;Dark frames directory
|
||||
PREFERENCES_DIRHOME;Home directory
|
||||
PREFERENCES_DIRLAST;Last visited directory
|
||||
PREFERENCES_DIROTHER;Other
|
||||
@@ -632,6 +637,8 @@ TP_LUMADENOISE_RADIUS;Radius
|
||||
TP_PERSPECTIVE_HORIZONTAL;Horizontal
|
||||
TP_PERSPECTIVE_LABEL;Perspective
|
||||
TP_PERSPECTIVE_VERTICAL;Vertical
|
||||
TP_PREPROCESS_DARKFRAME;Dark frame
|
||||
TP_PREPROCESS_DFAUTOSELECT;Auto selection
|
||||
TP_RESIZE_BICUBIC;Bicubic
|
||||
TP_RESIZE_BICUBICSF;Bicubic (Softer)
|
||||
TP_RESIZE_BICUBICSH;Bicubic (Sharper)
|
||||
|
||||
@@ -225,13 +225,15 @@ void DFManager::init( Glib::ustring pathname )
|
||||
i.pathNames.push_back( i.pathname );
|
||||
i.pathname.clear();
|
||||
}
|
||||
if( !i.pathname.empty() )
|
||||
printf( "%s: %s\n",i.key().c_str(),i.pathname.c_str());
|
||||
else{
|
||||
printf( "%s: MEAN of \n ",i.key().c_str());
|
||||
for( std::list<Glib::ustring>::iterator iter = i.pathNames.begin(); iter != i.pathNames.end();iter++ )
|
||||
printf( "%s, ", iter->c_str() );
|
||||
printf("\n");
|
||||
if( settings->verbose ){
|
||||
if( !i.pathname.empty() )
|
||||
printf( "%s: %s\n",i.key().c_str(),i.pathname.c_str());
|
||||
else{
|
||||
printf( "%s: MEAN of \n ",i.key().c_str());
|
||||
for( std::list<Glib::ustring>::iterator iter = i.pathNames.begin(); iter != i.pathNames.end();iter++ )
|
||||
printf( "%s, ", iter->c_str() );
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
currentPath = pathname;
|
||||
|
||||
@@ -349,7 +349,7 @@ int RawImageSource::cfaCleanFromMap( BYTE* bitmapBads )
|
||||
if (bitmapBads[ (row+dy) *bmpW + (col+dx)/8] & (1<<(col+dx)%8)) continue;
|
||||
sum += rawData[row+dy][col+dx];
|
||||
tot++;
|
||||
if (bitmapBads[ (row-dy) *bmpW + (col-dx)/8] & (1<<(col+dx)%8)) continue;
|
||||
if (bitmapBads[ (row-dy) *bmpW + (col-dx)/8] & (1<<(col-dx)%8)) continue;
|
||||
|
||||
double dirwt = 1/( fabs( rawData[row+dy][col+dx]- rawData[row-dy][col-dx])+eps);
|
||||
wtdsum += dirwt* rawData[row+dy][col+dx];
|
||||
@@ -731,8 +731,9 @@ int RawImageSource::load (Glib::ustring fname) {
|
||||
int res = ri->loadRaw ();
|
||||
if (res)
|
||||
return res;
|
||||
|
||||
plistener=NULL; //\TODO must be reintroduced
|
||||
if (plistener) {
|
||||
plistener->setProgress (0.8);
|
||||
}
|
||||
/***** Copy once constant data extracted from raw *******/
|
||||
W = ri->width;
|
||||
H = ri->height;
|
||||
@@ -764,19 +765,13 @@ int RawImageSource::load (Glib::ustring fname) {
|
||||
int val, dark, sat;
|
||||
double dsum[8], dmin, dmax;
|
||||
float pre_mul[4];
|
||||
bool use_camera_wb=true;
|
||||
bool use_auto_wb=false;
|
||||
bool highlight=true;
|
||||
|
||||
|
||||
for (int c = 0; c < 4; c++){
|
||||
cblack[c] = ri->cblack[c] + ri->black_point;
|
||||
pre_mul[c] = ri->pre_mul[c];
|
||||
}
|
||||
/*
|
||||
if (user_mul[0])
|
||||
memcpy(pre_mul, user_mul, sizeof pre_mul);*/
|
||||
if (use_auto_wb || (use_camera_wb && ri->cam_mul[0] == -1)) {
|
||||
|
||||
if ( ri->cam_mul[0] == -1 ) {
|
||||
memset(dsum, 0, sizeof dsum);
|
||||
for (row = 0; row < H; row += 8)
|
||||
for (col = 0; col < W; col += 8) {
|
||||
@@ -806,7 +801,7 @@ skip_block: ;
|
||||
if (dsum[c])
|
||||
pre_mul[c] = dsum[c + 4] / dsum[c];
|
||||
}
|
||||
if (use_camera_wb && ri->cam_mul[0] != -1) {
|
||||
if ( ri->cam_mul[0] != -1) {
|
||||
memset(sum, 0, sizeof sum);
|
||||
for (row = 0; row < 8; row++)
|
||||
for (col = 0; col < 8; col++) {
|
||||
@@ -834,8 +829,7 @@ skip_block: ;
|
||||
if (dmax < pre_mul[c])
|
||||
dmax = pre_mul[c];
|
||||
}
|
||||
if (!highlight)
|
||||
dmax = dmin;
|
||||
dmax = dmin;
|
||||
for (c = 0; c < 4; c++)
|
||||
scale_mul[c] = (pre_mul[c] /= dmax) * 65535.0 / sat;
|
||||
if (settings->verbose) {
|
||||
@@ -873,6 +867,10 @@ skip_block: ;
|
||||
blue = allocArray<unsigned short>(W,H);
|
||||
hpmap = allocArray<char>(W, H);
|
||||
|
||||
if (plistener) {
|
||||
plistener->setProgress (1.0);
|
||||
}
|
||||
plistener=NULL; // This must be reset, because only load() is called through progressConnector
|
||||
return 0; // OK!
|
||||
}
|
||||
|
||||
@@ -894,9 +892,10 @@ void RawImageSource::preprocess (const RAWParams &raw)
|
||||
size_t dimBitmap = widthBitmap*ri->height;
|
||||
|
||||
BYTE *bitmapBads = new BYTE [ dimBitmap ];
|
||||
int totBP=0; // Hold count of bad pixels to correct
|
||||
std::list<badPix> *bp = dfm.getBadPixels( ri->make, ri->model, std::string("") );
|
||||
if( bp ){
|
||||
for(std::list<badPix>::iterator iter = bp->begin(); iter != bp->end(); iter++)
|
||||
for(std::list<badPix>::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++)
|
||||
bitmapBads[ widthBitmap * (iter->y) + (iter->x)/8] |= 1<<(iter->x%8);
|
||||
if( settings->verbose ){
|
||||
printf( "Correcting %u pixels from .badpixels\n",bp->size());
|
||||
@@ -908,7 +907,7 @@ void RawImageSource::preprocess (const RAWParams &raw)
|
||||
}else if( raw.dark_frame.size()>0 )
|
||||
bp = dfm.getHotPixels( raw.dark_frame );
|
||||
if(bp){
|
||||
for(std::list<badPix>::iterator iter = bp->begin(); iter != bp->end(); iter++)
|
||||
for(std::list<badPix>::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++)
|
||||
bitmapBads[ widthBitmap *iter->y + iter->x/8] |= 1<<(iter->x%8);
|
||||
if( settings->verbose && bp->size()>0){
|
||||
printf( "Correcting %u hotpixels from darkframe\n",bp->size());
|
||||
@@ -925,11 +924,13 @@ void RawImageSource::preprocess (const RAWParams &raw)
|
||||
plistener->setProgress (0.0);
|
||||
}
|
||||
int nFound =findHotDeadPixel( bitmapBads,0.1 );
|
||||
totBP += nFound;
|
||||
if( settings->verbose && nFound>0){
|
||||
printf( "Correcting %d hot/dead pixels found inside image\n",nFound );
|
||||
}
|
||||
}
|
||||
cfaCleanFromMap( bitmapBads );
|
||||
if( totBP )
|
||||
cfaCleanFromMap( bitmapBads );
|
||||
delete [] bitmapBads;
|
||||
|
||||
// check if it is an olympus E camera, if yes, compute G channel pre-compensation factors
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <guiutils.h>
|
||||
#include <procparamchangers.h>
|
||||
#include <safegtk.h>
|
||||
#include <imagesource.h>
|
||||
|
||||
using namespace rtengine::procparams;
|
||||
|
||||
@@ -333,7 +334,8 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) {
|
||||
ldprof = new ProcParams ();
|
||||
*ldprof = openThm->getProcParams ();
|
||||
}
|
||||
|
||||
rtengine::ImageSource* is=isrc->getImageSource();
|
||||
is->setProgressListener( this );
|
||||
// initialize profile
|
||||
if (openThm->getType()!=FT_Raw)
|
||||
profilep->initProfile (options.defProfImg, ldprof, NULL);
|
||||
@@ -426,6 +428,48 @@ void EditorPanel::setProgressState (int state) {
|
||||
g_idle_add (setprocstate, p);
|
||||
}
|
||||
|
||||
struct spparams {
|
||||
double val;
|
||||
Glib::ustring str;
|
||||
rtengine::ProgressListener* progListener;
|
||||
};
|
||||
|
||||
int _setprogress( void *p )
|
||||
{
|
||||
spparams *s= (spparams*)p;
|
||||
gdk_threads_enter ();
|
||||
s->progListener->setProgress( s->val );
|
||||
gdk_threads_leave ();
|
||||
delete s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _setprogressStr( void *p )
|
||||
{
|
||||
spparams *s= (spparams*)p;
|
||||
gdk_threads_enter ();
|
||||
s->progListener->setProgressStr( s->str );
|
||||
gdk_threads_leave ();
|
||||
delete s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EditorPanel::setProgress (double p)
|
||||
{
|
||||
spparams *s=new spparams;
|
||||
s->val = p;
|
||||
s->progListener = parent;
|
||||
g_idle_add (_setprogress, s);
|
||||
}
|
||||
|
||||
void EditorPanel::setProgressStr (Glib::ustring str)
|
||||
{
|
||||
spparams *s=new spparams;
|
||||
s->str = str;
|
||||
s->progListener = parent;
|
||||
g_idle_add (_setprogressStr, s);
|
||||
}
|
||||
|
||||
void EditorPanel::refreshProcessingState (bool state) {
|
||||
|
||||
// Set proc params of thumbnail. It saves it into the cache and updates the file browser.
|
||||
|
||||
@@ -112,6 +112,8 @@ class EditorPanel : public Gtk::VBox,
|
||||
void setParent (RTWindow* p) { parent = p; }
|
||||
|
||||
// progresslistener interface
|
||||
void setProgress (double p);
|
||||
void setProgressStr (Glib::ustring str);
|
||||
void setProgressState (int state);
|
||||
void error (Glib::ustring descr);
|
||||
void refreshProcessingState (bool state); // this is called by setProcessingState in the gtk thread
|
||||
|
||||
@@ -59,9 +59,9 @@ FileBrowser::FileBrowser ()
|
||||
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(selall = new Gtk::MenuItem (M("FILEBROWSER_POPUPSELECTALL"))), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(selectDF = new Gtk::MenuItem ("Select Dark Frame...")), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(autoDF = new Gtk::MenuItem ("Auto Dark Frame")), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(thisIsDF = new Gtk::MenuItem ("Move to Dark Frames folder")), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(selectDF = new Gtk::MenuItem (M("FILEBROWSER_SELECTDARKFRAME"))), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(autoDF = new Gtk::MenuItem (M("FILEBROWSER_AUTODARKFRAME"))), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(thisIsDF = new Gtk::MenuItem (M("FILEBROWSER_MOVETODARKFDIR"))), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(copyprof = new Gtk::MenuItem (M("FILEBROWSER_COPYPROFILE"))), 0, 1, p, p+1); p++;
|
||||
pmenu->attach (*(pasteprof = new Gtk::MenuItem (M("FILEBROWSER_PASTEPROFILE"))), 0, 1, p, p+1); p++;
|
||||
|
||||
@@ -253,10 +253,10 @@ Gtk::Widget* Preferences::getProcParamsPanel () {
|
||||
fdp->add (*vbdp);
|
||||
mvbpp->pack_start (*fdp, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
Gtk::Frame* fdf = Gtk::manage (new Gtk::Frame ("Dark Frame") );
|
||||
Gtk::Frame* fdf = Gtk::manage (new Gtk::Frame (M("PREFERENCES_DARKFRAME")) );
|
||||
Gtk::HBox* hb42 = Gtk::manage (new Gtk::HBox ());
|
||||
darkFrameDir = Gtk::manage(new Gtk::FileChooserButton( "Dark frames directory", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
|
||||
Gtk::Label *dfLab = Gtk::manage(new Gtk::Label("Dark Frames directory"));
|
||||
darkFrameDir = Gtk::manage(new Gtk::FileChooserButton(M("PREFERENCES_DIRDARKFRAMES"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
|
||||
Gtk::Label *dfLab = Gtk::manage(new Gtk::Label(M("PREFERENCES_DIRDARKFRAMES")));
|
||||
hb42->pack_start(*dfLab , Gtk::PACK_SHRINK, 4 );
|
||||
hb42->pack_start(*darkFrameDir);
|
||||
dfLabel = Gtk::manage(new Gtk::Label("Found:"));
|
||||
|
||||
@@ -25,14 +25,14 @@ using namespace rtengine::procparams;
|
||||
PreProcess::PreProcess ()
|
||||
{
|
||||
hbdf = Gtk::manage(new Gtk::HBox());
|
||||
darkFrameFile = Gtk::manage(new Gtk::FileChooserButton(M("PREFERENCES_DARKFRAME"), Gtk::FILE_CHOOSER_ACTION_OPEN));
|
||||
dfLabel = Gtk::manage(new Gtk::Label("Dark Frame"));
|
||||
darkFrameFile = Gtk::manage(new Gtk::FileChooserButton(M("TP_PREPROCESS_DARKFRAME"), Gtk::FILE_CHOOSER_ACTION_OPEN));
|
||||
dfLabel = Gtk::manage(new Gtk::Label(M("TP_PREPROCESS_DARKFRAME")));
|
||||
btnReset = Gtk::manage(new Gtk::Button());
|
||||
btnReset->set_image (*Gtk::manage(new Gtk::Image (Gtk::StockID("gtk-cancel"), Gtk::ICON_SIZE_BUTTON)));
|
||||
hbdf->pack_start(*dfLabel, Gtk::PACK_SHRINK, 4);
|
||||
hbdf->pack_start(*darkFrameFile);
|
||||
hbdf->pack_start(*btnReset, Gtk::PACK_SHRINK, 4);
|
||||
dfAuto = Gtk::manage(new Gtk::CheckButton(("Auto selection")));
|
||||
dfAuto = Gtk::manage(new Gtk::CheckButton((M("TP_PREPROCESS_DFAUTOSELECT"))));
|
||||
caAutocorrect = Gtk::manage(new Gtk::CheckButton((M("PREFERENCES_CACORRECTION"))));
|
||||
hotDeadPixel = Gtk::manage(new Gtk::CheckButton((M("PREFERENCES_HOTDEADPIXFILT"))));
|
||||
|
||||
@@ -163,7 +163,7 @@ void PreProcess::caCorrectionChanged()
|
||||
lastCA = caAutocorrect->get_active ();
|
||||
}
|
||||
if (listener)
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring("CA autocorrection ")+ (caAutocorrect->get_active()?"ON":"OFF") );
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring(M("PREFERENCES_CACORRECTION"))+"="+(caAutocorrect->get_active()?"ON":"OFF") );
|
||||
}
|
||||
|
||||
void PreProcess::dfAutoChanged()
|
||||
@@ -182,7 +182,7 @@ void PreProcess::dfAutoChanged()
|
||||
}
|
||||
hbdf->set_sensitive( !dfAuto->get_active() );
|
||||
if (listener)
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring("Dark Frame autoselection")+ (dfAuto->get_active()?"ON":"OFF") );
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DFAUTOSELECT"))+"="+(dfAuto->get_active()?"ON":"OFF") );
|
||||
}
|
||||
|
||||
void PreProcess::hotDeadPixelChanged ()
|
||||
@@ -200,13 +200,13 @@ void PreProcess::hotDeadPixelChanged ()
|
||||
lastHot = hotDeadPixel->get_active ();
|
||||
}
|
||||
if (listener)
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring("Hot Dead Pixel ")+(hotDeadPixel->get_active()?"ON":"OFF") );
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring(M("PREFERENCES_HOTDEADPIXFILT"))+"="+(hotDeadPixel->get_active()?"ON":"OFF") );
|
||||
}
|
||||
void PreProcess::darkFrameChanged()
|
||||
{
|
||||
dfChanged=true;
|
||||
if (listener)
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring("Dark Framet set to ")+darkFrameFile->get_filename());
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DARKFRAME"))+"="+darkFrameFile->get_filename());
|
||||
}
|
||||
|
||||
void PreProcess::darkFrameReset()
|
||||
@@ -215,6 +215,6 @@ void PreProcess::darkFrameReset()
|
||||
darkFrameFile->set_current_name("");
|
||||
darkFrameFile->set_filename ("");
|
||||
if (listener)
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring("Dark Framet reset"));
|
||||
listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DARKFRAME"))+"=0" );
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user