Implemented TIFF LZW compression
This commit is contained in:
@@ -679,3 +679,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -681,3 +681,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -465,6 +465,7 @@ SAVEDLG_PUTTOQUEUE;Vložit soubor do fronty
|
||||
SAVEDLG_SAVEIMMEDIATELY;Okamžitě uložit
|
||||
SAVEDLG_SAVESPP;Uschovat s obrazem i parametry zpracování
|
||||
SAVEDLG_TIFFFILTER;Soubory TIFF
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Označení výřezu (shortcut key: C)
|
||||
TOOLBAR_TOOLTIP_HAND;Nástroj ruka (shortcut key: N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Vyznačení roviny (shortcut key: S)
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -471,6 +471,7 @@ SAVEDLG_PUTTOQUEUETAIL;Ans Ende der Warteschlange für Verarbeitung legen
|
||||
SAVEDLG_SAVEIMMEDIATELY;Sofort Speichern
|
||||
SAVEDLG_SAVESPP;Speichere die Prozessparameter mit dem Bild
|
||||
SAVEDLG_TIFFFILTER;TIFF-Datei
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Auswahl des Ausschnitts (Taste C)
|
||||
TOOLBAR_TOOLTIP_HAND;Hand-Werkzeug (Taste N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Auswahl einer Leitlinie (Taste S)
|
||||
|
||||
@@ -682,3 +682,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -684,3 +684,4 @@ NAVIGATOR_S_VALUE;S = %1
|
||||
NAVIGATOR_V_VALUE;V = %1
|
||||
NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -686,3 +686,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -679,3 +679,4 @@ NAVIGATOR_XY_NA;x = n/d, y = n/d
|
||||
FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF
|
||||
TP_RESIZE_DOWNSCALEB;Diminuer (Meilleur)
|
||||
TP_RESIZE_DOWNSCALEF;Diminuer (Plus rapide)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -678,3 +678,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -683,3 +683,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -681,3 +681,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -466,6 +466,7 @@ SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
|
||||
SAVEDLG_SAVEIMMEDIATELY;Save immediately
|
||||
SAVEDLG_SAVESPP;Zapisz parametry przetwarzania wraz z obrazem
|
||||
SAVEDLG_TIFFFILTER;Pliki TIFF
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Kadruj (shortcut key: C)
|
||||
TOOLBAR_TOOLTIP_HAND;Przesuń (shortcut key: N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Wyprostuj obraz (shortcut key: S)
|
||||
|
||||
@@ -685,3 +685,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -680,3 +680,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -683,3 +683,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -681,3 +681,4 @@ NAVIGATOR_XY_NA;x = n/a, y = n/a
|
||||
FILEBROWSER_SHOWEXIFINFO;Show EXIF info
|
||||
TP_RESIZE_DOWNSCALEB;Downscale (Better)
|
||||
TP_RESIZE_DOWNSCALEF;Downscale (Faster)
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
|
||||
@@ -461,6 +461,7 @@ SAVEDLG_PUTTOQUEUETAIL;Laita käsittelyjonon viimeiseksi
|
||||
SAVEDLG_SAVEIMMEDIATELY;Tallenna heti
|
||||
SAVEDLG_SAVESPP;Tallenna kuvankäsittelytiedot kuvan mukana
|
||||
SAVEDLG_TIFFFILTER;TIFF tiedostot
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Valitse rajattava alue (pikanäppäin: C)
|
||||
TOOLBAR_TOOLTIP_HAND;Kuvan siirtotyökalu (pikanäppäin: N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Valitse suora linja (pikanäppäin: S)
|
||||
|
||||
@@ -461,6 +461,7 @@ SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
|
||||
SAVEDLG_SAVEIMMEDIATELY;Save immediately
|
||||
SAVEDLG_SAVESPP;Spara behandlingsparametrarna med bilderna
|
||||
SAVEDLG_TIFFFILTER;TIFF-filer
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Välj beskärningsområde (shortcut key: C)
|
||||
TOOLBAR_TOOLTIP_HAND;Handverktyg (shortcut key: N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Räta ut (shortcut key: S)
|
||||
|
||||
@@ -461,6 +461,7 @@ SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
|
||||
SAVEDLG_SAVEIMMEDIATELY;Save immediately
|
||||
SAVEDLG_SAVESPP;İşeme değişkenlerini görüntü ile birlikte kaydet
|
||||
SAVEDLG_TIFFFILTER;TIFF dosyaları
|
||||
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
|
||||
TOOLBAR_TOOLTIP_CROP;Seçimi kırp (shorcut key: C)
|
||||
TOOLBAR_TOOLTIP_HAND;El aracı (shortcut key: N)
|
||||
TOOLBAR_TOOLTIP_STRAIGHTEN;Düz çizgi seçimi (shortcut key: S)
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace rtengine {
|
||||
* @param fname is the name of the file
|
||||
* @param bps can be 8 or 16 depending on the bits per pixels the output file will have
|
||||
@return the error code, 0 if none */
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1)=0;
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false)=0;
|
||||
/** Sets the progress listener if you want to follow the progress of the image saving operations (optional).
|
||||
* @param pl is the pointer to the class implementing the ProgressListener interface */
|
||||
virtual void setSaveProgressListener (ProgressListener* pl)=0;
|
||||
|
||||
@@ -75,7 +75,7 @@ class Image16 : public ImageIO, public IImage16 {
|
||||
virtual int saveToFile (Glib::ustring fname) { return save (fname); }
|
||||
virtual int saveAsPNG (Glib::ustring fname, int compression = -1, int bps = -1) { return savePNG (fname, compression, bps); }
|
||||
virtual int saveAsJPEG (Glib::ustring fname, int quality = 100) { return saveJPEG (fname, quality); }
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1) { return saveTIFF (fname, bps); }
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) { return saveTIFF (fname, bps, uncompressed); }
|
||||
virtual void setSaveProgressListener (ProgressListener* pl) { return setProgressListener (pl); }
|
||||
virtual void free () { delete this; }
|
||||
virtual unsigned short** getRPlane () { return r; }
|
||||
|
||||
@@ -61,7 +61,7 @@ class Image8 : public ImageIO, public IImage8 {
|
||||
virtual int saveToFile (Glib::ustring fname) { return save (fname); }
|
||||
virtual int saveAsPNG (Glib::ustring fname, int compression = -1, int bps = -1) { return savePNG (fname, compression, bps); }
|
||||
virtual int saveAsJPEG (Glib::ustring fname, int quality = 100) { return saveJPEG (fname, quality); }
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1) { return saveTIFF (fname, bps); }
|
||||
virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) { return saveTIFF (fname, bps, uncompressed); }
|
||||
virtual void setSaveProgressListener (ProgressListener* pl) { setProgressListener (pl); }
|
||||
virtual void free () { delete this; }
|
||||
virtual const unsigned char* getData () { return data; }
|
||||
|
||||
@@ -585,7 +585,7 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality) {
|
||||
return IMIO_SUCCESS;
|
||||
}
|
||||
|
||||
int ImageIO::saveTIFF (Glib::ustring fname, int bps) {
|
||||
int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) {
|
||||
|
||||
int width = getW ();
|
||||
int height = getH ();
|
||||
@@ -595,15 +595,15 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps) {
|
||||
|
||||
int lineWidth = width*3*bps/8;
|
||||
unsigned char* linebuffer = new unsigned char[lineWidth];
|
||||
|
||||
if (exifRoot) {
|
||||
// TODO the following needs to be looked into - do we really need two ways to write a Tiff file ?
|
||||
if (exifRoot && uncompressed) {
|
||||
FILE *file = g_fopen (fname.c_str (), "wb");
|
||||
|
||||
if (!file)
|
||||
return IMIO_CANNOTREADFILE;
|
||||
|
||||
if (pl) {
|
||||
pl->setProgressStr ("Saving TIFF file...");
|
||||
pl->setProgressStr ("Saving TIFF file ...");
|
||||
pl->setProgress (0.0);
|
||||
}
|
||||
|
||||
@@ -639,21 +639,58 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps) {
|
||||
fclose (file);
|
||||
}
|
||||
else {
|
||||
// little hack to get libTiff to use proper byte order (see TIFFClienOpen()):
|
||||
const char *mode = !exifRoot ? "w" : (exifRoot->getOrder()==rtexif::INTEL ? "wl":"wb");
|
||||
#ifdef WIN32
|
||||
wchar_t *wfilename = (wchar_t*)g_utf8_to_utf16 (fname.c_str(), -1, NULL, NULL, NULL);
|
||||
TIFF* out = TIFFOpenW (wfilename, "w");
|
||||
TIFF* out = TIFFOpenW (wfilename, mode);
|
||||
g_free (wfilename);
|
||||
#else
|
||||
TIFF* out = TIFFOpen(fname.c_str(), "w");
|
||||
TIFF* out = TIFFOpen(fname.c_str(), mode);
|
||||
#endif
|
||||
if (!out)
|
||||
return IMIO_CANNOTREADFILE;
|
||||
|
||||
if (pl) {
|
||||
pl->setProgressStr ("Saving TIFF file...");
|
||||
pl->setProgressStr ("Saving TIFF file ...");
|
||||
pl->setProgress (0.0);
|
||||
}
|
||||
|
||||
|
||||
if (exifRoot){
|
||||
rtexif::Tag *tag = exifRoot->getTag (TIFFTAG_EXIFIFD);
|
||||
if (tag && tag->isDirectory()){
|
||||
rtexif::TagDirectory *exif = tag->getDirectory();
|
||||
if (exif) {
|
||||
int exif_size = exif->calculateSize();
|
||||
unsigned char *buffer = new unsigned char[exif_size+8];
|
||||
// TIFFOpen writes out the header and sets file pointer at position 8
|
||||
|
||||
exif->write (8, buffer);
|
||||
write (TIFFFileno (out), buffer+8, exif_size);
|
||||
delete buffer;
|
||||
// let libtiff know that scanlines or any other following stuff should go
|
||||
// at a different offset:
|
||||
TIFFSetWriteOffset (out, exif_size+8);
|
||||
TIFFSetField (out, TIFFTAG_EXIFIFD, 8);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO Even though we are saving EXIF IFD - MakerNote still comes out screwy.
|
||||
|
||||
if ((tag = exifRoot->getTag (TIFFTAG_MODEL)) != NULL)
|
||||
TIFFSetField (out, TIFFTAG_MODEL, tag->getValue());
|
||||
if ((tag = exifRoot->getTag (TIFFTAG_MAKE)) != NULL)
|
||||
TIFFSetField (out, TIFFTAG_MAKE, tag->getValue());
|
||||
if ((tag = exifRoot->getTag (TIFFTAG_DATETIME)) != NULL)
|
||||
TIFFSetField (out, TIFFTAG_DATETIME, tag->getValue());
|
||||
if ((tag = exifRoot->getTag (TIFFTAG_ARTIST)) != NULL)
|
||||
TIFFSetField (out, TIFFTAG_ARTIST, tag->getValue());
|
||||
if ((tag = exifRoot->getTag (TIFFTAG_COPYRIGHT)) != NULL)
|
||||
TIFFSetField (out, TIFFTAG_COPYRIGHT, tag->getValue());
|
||||
|
||||
}
|
||||
|
||||
TIFFSetField (out, TIFFTAG_SOFTWARE, "RawTherapee 3");
|
||||
TIFFSetField (out, TIFFTAG_IMAGEWIDTH, width);
|
||||
TIFFSetField (out, TIFFTAG_IMAGELENGTH, height);
|
||||
TIFFSetField (out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
|
||||
@@ -662,8 +699,10 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps) {
|
||||
TIFFSetField (out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
|
||||
TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
|
||||
TIFFSetField (out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
|
||||
TIFFSetField (out, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
|
||||
|
||||
TIFFSetField (out, TIFFTAG_COMPRESSION, uncompressed ? COMPRESSION_NONE : COMPRESSION_LZW);
|
||||
if (!uncompressed)
|
||||
TIFFSetField (out, TIFFTAG_PREDICTOR, PREDICTOR_HORIZONTAL);
|
||||
|
||||
if (profileData)
|
||||
TIFFSetField (out, TIFFTAG_ICCPROFILE, profileLength, profileData);
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ class ImageIO {
|
||||
|
||||
int savePNG (Glib::ustring fname, int compression = -1, int bps = -1);
|
||||
int saveJPEG (Glib::ustring fname, int quality = 100);
|
||||
int saveTIFF (Glib::ustring fname, int bps = -1);
|
||||
int saveTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false);
|
||||
|
||||
cmsHPROFILE getEmbeddedProfile () { return embProfile; }
|
||||
void getEmbeddedProfileData (int& length, unsigned char*& pdata) { length = loadedProfileLength; pdata = (unsigned char*)loadedProfileData; }
|
||||
|
||||
@@ -167,7 +167,7 @@ void TagDirectory::replaceTag (Tag* tag) {
|
||||
tags.push_back (tag);
|
||||
}
|
||||
|
||||
Tag* TagDirectory::getTag (int ID) {
|
||||
Tag* TagDirectory::getTag (int ID) const {
|
||||
|
||||
for (int i=0; i<tags.size(); i++)
|
||||
if (tags[i]->getID()==ID)
|
||||
@@ -175,7 +175,7 @@ Tag* TagDirectory::getTag (int ID) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Tag* TagDirectory::getTag (const char* name) {
|
||||
Tag* TagDirectory::getTag (const char* name) const {
|
||||
|
||||
if (attribs) {
|
||||
for (int i=0; attribs[i].ignore!=-1; i++)
|
||||
|
||||
@@ -74,8 +74,8 @@ class TagDirectory {
|
||||
const TagAttrib* getAttrib (int id);
|
||||
const TagAttrib* getAttrib (const char* name);
|
||||
const TagAttrib* getAttribTable() { return attribs; }
|
||||
Tag* getTag (const char* name);
|
||||
Tag* getTag (int ID);
|
||||
Tag* getTag (const char* name) const;
|
||||
Tag* getTag (int ID) const;
|
||||
void addTag (Tag* a);
|
||||
void addTagFront (Tag* a);
|
||||
void replaceTag (Tag* a);
|
||||
|
||||
@@ -84,7 +84,7 @@ BatchQueuePanel::BatchQueuePanel () {
|
||||
|
||||
// setup signal handlers
|
||||
outdirTemplate->signal_changed().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions));
|
||||
outdirFolder->signal_current_folder_changed().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions));
|
||||
outdirFolder->signal_current_folder_changed().connect (sigc::mem_fun(*this, &BatchQueuePanel::pathFolderChanged));
|
||||
useTemplate->signal_toggled().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions));
|
||||
useFolder->signal_toggled().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions));
|
||||
saveFormatPanel->setListener (this);
|
||||
@@ -229,14 +229,19 @@ bool BatchQueuePanel::canStartNext () {
|
||||
|
||||
void BatchQueuePanel::saveOptions () {
|
||||
|
||||
options.saveFormat = saveFormatPanel->getFormat ();
|
||||
options.savePathTemplate = outdirTemplate->get_text();
|
||||
options.savePathFolder = outdirFolder->get_filename();
|
||||
options.saveUsePathTemplate = useTemplate->get_active();
|
||||
options.procQueueEnabled = autoStart->get_active ();
|
||||
}
|
||||
|
||||
// We only want to save the following when it changes, \
|
||||
// since these settings are shared with editorpanel :
|
||||
void BatchQueuePanel::pathFolderChanged () {
|
||||
|
||||
options.savePathFolder = outdirFolder->get_filename();
|
||||
}
|
||||
|
||||
void BatchQueuePanel::formatChanged () {
|
||||
|
||||
saveOptions ();
|
||||
options.saveFormat = saveFormatPanel->getFormat ();
|
||||
}
|
||||
|
||||
@@ -71,6 +71,7 @@ class BatchQueuePanel : public Gtk::VBox,
|
||||
void stopBatchProc ();
|
||||
|
||||
void saveOptions ();
|
||||
void pathFolderChanged ();
|
||||
void formatChanged ();
|
||||
};
|
||||
|
||||
|
||||
@@ -553,7 +553,7 @@ int EditorPanel::saveImage (rtengine::IImage16* img, Glib::ustring& fname, SaveF
|
||||
ProgressConnector<int> *ld = new ProgressConnector<int>();
|
||||
img->setSaveProgressListener (parent->getProgressListener());
|
||||
if (sf.format=="tif")
|
||||
ld->startFunc (sigc::bind(sigc::mem_fun(img, &rtengine::IImage16::saveAsTIFF), fileName, sf.tiffBits),
|
||||
ld->startFunc (sigc::bind(sigc::mem_fun(img, &rtengine::IImage16::saveAsTIFF), fileName, sf.tiffBits, sf.tiffUncompressed),
|
||||
sigc::bind(sigc::mem_fun(*this,&EditorPanel::idle_imageSaved), ld, img, fileName,sf));
|
||||
else if (sf.format=="png")
|
||||
ld->startFunc (sigc::bind(sigc::mem_fun(img, &rtengine::IImage16::saveAsPNG), fileName, sf.pngCompression, sf.pngBits),
|
||||
@@ -605,6 +605,8 @@ void EditorPanel::saveAsPressed () {
|
||||
SaveFormat sf = saveAsDialog->getFormat ();
|
||||
if (getExtension (fname)!=sf.format)
|
||||
fname = fname + "." + sf.format;
|
||||
|
||||
options.saveFormat = sf;
|
||||
|
||||
if (saveAsDialog->getImmediately ()) {
|
||||
// check if it exists
|
||||
@@ -670,26 +672,26 @@ bool EditorPanel::idle_sendToGimp( ProgressConnector<rtengine::IImage16*> *pc){
|
||||
|
||||
Glib::ustring fileName = Glib::ustring::compose ("%1.%2", fname, sf.format);
|
||||
|
||||
int tries = 1;
|
||||
while (Glib::file_test (fileName, Glib::FILE_TEST_EXISTS) && tries<1000) {
|
||||
fileName = Glib::ustring::compose("%1-%2.%3", fname, tries, sf.format);
|
||||
tries++;
|
||||
}
|
||||
if (tries==1000){
|
||||
img->free ();
|
||||
return false;
|
||||
}
|
||||
int tries = 1;
|
||||
while (Glib::file_test (fileName, Glib::FILE_TEST_EXISTS) && tries<1000) {
|
||||
fileName = Glib::ustring::compose("%1-%2.%3", fname, tries, sf.format);
|
||||
tries++;
|
||||
}
|
||||
if (tries==1000){
|
||||
img->free ();
|
||||
return false;
|
||||
}
|
||||
|
||||
ProgressConnector<int> *ld = new ProgressConnector<int>();
|
||||
img->setSaveProgressListener (parent->getProgressListener());
|
||||
ld->startFunc (sigc::bind(sigc::mem_fun(img, &rtengine::IImage16::saveAsTIFF), fileName, sf.tiffBits),
|
||||
ld->startFunc (sigc::bind(sigc::mem_fun(img, &rtengine::IImage16::saveAsTIFF), fileName, sf.tiffBits, sf.tiffUncompressed),
|
||||
sigc::bind(sigc::mem_fun(*this,&EditorPanel::idle_sentToGimp), ld, img, fileName));
|
||||
}else{
|
||||
gdk_threads_enter();
|
||||
Glib::ustring msg_ = Glib::ustring("<b> Error during image processing\n</b>");
|
||||
Gtk::MessageDialog msgd (*parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
|
||||
msgd.run ();
|
||||
gdk_threads_leave ();
|
||||
gdk_threads_enter();
|
||||
Glib::ustring msg_ = Glib::ustring("<b> Error during image processing\n</b>");
|
||||
Gtk::MessageDialog msgd (*parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
|
||||
msgd.run ();
|
||||
gdk_threads_leave ();
|
||||
saveimgas->set_sensitive(true);
|
||||
sendtogimp->set_sensitive(true);
|
||||
}
|
||||
|
||||
@@ -184,6 +184,7 @@ if (keyFile.has_group ("Output")) {
|
||||
if (keyFile.has_key ("Output", "PngCompression")) saveFormat.pngCompression = keyFile.get_integer ("Output", "PngCompression");
|
||||
if (keyFile.has_key ("Output", "PngBps")) saveFormat.pngBits = keyFile.get_integer ("Output", "PngBps");
|
||||
if (keyFile.has_key ("Output", "TiffBps")) saveFormat.tiffBits = keyFile.get_integer ("Output", "TiffBps");
|
||||
if (keyFile.has_key ("Output", "TiffUncompressed")) saveFormat.tiffUncompressed= keyFile.get_boolean ("Output", "TiffUncompressed");
|
||||
if (keyFile.has_key ("Output", "SaveProcParams")) saveFormat.saveParams = keyFile.get_boolean ("Output", "SaveProcParams");
|
||||
if (keyFile.has_key ("Output", "Path")) savePathTemplate = keyFile.get_string ("Output", "Path");
|
||||
if (keyFile.has_key ("Output", "PathTemplate")) savePathTemplate = keyFile.get_string ("Output", "PathTemplate");
|
||||
@@ -339,6 +340,7 @@ int Options::saveToFile (Glib::ustring fname) {
|
||||
keyFile.set_integer ("Output", "PngCompression", saveFormat.pngCompression);
|
||||
keyFile.set_integer ("Output", "PngBps", saveFormat.pngBits);
|
||||
keyFile.set_integer ("Output", "TiffBps", saveFormat.tiffBits);
|
||||
keyFile.set_boolean ("Output", "TiffUncompressed", saveFormat.tiffUncompressed);
|
||||
keyFile.set_boolean ("Output", "SaveProcParams", saveFormat.saveParams);
|
||||
keyFile.set_string ("Output", "PathTemplate", savePathTemplate);
|
||||
keyFile.set_string ("Output", "PathFolder", savePathFolder);
|
||||
|
||||
@@ -28,6 +28,8 @@ SaveFormatPanel::SaveFormatPanel () : listener (NULL) {
|
||||
pngcompr = new Adjuster (M("SAVEDLG_PNGCOMPR"), 0, 6, 1, 6);
|
||||
pngcompr->setAdjusterListener (this);
|
||||
pngcompr->show ();
|
||||
tiffuncompressed = Gtk::manage (new Gtk::CheckButton (M("SAVEDLG_TIFFUNCOMPRESSED")));
|
||||
tiffuncompressed->show();
|
||||
|
||||
Gtk::HBox* hb1 = Gtk::manage (new Gtk::HBox ());
|
||||
Gtk::Label* flab = Gtk::manage (new Gtk::Label (M("SAVEDLG_FILEFORMAT")+":"));
|
||||
@@ -80,6 +82,7 @@ void SaveFormatPanel::init (SaveFormat &sf) {
|
||||
pngcompr->setValue (sf.pngCompression);
|
||||
jpegqual->setValue (sf.jpegQuality);
|
||||
savespp->set_active (sf.saveParams);
|
||||
tiffuncompressed->set_active (sf.tiffUncompressed);
|
||||
listener = tmp;
|
||||
}
|
||||
|
||||
@@ -99,6 +102,7 @@ SaveFormat SaveFormatPanel::getFormat () {
|
||||
sf.tiffBits = 8;
|
||||
sf.pngCompression = (int) pngcompr->getValue ();
|
||||
sf.jpegQuality = (int) jpegqual->getValue ();
|
||||
sf.tiffUncompressed = tiffuncompressed->get_active();
|
||||
sf.saveParams = savespp->get_active ();
|
||||
return sf;
|
||||
}
|
||||
@@ -109,6 +113,8 @@ void SaveFormatPanel::formatChanged () {
|
||||
removeIfThere (formatopts, jpegqual);
|
||||
else if (oformat==3 || oformat==4)
|
||||
removeIfThere (formatopts, pngcompr);
|
||||
else if (oformat==1 || oformat==2)
|
||||
removeIfThere (formatopts, tiffuncompressed);
|
||||
|
||||
int act = format->get_active_row_number();
|
||||
if (act<0 || act>4)
|
||||
@@ -119,6 +125,8 @@ void SaveFormatPanel::formatChanged () {
|
||||
formatopts->pack_start (*jpegqual, Gtk::PACK_SHRINK,4);
|
||||
else if (fr=="png")
|
||||
formatopts->pack_start (*pngcompr, Gtk::PACK_SHRINK,4);
|
||||
else if (fr=="tif")
|
||||
formatopts->pack_start (*tiffuncompressed, Gtk::PACK_SHRINK,4);
|
||||
|
||||
oformat = act;
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ class SaveFormatPanel : public Gtk::VBox, public AdjusterListener {
|
||||
protected:
|
||||
Adjuster* jpegqual;
|
||||
Adjuster* pngcompr;
|
||||
Gtk::CheckButton* tiffuncompressed;
|
||||
Gtk::ComboBoxText* format;
|
||||
Gtk::VBox* formatopts;
|
||||
int oformat;
|
||||
|
||||
Reference in New Issue
Block a user