ufraw-0.19.2/0000775000175000017500000000000012124444443007734 500000000000000ufraw-0.19.2/iccjpeg.c0000664000175000017500000002216612115264507011434 00000000000000/* * iccprofile.c * * This file provides code to read and write International Color Consortium * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has * defined a standard format for including such data in JPEG "APP2" markers. * The code given here does not know anything about the internal structure * of the ICC profile data; it just knows how to put the profile data into * a JPEG file being written, or get it back out when reading. * * This code depends on new features added to the IJG JPEG library as of * IJG release 6b; it will not compile or work with older IJG versions. * * NOTE: this code would need surgery to work on 16-bit-int machines * with ICC profiles exceeding 64K bytes in size. If you need to do that, * change all the "unsigned int" variables to "INT32". You'll also need * to find a malloc() replacement that can allocate more than 64K. * * UFRaw: Copied from lcms-2.4 January 2013. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_LIBJPEG #include "iccjpeg.h" #include /* define malloc() */ /* * Since an ICC profile can be larger than the maximum size of a JPEG marker * (64K), we need provisions to split it into multiple markers. The format * defined by the ICC specifies one or more APP2 markers containing the * following data: * Identifying string ASCII "ICC_PROFILE\0" (12 bytes) * Marker sequence number 1 for first APP2, 2 for next, etc (1 byte) * Number of markers Total number of APP2's used (1 byte) * Profile data (remainder of APP2 data) * Decoders should use the marker sequence numbers to reassemble the profile, * rather than assuming that the APP2 markers appear in the correct sequence. */ #define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ #define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ #define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ #define MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) /* * This routine writes the given ICC profile data into a JPEG file. * It *must* be called AFTER calling jpeg_start_compress() and BEFORE * the first call to jpeg_write_scanlines(). * (This ordering ensures that the APP2 marker(s) will appear after the * SOI and JFIF or Adobe markers, but before all else.) */ void write_icc_profile(j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len) { unsigned int num_markers; /* total number of markers we'll write */ int cur_marker = 1; /* per spec, counting starts at 1 */ unsigned int length; /* number of bytes to write in this marker */ /* Calculate the number of markers we'll need, rounding up of course */ num_markers = icc_data_len / MAX_DATA_BYTES_IN_MARKER; if (num_markers * MAX_DATA_BYTES_IN_MARKER != icc_data_len) num_markers++; while (icc_data_len > 0) { /* length of profile to put in this marker */ length = icc_data_len; if (length > MAX_DATA_BYTES_IN_MARKER) length = MAX_DATA_BYTES_IN_MARKER; icc_data_len -= length; /* Write the JPEG marker header (APP2 code and marker length) */ jpeg_write_m_header(cinfo, ICC_MARKER, (unsigned int)(length + ICC_OVERHEAD_LEN)); /* Write the marker identifying string "ICC_PROFILE" (null-terminated). * We code it in this less-than-transparent way so that the code works * even if the local character set is not ASCII. */ jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x5F); jpeg_write_m_byte(cinfo, 0x50); jpeg_write_m_byte(cinfo, 0x52); jpeg_write_m_byte(cinfo, 0x4F); jpeg_write_m_byte(cinfo, 0x46); jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x4C); jpeg_write_m_byte(cinfo, 0x45); jpeg_write_m_byte(cinfo, 0x0); /* Add the sequencing info */ jpeg_write_m_byte(cinfo, cur_marker); jpeg_write_m_byte(cinfo, (int) num_markers); /* Add the profile data */ while (length--) { jpeg_write_m_byte(cinfo, *icc_data_ptr); icc_data_ptr++; } cur_marker++; } } /* * Prepare for reading an ICC profile */ void setup_read_icc_profile(j_decompress_ptr cinfo) { /* Tell the library to keep any APP2 data it may find */ jpeg_save_markers(cinfo, ICC_MARKER, 0xFFFF); } /* * Handy subroutine to test whether a saved marker is an ICC profile marker. */ static boolean marker_is_icc(jpeg_saved_marker_ptr marker) { return marker->marker == ICC_MARKER && marker->data_length >= ICC_OVERHEAD_LEN && /* verify the identifying string */ GETJOCTET(marker->data[0]) == 0x49 && GETJOCTET(marker->data[1]) == 0x43 && GETJOCTET(marker->data[2]) == 0x43 && GETJOCTET(marker->data[3]) == 0x5F && GETJOCTET(marker->data[4]) == 0x50 && GETJOCTET(marker->data[5]) == 0x52 && GETJOCTET(marker->data[6]) == 0x4F && GETJOCTET(marker->data[7]) == 0x46 && GETJOCTET(marker->data[8]) == 0x49 && GETJOCTET(marker->data[9]) == 0x4C && GETJOCTET(marker->data[10]) == 0x45 && GETJOCTET(marker->data[11]) == 0x0; } /* * See if there was an ICC profile in the JPEG file being read; * if so, reassemble and return the profile data. * * TRUE is returned if an ICC profile was found, FALSE if not. * If TRUE is returned, *icc_data_ptr is set to point to the * returned data, and *icc_data_len is set to its length. * * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() * and must be freed by the caller with free() when the caller no longer * needs it. (Alternatively, we could write this routine to use the * IJG library's memory allocator, so that the data would be freed implicitly * at jpeg_finish_decompress() time. But it seems likely that many apps * will prefer to have the data stick around after decompression finishes.) * * NOTE: if the file contains invalid ICC APP2 markers, we just silently * return FALSE. You might want to issue an error message instead. */ boolean read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len) { jpeg_saved_marker_ptr marker; int num_markers = 0; int seq_no; JOCTET *icc_data; unsigned int total_length; #define MAX_SEQ_NO 255 /* sufficient since marker numbers are bytes */ char marker_present[MAX_SEQ_NO + 1]; /* 1 if marker found */ unsigned int data_length[MAX_SEQ_NO + 1]; /* size of profile data in marker */ unsigned int data_offset[MAX_SEQ_NO + 1]; /* offset for data in marker */ *icc_data_ptr = NULL; /* avoid confusion if FALSE return */ *icc_data_len = 0; /* This first pass over the saved markers discovers whether there are * any ICC markers and verifies the consistency of the marker numbering. */ for (seq_no = 1; seq_no <= MAX_SEQ_NO; seq_no++) marker_present[seq_no] = 0; for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { if (marker_is_icc(marker)) { if (num_markers == 0) num_markers = GETJOCTET(marker->data[13]); else if (num_markers != GETJOCTET(marker->data[13])) return FALSE; /* inconsistent num_markers fields */ seq_no = GETJOCTET(marker->data[12]); if (seq_no <= 0 || seq_no > num_markers) return FALSE; /* bogus sequence number */ if (marker_present[seq_no]) return FALSE; /* duplicate sequence numbers */ marker_present[seq_no] = 1; data_length[seq_no] = marker->data_length - ICC_OVERHEAD_LEN; } } if (num_markers == 0) return FALSE; /* Check for missing markers, count total space needed, * compute offset of each marker's part of the data. */ total_length = 0; for (seq_no = 1; seq_no <= num_markers; seq_no++) { if (marker_present[seq_no] == 0) return FALSE; /* missing sequence number */ data_offset[seq_no] = total_length; total_length += data_length[seq_no]; } if (total_length <= 0) return FALSE; /* found only empty markers? */ /* Allocate space for assembled data */ icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET)); if (icc_data == NULL) return FALSE; /* oops, out of memory */ /* and fill it in */ for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { if (marker_is_icc(marker)) { JOCTET FAR *src_ptr; JOCTET *dst_ptr; unsigned int length; seq_no = GETJOCTET(marker->data[12]); dst_ptr = icc_data + data_offset[seq_no]; src_ptr = marker->data + ICC_OVERHEAD_LEN; length = data_length[seq_no]; while (length--) { *dst_ptr++ = *src_ptr++; } } } *icc_data_ptr = icc_data; *icc_data_len = total_length; return TRUE; } #endif /* HAVE_LIBJPEG */ ufraw-0.19.2/autogen.sh0000775000175000017500000000330712115264507011661 00000000000000#!/bin/sh # $Id: autogen.sh,v 1.6 2013/01/08 17:00:08 nkbj Exp $ # Generate all autoconf/automake files, to prepare for running # configure from only the contents of CVS. # Automake 1.5 or higher is required. Because conventions vary as to # whether plain "automake" is old (1.4) or modern automake, search for # versions by number from the most recent, taking the highest one # found. # XXX This search is a maintenance problem. Add a way to use plain # 'automake' and see if it is good enough. Consider declaring a # minimum version in Makefile.am and assuming that in 2006 the program # automake will be a modern version. AUTOMAKE=automake-1.13 ACLOCAL=aclocal-1.13 ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.12 ACLOCAL=aclocal-1.12 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.11 ACLOCAL=aclocal-1.11 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.10 ACLOCAL=aclocal-1.10 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.8 ACLOCAL=aclocal-1.8 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.7 ACLOCAL=aclocal-1.7 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.6 ACLOCAL=aclocal-1.6 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { AUTOMAKE=automake-1.5 ACLOCAL=aclocal-1.5 } ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { echo "You must have automake-1.5 or higher." exit 1 } $ACLOCAL autoconf autoheader $AUTOMAKE --foreign --add-missing --copy ufraw-0.19.2/generate_schemas.sh0000775000175000017500000000445212115264507013516 00000000000000#!/bin/sh # # ./generate_schemas PREFIX OUTPUT # # generate the part of the schema required for the mime type into OUTPUT. # location of the ufraw-batch executable should be PREFIX/bin # # based on rawthumb: http://www.chauveau-central.net/rawthumb/ # Reminder: in the thumbnailer command, the following token are replaced: # # %s is the thumbnail size # %u is the gnome VFS url of the raw image file # file://home/bob/image.raw # %i is the Unix file name of the raw image file # /home/bob/image.raw # %o is the Unix file name of the thumbnail (without .png extension) # /home/bob/.thumbnail/arq25w5rwer6 do_mime () { MIME=$1 ; shift cat <> $SCHEMAS /schemas/desktop/gnome/thumbnailers/$MIME/enable /desktop/gnome/thumbnailers/$MIME/enable ufraw bool true /schemas/desktop/gnome/thumbnailers/$MIME/command /desktop/gnome/thumbnailers/$MIME/command ufraw string $PREFIX/bin/ufraw-batch --embedded-image --out-type=png --size=%s %i --overwrite --silent --output=%o EOF } # # # if [ $# != "2" ] ; then echo "usage: generate_schemas prefix output" echo "generate schemas for thumbnailing raw images." exit 1 fi PREFIX=$1 ; shift SCHEMAS=$1 ; shift echo "" > $SCHEMAS echo " " >> $SCHEMAS do_mime application@x-ufraw do_mime image@x-dcraw do_mime image@x-adobe-dng do_mime image@x-canon-crw do_mime image@x-canon-cr2 do_mime image@x-fuji-raf do_mime image@x-kodak-dcr do_mime image@x-kodak-k25 do_mime image@x-kodak-kdc do_mime image@x-minolta-mrw do_mime image@x-nikon-nef do_mime image@x-nikon-nrw do_mime image@x-olympus-orf do_mime image@x-panasonic-raw do_mime image@x-panasonic-rw2 do_mime image@x-pentax-pef do_mime image@x-sigma-x3f do_mime image@x-sony-srf do_mime image@x-sony-sr2 do_mime image@x-sony-arw do_mime image@x-samsung-srw echo " " >> $SCHEMAS echo "" >> $SCHEMAS exit 0 ufraw-0.19.2/missing0000755000175000017500000002415212057543462011263 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ufraw-0.19.2/depcomp0000755000175000017500000005064312057543462011245 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ufraw-0.19.2/configure0000775000175000017500000103016512123734474011576 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for UFRaw 0.19.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='UFRaw' PACKAGE_TARNAME='ufraw' PACKAGE_VERSION='0.19.2' PACKAGE_STRING='UFRaw 0.19.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS MAKE_EXTRAS_FALSE MAKE_EXTRAS_TRUE INSTALL_MIME_FALSE INSTALL_MIME_TRUE COMMENT_ICON WINE PROGRAMFILES ISCC DOSPREFIX PREFIX WINDRES CARBON_LIBS CONSOLE UFRAW_WIN32_FALSE UFRAW_WIN32_TRUE UFRAW_LDADD UFRAW_CPPFLAGS GETTEXT_PACKAGE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS LENSFUN_LIBS LENSFUN_CFLAGS EXIV2_LIBS EXIV2_CFLAGS CFITSIO_LIBS CFITSIO_CFLAGS LIBPNG_LIBS LIBPNG_CFLAGS LIBTIFF_LIBS LIBTIFF_CFLAGS EGREP GREP CINEPAINT_PROGRAMPLUGINDIR MAKE_CINEPAINT_FALSE MAKE_CINEPAINT_TRUE GIMP_LIBDIR MAKE_GIMP_FALSE MAKE_GIMP_TRUE MAKE_GTK_FALSE MAKE_GTK_TRUE CINEPAINT_LIBS CINEPAINT_CFLAGS GIMP_2_9_LIBS GIMP_2_9_CFLAGS GIMP_2_4_LIBS GIMP_2_4_CFLAGS GIMP_LIBS GIMP_CFLAGS GTK_LIBS GTK_CFLAGS GTKBASE_LIBS GTKBASE_CFLAGS LCMS_LIBS LCMS_CFLAGS GLIB_LIBS GLIB_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG OPENMP_CFLAGS POD2MAN RANLIB CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_openmp with_prefix with_gtk with_gimp with_cinepaint enable_no_cygwin with_dosprefix enable_mime enable_extras enable_dst_correction enable_contrast enable_x_trans enable_interp_none enable_valgrind ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GLIB_CFLAGS GLIB_LIBS LCMS_CFLAGS LCMS_LIBS GTKBASE_CFLAGS GTKBASE_LIBS GTK_CFLAGS GTK_LIBS GIMP_CFLAGS GIMP_LIBS GIMP_2_4_CFLAGS GIMP_2_4_LIBS GIMP_2_9_CFLAGS GIMP_2_9_LIBS CINEPAINT_CFLAGS CINEPAINT_LIBS LIBTIFF_CFLAGS LIBTIFF_LIBS LIBPNG_CFLAGS LIBPNG_LIBS CFITSIO_CFLAGS CFITSIO_LIBS EXIV2_CFLAGS EXIV2_LIBS LENSFUN_CFLAGS LENSFUN_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures UFRaw 0.19.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ufraw] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of UFRaw 0.19.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-openmp do not use OpenMP --enable-no-cygwin add the -mno-cygwin flag to CFLAGS and CXXFLAGS (only in Windows) --enable-mime install mime files, see README for more information --enable-extras build extra (dcraw, nikon-curve) executables --enable-dst-correction enable DST correction for file timestamps --enable-contrast enable the contrast setting option --enable-x-trans enable support for the FUJIFILM 'X-Trans' sensor --enable-interp-none enable 'None' interpolation (mostly for debugging) --enable-valgrind enable debugging with valgrind Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-prefix=PREFIX use also PREFIX as an input prefix for the build --with-gtk build the GTK GUI [default=check] --with-gimp build gimp plugin [default=check] --with-cinepaint build cinepaint plugin [default=check] --with-dosprefix=PREFIX PREFIX is the prefix in dos format (needed only in Windows) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config LCMS_LIBS linker flags for LCMS, overriding pkg-config GTKBASE_CFLAGS C compiler flags for GTKBASE, overriding pkg-config GTKBASE_LIBS linker flags for GTKBASE, overriding pkg-config GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config GIMP_CFLAGS C compiler flags for GIMP, overriding pkg-config GIMP_LIBS linker flags for GIMP, overriding pkg-config GIMP_2_4_CFLAGS C compiler flags for GIMP_2_4, overriding pkg-config GIMP_2_4_LIBS linker flags for GIMP_2_4, overriding pkg-config GIMP_2_9_CFLAGS C compiler flags for GIMP_2_9, overriding pkg-config GIMP_2_9_LIBS linker flags for GIMP_2_9, overriding pkg-config CINEPAINT_CFLAGS C compiler flags for CINEPAINT, overriding pkg-config CINEPAINT_LIBS linker flags for CINEPAINT, overriding pkg-config LIBTIFF_CFLAGS C compiler flags for LIBTIFF, overriding pkg-config LIBTIFF_LIBS linker flags for LIBTIFF, overriding pkg-config LIBPNG_CFLAGS C compiler flags for LIBPNG, overriding pkg-config LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config CFITSIO_CFLAGS C compiler flags for CFITSIO, overriding pkg-config CFITSIO_LIBS linker flags for CFITSIO, overriding pkg-config EXIV2_CFLAGS C compiler flags for EXIV2, overriding pkg-config EXIV2_LIBS linker flags for EXIV2, overriding pkg-config LENSFUN_CFLAGS C compiler flags for LENSFUN, overriding pkg-config LENSFUN_LIBS linker flags for LENSFUN, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF UFRaw configure 0.19.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by UFRaw $as_me 0.19.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Create host_os, host_cpu, host_alias variables. ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='ufraw' VERSION='0.19.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers config.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi for ac_prog in pod2man do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_POD2MAN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$POD2MAN"; then ac_cv_prog_POD2MAN="$POD2MAN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_POD2MAN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi POD2MAN=$ac_cv_prog_POD2MAN if test -n "$POD2MAN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2MAN" >&5 $as_echo "$POD2MAN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$POD2MAN" && break done test -n "$POD2MAN" || POD2MAN=" echo pod2man is missing on this system; \ echo you can ignore this problem by typing: touch ufraw.1; \ echo cannot execute: pod2man" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi # Ensure that getopt_long is available. It is included in GNU libc and # in at least most BSD libcs. If not found, search for it in libgnugetopt. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getopt_long" >&5 $as_echo_n "checking for library containing getopt_long... " >&6; } if ${ac_cv_search_getopt_long+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getopt_long (); int main () { return getopt_long (); ; return 0; } _ACEOF for ac_lib in '' gnugetopt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getopt_long=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getopt_long+:} false; then : break fi done if ${ac_cv_search_getopt_long+:} false; then : else ac_cv_search_getopt_long=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getopt_long" >&5 $as_echo "$ac_cv_search_getopt_long" >&6; } ac_res=$ac_cv_search_getopt_long if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "can not build UFRaw without getopt_long" "$LINENO" 5 fi # Make sure that pow is available, trying libm if necessary. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5 $as_echo_n "checking for library containing pow... " >&6; } if ${ac_cv_search_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pow=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pow+:} false; then : break fi done if ${ac_cv_search_pow+:} false; then : else ac_cv_search_pow=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5 $as_echo "$ac_cv_search_pow" >&6; } ac_res=$ac_cv_search_pow if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in canonicalize_file_name do : ac_fn_c_check_func "$LINENO" "canonicalize_file_name" "ac_cv_func_canonicalize_file_name" if test "x$ac_cv_func_canonicalize_file_name" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CANONICALIZE_FILE_NAME 1 _ACEOF fi done for ac_func in memmem do : ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem" if test "x$ac_cv_func_memmem" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMMEM 1 _ACEOF fi done # For binary package creation, adjusting for the build CPU is not appropriate. case $host_cpu in i686) UFRAW_MARCH="-march=i686" ;; * ) UFRAW_MARCH="" ;; esac # Default CFLAGS, CXXFLAGS for GCC in case they were not set by the user. if test "$GCC" = "yes"; then if test "$ac_test_CFLAGS" != "set"; then CFLAGS="-W -Wall -g -O3 -fomit-frame-pointer -D_FORTIFY_SOURCE=2 $UFRAW_MARCH" fi if test "$ac_test_CXXFLAGS" != "set"; then CXXFLAGS="-W -Wall -g -O3 -fomit-frame-pointer -D_FORTIFY_SOURCE=2 $UFRAW_MARCH" fi fi OPENMP_CFLAGS= # Check whether --enable-openmp was given. if test "${enable_openmp+set}" = set; then : enableval=$enable_openmp; fi if test "$enable_openmp" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 $as_echo_n "checking for $CC option to support OpenMP... " >&6; } if ${ac_cv_prog_c_openmp+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP choke me #endif #include int main () { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_c_openmp='none needed' else ac_cv_prog_c_openmp='unsupported' for ac_option in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP choke me #endif #include int main () { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_c_openmp=$ac_option fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != unsupported; then break fi done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 $as_echo "$ac_cv_prog_c_openmp" >&6; } case $ac_cv_prog_c_openmp in #( "none needed" | unsupported) ;; #( *) OPENMP_CFLAGS=$ac_cv_prog_c_openmp ;; esac fi CFLAGS="$CFLAGS $OPENMP_CFLAGS" CXXFLAGS="$CXXFLAGS $OPENMP_CFLAGS" # Point to programs/libraries installed in a non-default place. # Check whether --with-prefix was given. if test "${with_prefix+set}" = set; then : withval=$with_prefix; with_prefix=$withval echo "Adding pkgconfig/cppflags/ldflags for $with_prefix." export PKG_CONFIG_PATH="$with_prefix/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" CPPFLAGS="$CPPFLAGS -I$with_prefix/include" LDFLAGS="$LDFLAGS -L$with_prefix/lib" else with_prefix=NONE fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.12 gthread-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.12 gthread-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.12 gthread-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.12 gthread-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.12 gthread-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.12 gthread-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.12 gthread-2.0" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.12 gthread-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= 2.12 gthread-2.0) were not met: $GLIB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS" >&5 $as_echo_n "checking for LCMS... " >&6; } if test -n "$LCMS_CFLAGS"; then pkg_cv_LCMS_CFLAGS="$LCMS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms >= 1.14\""; } >&5 ($PKG_CONFIG --exists --print-errors "lcms >= 1.14") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCMS_CFLAGS=`$PKG_CONFIG --cflags "lcms >= 1.14" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LCMS_LIBS"; then pkg_cv_LCMS_LIBS="$LCMS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms >= 1.14\""; } >&5 ($PKG_CONFIG --exists --print-errors "lcms >= 1.14") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCMS_LIBS=`$PKG_CONFIG --libs "lcms >= 1.14" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LCMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms >= 1.14" 2>&1` else LCMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms >= 1.14" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LCMS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (lcms >= 1.14) were not met: $LCMS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LCMS_CFLAGS and LCMS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LCMS_CFLAGS and LCMS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LCMS_CFLAGS=$pkg_cv_LCMS_CFLAGS LCMS_LIBS=$pkg_cv_LCMS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Check whether --with-gtk was given. if test "${with_gtk+set}" = set; then : withval=$with_gtk; else with_gtk=check fi have_gtk=no if test "x$with_gtk" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKBASE" >&5 $as_echo_n "checking for GTKBASE... " >&6; } if test -n "$GTKBASE_CFLAGS"; then pkg_cv_GTKBASE_CFLAGS="$GTKBASE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.12\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.12") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKBASE_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.12" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKBASE_LIBS"; then pkg_cv_GTKBASE_LIBS="$GTKBASE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.12\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.12") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKBASE_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.12" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKBASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.12" 2>&1` else GTKBASE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.12" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKBASE_PKG_ERRORS" >&5 have_gtk=no if test "x$with_gtk" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gtk was given, but test for gtk failed See \`config.log' for more details" "$LINENO" 5; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_gtk=no if test "x$with_gtk" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gtk was given, but test for gtk failed See \`config.log' for more details" "$LINENO" 5; } fi else GTKBASE_CFLAGS=$pkg_cv_GTKBASE_CFLAGS GTKBASE_LIBS=$pkg_cv_GTKBASE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_gtk=yes fi fi have_gimp=no have_cinepaint=no if test "$have_gtk" = "yes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkimageview >= 1.6\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkimageview >= 1.6") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtkimageview >= 1.6" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkimageview >= 1.6\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkimageview >= 1.6") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtkimageview >= 1.6" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtkimageview >= 1.6" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtkimageview >= 1.6" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtkimageview >= 1.6) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # It is not clear if we should install the GIMP and Cinepaint plugins # in the corresponding place in our prefix, or in GIMP's or # Cinepaint's lib dir in their prefixes. Currently, we install the # plugin in our prefix. If the gimp/cinepaint prefix and the # configured UFRaw prefix are the same, this doesn't matter. pkg_prefix="$PKG_CONFIG" test $prefix = NONE || pkg_prefix="$pkg_prefix --define-variable=prefix=$prefix" test $exec_prefix = NONE || pkg_prefix="$pkg_prefix --define-variable=exec_prefix=$exec_prefix" # Check whether --with-gimp was given. if test "${with_gimp+set}" = set; then : withval=$with_gimp; else with_gimp=check fi if test "x$with_gimp" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIMP" >&5 $as_echo_n "checking for GIMP... " >&6; } if test -n "$GIMP_CFLAGS"; then pkg_cv_GIMP_CFLAGS="$GIMP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_CFLAGS=`$PKG_CONFIG --cflags "gimpui-2.0 >= 2.2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GIMP_LIBS"; then pkg_cv_GIMP_LIBS="$GIMP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_LIBS=`$PKG_CONFIG --libs "gimpui-2.0 >= 2.2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GIMP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gimpui-2.0 >= 2.2.0" 2>&1` else GIMP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gimpui-2.0 >= 2.2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GIMP_PKG_ERRORS" >&5 have_gimp=no GIMP_LIBDIR= if test "x$with_gimp" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gimp was given, but test for gimp failed See \`config.log' for more details" "$LINENO" 5; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_gimp=no GIMP_LIBDIR= if test "x$with_gimp" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-gimp was given, but test for gimp failed See \`config.log' for more details" "$LINENO" 5; } fi else GIMP_CFLAGS=$pkg_cv_GIMP_CFLAGS GIMP_LIBS=$pkg_cv_GIMP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_gimp=yes GIMP_LIBDIR=`$pkg_prefix --variable=gimplibdir gimp-2.0` fi fi if test "$have_gimp" = "yes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIMP_2_4" >&5 $as_echo_n "checking for GIMP_2_4... " >&6; } if test -n "$GIMP_2_4_CFLAGS"; then pkg_cv_GIMP_2_4_CFLAGS="$GIMP_2_4_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.4.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_2_4_CFLAGS=`$PKG_CONFIG --cflags "gimpui-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GIMP_2_4_LIBS"; then pkg_cv_GIMP_2_4_LIBS="$GIMP_2_4_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.4.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_2_4_LIBS=`$PKG_CONFIG --libs "gimpui-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GIMP_2_4_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gimpui-2.0 >= 2.4.0" 2>&1` else GIMP_2_4_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gimpui-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GIMP_2_4_PKG_ERRORS" >&5 cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_4 0 _ACEOF elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_4 0 _ACEOF else GIMP_2_4_CFLAGS=$pkg_cv_GIMP_2_4_CFLAGS GIMP_2_4_LIBS=$pkg_cv_GIMP_2_4_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_4 1 _ACEOF fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIMP_2_9" >&5 $as_echo_n "checking for GIMP_2_9... " >&6; } if test -n "$GIMP_2_9_CFLAGS"; then pkg_cv_GIMP_2_9_CFLAGS="$GIMP_2_9_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_2_9_CFLAGS=`$PKG_CONFIG --cflags "gimpui-2.0 >= 2.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GIMP_2_9_LIBS"; then pkg_cv_GIMP_2_9_LIBS="$GIMP_2_9_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gimpui-2.0 >= 2.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gimpui-2.0 >= 2.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIMP_2_9_LIBS=`$PKG_CONFIG --libs "gimpui-2.0 >= 2.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GIMP_2_9_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gimpui-2.0 >= 2.9.0" 2>&1` else GIMP_2_9_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gimpui-2.0 >= 2.9.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GIMP_2_9_PKG_ERRORS" >&5 cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_9 0 _ACEOF elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_9 0 _ACEOF else GIMP_2_9_CFLAGS=$pkg_cv_GIMP_2_9_CFLAGS GIMP_2_9_LIBS=$pkg_cv_GIMP_2_9_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_GIMP_2_9 1 _ACEOF fi fi # Check whether --with-cinepaint was given. if test "${with_cinepaint+set}" = set; then : withval=$with_cinepaint; else with_cinepaint=check fi if test "x$with_cinepaint" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CINEPAINT" >&5 $as_echo_n "checking for CINEPAINT... " >&6; } if test -n "$CINEPAINT_CFLAGS"; then pkg_cv_CINEPAINT_CFLAGS="$CINEPAINT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cinepaint-gtk >= 0.22\""; } >&5 ($PKG_CONFIG --exists --print-errors "cinepaint-gtk >= 0.22") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CINEPAINT_CFLAGS=`$PKG_CONFIG --cflags "cinepaint-gtk >= 0.22" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CINEPAINT_LIBS"; then pkg_cv_CINEPAINT_LIBS="$CINEPAINT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cinepaint-gtk >= 0.22\""; } >&5 ($PKG_CONFIG --exists --print-errors "cinepaint-gtk >= 0.22") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CINEPAINT_LIBS=`$PKG_CONFIG --libs "cinepaint-gtk >= 0.22" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CINEPAINT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cinepaint-gtk >= 0.22" 2>&1` else CINEPAINT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cinepaint-gtk >= 0.22" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CINEPAINT_PKG_ERRORS" >&5 have_cinepaint=no CINEPAINT_LIBDIR= CINEPAINT_PROGRAMPLUGINDIR= if test "x$with_cinepaint" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-cinepaint was given, but test for cinepaint failed See \`config.log' for more details" "$LINENO" 5; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_cinepaint=no CINEPAINT_LIBDIR= CINEPAINT_PROGRAMPLUGINDIR= if test "x$with_cinepaint" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-cinepaint was given, but test for cinepaint failed See \`config.log' for more details" "$LINENO" 5; } fi else CINEPAINT_CFLAGS=$pkg_cv_CINEPAINT_CFLAGS CINEPAINT_LIBS=$pkg_cv_CINEPAINT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_cinepaint=yes CINEPAINT_LIBDIR=`$pkg_prefix --variable=libdir cinepaint-gtk` CINEPAINT_PROGRAMPLUGINDIR=`$pkg_prefix --variable=programplugindir cinepaint-gtk` fi fi # Disable deprecated functions on tested versions of GTK. if $PKG_CONFIG --max-version=2.18.99 gtk+-2.0; then $as_echo "#define G_DISABLE_DEPRECATED /**/" >>confdefs.h $as_echo "#define GDK_DISABLE_DEPRECATED /**/" >>confdefs.h $as_echo "#define GTK_DISABLE_DEPRECATED /**/" >>confdefs.h $as_echo "#define GTK_DISABLE_SINGLE_INCLUDES /**/" >>confdefs.h $as_echo "#define GDK_PIXBUF_DISABLE_SINGLE_INCLUDES /**/" >>confdefs.h fi fi if test $have_gtk = yes; then MAKE_GTK_TRUE= MAKE_GTK_FALSE='#' else MAKE_GTK_TRUE='#' MAKE_GTK_FALSE= fi if test $have_gimp = yes; then MAKE_GIMP_TRUE= MAKE_GIMP_FALSE='#' else MAKE_GIMP_TRUE='#' MAKE_GIMP_FALSE= fi if test $have_cinepaint = yes; then MAKE_CINEPAINT_TRUE= MAKE_CINEPAINT_FALSE='#' else MAKE_CINEPAINT_TRUE='#' MAKE_CINEPAINT_FALSE= fi # Check for zlib. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if ${ac_cv_lib_z_deflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi have_zlib=${ac_cv_lib_z_deflate:-no} # Check for libbz2. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzReadOpen in -lbz2" >&5 $as_echo_n "checking for BZ2_bzReadOpen in -lbz2... " >&6; } if ${ac_cv_lib_bz2_BZ2_bzReadOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BZ2_bzReadOpen (); int main () { return BZ2_bzReadOpen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bz2_BZ2_bzReadOpen=yes else ac_cv_lib_bz2_BZ2_bzReadOpen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzReadOpen" >&5 $as_echo "$ac_cv_lib_bz2_BZ2_bzReadOpen" >&6; } if test "x$ac_cv_lib_bz2_BZ2_bzReadOpen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBBZ2 1 _ACEOF LIBS="-lbz2 $LIBS" fi have_libbz2=${ac_cv_lib_bz2_BZ2_bzReadOpen:-no} # Check for jpeg headers and library. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_CreateCompress in -ljpeg" >&5 $as_echo_n "checking for jpeg_CreateCompress in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_CreateCompress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_CreateCompress (); int main () { return jpeg_CreateCompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_CreateCompress=yes else ac_cv_lib_jpeg_jpeg_CreateCompress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_CreateCompress" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_CreateCompress" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_CreateCompress" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBJPEG 1 _ACEOF LIBS="-ljpeg $LIBS" fi fi have_jpeg=${ac_cv_lib_jpeg_jpeg_CreateCompress:-no} # Check for libjasper. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jas_image_decode in -ljasper" >&5 $as_echo_n "checking for jas_image_decode in -ljasper... " >&6; } if ${ac_cv_lib_jasper_jas_image_decode+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljasper $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jas_image_decode (); int main () { return jas_image_decode (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jasper_jas_image_decode=yes else ac_cv_lib_jasper_jas_image_decode=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jasper_jas_image_decode" >&5 $as_echo "$ac_cv_lib_jasper_jas_image_decode" >&6; } if test "x$ac_cv_lib_jasper_jas_image_decode" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBJASPER 1 _ACEOF LIBS="-ljasper $LIBS" fi have_jasper=${ac_cv_lib_jasper_jas_image_decode:-no} # Check for tiff headers and library. pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBTIFF" >&5 $as_echo_n "checking for LIBTIFF... " >&6; } if test -n "$LIBTIFF_CFLAGS"; then pkg_cv_LIBTIFF_CFLAGS="$LIBTIFF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtiff-4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libtiff-4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTIFF_CFLAGS=`$PKG_CONFIG --cflags "libtiff-4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBTIFF_LIBS"; then pkg_cv_LIBTIFF_LIBS="$LIBTIFF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtiff-4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libtiff-4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTIFF_LIBS=`$PKG_CONFIG --libs "libtiff-4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBTIFF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtiff-4" 2>&1` else LIBTIFF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtiff-4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBTIFF_PKG_ERRORS" >&5 have_tiff=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTIFF_PKG_ERRORS" >&5 $as_echo "$LIBTIFF_PKG_ERRORS" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_tiff=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTIFF_PKG_ERRORS" >&5 $as_echo "$LIBTIFF_PKG_ERRORS" >&6; } else LIBTIFF_CFLAGS=$pkg_cv_LIBTIFF_CFLAGS LIBTIFF_LIBS=$pkg_cv_LIBTIFF_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_tiff=yes $as_echo "#define HAVE_LIBTIFF 1" >>confdefs.h fi if test $have_tiff = no; then ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" if test "x$ac_cv_header_tiffio_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFSetErrorHandler in -ltiff" >&5 $as_echo_n "checking for TIFFSetErrorHandler in -ltiff... " >&6; } if ${ac_cv_lib_tiff_TIFFSetErrorHandler+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TIFFSetErrorHandler (); int main () { return TIFFSetErrorHandler (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tiff_TIFFSetErrorHandler=yes else ac_cv_lib_tiff_TIFFSetErrorHandler=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFSetErrorHandler" >&5 $as_echo "$ac_cv_lib_tiff_TIFFSetErrorHandler" >&6; } if test "x$ac_cv_lib_tiff_TIFFSetErrorHandler" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBTIFF 1 _ACEOF LIBS="-ltiff $LIBS" fi fi have_tiff=${ac_cv_lib_tiff_TIFFSetErrorHandler:-no} fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPNG" >&5 $as_echo_n "checking for LIBPNG... " >&6; } if test -n "$LIBPNG_CFLAGS"; then pkg_cv_LIBPNG_CFLAGS="$LIBPNG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBPNG_LIBS"; then pkg_cv_LIBPNG_LIBS="$LIBPNG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBPNG_LIBS=`$PKG_CONFIG --libs "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBPNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng >= 1.2" 2>&1` else LIBPNG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng >= 1.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBPNG_PKG_ERRORS" >&5 have_png=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBPNG_PKG_ERRORS" >&5 $as_echo "$LIBPNG_PKG_ERRORS" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_png=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBPNG_PKG_ERRORS" >&5 $as_echo "$LIBPNG_PKG_ERRORS" >&6; } else LIBPNG_CFLAGS=$pkg_cv_LIBPNG_CFLAGS LIBPNG_LIBS=$pkg_cv_LIBPNG_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_png=yes $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFITSIO" >&5 $as_echo_n "checking for CFITSIO... " >&6; } if test -n "$CFITSIO_CFLAGS"; then pkg_cv_CFITSIO_CFLAGS="$CFITSIO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cfitsio\""; } >&5 ($PKG_CONFIG --exists --print-errors "cfitsio") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CFITSIO_CFLAGS=`$PKG_CONFIG --cflags "cfitsio" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CFITSIO_LIBS"; then pkg_cv_CFITSIO_LIBS="$CFITSIO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cfitsio\""; } >&5 ($PKG_CONFIG --exists --print-errors "cfitsio") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CFITSIO_LIBS=`$PKG_CONFIG --libs "cfitsio" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CFITSIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cfitsio" 2>&1` else CFITSIO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cfitsio" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CFITSIO_PKG_ERRORS" >&5 have_cfitsio=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CFITSIO_PKG_ERRORS" >&5 $as_echo "$CFITSIO_PKG_ERRORS" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_cfitsio=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CFITSIO_PKG_ERRORS" >&5 $as_echo "$CFITSIO_PKG_ERRORS" >&6; } else CFITSIO_CFLAGS=$pkg_cv_CFITSIO_CFLAGS CFITSIO_LIBS=$pkg_cv_CFITSIO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_cfitsio=yes $as_echo "#define HAVE_LIBCFITSIO 1" >>confdefs.h fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXIV2" >&5 $as_echo_n "checking for EXIV2... " >&6; } if test -n "$EXIV2_CFLAGS"; then pkg_cv_EXIV2_CFLAGS="$EXIV2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"exiv2 >= 0.20\""; } >&5 ($PKG_CONFIG --exists --print-errors "exiv2 >= 0.20") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EXIV2_CFLAGS=`$PKG_CONFIG --cflags "exiv2 >= 0.20" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EXIV2_LIBS"; then pkg_cv_EXIV2_LIBS="$EXIV2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"exiv2 >= 0.20\""; } >&5 ($PKG_CONFIG --exists --print-errors "exiv2 >= 0.20") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EXIV2_LIBS=`$PKG_CONFIG --libs "exiv2 >= 0.20" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EXIV2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "exiv2 >= 0.20" 2>&1` else EXIV2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "exiv2 >= 0.20" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EXIV2_PKG_ERRORS" >&5 have_exiv2=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXIV2_PKG_ERRORS" >&5 $as_echo "$EXIV2_PKG_ERRORS" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_exiv2=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXIV2_PKG_ERRORS" >&5 $as_echo "$EXIV2_PKG_ERRORS" >&6; } else EXIV2_CFLAGS=$pkg_cv_EXIV2_CFLAGS EXIV2_LIBS=$pkg_cv_EXIV2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_exiv2=yes $as_echo "#define HAVE_EXIV2 1" >>confdefs.h fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LENSFUN" >&5 $as_echo_n "checking for LENSFUN... " >&6; } if test -n "$LENSFUN_CFLAGS"; then pkg_cv_LENSFUN_CFLAGS="$LENSFUN_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lensfun >= 0.2.5\""; } >&5 ($PKG_CONFIG --exists --print-errors "lensfun >= 0.2.5") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LENSFUN_CFLAGS=`$PKG_CONFIG --cflags "lensfun >= 0.2.5" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LENSFUN_LIBS"; then pkg_cv_LENSFUN_LIBS="$LENSFUN_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lensfun >= 0.2.5\""; } >&5 ($PKG_CONFIG --exists --print-errors "lensfun >= 0.2.5") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LENSFUN_LIBS=`$PKG_CONFIG --libs "lensfun >= 0.2.5" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LENSFUN_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lensfun >= 0.2.5" 2>&1` else LENSFUN_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lensfun >= 0.2.5" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LENSFUN_PKG_ERRORS" >&5 have_lensfun=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LENSFUN_PKG_ERRORS" >&5 $as_echo "$LENSFUN_PKG_ERRORS" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_lensfun=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LENSFUN_PKG_ERRORS" >&5 $as_echo "$LENSFUN_PKG_ERRORS" >&6; } else LENSFUN_CFLAGS=$pkg_cv_LENSFUN_CFLAGS LENSFUN_LIBS=$pkg_cv_LENSFUN_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_lensfun=yes $as_echo "#define HAVE_LENSFUN 1" >>confdefs.h fi # Make sure MSGFMT_OPTS is defined for all combinations of autoconf and glib. MSGFMT_OPTS= ALL_LINGUAS="ca cs da de es fr it ja ko nb nl pl pt ru sr sr@latin sv zh_CN zh_TW" for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES LIBS="$LIBS $INTLLIBS" # The following might not work with some combinations of autoconf and glib due # to a missing update of the glib-gettext.m4 file. #AM_GLIB_DEFINE_LOCALEDIR(UFRAW_LOCALEDIR) GETTEXT_PACKAGE=ufraw # UFRAW_CPPFLAGS is added to the preprocessor flags AM_CPPFLAGS, # affecting also the C and C++ compilers. UFRAW_CPPFLAGS="$UFRAW_CPPFLAGS $EXIV2_CFLAGS $GTK_CFLAGS $GLIB_CFLAGS $LCMS_CFLAGS $LENSFUN_CFLAGS $LIBTIFF_CFLAGS $LIBPNG_CFLAGS $CFITSIO_CFLAGS" # UFRAW_LDADD is added to the linker flags LDADD. UFRAW_LDADD="$UFRAW_LDADD $EXIV2_LIBS $GLIB_LIBS $LCMS_LIBS $LENSFUN_LIBS $LIBTIFF_LIBS $LIBPNG_LIBS $CFITSIO_LIBS $CARBON_LIBS" # Windows and Darwin (Mac OS X) will require some special attention. case $host_os in *mingw* ) ufraw_win32=yes ufraw_darwin=no ;; *darwin* ) ufraw_win32=no ufraw_darwin=yes ;; * ) ufraw_win32=no ufraw_darwin=no ;; esac if test x$ufraw_win32 = xyes; then UFRAW_WIN32_TRUE= UFRAW_WIN32_FALSE='#' else UFRAW_WIN32_TRUE='#' UFRAW_WIN32_FALSE= fi if test $ufraw_win32 = yes; then CFLAGS="$CFLAGS -mwindows -mms-bitfields" CXXFLAGS="$CXXFLAGS -mwindows -mms-bitfields" CONSOLE="-mconsole" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add the -mno-cygwin flag to CFLAGS and CXXFLAGS" >&5 $as_echo_n "checking whether to add the -mno-cygwin flag to CFLAGS and CXXFLAGS... " >&6; } # Check whether --enable-no_cygwin was given. if test "${enable_no_cygwin+set}" = set; then : enableval=$enable_no_cygwin; else enable_no_cygwin=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_no_cygwin" >&5 $as_echo "$enable_no_cygwin" >&6; } if test $enable_no_cygwin = yes; then CFLAGS="$CFLAGS -mno-cygwin" CXXFLAGS="$CXXFLAGS -mno-cygwin" fi else CONSOLE= fi # Check for the Apple Carbon framework (needed for GDK_WINDOWING_QUARTZ). CARBON_LIBS= if test $ufraw_darwin = yes; then carbon_ok=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mac OS X Carbon support" >&5 $as_echo_n "checking for Mac OS X Carbon support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : carbon_ok=yes fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $carbon_ok" >&5 $as_echo "$carbon_ok" >&6; } if test "x$carbon_ok" = "xyes"; then CARBON_LIBS="-framework Carbon -framework Cocoa" fi fi # Check whether --with-dosprefix was given. if test "${with_dosprefix+set}" = set; then : withval=$with_dosprefix; with_dosprefix=$withval else with_dosprefix=NONE fi # The ws2_32 library is required for the ntohs symbol on win32. if test $ufraw_win32 = yes; then LIBS="$LIBS -lws2_32" fi if test $ufraw_win32 = yes; then for ac_prog in $host_alias-windres $target_alias-windres windres do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$WINDRES" && break done # For the Windows-installer make needs the location of the DLLs PREFIX=$with_prefix # and ISCC (ufraw-setup.iss.in) needs them in DOS format... DOSPREFIX=$with_dosprefix ISCC="\"\$(PROGRAMFILES)\"/Inno\ Setup\ 5/ISCC.exe" case $build_os in *cygwin* | *mingw* ) WINE="" COMMENT_ICON="" ;; * ) # Only needed if you plan to cross-build Windows-installer from Linux. test -z "$PROGRAMFILES" && PROGRAMFILES="C:\\Program Files" WINE="wine" COMMENT_ICON=";" esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install mime types" >&5 $as_echo_n "checking whether to install mime types... " >&6; } # Check whether --enable-mime was given. if test "${enable_mime+set}" = set; then : enableval=$enable_mime; else enable_mime=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_mime" >&5 $as_echo "$enable_mime" >&6; } if test $enable_mime = yes; then INSTALL_MIME_TRUE= INSTALL_MIME_FALSE='#' else INSTALL_MIME_TRUE='#' INSTALL_MIME_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build extras" >&5 $as_echo_n "checking whether to build extras... " >&6; } # Check whether --enable-extras was given. if test "${enable_extras+set}" = set; then : enableval=$enable_extras; else enable_extras=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_extras" >&5 $as_echo "$enable_extras" >&6; } if test $enable_extras = yes; then MAKE_EXTRAS_TRUE= MAKE_EXTRAS_FALSE='#' else MAKE_EXTRAS_TRUE='#' MAKE_EXTRAS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable DST correction for file timestamps" >&5 $as_echo_n "checking whether to enable DST correction for file timestamps... " >&6; } # Check whether --enable-dst_correction was given. if test "${enable_dst_correction+set}" = set; then : enableval=$enable_dst_correction; $as_echo "#define LOCALTIME 1" >>confdefs.h else enable_dst_correction=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dst_correction" >&5 $as_echo "$enable_dst_correction" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the contrast setting option" >&5 $as_echo_n "checking whether to enable the contrast setting option... " >&6; } # Check whether --enable-contrast was given. if test "${enable_contrast+set}" = set; then : enableval=$enable_contrast; $as_echo "#define UFRAW_CONTRAST 1" >>confdefs.h else enable_contrast=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_contrast" >&5 $as_echo "$enable_contrast" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable support for the FUJIFILM 'X-Trans' sensor" >&5 $as_echo_n "checking whether to enable support for the FUJIFILM 'X-Trans' sensor... " >&6; } # Check whether --enable-x_trans was given. if test "${enable_x_trans+set}" = set; then : enableval=$enable_x_trans; $as_echo "#define UFRAW_X_TRANS 1" >>confdefs.h else enable_x_trans=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_x_trans" >&5 $as_echo "$enable_x_trans" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable 'None' interpolation" >&5 $as_echo_n "checking whether to enable 'None' interpolation... " >&6; } # Check whether --enable-interp_none was given. if test "${enable_interp_none+set}" = set; then : enableval=$enable_interp_none; $as_echo "#define ENABLE_INTERP_NONE 1" >>confdefs.h else enable_interp_none=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_interp_none" >&5 $as_echo "$enable_interp_none" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable debugging with valgrind" >&5 $as_echo_n "checking whether to enable debugging with valgrind... " >&6; } # Check whether --enable-valgrind was given. if test "${enable_valgrind+set}" = set; then : enableval=$enable_valgrind; $as_echo "#define UFRAW_VALGRIND 1" >>confdefs.h else enable_valgrind=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_valgrind" >&5 $as_echo "$enable_valgrind" >&6; } ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files icons/Makefile" ac_config_files="$ac_config_files po/Makefile.in" ac_config_files="$ac_config_files ufraw-setup.iss" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKE_GTK_TRUE}" && test -z "${MAKE_GTK_FALSE}"; then as_fn_error $? "conditional \"MAKE_GTK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKE_GIMP_TRUE}" && test -z "${MAKE_GIMP_FALSE}"; then as_fn_error $? "conditional \"MAKE_GIMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKE_CINEPAINT_TRUE}" && test -z "${MAKE_CINEPAINT_FALSE}"; then as_fn_error $? "conditional \"MAKE_CINEPAINT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${UFRAW_WIN32_TRUE}" && test -z "${UFRAW_WIN32_FALSE}"; then as_fn_error $? "conditional \"UFRAW_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INSTALL_MIME_TRUE}" && test -z "${INSTALL_MIME_FALSE}"; then as_fn_error $? "conditional \"INSTALL_MIME\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKE_EXTRAS_TRUE}" && test -z "${MAKE_EXTRAS_FALSE}"; then as_fn_error $? "conditional \"MAKE_EXTRAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by UFRaw $as_me 0.19.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ UFRaw config.status 0.19.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "ufraw-setup.iss") CONFIG_FILES="$CONFIG_FILES ufraw-setup.iss" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: ====================== summary =====================" >&5 $as_echo "$as_me: ====================== summary =====================" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: build GTK GUI: $have_gtk" >&5 $as_echo "$as_me: build GTK GUI: $have_gtk" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: build GIMP plug-in: $have_gimp" >&5 $as_echo "$as_me: build GIMP plug-in: $have_gimp" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: build CinePaint plug-in: $have_cinepaint" >&5 $as_echo "$as_me: build CinePaint plug-in: $have_cinepaint" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: EXIF support using exiv2: $have_exiv2" >&5 $as_echo "$as_me: EXIF support using exiv2: $have_exiv2" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: JPEG support: $have_jpeg" >&5 $as_echo "$as_me: JPEG support: $have_jpeg" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: JPEG2000 (libjasper) support: $have_jasper" >&5 $as_echo "$as_me: JPEG2000 (libjasper) support: $have_jasper" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: TIFF support: $have_tiff" >&5 $as_echo "$as_me: TIFF support: $have_tiff" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: PNG support: $have_png" >&5 $as_echo "$as_me: PNG support: $have_png" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FITS support: $have_cfitsio" >&5 $as_echo "$as_me: FITS support: $have_cfitsio" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: gzip compressed raw support: $have_zlib" >&5 $as_echo "$as_me: gzip compressed raw support: $have_zlib" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: bzip2 compressed raw support: $have_libbz2" >&5 $as_echo "$as_me: bzip2 compressed raw support: $have_libbz2" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Lens defects correction via lensfun: $have_lensfun" >&5 $as_echo "$as_me: Lens defects correction via lensfun: $have_lensfun" >&6;} ufraw-0.19.2/ufraw_message.c0000664000175000017500000001255612115264507012662 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_message.c - Error message handling functions * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include /* * Every ufraw internal function that might fail should return a status * with one of these values: * UFRAW_SUCCESS * UFRAW_WARNING * UFRAW_ERROR * The relevant message can be retrived using ufraw_get_message(). * Even when UFRAW_SUCCESS is returned there could be an information message. */ char *ufraw_get_message(ufraw_data *uf) { return uf->message; } static void message_append(ufraw_data *uf, char *message) { if (message == NULL) return; if (uf->message == NULL) { uf->message = g_strdup(message); return; } if (uf->message[strlen(uf->message) - 1] == '\n') uf->message = g_strconcat(uf->message, message, NULL); else uf->message = g_strconcat(uf->message, "\n", message, NULL); } /* The following function should be used by ufraw's internal functions. */ void ufraw_message_init(ufraw_data *uf) { uf->status = UFRAW_SUCCESS; uf->message = NULL; } void ufraw_message_reset(ufraw_data *uf) { uf->status = UFRAW_SUCCESS; g_free(uf->message); uf->message = NULL; } void ufraw_set_error(ufraw_data *uf, const char *format, ...) { uf->status = UFRAW_ERROR; if (format != NULL) { va_list ap; va_start(ap, format); char *message = g_strdup_vprintf(format, ap); va_end(ap); message_append(uf, message); g_free(message); } } void ufraw_set_warning(ufraw_data *uf, const char *format, ...) { // Set warning only if no error was set before if (uf->status != UFRAW_ERROR) uf->status = UFRAW_WARNING; if (format != NULL) { va_list ap; va_start(ap, format); char *message = g_strdup_vprintf(format, ap); va_end(ap); message_append(uf, message); g_free(message); } } void ufraw_set_info(ufraw_data *uf, const char *format, ...) { if (format != NULL) { va_list ap; va_start(ap, format); char *message = g_strdup_vprintf(format, ap); va_end(ap); message_append(uf, message); g_free(message); } } int ufraw_get_status(ufraw_data *uf) { return uf->status; } int ufraw_is_error(ufraw_data *uf) { return uf->status == UFRAW_ERROR; } // Old error handling, should be removed after being fully implemented. static char *ufraw_message_buffer(char *buffer, char *message) { #ifdef UFRAW_DEBUG ufraw_batch_messenger(message); #endif char *buf; if (buffer == NULL) return g_strdup(message); buf = g_strconcat(buffer, message, NULL); g_free(buffer); return buf; } void ufraw_batch_messenger(char *message) { /* Print the 'ufraw:' header only if there are no newlines in the message * (not including possibly one at the end). * Otherwise, the header will be printed only for the first line. */ if (g_strstr_len(message, strlen(message) - 1, "\n") == NULL) g_printerr("%s: ", ufraw_binary); g_printerr("%s%c", message, message[strlen(message) - 1] != '\n' ? '\n' : 0); } char *ufraw_message(int code, const char *format, ...) { // TODO: The following static variables are not thread-safe static char *logBuffer = NULL; static char *errorBuffer = NULL; static gboolean errorFlag = FALSE; static void *parentWindow = NULL; char *message = NULL; void *saveParentWindow; if (code == UFRAW_SET_PARENT) { saveParentWindow = parentWindow; parentWindow = (void *)format; return saveParentWindow; } if (format != NULL) { va_list ap; va_start(ap, format); message = g_strdup_vprintf(format, ap); va_end(ap); } switch (code) { case UFRAW_SET_ERROR: errorFlag = TRUE; case UFRAW_SET_WARNING: errorBuffer = ufraw_message_buffer(errorBuffer, message); case UFRAW_SET_LOG: case UFRAW_DCRAW_SET_LOG: logBuffer = ufraw_message_buffer(logBuffer, message); g_free(message); return NULL; case UFRAW_GET_ERROR: if (!errorFlag) return NULL; case UFRAW_GET_WARNING: return errorBuffer; case UFRAW_GET_LOG: return logBuffer; case UFRAW_CLEAN: g_free(logBuffer); logBuffer = NULL; case UFRAW_RESET: g_free(errorBuffer); errorBuffer = NULL; errorFlag = FALSE; return NULL; case UFRAW_BATCH_MESSAGE: if (parentWindow == NULL) ufraw_messenger(message, parentWindow); g_free(message); return NULL; case UFRAW_INTERACTIVE_MESSAGE: if (parentWindow != NULL) ufraw_messenger(message, parentWindow); g_free(message); return NULL; case UFRAW_REPORT: ufraw_messenger(errorBuffer, parentWindow); return NULL; default: ufraw_messenger(message, parentWindow); g_free(message); return NULL; } } ufraw-0.19.2/dcraw_indi.c0000664000175000017500000011267012122217612012124 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_indi.c - DCRaw functions made independent * Copyright 2004-2013 by Udi Fuchs * * based on dcraw by Dave Coffin * http://www.cybercom.net/~dcoffin/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include /*For _(String) definition - NKBJ*/ #include "dcraw_api.h" #include "uf_progress.h" #ifdef _OPENMP #include #define uf_omp_get_thread_num() omp_get_thread_num() #define uf_omp_get_num_threads() omp_get_num_threads() #else #define uf_omp_get_thread_num() 0 #define uf_omp_get_num_threads() 1 #endif #define ushort UshORt typedef unsigned short ushort; typedef gint64 INT64; extern const double xyz_rgb[3][3]; extern const float d65_white[3]; #define CLASS #define FORC(cnt) for (c=0; c < cnt; c++) #define FORC3 FORC(3) #define FORC4 FORC(4) #define FORCC FORC(colors) #define SQR(x) ((x)*(x)) #define LIM(x,min,max) MAX(min,MIN(x,max)) #define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) #define CLIP(x) LIM(x,0,65535) #define SWAP(a,b) { a ^= b; a ^= (b ^= a); } /* In order to inline this calculation, I make the risky assumption that all filter patterns can be described by a repeating pattern of eight rows and two columns Return values are either 0/1/2/3 = G/M/C/Y or 0/1/2/3 = R/G1/B/G2 */ #define FC(row,col) \ (int)(filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) #define BAYER(row,col) \ image[((row) >> shrink)*iwidth + ((col) >> shrink)][FC(row,col)] int CLASS fcol_INDI(const unsigned filters, const int row, const int col) { static const char filter[16][16] = { { 2, 1, 1, 3, 2, 3, 2, 0, 3, 2, 3, 0, 1, 2, 1, 0 }, { 0, 3, 0, 2, 0, 1, 3, 1, 0, 1, 1, 2, 0, 3, 3, 2 }, { 2, 3, 3, 2, 3, 1, 1, 3, 3, 1, 2, 1, 2, 0, 0, 3 }, { 0, 1, 0, 1, 0, 2, 0, 2, 2, 0, 3, 0, 1, 3, 2, 1 }, { 3, 1, 1, 2, 0, 1, 0, 2, 1, 3, 1, 3, 0, 1, 3, 0 }, { 2, 0, 0, 3, 3, 2, 3, 1, 2, 0, 2, 0, 3, 2, 2, 1 }, { 2, 3, 3, 1, 2, 1, 2, 1, 2, 1, 1, 2, 3, 0, 0, 1 }, { 1, 0, 0, 2, 3, 0, 0, 3, 0, 3, 0, 3, 2, 1, 2, 3 }, { 2, 3, 3, 1, 1, 2, 1, 0, 3, 2, 3, 0, 2, 3, 1, 3 }, { 1, 0, 2, 0, 3, 0, 3, 2, 0, 1, 1, 2, 0, 1, 0, 2 }, { 0, 1, 1, 3, 3, 2, 2, 1, 1, 3, 3, 0, 2, 1, 3, 2 }, { 2, 3, 2, 0, 0, 1, 3, 0, 2, 0, 1, 2, 3, 0, 1, 0 }, { 1, 3, 1, 2, 3, 2, 3, 2, 0, 2, 0, 1, 1, 0, 3, 0 }, { 0, 2, 0, 3, 1, 0, 0, 1, 1, 3, 3, 2, 3, 2, 2, 1 }, { 2, 1, 3, 2, 3, 1, 2, 1, 0, 3, 0, 2, 0, 2, 0, 2 }, { 0, 3, 1, 0, 0, 2, 0, 3, 2, 1, 3, 1, 1, 3, 1, 3 } }; #ifdef UFRAW_X_TRANS static const char filter2[6][6] = { { 1, 1, 0, 1, 1, 2 }, { 1, 1, 2, 1, 1, 0 }, { 2, 0, 1, 0, 2, 1 }, { 1, 1, 2, 1, 1, 0 }, { 1, 1, 0, 1, 1, 2 }, { 0, 2, 1, 2, 0, 1 } }; #endif /* Assume that we are handling the Leaf CatchLight with * top_margin = 8; left_margin = 18; */ // if (filters == 1) return filter[(row+top_margin) & 15][(col+left_margin) & 15]; if (filters == 1) return filter[(row + 8) & 15][(col + 18) & 15]; #ifdef UFRAW_X_TRANS if (filters == 2) return filter2[(row + 6) % 6][(col + 6) % 6]; #endif return FC(row, col); } static void CLASS merror(void *ptr, char *where) { if (ptr) return; g_error("Out of memory in %s\n", where); } static void CLASS hat_transform(float *temp, float *base, int st, int size, int sc) { int i; for (i = 0; i < sc; i++) temp[i] = 2 * base[st * i] + base[st * (sc - i)] + base[st * (i + sc)]; for (; i + sc < size; i++) temp[i] = 2 * base[st * i] + base[st * (i - sc)] + base[st * (i + sc)]; for (; i < size; i++) temp[i] = 2 * base[st * i] + base[st * (i - sc)] + base[st * (2 * size - 2 - (i + sc))]; } void CLASS wavelet_denoise_INDI(ushort(*image)[4], const int black, const int iheight, const int iwidth, const int height, const int width, const int colors, const int shrink, const float pre_mul[4], const float threshold, const unsigned filters) { float *fimg = 0, thold, mul[2], avg, diff; int size, lev, hpass, lpass, row, col, nc, c, i, wlast; ushort *window[4]; static const float noise[] = { 0.8002, 0.2735, 0.1202, 0.0585, 0.0291, 0.0152, 0.0080, 0.0044 }; // dcraw_message (dcraw, DCRAW_VERBOSE,_("Wavelet denoising...\n")); /*UF*/ /* Scaling is done somewhere else - NKBJ*/ size = iheight * iwidth; float temp[iheight + iwidth]; if ((nc = colors) == 3 && filters) nc++; progress(PROGRESS_WAVELET_DENOISE, -nc * 5); #ifdef _OPENMP #if defined(__sun) && !defined(__GNUC__) /* Fix bug #3205673 - NKBJ */ #pragma omp parallel for \ default(none) \ shared(nc,image,size,noise) \ private(c,i,hpass,lev,lpass,row,col,thold,fimg,temp) #else #pragma omp parallel for \ default(none) \ shared(nc,image,size) \ private(c,i,hpass,lev,lpass,row,col,thold,fimg,temp) #endif #endif FORC(nc) { /* denoise R,G1,B,G3 individually */ fimg = (float *) malloc(size * 3 * sizeof * fimg); for (i = 0; i < size; i++) fimg[i] = 256 * sqrt(image[i][c] /*<< scale*/); for (hpass = lev = 0; lev < 5; lev++) { progress(PROGRESS_WAVELET_DENOISE, 1); lpass = size * ((lev & 1) + 1); for (row = 0; row < iheight; row++) { hat_transform(temp, fimg + hpass + row * iwidth, 1, iwidth, 1 << lev); for (col = 0; col < iwidth; col++) fimg[lpass + row * iwidth + col] = temp[col] * 0.25; } for (col = 0; col < iwidth; col++) { hat_transform(temp, fimg + lpass + col, iwidth, iheight, 1 << lev); for (row = 0; row < iheight; row++) fimg[lpass + row * iwidth + col] = temp[row] * 0.25; } thold = threshold * noise[lev]; for (i = 0; i < size; i++) { fimg[hpass + i] -= fimg[lpass + i]; if (fimg[hpass + i] < -thold) fimg[hpass + i] += thold; else if (fimg[hpass + i] > thold) fimg[hpass + i] -= thold; else fimg[hpass + i] = 0; if (hpass) fimg[i] += fimg[hpass + i]; } hpass = lpass; } for (i = 0; i < size; i++) image[i][c] = CLIP(SQR(fimg[i] + fimg[lpass + i]) / 0x10000); free(fimg); } if (filters && colors == 3) { /* pull G1 and G3 closer together */ for (row = 0; row < 2; row++) mul[row] = 0.125 * pre_mul[FC(row + 1, 0) | 1] / pre_mul[FC(row, 0) | 1]; ushort window_mem[4][width]; for (i = 0; i < 4; i++) window[i] = window_mem[i]; /*(ushort *) fimg + width*i;*/ for (wlast = -1, row = 1; row < height - 1; row++) { while (wlast < row + 1) { for (wlast++, i = 0; i < 4; i++) window[(i + 3) & 3] = window[i]; for (col = FC(wlast, 1) & 1; col < width; col += 2) window[2][col] = BAYER(wlast, col); } thold = threshold / 512; for (col = (FC(row, 0) & 1) + 1; col < width - 1; col += 2) { avg = (window[0][col - 1] + window[0][col + 1] + window[2][col - 1] + window[2][col + 1] - black * 4) * mul[row & 1] + (window[1][col] - black) * 0.5 + black; avg = avg < 0 ? 0 : sqrt(avg); diff = sqrt(BAYER(row, col)) - avg; if (diff < -thold) diff += thold; else if (diff > thold) diff -= thold; else diff = 0; BAYER(row, col) = CLIP(SQR(avg + diff) + 0.5); } } } } void CLASS scale_colors_INDI(const int maximum, const int black, const int use_camera_wb, const float cam_mul[4], const int colors, float pre_mul[4], const unsigned filters, /*const*/ ushort white[8][8], const char *ifname_display, void *dcraw) { unsigned row, col, c, sum[8]; int val; double dmin, dmax; if (use_camera_wb && cam_mul[0] != -1) { memset(sum, 0, sizeof sum); for (row = 0; row < 8; row++) for (col = 0; col < 8; col++) { c = FC(row, col); if ((val = white[row][col] - black) > 0) sum[c] += val; sum[c + 4]++; } if (sum[0] && sum[1] && sum[2] && sum[3]) FORC4 pre_mul[c] = (float) sum[c + 4] / sum[c]; else if (cam_mul[0] && cam_mul[2]) /* 'sizeof pre_mul' does not work because pre_mul is an argument (UF)*/ memcpy(pre_mul, cam_mul, 4 * sizeof(float)); else dcraw_message(dcraw, DCRAW_NO_CAMERA_WB, _("%s: Cannot use camera white balance.\n"), ifname_display); } else { dcraw_message(dcraw, DCRAW_NO_CAMERA_WB, _("%s: Cannot use camera white balance.\n"), ifname_display); } if (pre_mul[3] == 0) pre_mul[3] = colors < 4 ? pre_mul[1] : 1; for (dmin = DBL_MAX, dmax = c = 0; c < 4; c++) { if (dmin > pre_mul[c]) dmin = pre_mul[c]; if (dmax < pre_mul[c]) dmax = pre_mul[c]; } FORC4 pre_mul[c] /= dmax; dcraw_message(dcraw, DCRAW_VERBOSE, _("Scaling with darkness %d, saturation %d, and\nmultipliers"), black, maximum); FORC4 dcraw_message(dcraw, DCRAW_VERBOSE, " %f", pre_mul[c]); dcraw_message(dcraw, DCRAW_VERBOSE, "\n"); /* The rest of the scaling is done somewhere else UF*/ } void CLASS border_interpolate_INDI(const int height, const int width, ushort(*image)[4], const unsigned filters, int colors, int border) { int row, col, y, x, f, c, sum[8]; for (row = 0; row < height; row++) for (col = 0; col < width; col++) { if (col == border && row >= border && row < height - border) col = width - border; memset(sum, 0, sizeof sum); for (y = row - 1; y != row + 2; y++) for (x = col - 1; x != col + 2; x++) if (y >= 0 && y < height && x >= 0 && x < width) { f = fcol_INDI(filters, y, x); sum[f] += image[y * width + x][f]; sum[f + 4]++; } f = fcol_INDI(filters, row, col); FORCC if (c != f && sum[c + 4]) image[row * width + col][c] = sum[c] / sum[c + 4]; } } void CLASS lin_interpolate_INDI(ushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, void *dcraw) /*UF*/ { int code[16][16][32], size = 16, *ip, sum[4]; int f, c, i, x, y, row, col, shift, color; ushort *pix; dcraw_message(dcraw, DCRAW_VERBOSE, _("Bilinear interpolation...\n")); /*UF*/ #ifdef UFRAW_X_TRANS if (filters == 2) size = 6; #endif border_interpolate_INDI(height, width, image, filters, colors, 1); for (row = 0; row < size; row++) { for (col = 0; col < size; col++) { ip = code[row][col] + 1; f = fcol_INDI(filters, row, col); memset(sum, 0, sizeof sum); for (y = -1; y <= 1; y++) for (x = -1; x <= 1; x++) { shift = (y == 0) + (x == 0); color = fcol_INDI(filters, row + y, col + x); if (color == f) continue; *ip++ = (width * y + x) * 4 + color; *ip++ = shift; *ip++ = color; sum[color] += 1 << shift; } code[row][col][0] = (ip - code[row][col]) / 3; FORCC if (c != f) { *ip++ = c; *ip++ = 256 / sum[c]; } } } #ifdef _OPENMP #pragma omp parallel for default(shared) private(row,col,pix,ip,sum,i) #endif for (row = 1; row < height - 1; row++) { for (col = 1; col < width - 1; col++) { pix = image[row * width + col]; ip = code[row % size][col % size]; memset(sum, 0, sizeof sum); for (i = *ip++; i--; ip += 3) sum[ip[2]] += pix[ip[0]] << ip[1]; for (i = colors; --i; ip += 2) pix[ip[0]] = sum[ip[0]] * ip[1] >> 8; } } } /* This algorithm is officially called: "Interpolation using a Threshold-based variable number of gradients" described in http://scien.stanford.edu/class/psych221/projects/99/tingchen/algodep/vargra.html I've extended the basic idea to work with non-Bayer filter arrays. Gradients are numbered clockwise from NW=0 to W=7. */ void CLASS vng_interpolate_INDI(ushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, void *dcraw) /*UF*/ { static const signed char *cp, terms[] = { -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, -2, -1, +0, -1, 0, 0x02, -2, -1, +0, +0, 0, 0x03, -2, -1, +0, +1, 1, 0x01, -2, +0, +0, -1, 0, 0x06, -2, +0, +0, +0, 1, 0x02, -2, +0, +0, +1, 0, 0x03, -2, +1, -1, +0, 0, 0x04, -2, +1, +0, -1, 1, 0x04, -2, +1, +0, +0, 0, 0x06, -2, +1, +0, +1, 0, 0x02, -2, +2, +0, +0, 1, 0x04, -2, +2, +0, +1, 0, 0x04, -1, -2, -1, +0, 0, 0x80, -1, -2, +0, -1, 0, 0x01, -1, -2, +1, -1, 0, 0x01, -1, -2, +1, +0, 1, 0x01, -1, -1, -1, +1, 0, 0x88, -1, -1, +1, -2, 0, 0x40, -1, -1, +1, -1, 0, 0x22, -1, -1, +1, +0, 0, 0x33, -1, -1, +1, +1, 1, 0x11, -1, +0, -1, +2, 0, 0x08, -1, +0, +0, -1, 0, 0x44, -1, +0, +0, +1, 0, 0x11, -1, +0, +1, -2, 1, 0x40, -1, +0, +1, -1, 0, 0x66, -1, +0, +1, +0, 1, 0x22, -1, +0, +1, +1, 0, 0x33, -1, +0, +1, +2, 1, 0x10, -1, +1, +1, -1, 1, 0x44, -1, +1, +1, +0, 0, 0x66, -1, +1, +1, +1, 0, 0x22, -1, +1, +1, +2, 0, 0x10, -1, +2, +0, +1, 0, 0x04, -1, +2, +1, +0, 1, 0x04, -1, +2, +1, +1, 0, 0x04, +0, -2, +0, +0, 1, 0x80, +0, -1, +0, +1, 1, 0x88, +0, -1, +1, -2, 0, 0x40, +0, -1, +1, +0, 0, 0x11, +0, -1, +2, -2, 0, 0x40, +0, -1, +2, -1, 0, 0x20, +0, -1, +2, +0, 0, 0x30, +0, -1, +2, +1, 1, 0x10, +0, +0, +0, +2, 1, 0x08, +0, +0, +2, -2, 1, 0x40, +0, +0, +2, -1, 0, 0x60, +0, +0, +2, +0, 1, 0x20, +0, +0, +2, +1, 0, 0x30, +0, +0, +2, +2, 1, 0x10, +0, +1, +1, +0, 0, 0x44, +0, +1, +1, +2, 0, 0x10, +0, +1, +2, -1, 1, 0x40, +0, +1, +2, +0, 0, 0x60, +0, +1, +2, +1, 0, 0x20, +0, +1, +2, +2, 0, 0x10, +1, -2, +1, +0, 0, 0x80, +1, -1, +1, +1, 0, 0x88, +1, +0, +1, +2, 0, 0x08, +1, +0, +2, -1, 0, 0x40, +1, +0, +2, +1, 0, 0x10 }, chood[] = { -1, -1, -1, 0, -1, +1, 0, +1, +1, +1, +1, 0, +1, -1, 0, -1 }; ushort(*brow[4])[4], *pix; int prow = 8, pcol = 2, *ip, *code[16][16], gval[8], gmin, gmax, sum[4]; int row, col, x, y, x1, x2, y1, y2, t, weight, grads, color, diag; int g, diff, thold, num, c; ushort rowtmp[4][width * 4]; lin_interpolate_INDI(image, filters, width, height, colors, dcraw); /*UF*/ dcraw_message(dcraw, DCRAW_VERBOSE, _("VNG interpolation...\n")); /*UF*/ if (filters == 1) prow = pcol = 16; #ifdef UFRAW_X_TRANS if (filters == 2) prow = pcol = 6; #endif int *ipalloc = ip = (int *) calloc(prow * pcol, 1280); merror(ip, "vng_interpolate()"); for (row = 0; row < prow; row++) /* Precalculate for VNG */ for (col = 0; col < pcol; col++) { code[row][col] = ip; for (cp = terms, t = 0; t < 64; t++) { y1 = *cp++; x1 = *cp++; y2 = *cp++; x2 = *cp++; weight = *cp++; grads = *cp++; color = fcol_INDI(filters, row + y1, col + x1); if (fcol_INDI(filters, row + y2, col + x2) != color) continue; diag = (fcol_INDI(filters, row, col + 1) == color && fcol_INDI(filters, row + 1, col) == color) ? 2 : 1; if (abs(y1 - y2) == diag && abs(x1 - x2) == diag) continue; *ip++ = (y1 * width + x1) * 4 + color; *ip++ = (y2 * width + x2) * 4 + color; *ip++ = weight; for (g = 0; g < 8; g++) if (grads & 1 << g) *ip++ = g; *ip++ = -1; } *ip++ = INT_MAX; for (cp = chood, g = 0; g < 8; g++) { y = *cp++; x = *cp++; *ip++ = (y * width + x) * 4; color = fcol_INDI(filters, row, col); if (fcol_INDI(filters, row + y, col + x) != color && fcol_INDI(filters, row + y * 2, col + x * 2) == color) *ip++ = (y * width + x) * 8 + color; else *ip++ = 0; } } progress(PROGRESS_INTERPOLATE, -height); #ifdef _OPENMP #pragma omp parallel \ default(none) \ shared(image,code,prow,pcol) \ private(row,col,g,brow,rowtmp,pix,ip,gval,diff,gmin,gmax,thold,sum,color,num,c,t) #endif { int slice = (height - 4) / uf_omp_get_num_threads(); int start_row = 2 + slice * uf_omp_get_thread_num(); int end_row = MIN(start_row + slice, height - 2); for (row = start_row; row < end_row; row++) { /* Do VNG interpolation */ progress(PROGRESS_INTERPOLATE, 1); for (g = 0; g < 4; g++) brow[g] = &rowtmp[(row + g - 2) % 4]; for (col = 2; col < width - 2; col++) { pix = image[row * width + col]; ip = code[row % prow][col % pcol]; memset(gval, 0, sizeof gval); while ((g = ip[0]) != INT_MAX) { /* Calculate gradients */ diff = ABS(pix[g] - pix[ip[1]]) << ip[2]; gval[ip[3]] += diff; ip += 5; if ((g = ip[-1]) == -1) continue; gval[g] += diff; while ((g = *ip++) != -1) gval[g] += diff; } ip++; gmin = gmax = gval[0]; /* Choose a threshold */ for (g = 1; g < 8; g++) { if (gmin > gval[g]) gmin = gval[g]; if (gmax < gval[g]) gmax = gval[g]; } if (gmax == 0) { memcpy(brow[2][col], pix, sizeof * image); continue; } thold = gmin + (gmax >> 1); memset(sum, 0, sizeof sum); color = fcol_INDI(filters, row, col); for (num = g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ if (gval[g] <= thold) { FORCC if (c == color && ip[1]) sum[c] += (pix[c] + pix[ip[1]]) >> 1; else sum[c] += pix[ip[0] + c]; num++; } } FORCC { /* Save to buffer */ t = pix[color]; if (c != color) t += (sum[c] - sum[color]) / num; brow[2][col][c] = CLIP(t); } } /* Write buffer to image */ if ((row > start_row + 1) || (row == height - 2)) memcpy(image[(row - 2)*width + 2], brow[0] + 2, (width - 4)*sizeof * image); if (row == height - 2) { memcpy(image[(row - 1)*width + 2], brow[1] + 2, (width - 4)*sizeof * image); break; } } } free(ipalloc); } /* Patterned Pixel Grouping Interpolation by Alain Desbiolles */ void CLASS ppg_interpolate_INDI(ushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, void *dcraw) { int dir[5] = { 1, width, -1, -width, 1 }; int row, col, diff[2], guess[2], c, d, i; ushort(*pix)[4]; border_interpolate_INDI(height, width, image, filters, colors, 3); dcraw_message(dcraw, DCRAW_VERBOSE, _("PPG interpolation...\n")); /*UF*/ #ifdef _OPENMP #pragma omp parallel \ default(none) \ shared(image,dir) \ private(row,col,i,d,c,pix,diff,guess) #endif { /* Fill in the green layer with gradients and pattern recognition: */ #ifdef _OPENMP #pragma omp for #endif for (row = 3; row < height - 3; row++) { for (col = 3 + (FC(row, 3) & 1), c = FC(row, col); col < width - 3; col += 2) { pix = image + row * width + col; for (i = 0; (d = dir[i]) > 0; i++) { guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2 - pix[-2 * d][c] - pix[2 * d][c]; diff[i] = (ABS(pix[-2 * d][c] - pix[ 0][c]) + ABS(pix[ 2 * d][c] - pix[ 0][c]) + ABS(pix[ -d][1] - pix[ d][1])) * 3 + (ABS(pix[ 3 * d][1] - pix[ d][1]) + ABS(pix[-3 * d][1] - pix[-d][1])) * 2; } d = dir[i = diff[0] > diff[1]]; pix[0][1] = ULIM(guess[i] >> 2, pix[d][1], pix[-d][1]); } } /* Calculate red and blue for each green pixel: */ #ifdef _OPENMP #pragma omp for #endif for (row = 1; row < height - 1; row++) { for (col = 1 + (FC(row, 2) & 1), c = FC(row, col + 1); col < width - 1; col += 2) { pix = image + row * width + col; for (i = 0; (d = dir[i]) > 0; c = 2 - c, i++) pix[0][c] = CLIP((pix[-d][c] + pix[d][c] + 2 * pix[0][1] - pix[-d][1] - pix[d][1]) >> 1); } } /* Calculate blue for red pixels and vice versa: */ #ifdef _OPENMP #pragma omp for #endif for (row = 1; row < height - 1; row++) { for (col = 1 + (FC(row, 1) & 1), c = 2 - FC(row, col); col < width - 1; col += 2) { pix = image + row * width + col; for (i = 0; (d = dir[i] + dir[i + 1]) > 0; i++) { diff[i] = ABS(pix[-d][c] - pix[d][c]) + ABS(pix[-d][1] - pix[0][1]) + ABS(pix[ d][1] - pix[0][1]); guess[i] = pix[-d][c] + pix[d][c] + 2 * pix[0][1] - pix[-d][1] - pix[d][1]; } if (diff[0] != diff[1]) pix[0][c] = CLIP(guess[diff[0] > diff[1]] >> 1); else pix[0][c] = CLIP((guess[0] + guess[1]) >> 2); } } } } /* Adaptive Homogeneity-Directed interpolation is based on the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. */ #define TS 256 /* Tile Size */ void CLASS ahd_interpolate_INDI(ushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, const float rgb_cam[3][4], void *dcraw) { int i, j, k, top, left, row, col, tr, tc, c, d, val, hm[2]; ushort(*pix)[4], (*rix)[3]; static const int dir[4] = { -1, 1, -TS, TS }; unsigned ldiff[2][4], abdiff[2][4], leps, abeps; float r, cbrt[0x10000], xyz[3], xyz_cam[3][4]; ushort(*rgb)[TS][TS][3]; short(*lab)[TS][TS][3], (*lix)[3]; char(*homo)[TS][TS], *buffer; dcraw_message(dcraw, DCRAW_VERBOSE, _("AHD interpolation...\n")); /*UF*/ #ifdef _OPENMP #pragma omp parallel \ default(shared) \ private(top, left, row, col, pix, rix, lix, c, xyz, val, d, tc, tr, i, j, k, ldiff, abdiff, leps, abeps, hm, buffer, rgb, lab, homo, r) #endif { #ifdef _OPENMP #pragma omp for schedule(static) nowait #endif for (i = 0; i < 0x10000; i++) { r = i / 65535.0; cbrt[i] = r > 0.008856 ? pow(r, 1 / 3.0) : 7.787 * r + 16 / 116.0; } #ifdef _OPENMP #pragma omp for #endif for (i = 0; i < 3; i++) for (j = 0; j < colors; j++) for (xyz_cam[i][j] = k = 0; k < 3; k++) xyz_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j] / d65_white[i]; border_interpolate_INDI(height, width, image, filters, colors, 5); buffer = (char *) malloc(26 * TS * TS); /* 1664 kB */ merror(buffer, "ahd_interpolate()"); rgb = (ushort(*)[TS][TS][3]) buffer; lab = (short(*)[TS][TS][3])(buffer + 12 * TS * TS); homo = (char(*)[TS][TS])(buffer + 24 * TS * TS); progress(PROGRESS_INTERPOLATE, -height); #ifdef _OPENMP #pragma omp for #endif for (top = 2; top < height - 5; top += TS - 6) { progress(PROGRESS_INTERPOLATE, TS - 6); for (left = 2; left < width - 5; left += TS - 6) { /* Interpolate green horizontally and vertically: */ for (row = top; row < top + TS && row < height - 2; row++) { col = left + (FC(row, left) & 1); for (c = FC(row, col); col < left + TS && col < width - 2; col += 2) { pix = image + row * width + col; val = ((pix[-1][1] + pix[0][c] + pix[1][1]) * 2 - pix[-2][c] - pix[2][c]) >> 2; rgb[0][row - top][col - left][1] = ULIM(val, pix[-1][1], pix[1][1]); val = ((pix[-width][1] + pix[0][c] + pix[width][1]) * 2 - pix[-2 * width][c] - pix[2 * width][c]) >> 2; rgb[1][row - top][col - left][1] = ULIM(val, pix[-width][1], pix[width][1]); } } /* Interpolate red and blue, and convert to CIELab: */ for (d = 0; d < 2; d++) for (row = top + 1; row < top + TS - 1 && row < height - 3; row++) for (col = left + 1; col < left + TS - 1 && col < width - 3; col++) { pix = image + row * width + col; rix = &rgb[d][row - top][col - left]; lix = &lab[d][row - top][col - left]; if ((c = 2 - FC(row, col)) == 1) { c = FC(row + 1, col); val = pix[0][1] + ((pix[-1][2 - c] + pix[1][2 - c] - rix[-1][1] - rix[1][1]) >> 1); rix[0][2 - c] = CLIP(val); val = pix[0][1] + ((pix[-width][c] + pix[width][c] - rix[-TS][1] - rix[TS][1]) >> 1); } else val = rix[0][1] + ((pix[-width - 1][c] + pix[-width + 1][c] + pix[+width - 1][c] + pix[+width + 1][c] - rix[-TS - 1][1] - rix[-TS + 1][1] - rix[+TS - 1][1] - rix[+TS + 1][1] + 1) >> 2); rix[0][c] = CLIP(val); c = FC(row, col); rix[0][c] = pix[0][c]; xyz[0] = xyz[1] = xyz[2] = 0.5; FORCC { xyz[0] += xyz_cam[0][c] * rix[0][c]; xyz[1] += xyz_cam[1][c] * rix[0][c]; xyz[2] += xyz_cam[2][c] * rix[0][c]; } xyz[0] = cbrt[CLIP((int) xyz[0])]; xyz[1] = cbrt[CLIP((int) xyz[1])]; xyz[2] = cbrt[CLIP((int) xyz[2])]; lix[0][0] = 64 * (116 * xyz[1] - 16); lix[0][1] = 64 * 500 * (xyz[0] - xyz[1]); lix[0][2] = 64 * 200 * (xyz[1] - xyz[2]); } /* Build homogeneity maps from the CIELab images: */ memset(homo, 0, 2 * TS * TS); for (row = top + 2; row < top + TS - 2 && row < height - 4; row++) { tr = row - top; for (col = left + 2; col < left + TS - 2 && col < width - 4; col++) { tc = col - left; for (d = 0; d < 2; d++) { lix = &lab[d][tr][tc]; for (i = 0; i < 4; i++) { ldiff[d][i] = ABS(lix[0][0] - lix[dir[i]][0]); abdiff[d][i] = SQR(lix[0][1] - lix[dir[i]][1]) + SQR(lix[0][2] - lix[dir[i]][2]); } } leps = MIN(MAX(ldiff[0][0], ldiff[0][1]), MAX(ldiff[1][2], ldiff[1][3])); abeps = MIN(MAX(abdiff[0][0], abdiff[0][1]), MAX(abdiff[1][2], abdiff[1][3])); for (d = 0; d < 2; d++) for (i = 0; i < 4; i++) if (ldiff[d][i] <= leps && abdiff[d][i] <= abeps) homo[d][tr][tc]++; } } /* Combine the most homogenous pixels for the final result: */ for (row = top + 3; row < top + TS - 3 && row < height - 5; row++) { tr = row - top; for (col = left + 3; col < left + TS - 3 && col < width - 5; col++) { tc = col - left; for (d = 0; d < 2; d++) for (hm[d] = 0, i = tr - 1; i <= tr + 1; i++) for (j = tc - 1; j <= tc + 1; j++) hm[d] += homo[d][i][j]; if (hm[0] != hm[1]) FORC3 image[row * width + col][c] = rgb[hm[1] > hm[0]][tr][tc][c]; else FORC3 image[row * width + col][c] = (rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) >> 1; } } } } free(buffer); } /* _OPENMP */ } #undef TS #define DTOP(x) ((x>65535) ? (unsigned short)65535 : (x<0) ? (unsigned short)0 : (unsigned short) x) /* * MG - This comment applies to the 3x3 optimized median function * * The following routines have been built from knowledge gathered * around the Web. I am not aware of any copyright problem with * them, so use it as you want. * N. Devillard - 1998 */ #define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); } #define PIX_SWAP(a,b) { int temp=(a);(a)=(b);(b)=temp; } static inline int median9(int *p) { PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ; PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[4]) ; PIX_SORT(p[6], p[7]) ; PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ; PIX_SORT(p[0], p[3]) ; PIX_SORT(p[5], p[8]) ; PIX_SORT(p[4], p[7]) ; PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ; PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ; PIX_SORT(p[4], p[2]) ; return(p[4]) ; } #undef PIX_SWAP #undef PIX_SORT // Just making this function inline speeds up ahd_interpolate_INDI() up to 15% static inline ushort eahd_median(int row, int col, int color, ushort(*image)[4], const int width) { //declare the pixel array int pArray[9]; int result; //perform the median filter (this only works for red or blue) // result = median(R-G)+G or median(B-G)+G // // to perform the filter on green, it needs to be the average // results = (median(G-R)+median(G-B)+R+B)/2 //no checks are done here to speed up the inlining pArray[0] = image[width * (row) + col + 1][color] - image[width * (row) + col + 1][1]; pArray[1] = image[width * (row - 1) + col + 1][color] - image[width * (row - 1) + col + 1][1]; pArray[2] = image[width * (row - 1) + col ][color] - image[width * (row - 1) + col ][1]; pArray[3] = image[width * (row - 1) + col - 1][color] - image[width * (row - 1) + col - 1][1]; pArray[4] = image[width * (row) + col - 1][color] - image[width * (row) + col - 1][1]; pArray[5] = image[width * (row + 1) + col - 1][color] - image[width * (row + 1) + col - 1][1]; pArray[6] = image[width * (row + 1) + col ][color] - image[width * (row + 1) + col ][1]; pArray[7] = image[width * (row + 1) + col + 1][color] - image[width * (row + 1) + col + 1][1]; pArray[8] = image[width * (row) + col ][color] - image[width * (row) + col ][1]; median9(pArray); result = pArray[4] + image[width * (row) + col ][1]; return DTOP(result); } // Add the color smoothing from Kimmel as suggested in the AHD paper // Algorithm updated by Michael Goertz void CLASS color_smooth(ushort(*image)[4], const int width, const int height, const int passes) { int row, col; int row_start = 2; int row_stop = height - 2; int col_start = 2; int col_stop = width - 2; //interate through all the colors int count; ushort *mpix; for (count = 0; count < passes; count++) { //perform 3 iterations - seems to be a commonly settled upon number of iterations #ifdef _OPENMP #pragma omp parallel for default(shared) private(row,col,mpix) #endif for (row = row_start; row < row_stop; row++) { for (col = col_start; col < col_stop; col++) { //calculate the median only over the red and blue //calculating over green seems to offer very little additional quality mpix = image[row * width + col]; mpix[0] = eahd_median(row, col, 0, image, width); mpix[2] = eahd_median(row, col, 2, image, width); } } } } void CLASS fuji_rotate_INDI(ushort(**image_p)[4], int *height_p, int *width_p, int *fuji_width_p, const int colors, const double step, void *dcraw) { int height = *height_p, width = *width_p, fuji_width = *fuji_width_p; /*UF*/ ushort(*image)[4] = *image_p; /*UF*/ int i, row, col; float r, c, fr, fc; int ur, uc; ushort wide, high, (*img)[4], (*pix)[4]; if (!fuji_width) return; dcraw_message(dcraw, DCRAW_VERBOSE, _("Rotating image 45 degrees...\n")); fuji_width = (fuji_width - 1/* + shrink*/)/* >> shrink*/; wide = fuji_width / step; high = (height - fuji_width) / step; img = (ushort(*)[4]) calloc(wide * high, sizeof * img); merror(img, "fuji_rotate()"); #ifdef _OPENMP #pragma omp parallel for default(shared) private(row,col,ur,uc,r,c,fr,fc,pix,i) #endif for (row = 0; row < high; row++) { for (col = 0; col < wide; col++) { ur = r = fuji_width + (row - col) * step; uc = c = (row + col) * step; if (ur > height - 2 || uc > width - 2) continue; fr = r - ur; fc = c - uc; pix = image + ur * width + uc; for (i = 0; i < colors; i++) img[row * wide + col][i] = (pix[ 0][i] * (1 - fc) + pix[ 1][i] * fc) * (1 - fr) + (pix[width][i] * (1 - fc) + pix[width + 1][i] * fc) * fr; } } free(image); width = wide; height = high; image = img; fuji_width = 0; *height_p = height; /* INDI - UF*/ *width_p = width; *fuji_width_p = fuji_width; *image_p = image; } void CLASS flip_image_INDI(ushort(*image)[4], int *height_p, int *width_p, /*const*/ int flip) /*UF*/ { unsigned *flag; int size, base, dest, next, row, col; INT64 *img, hold; int height = *height_p, width = *width_p;/* INDI - UF*/ // Message is suppressed because error handling is not enabled here. // dcraw_message (dcraw, DCRAW_VERBOSE,_("Flipping image %c:%c:%c...\n"), // flip & 1 ? 'H':'0', flip & 2 ? 'V':'0', flip & 4 ? 'T':'0'); /*UF*/ img = (INT64 *) image; size = height * width; flag = calloc((size + 31) >> 5, sizeof * flag); merror(flag, "flip_image()"); for (base = 0; base < size; base++) { if (flag[base >> 5] & (1 << (base & 31))) continue; dest = base; hold = img[base]; while (1) { if (flip & 4) { row = dest % height; col = dest / height; } else { row = dest / width; col = dest % width; } if (flip & 2) row = height - 1 - row; if (flip & 1) col = width - 1 - col; next = row * width + col; if (next == base) break; flag[next >> 5] |= 1 << (next & 31); img[dest] = img[next]; dest = next; } img[dest] = hold; } free(flag); if (flip & 4) SWAP(height, width); *height_p = height; /* INDI - UF*/ *width_p = width; } ufraw-0.19.2/ufraw_embedded.c0000664000175000017500000003552212117521643012764 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_embedded.c - functions to output embedded preview image. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "dcraw_api.h" #include /* for errno */ #include #include #ifdef HAVE_LIBJPEG #include #include #endif #ifdef HAVE_LIBPNG #include #endif #ifdef HAVE_LIBJPEG static void ufraw_jpeg_warning(j_common_ptr cinfo) { ufraw_message(UFRAW_SET_WARNING, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); } static void ufraw_jpeg_error(j_common_ptr cinfo) { /* We ignore the SOI error if second byte is 0xd8 since Minolta's * SOI is known to be wrong */ if (cinfo->err->msg_code == JERR_NO_SOI && cinfo->err->msg_parm.i[1] == 0xd8) { ufraw_message(UFRAW_SET_LOG, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); return; } ufraw_message(UFRAW_SET_ERROR, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); } #endif /*HAVE_LIBJPEG*/ int ufraw_read_embedded(ufraw_data *uf) { int status = UFRAW_SUCCESS; dcraw_data *raw = uf->raw; ufraw_message(UFRAW_RESET, NULL); #ifndef HAVE_LIBJPEG ufraw_message(UFRAW_ERROR, _("Reading embedded image requires libjpeg.")); return UFRAW_ERROR; #endif if (raw->thumbType == unknown_thumb_type) { ufraw_message(UFRAW_ERROR, _("No embedded image found")); return UFRAW_ERROR; } fseek(raw->ifp, raw->thumbOffset, SEEK_SET); if (uf->conf->shrink < 2 && uf->conf->size == 0 && uf->conf->orientation == 0 && uf->conf->type == embedded_jpeg_type && raw->thumbType == jpeg_thumb_type) { uf->thumb.buffer = g_new(unsigned char, raw->thumbBufferLength); size_t num = fread(uf->thumb.buffer, 1, raw->thumbBufferLength, raw->ifp); if (num != raw->thumbBufferLength) ufraw_message(UFRAW_WARNING, "Corrupt thumbnail (fread %d != %d)", num, raw->thumbBufferLength); uf->thumb.buffer[0] = 0xff; } else { unsigned srcHeight = uf->thumb.height, srcWidth = uf->thumb.width; int scaleNum = 1, scaleDenom = 1; if (uf->conf->size > 0) { int srcSize = MAX(srcHeight, srcWidth); if (srcSize < uf->conf->size) { ufraw_message(UFRAW_WARNING, _("Original size (%d) " "is smaller than the requested size (%d)"), srcSize, uf->conf->size); } else { scaleNum = uf->conf->size; scaleDenom = srcSize; } } else if (uf->conf->shrink > 1) { scaleNum = 1; scaleDenom = uf->conf->shrink; } if (raw->thumbType == ppm_thumb_type) { if (srcHeight*srcWidth * 3 != (unsigned)raw->thumbBufferLength) { ufraw_message(UFRAW_ERROR, _("ppm thumb mismatch, " "height %d, width %d, while buffer %d."), srcHeight, srcWidth, raw->thumbBufferLength); return UFRAW_ERROR; } uf->thumb.buffer = g_new(guint8, raw->thumbBufferLength); size_t num = fread(uf->thumb.buffer, 1, raw->thumbBufferLength, raw->ifp); if (num != raw->thumbBufferLength) ufraw_message(UFRAW_WARNING, "Corrupt thumbnail (fread %d != %d)", num, raw->thumbBufferLength); } else { #ifdef HAVE_LIBJPEG struct jpeg_decompress_struct srcinfo; struct jpeg_error_mgr jsrcerr; srcinfo.err = jpeg_std_error(&jsrcerr); /* possible BUG: two messages in case of error? */ srcinfo.err->output_message = ufraw_jpeg_warning; srcinfo.err->error_exit = ufraw_jpeg_error; jpeg_create_decompress(&srcinfo); jpeg_stdio_src(&srcinfo, raw->ifp); jpeg_read_header(&srcinfo, TRUE); if (srcinfo.image_height != srcHeight) { ufraw_message(UFRAW_WARNING, _("JPEG thumb height %d " "different than expected %d."), srcinfo.image_height, srcHeight); srcHeight = srcinfo.image_height; } if (srcinfo.image_width != srcWidth) { ufraw_message(UFRAW_WARNING, _("JPEG thumb width %d " "different than expected %d."), srcinfo.image_width, srcWidth); srcWidth = srcinfo.image_width; } srcinfo.scale_num = scaleNum; srcinfo.scale_denom = scaleDenom; jpeg_start_decompress(&srcinfo); uf->thumb.buffer = g_new(JSAMPLE, srcinfo.output_width * srcinfo.output_height * srcinfo.output_components); JSAMPROW buf; while (srcinfo.output_scanline < srcinfo.output_height) { buf = uf->thumb.buffer + srcinfo.output_scanline * srcinfo.output_width * srcinfo.output_components; jpeg_read_scanlines(&srcinfo, &buf, srcinfo.rec_outbuf_height); } uf->thumb.width = srcinfo.output_width; uf->thumb.height = srcinfo.output_height; jpeg_finish_decompress(&srcinfo); jpeg_destroy_decompress(&srcinfo); char *message = ufraw_message(UFRAW_GET_ERROR, NULL); if (message != NULL) { ufraw_message(UFRAW_ERROR, _("Error creating file '%s'.\n%s"), uf->conf->outputFilename, message); status = UFRAW_ERROR; } else if (ufraw_message(UFRAW_GET_WARNING, NULL) != NULL) { ufraw_message(UFRAW_REPORT, NULL); } #endif /* HAVE_LIBJPEG */ } } return status; } int ufraw_convert_embedded(ufraw_data *uf) { if (uf->thumb.buffer == NULL) { ufraw_message(UFRAW_ERROR, _("No embedded image read")); return UFRAW_ERROR; } unsigned srcHeight = uf->thumb.height, srcWidth = uf->thumb.width; int scaleNum = 1, scaleDenom = 1; if (uf->conf->size > 0) { int srcSize = MAX(srcHeight, srcWidth); if (srcSize > uf->conf->size) { scaleNum = uf->conf->size; scaleDenom = srcSize; } } else if (uf->conf->shrink > 1) { scaleNum = 1; scaleDenom = uf->conf->shrink; } unsigned dstWidth = srcWidth * scaleNum / scaleDenom; unsigned dstHeight = srcHeight * scaleNum / scaleDenom; if (dstWidth != srcWidth || dstHeight != srcHeight) { /* libjpeg only shrink by 1,2,4 or 8. Here we finish the work */ unsigned r, nr, c, nc; int m; for (r = 0; r < srcHeight; r++) { nr = r * dstHeight / srcHeight; for (c = 0; c < srcWidth; c++) { nc = c * dstWidth / srcWidth; for (m = 0; m < 3; m++) uf->thumb.buffer[(nr * dstWidth + nc) * 3 + m] = uf->thumb.buffer[(r * srcWidth + c) * 3 + m]; } } } if (uf->conf->orientation != 0) { unsigned r, nr, c, nc, tmp; int m; unsigned height = dstHeight; unsigned width = dstWidth; if (uf->conf->orientation & 4) { tmp = height; height = width; width = tmp; } unsigned char *newBuffer = g_new(unsigned char, width * height * 3); for (r = 0; r < dstHeight; r++) { if (uf->conf->orientation & 2) nr = dstHeight - r - 1; else nr = r; for (c = 0; c < dstWidth; c++) { if (uf->conf->orientation & 1) nc = dstWidth - c - 1; else nc = c; if (uf->conf->orientation & 4) tmp = nc * width + nr; else tmp = nr * width + nc; for (m = 0; m < 3; m++) { newBuffer[tmp * 3 + m] = uf->thumb.buffer[(r * dstWidth + c) * 3 + m]; } } } g_free(uf->thumb.buffer); uf->thumb.buffer = newBuffer; if (uf->conf->orientation & 4) { dstHeight = height; dstWidth = width; } } uf->thumb.height = dstHeight; uf->thumb.width = dstWidth; return UFRAW_SUCCESS; } int ufraw_write_embedded(ufraw_data *uf) { volatile int status = UFRAW_SUCCESS; dcraw_data *raw = uf->raw; FILE * volatile out = NULL; /* 'volatile' supresses clobbering warning */ ufraw_message(UFRAW_RESET, NULL); if (uf->conf->type != embedded_jpeg_type && uf->conf->type != embedded_png_type) { ufraw_message(UFRAW_ERROR, _("Error creating file '%s'. Unknown file type %d."), uf->conf->outputFilename, uf->conf->type); return UFRAW_ERROR; } if (uf->thumb.buffer == NULL) { ufraw_message(UFRAW_ERROR, _("No embedded image read")); return UFRAW_ERROR; } if (!strcmp(uf->conf->outputFilename, "-")) { out = stdout; } else { if ((out = g_fopen(uf->conf->outputFilename, "wb")) == NULL) { ufraw_message(UFRAW_ERROR, _("Error creating file '%s': %s"), uf->conf->outputFilename, g_strerror(errno)); return UFRAW_ERROR; } } if (uf->conf->shrink < 2 && uf->conf->size == 0 && uf->conf->orientation == 0 && uf->conf->type == embedded_jpeg_type && raw->thumbType == jpeg_thumb_type) { size_t num = fwrite(uf->thumb.buffer, 1, raw->thumbBufferLength, out); if (num != raw->thumbBufferLength) { ufraw_message(UFRAW_ERROR, _("Error writing '%s'"), uf->conf->outputFilename); fclose(out); return UFRAW_ERROR; } } else if (uf->conf->type == embedded_jpeg_type) { #ifdef HAVE_LIBJPEG struct jpeg_compress_struct dstinfo; struct jpeg_error_mgr jdsterr; dstinfo.err = jpeg_std_error(&jdsterr); /* possible BUG: two messages in case of error? */ dstinfo.err->output_message = ufraw_jpeg_warning; dstinfo.err->error_exit = ufraw_jpeg_error; jpeg_create_compress(&dstinfo); dstinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&dstinfo); jpeg_set_quality(&dstinfo, uf->conf->compression, TRUE); dstinfo.input_components = 3; jpeg_default_colorspace(&dstinfo); dstinfo.image_width = uf->thumb.width; dstinfo.image_height = uf->thumb.height; jpeg_stdio_dest(&dstinfo, out); jpeg_start_compress(&dstinfo, TRUE); JSAMPROW buf; while (dstinfo.next_scanline < dstinfo.image_height) { buf = uf->thumb.buffer + dstinfo.next_scanline * dstinfo.image_width * dstinfo.input_components; jpeg_write_scanlines(&dstinfo, &buf, 1); } jpeg_finish_compress(&dstinfo); jpeg_destroy_compress(&dstinfo); char *message = ufraw_message(UFRAW_GET_ERROR, NULL); if (message != NULL) { ufraw_message(UFRAW_ERROR, _("Error creating file '%s'.\n%s"), uf->conf->outputFilename, message); status = UFRAW_ERROR; } else if (ufraw_message(UFRAW_GET_WARNING, NULL) != NULL) { ufraw_message(UFRAW_REPORT, NULL); } #endif /*HAVE_LIBJPEG*/ } else if (uf->conf->type == embedded_png_type) { #ifdef HAVE_LIBPNG /* It is assumed that PNG output will be used to create thumbnails. * Therefore the PNG image is created according to the * thumbmail standards in: * http://jens.triq.net/thumbnail-spec/index.html */ png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_infop info = png_create_info_struct(png); if (setjmp(png_jmpbuf(png))) { ufraw_message(UFRAW_ERROR, _("Error writing '%s'"), uf->conf->outputFilename); png_destroy_write_struct(&png, &info); fclose(out); return UFRAW_ERROR; } png_init_io(png, out); png_set_IHDR(png, info, uf->thumb.width, uf->thumb.height, 8 /*bit_depth*/, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_text text[5]; // char height[max_name], width[max_name]; text[0].compression = PNG_TEXT_COMPRESSION_NONE; text[0].key = "Thumb::URI"; text[0].text = uf->conf->inputURI; text[1].compression = PNG_TEXT_COMPRESSION_NONE; text[1].key = "Thumb::MTime"; text[1].text = uf->conf->inputModTime; // text[2].compression = PNG_TEXT_COMPRESSION_NONE; // text[2].key = "Thumb::Image::Height"; // g_snprintf(height, max_name, "%d", uf->predictedHeight); // text[2].text = height; // text[3].compression = PNG_TEXT_COMPRESSION_NONE; // text[3].key = "Thumb::Image::Width"; // g_snprintf(width, max_name, "%d", uf->predictedWidth); // text[3].text = width; // text[4].compression = PNG_TEXT_COMPRESSION_NONE; // text[4].key = "Software"; // text[4].text = "UFRaw"; png_set_text(png, info, text, 2); png_write_info(png, info); int r; for (r = 0; r < uf->thumb.height; r++) png_write_row(png, uf->thumb.buffer + r * uf->thumb.width * 3); png_write_end(png, NULL); png_destroy_write_struct(&png, &info); #endif /*HAVE_LIBPNG*/ } else { ufraw_message(UFRAW_ERROR, _("Unsupported output type (%d) for embedded image"), uf->conf->type); status = UFRAW_ERROR; } // TODO: Before fclose() we should fflush() and check for errors. if (strcmp(uf->conf->outputFilename, "-")) fclose(out); return status; } ufraw-0.19.2/uf_progress.h0000664000175000017500000000246112115264507012367 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_progress.h - progress bar header * Copyright 2009-2013 by Frank van Maarseveen, Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UF_PROGRESS_H #define _UF_PROGRESS_H #define PROGRESS_WAVELET_DENOISE 1 #define PROGRESS_DESPECKLE 2 #define PROGRESS_INTERPOLATE 3 #define PROGRESS_RENDER 4 /* tiled work */ #define PROGRESS_LOAD 5 #define PROGRESS_SAVE 6 extern void (*ufraw_progress)(int what, int ticks); /* * The first call for a PROGRESS_* activity should specify a negative number * of ticks. This call will prepare the corresponding progress bar segment. * Subsequent calls for the same activity should specify a non-negative number * of ticks corresponding to the amount of work just done. The total number * of ticks including the initialization call should be approximately zero. * * This function is thread safe. See also preview_progress(). */ static inline void progress(int what, int ticks) { if (ufraw_progress) ufraw_progress(what, ticks); } #endif /* _UF_PROGRESS_H */ ufraw-0.19.2/ufraw.c0000664000175000017500000001046112122217612011140 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw.c - The standalone interface to UFRaw. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #include /* for exit */ #include /* for errno */ #include #include char *ufraw_binary; int main(int argc, char **argv) { ufraw_data *uf; conf_data rc, cmd, conf; int status; GtkWidget *dummyWindow = NULL; int optInd; int plugin = 0; #if !GLIB_CHECK_VERSION(2,31,0) g_thread_init(NULL); #endif gdk_threads_init(); gdk_threads_enter(); char *argFile = uf_win32_locale_to_utf8(argv[0]); ufraw_binary = g_path_get_basename(argFile); uf_init_locale(argFile); uf_win32_locale_free(argFile); char *gtkrcfile = g_build_filename(uf_get_home_dir(), ".ufraw-gtkrc", NULL); gtk_rc_add_default_file(gtkrcfile); g_free(gtkrcfile); gtk_init(&argc, &argv); ufraw_icons_init(); #ifdef _WIN32 dummyWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_icon_name(GTK_WINDOW(dummyWindow), "ufraw"); ufraw_message(UFRAW_SET_PARENT, (char *)dummyWindow); #endif /* Load $HOME/.ufrawrc */ conf_load(&rc, NULL); /* Half interpolation is an option only for the GIMP plug-in. * For the stand-alone tool it is disabled */ if (rc.interpolation == half_interpolation) rc.interpolation = ahd_interpolation; if (!rc.RememberOutputPath) g_strlcpy(rc.outputPath, "", max_path); g_strlcpy(rc.inputFilename, "", max_path); g_strlcpy(rc.outputFilename, "", max_path); /* Put the command-line options in cmd */ optInd = ufraw_process_args(&argc, &argv, &cmd, &rc); if (strlen(cmd.outputFilename) != 0) { plugin = 3; } if (cmd.silent) { ufraw_message(UFRAW_ERROR, _("The --silent option is only valid with 'ufraw-batch'")); optInd = -1; } if (cmd.embeddedImage) { ufraw_message(UFRAW_ERROR, _("The --embedded-image option is only valid with 'ufraw-batch'")); optInd = -1; } if (optInd < 0) { gdk_threads_leave(); exit(1); } if (optInd == 0) { gdk_threads_leave(); exit(0); } /* Create a dummyWindow for the GUI error messenger */ if (dummyWindow == NULL) { dummyWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_icon_name(GTK_WINDOW(dummyWindow), "ufraw"); ufraw_message(UFRAW_SET_PARENT, (char *)dummyWindow); } conf_file_load(&conf, cmd.inputFilename); if (optInd == argc) { ufraw_chooser(&rc, &conf, &cmd, NULL); // ufraw_close(cmd.darkframe); gdk_threads_leave(); exit(0); } /* If there only one argument and it is a directory, use it as the * default directory for the file-chooser */ argFile = uf_win32_locale_to_utf8(argv[optInd]); if (optInd == argc - 1 && g_file_test(argFile, G_FILE_TEST_IS_DIR)) { ufraw_chooser(&rc, &conf, &cmd, argFile); uf_win32_locale_free(argFile); // ufraw_close(cmd.darkframe); gdk_threads_leave(); exit(0); } uf_win32_locale_free(argFile); int exitCode = 0; for (; optInd < argc; optInd++) { argFile = uf_win32_locale_to_utf8(argv[optInd]); uf = ufraw_open(argFile); uf_win32_locale_free(argFile); if (uf == NULL) { exitCode = 1; ufraw_message(UFRAW_REPORT, NULL); continue; } status = ufraw_config(uf, &rc, &conf, &cmd); if (status == UFRAW_ERROR) { ufraw_close_darkframe(uf->conf); ufraw_close(uf); g_free(uf); gdk_threads_leave(); exit(1); } ufraw_preview(uf, &rc, plugin, NULL); g_free(uf); } if (dummyWindow != NULL) gtk_widget_destroy(dummyWindow); // ufraw_close(cmd.darkframe); ufobject_delete(cmd.ufobject); ufobject_delete(rc.ufobject); gdk_threads_leave(); exit(exitCode); } ufraw-0.19.2/dcraw_api.h0000664000175000017500000000601212115264507011756 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_api.h - API for DCRaw * Copyright 2004-2013 by Udi Fuchs * * based on dcraw by Dave Coffin * http://www.cybercom.net/~dcoffin/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _DCRAW_API_H #define _DCRAW_API_H #ifdef __cplusplus extern "C" { #endif typedef guint16 dcraw_image_type[4]; typedef struct { dcraw_image_type *image; int width, height, colors; } dcraw_image_data; typedef struct { void *dcraw; FILE *ifp; int width, height, colors, fourColorFilters, filters, raw_color; int flip, shrink; double pixel_aspect; dcraw_image_data raw; dcraw_image_type thresholds; float pre_mul[4], post_mul[4], cam_mul[4], rgb_cam[3][4]; double cam_rgb[4][3]; int rgbMax, black, fuji_width; double fuji_step; int toneCurveSize, toneCurveOffset; int toneModeSize, toneModeOffset; char *message; float iso_speed, shutter, aperture, focal_len; time_t timestamp; char make[80], model[80]; int thumbType, thumbOffset; size_t thumbBufferLength; } dcraw_data; enum { dcraw_ahd_interpolation, dcraw_vng_interpolation, dcraw_four_color_interpolation, dcraw_ppg_interpolation, dcraw_bilinear_interpolation, dcraw_none_interpolation }; enum { unknown_thumb_type, jpeg_thumb_type, ppm_thumb_type }; int dcraw_open(dcraw_data *h, char *filename); int dcraw_load_raw(dcraw_data *h); int dcraw_load_thumb(dcraw_data *h, dcraw_image_data *thumb); int dcraw_finalize_shrink(dcraw_image_data *f, dcraw_data *h, int scale); int dcraw_image_resize(dcraw_image_data *image, int size); int dcraw_image_stretch(dcraw_image_data *image, double pixel_aspect); int dcraw_flip_image(dcraw_image_data *image, int flip); int dcraw_set_color_scale(dcraw_data *h, int useCameraWB); void dcraw_wavelet_denoise(dcraw_data *h, float threshold); void dcraw_wavelet_denoise_shrinked(dcraw_image_data *f, float threshold); void dcraw_finalize_raw(dcraw_data *h, dcraw_data *dark, int rgbWB[4]); int dcraw_finalize_interpolate(dcraw_image_data *f, dcraw_data *h, int interpolation, int smoothing); void dcraw_close(dcraw_data *h); void dcraw_image_dimensions(dcraw_data *raw, int flip, int shrink, int *height, int *width); #define DCRAW_SUCCESS 0 #define DCRAW_ERROR 1 #define DCRAW_UNSUPPORTED 2 #define DCRAW_NO_CAMERA_WB 3 #define DCRAW_VERBOSE 4 #define DCRAW_WARNING 5 #define DCRAW_OPEN_ERROR 6 void dcraw_message(void *dcraw, int code, char *format, ...); #ifdef __cplusplus } #endif #endif /*_DCRAW_API_H*/ ufraw-0.19.2/ufraw_preview.c0000664000175000017500000075154712123734456012735 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_preview.c - GUI for controlling all the image manipulations * Copyright 2004-2013 by Udi Fuchs * * based on the GIMP plug-in by Pawel T. Jochym jochym at ifj edu pl, * * based on the GIMP plug-in by Dave Coffin * http://www.cybercom.net/~dcoffin/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #include "ufraw_ui.h" #include "curveeditor_widget.h" #include #include #include #include #include #include #include #include #ifdef _OPENMP #include #define uf_omp_get_thread_num() omp_get_thread_num() #define uf_omp_get_max_threads() omp_get_max_threads() #else #define uf_omp_get_thread_num() 0 #define uf_omp_get_max_threads() 1 #endif void ufraw_chooser_toggle(GtkToggleButton *button, GtkFileChooser *filechooser); static void update_crop_ranges(preview_data *data, gboolean render); static void adjustment_update(GtkAdjustment *adj, double *valuep); static void button_update(GtkWidget *button, gpointer user_data); extern GtkFileChooser *ufraw_raw_chooser(conf_data *conf, const char *defPath, const gchar *label, GtkWindow *toplevel, const gchar *cancel, gboolean multiple); /* Set to huge number so that the preview size is set by the screen size */ static const int def_preview_width = 9000; static const int def_preview_height = 9000; static const int his_max_height = 256; enum { pixel_format, percent_format }; enum { without_zone, with_zone }; static char *expanderText[] = { N_("Raw histogram with conversion curves"), N_("Live histogram"), NULL }; static const GdkCursorType Cursors[cursor_num] = { GDK_HAND2, GDK_CROSSHAIR, GDK_LEFT_SIDE, GDK_RIGHT_SIDE, GDK_TOP_SIDE, GDK_BOTTOM_SIDE, GDK_TOP_LEFT_CORNER, GDK_TOP_RIGHT_CORNER, GDK_BOTTOM_LEFT_CORNER, GDK_BOTTOM_RIGHT_CORNER, GDK_FLEUR }; static const char *grayscaleModeNames[5] = { N_("None"), N_("Lightness"), N_("Luminance"), N_("Value"), N_("Channel Mixer") }; preview_data *get_preview_data(void *object) { GtkWidget *widget; if (GTK_IS_ADJUSTMENT(object)) { widget = g_object_get_data(object, "Parent-Widget"); } else if (GTK_IS_MENU(object)) { widget = g_object_get_data(G_OBJECT(object), "Parent-Widget"); } else if (GTK_IS_MENU_ITEM(object)) { GtkWidget *menu = gtk_widget_get_ancestor(object, GTK_TYPE_MENU); widget = g_object_get_data(G_OBJECT(menu), "Parent-Widget"); } else { widget = object; } GtkWidget *parentWindow = gtk_widget_get_toplevel(widget); preview_data *data = g_object_get_data(G_OBJECT(parentWindow), "Preview-Data"); return data; } void ufraw_focus(void *window, gboolean focus) { if (focus) { GtkWindow *parentWindow = (void *)ufraw_message(UFRAW_SET_PARENT, (char *)window); g_object_set_data(G_OBJECT(window), "WindowParent", parentWindow); if (parentWindow != NULL) gtk_window_set_accept_focus(GTK_WINDOW(parentWindow), FALSE); } else { GtkWindow *parentWindow = g_object_get_data(G_OBJECT(window), "WindowParent"); ufraw_message(UFRAW_SET_PARENT, (char *)parentWindow); if (parentWindow != NULL) gtk_window_set_accept_focus(GTK_WINDOW(parentWindow), TRUE); } } void ufraw_messenger(char *message, void *parentWindow) { GtkDialog *dialog; if (parentWindow == NULL) { ufraw_batch_messenger(message); } else { dialog = GTK_DIALOG(gtk_message_dialog_new(GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s", message)); gtk_window_set_title(GTK_WINDOW(dialog), _("UFRaw Message")); gtk_dialog_run(dialog); gtk_widget_destroy(GTK_WIDGET(dialog)); } } static void load_curve(GtkWidget *widget, long curveType) { preview_data *data = get_preview_data(widget); GtkFileChooser *fileChooser; GtkFileFilter *filter; GSList *list, *saveList; CurveData c; char *cp; if (data->FreezeDialog) return; if ((curveType == base_curve && CFG->BaseCurveCount >= max_curves) || (curveType == luminosity_curve && CFG->curveCount >= max_curves)) { ufraw_message(UFRAW_ERROR, _("No more room for new curves.")); return; } fileChooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new(_("Load curve"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL)); ufraw_focus(fileChooser, TRUE); gtk_file_chooser_set_select_multiple(fileChooser, TRUE); gtk_file_chooser_set_show_hidden(fileChooser, FALSE); GtkWidget *button = gtk_check_button_new_with_label(_("Show hidden files")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(ufraw_chooser_toggle), fileChooser); gtk_file_chooser_set_extra_widget(fileChooser, button); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All curve formats")); gtk_file_filter_add_pattern(filter, "*.ntc"); gtk_file_filter_add_pattern(filter, "*.NTC"); gtk_file_filter_add_pattern(filter, "*.ncv"); gtk_file_filter_add_pattern(filter, "*.NCV"); gtk_file_filter_add_pattern(filter, "*.curve"); gtk_file_filter_add_pattern(filter, "*.CURVE"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("UFRaw curve format")); gtk_file_filter_add_pattern(filter, "*.curve"); gtk_file_filter_add_pattern(filter, "*.CURVE"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Nikon curve format")); gtk_file_filter_add_pattern(filter, "*.ntc"); gtk_file_filter_add_pattern(filter, "*.NTC"); gtk_file_filter_add_pattern(filter, "*.ncv"); gtk_file_filter_add_pattern(filter, "*.NCV"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All files")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(fileChooser, filter); if (strlen(CFG->curvePath) > 0) gtk_file_chooser_set_current_folder(fileChooser, CFG->curvePath); if (gtk_dialog_run(GTK_DIALOG(fileChooser)) == GTK_RESPONSE_ACCEPT) { for (list = saveList = gtk_file_chooser_get_filenames(fileChooser); list != NULL; list = g_slist_next(list)) { c = conf_default.curve[0]; if (curve_load(&c, list->data) != UFRAW_SUCCESS) continue; if (curveType == base_curve) { if (CFG->BaseCurveCount >= max_curves) break; gtk_combo_box_append_text(data->BaseCurveCombo, c.name); CFG->BaseCurve[CFG->BaseCurveCount] = c; CFG->BaseCurveIndex = CFG->BaseCurveCount; CFG->BaseCurveCount++; /* Add curve to .ufrawrc but don't make it default */ RC->BaseCurve[RC->BaseCurveCount++] = c; RC->BaseCurveCount++; if (CFG_cameraCurve) gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex); else gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex - 2); } else { /* curveType==luminosity_curve */ if (CFG->curveCount >= max_curves) break; gtk_combo_box_append_text(data->CurveCombo, c.name); CFG->curve[CFG->curveCount] = c; CFG->curveIndex = CFG->curveCount; CFG->curveCount++; /* Add curve to .ufrawrc but don't make it default */ RC->curve[RC->curveCount++] = c; RC->curveCount++; gtk_combo_box_set_active(data->CurveCombo, CFG->curveIndex); } cp = g_path_get_dirname(list->data); g_strlcpy(CFG->curvePath, cp, max_path); g_strlcpy(RC->curvePath, cp, max_path); conf_save(RC, NULL, NULL); g_free(cp); g_free(list->data); } if (list != NULL) ufraw_message(UFRAW_ERROR, _("No more room for new curves.")); g_slist_free(saveList); } ufraw_focus(fileChooser, FALSE); gtk_widget_destroy(GTK_WIDGET(fileChooser)); } static void save_curve(GtkWidget *widget, long curveType) { preview_data *data = get_preview_data(widget); GtkFileChooser *fileChooser; GtkFileFilter *filter; char defFilename[max_name]; char *filename, *cp; if (data->FreezeDialog) return; fileChooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new(_("Save curve"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL)); ufraw_focus(fileChooser, TRUE); gtk_file_chooser_set_show_hidden(fileChooser, FALSE); GtkWidget *button = gtk_check_button_new_with_label(_("Show hidden files")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(ufraw_chooser_toggle), fileChooser); gtk_file_chooser_set_extra_widget(fileChooser, button); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All curve formats")); gtk_file_filter_add_pattern(filter, "*.ntc"); gtk_file_filter_add_pattern(filter, "*.NTC"); gtk_file_filter_add_pattern(filter, "*.ncv"); gtk_file_filter_add_pattern(filter, "*.NCV"); gtk_file_filter_add_pattern(filter, "*.curve"); gtk_file_filter_add_pattern(filter, "*.CURVE"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("UFRaw curve format")); gtk_file_filter_add_pattern(filter, "*.curve"); gtk_file_filter_add_pattern(filter, "*.CURVE"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Nikon curve format")); gtk_file_filter_add_pattern(filter, "*.ntc"); gtk_file_filter_add_pattern(filter, "*.NTC"); gtk_file_filter_add_pattern(filter, "*.ncv"); gtk_file_filter_add_pattern(filter, "*.NCV"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All files")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(fileChooser, filter); if (strlen(CFG->curvePath) > 0) gtk_file_chooser_set_current_folder(fileChooser, CFG->curvePath); if (curveType == base_curve) g_snprintf(defFilename, max_name, "%s.curve", CFG->BaseCurve[CFG->BaseCurveIndex].name); else g_snprintf(defFilename, max_name, "%s.curve", CFG->curve[CFG->curveIndex].name); gtk_file_chooser_set_current_name(fileChooser, defFilename); if (gtk_dialog_run(GTK_DIALOG(fileChooser)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(fileChooser); if (curveType == base_curve) curve_save(&CFG->BaseCurve[CFG->BaseCurveIndex], filename); else curve_save(&CFG->curve[CFG->curveIndex], filename); cp = g_path_get_dirname(filename); g_strlcpy(CFG->curvePath, cp, max_path); g_free(cp); g_free(filename); } ufraw_focus(fileChooser, FALSE); gtk_widget_destroy(GTK_WIDGET(fileChooser)); } static void load_profile(GtkWidget *widget, long type) { preview_data *data = get_preview_data(widget); GtkFileChooser *fileChooser; GSList *list, *saveList; GtkFileFilter *filter; char *filename, *cp; profile_data p; if (data->FreezeDialog) return; if (CFG->profileCount[type] == max_profiles) { ufraw_message(UFRAW_ERROR, _("No more room for new profiles.")); return; } fileChooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new( _("Load color profile"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL)); ufraw_focus(fileChooser, TRUE); gtk_file_chooser_set_select_multiple(fileChooser, TRUE); gtk_file_chooser_set_show_hidden(fileChooser, FALSE); GtkWidget *button = gtk_check_button_new_with_label(_("Show hidden files")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(ufraw_chooser_toggle), fileChooser); gtk_file_chooser_set_extra_widget(fileChooser, button); if (strlen(CFG->profilePath) > 0) gtk_file_chooser_set_current_folder(fileChooser, CFG->profilePath); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Color Profiles")); gtk_file_filter_add_pattern(filter, "*.icm"); gtk_file_filter_add_pattern(filter, "*.ICM"); gtk_file_filter_add_pattern(filter, "*.icc"); gtk_file_filter_add_pattern(filter, "*.ICC"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All files")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(fileChooser, filter); if (gtk_dialog_run(GTK_DIALOG(fileChooser)) == GTK_RESPONSE_ACCEPT) { for (list = saveList = gtk_file_chooser_get_filenames(fileChooser); list != NULL && CFG->profileCount[type] < max_profiles; list = g_slist_next(list)) { filename = list->data; p = conf_default.profile[type][conf_default.profileCount[type]]; g_strlcpy(p.file, filename, max_path); /* Make sure we update product name */ Developer->updateTransform = TRUE; developer_profile(Developer, type, &p); if (Developer->profile[type] == NULL) { g_free(list->data); continue; } char *base = g_path_get_basename(filename); char *name = uf_file_set_type(base, ""); char *utf8 = g_filename_display_name(name); g_strlcpy(p.name, utf8, max_name); g_free(utf8); g_free(name); g_free(base); /* Set some defaults to the profile's curve */ p.gamma = profile_default_gamma(&p); CFG->profile[type][CFG->profileCount[type]++] = p; gtk_combo_box_append_text(data->ProfileCombo[type], p.name); CFG->profileIndex[type] = CFG->profileCount[type] - 1; cp = g_path_get_dirname(list->data); g_strlcpy(CFG->profilePath, cp, max_path); /* Add profile to .ufrawrc but don't make it default */ RC->profile[type][RC->profileCount[type]++] = p; g_strlcpy(RC->profilePath, cp, max_path); conf_save(RC, NULL, NULL); g_free(cp); g_free(list->data); } gtk_combo_box_set_active(data->ProfileCombo[type], CFG->profileIndex[type]); if (list != NULL) ufraw_message(UFRAW_ERROR, _("No more room for new profiles.")); g_slist_free(saveList); } ufraw_focus(fileChooser, FALSE); gtk_widget_destroy(GTK_WIDGET(fileChooser)); } static colorLabels *color_labels_new(GtkTable *table, int x, int y, char *label, int format, int zonep) { colorLabels *l; GtkWidget *lbl; int c, i = 0, numlabels; l = g_new(colorLabels, 1); l->format = format; l->zonep = zonep; numlabels = (zonep == with_zone ? 5 : 3); if (label != NULL) { lbl = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(lbl), 1, 0.5); gtk_table_attach(table, lbl, x, x + 1, y, y + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); i++; } /* 0-2 for RGB, 3 for value, 4 for zone */ for (c = 0; c < numlabels; c++, i++) { l->labels[c] = GTK_LABEL(gtk_label_new(NULL)); GtkWidget *event_box = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(event_box), GTK_WIDGET(l->labels[c])); gtk_table_attach(table, event_box, x + i, x + i + 1, y, y + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); switch (c) { case 0: case 1: case 2: gtk_label_set_width_chars(l->labels[c], 3); break; case 3: gtk_label_set_width_chars(l->labels[c], 5); gtk_widget_set_tooltip_text(event_box, _("Luminosity (Y value)")); break; case 4: gtk_label_set_width_chars(l->labels[c], 4); gtk_widget_set_tooltip_text(event_box, _("Adams' zone")); } } return l; } /* Return numeric zone representation from 0-1 luminance value. * Unlike Adams, we use arabic for now. */ static double value2zone(double v) { const double zoneV = 0.18; double z_rel_V; double zone; /* Convert to value relative to zone V value. */ z_rel_V = v / zoneV; /* Convert to log-based value, with zone V 0. */ zone = log(z_rel_V) / log(2.0); /* Move zone 5 to the proper place. */ zone += 5.0; return zone; } static void color_labels_set(colorLabels *l, double data[]) { int c; char buf1[max_name], buf2[max_name]; /* Value black, zone purple, for no good reason. */ const char *colorName[] = {"red", "green", "blue", "black", "purple"}; for (c = 0; c < 3; c++) { switch (l->format) { case pixel_format: g_snprintf(buf1, max_name, "%3.f", data[c]); break; case percent_format: if (data[c] < 10.0) g_snprintf(buf1, max_name, "%2.1f%%", data[c]); else g_snprintf(buf1, max_name, "%2.0f%%", data[c]); break; default: g_snprintf(buf1, max_name, "ERR"); } g_snprintf(buf2, max_name, "%s", colorName[c], buf1); gtk_label_set_markup(l->labels[c], buf2); } /* If value/zone not requested, just return now. */ if (l->zonep == without_zone) return; /* Value */ c = 3; g_snprintf(buf2, max_name, "%0.3f", colorName[c], data[3]); gtk_label_set_markup(l->labels[c], buf2); /* Zone */ c = 4; /* 2 decimal places may be excessive */ g_snprintf(buf2, max_name, "%0.2f", colorName[c], data[4]); gtk_label_set_markup(l->labels[c], buf2); } static int zoom_to_scale(double zoom) { /* Try to setup for shrink instead of resize because of speed. * We only round down to guaranty that scale-to-fit actually fits. */ int percent = zoom; int mul = 100 / percent; if (percent * mul <= 100 && (percent + 1) * mul > 100) return mul; else return 0; } /* Modify the preview image to mark crop and spot areas. * Note that all coordinate intervals are semi-inclusive, e.g. * X1 <= pixels < X2 and Y1 <= pixels < Y2 * This approach makes computing width/height just a matter of * substracting X1 from X2 or Y1 from Y2. */ static void preview_draw_area(preview_data *data, int x, int y, int width, int height) { int pixbufHeight = gdk_pixbuf_get_height(data->PreviewPixbuf); if (y < 0 || y >= pixbufHeight) g_error("preview_draw_area(): y:%d out of range 0 <= y < %d", y, pixbufHeight); if (y + height > pixbufHeight) g_error("preview_draw_area(): y+height:%d out of range y+height <= %d", y + height, pixbufHeight); if (height == 0) return; // Nothing to do int pixbufWidth = gdk_pixbuf_get_width(data->PreviewPixbuf); if (x < 0 || x >= pixbufWidth) g_error("preview_draw_area(): x:%d out of range 0 <= x < %d", x, pixbufWidth); if (x + width > pixbufWidth) g_error("preview_draw_area(): x+width:%d out of range x+width <= %d", x + width, pixbufWidth); if (width == 0) return; // Nothing to do gboolean blinkOver = CFG->overExp && (!CFG->blinkOverUnder || (data->OverUnderTicker & 3) == 1); gboolean blinkUnder = CFG->underExp && (!CFG->blinkOverUnder || (data->OverUnderTicker & 3) == 3); UFRectangle Crop; ufraw_get_scaled_crop(data->UF, &Crop); int CropX2 = Crop.x + Crop.width; int CropY2 = Crop.y + Crop.height; int drawLines = CFG->drawLines + 1; /* Scale spot image coordinates to pixbuf coordinates */ float scale_x = ((float)pixbufWidth) / data->UF->rotatedWidth; float scale_y = ((float)pixbufHeight) / data->UF->rotatedHeight; int SpotY1 = floor(MIN(data->SpotY1, data->SpotY2) * scale_y); int SpotY2 = ceil(MAX(data->SpotY1, data->SpotY2) * scale_y); int SpotX1 = floor(MIN(data->SpotX1, data->SpotX2) * scale_x); int SpotX2 = ceil(MAX(data->SpotX1, data->SpotX2) * scale_x); int rowstride = gdk_pixbuf_get_rowstride(data->PreviewPixbuf); guint8 *pixies = gdk_pixbuf_get_pixels(data->PreviewPixbuf) + x * 3; /* This is bad. `img' should have been a parameter because we * cannot request an up to date buffer but it must be up to * date to some extend. In theory we could get the wrong buffer */ ufraw_image_data *displayImage = ufraw_get_image(data->UF, ufraw_display_phase, FALSE); guint8 *displayPixies = displayImage->buffer + x * displayImage->depth; ufraw_image_data *workingImage = ufraw_get_image(data->UF, ufraw_develop_phase, FALSE); guint8 *workingPixies = workingImage->buffer + x * workingImage->depth; int xx, yy, c; for (yy = y; yy < y + height; yy++) { guint8 *p8 = pixies + yy * rowstride; memcpy(p8, displayPixies + yy * displayImage->rowstride, width * displayImage->depth); if (data->ChannelSelect >= 0) { guint8 *p = p8; for (xx = 0; xx < width; xx++, p += 3) { guint8 px = p[data->ChannelSelect]; p[0] = p[1] = p[2] = px; } } guint8 *p8working = workingPixies + yy * workingImage->rowstride; for (xx = x; xx < x + width; xx++, p8 += 3, p8working += workingImage->depth) { if (data->SpotDraw && (((yy == SpotY1 - 1 || yy == SpotY2) && xx >= SpotX1 - 1 && xx <= SpotX2) || ((xx == SpotX1 - 1 || xx == SpotX2) && yy >= SpotY1 - 1 && yy <= SpotY2) ) ) { if (((xx + yy) & 7) >= 4) p8[0] = p8[1] = p8[2] = 0; else p8[0] = p8[1] = p8[2] = 255; continue; } /* Draw white frame around crop area */ if (((yy == Crop.y - 1 || yy == CropY2) && xx >= Crop.x - 1 && xx <= CropX2) || ((xx == Crop.x - 1 || xx == CropX2) && yy >= Crop.y - 1 && yy <= CropY2)) { p8[0] = p8[1] = p8[2] = 255; continue; } /* Shade the cropped out area */ else if (yy < Crop.y || yy >= CropY2 || xx < Crop.x || xx >= CropX2) { for (c = 0; c < 3; c++) p8[c] = p8[c] / 4; continue; } if (data->RenderMode == render_default) { /* Shade out the alignment lines */ if (CFG->drawLines && yy > Crop.y + 1 && yy < CropY2 - 2 && xx > Crop.x + 1 && xx < CropX2 - 2) { int dx = (xx - Crop.x) * drawLines % Crop.width / drawLines; int dy = (yy - Crop.y) * drawLines % Crop.height / drawLines; if (dx == 0 || dy == 0) { p8[0] /= 2; p8[1] /= 2; p8[2] /= 2; } else if (dx == 1 || dy == 1) { p8[0] = 255 - (255 - p8[0]) / 2; p8[1] = 255 - (255 - p8[1]) / 2; p8[2] = 255 - (255 - p8[2]) / 2; } } /* Blink the overexposed/underexposed spots */ if (blinkOver && (p8working[0] == 255 || p8working[1] == 255 || p8working[2] == 255)) p8[0] = p8[1] = p8[2] = 0; else if (blinkUnder && (p8working[0] == 0 || p8working[1] == 0 || p8working[2] == 0)) p8[0] = p8[1] = p8[2] = 255; } else if (data->RenderMode == render_overexposed) { for (c = 0; c < 3; c++) if (p8working[c] != 255) p8[c] = 0; } else if (data->RenderMode == render_underexposed) { for (c = 0; c < 3; c++) if (p8working[c] != 0) p8[c] = 255; } } } /* Redraw the changed areas */ #ifdef _OPENMP #pragma omp critical { #endif GtkWidget *widget = data->PreviewWidget; GtkImageView *view = GTK_IMAGE_VIEW(widget); GdkRectangle rect; rect.x = x; rect.y = y; rect.width = width; rect.height = height; gtk_image_view_damage_pixels(view, &rect); #ifdef _OPENMP } #endif } static gboolean preview_draw_crop(preview_data *data) { UFRectangle Crop; ufraw_get_scaled_crop(data->UF, &Crop); preview_draw_area(data, Crop.x, Crop.y, Crop.width, Crop.height); return FALSE; } static gboolean is_rendering(preview_data *data) { return data->RenderSubArea >= 0; } static gboolean switch_highlights(gpointer ptr) { preview_data *data = ptr; /* Only redraw the highlights in the default rendering mode. */ if (data->RenderMode != render_default || data->FreezeDialog) return TRUE; if (!is_rendering(data)) { /* Set the area to redraw based on the crop rectangle and view port. */ UFRectangle Crop; ufraw_get_scaled_crop(data->UF, &Crop); GdkRectangle viewRect; gtk_image_view_get_viewport(GTK_IMAGE_VIEW(data->PreviewWidget), &viewRect); int x1 = MAX(Crop.x, viewRect.x); int width = MIN(Crop.width, viewRect.width); int y1 = MAX(Crop.y, viewRect.y); int height = MIN(Crop.height, viewRect.height); data->OverUnderTicker++; preview_draw_area(data, x1, y1, width, height); } /* If no blinking is needed, disable this timeout function. */ if (!CFG->blinkOverUnder || (!CFG->overExp && !CFG->underExp)) { data->BlinkTimer = 0; return FALSE; } return TRUE; } static void start_blink(preview_data *data) { if (CFG->blinkOverUnder && (CFG->overExp || CFG->underExp)) { if (!data->BlinkTimer) { data->BlinkTimer = gdk_threads_add_timeout(500, switch_highlights, data); } } } static void stop_blink(preview_data *data) { if (data->BlinkTimer) { data->OverUnderTicker = 0; switch_highlights(data); g_source_remove(data->BlinkTimer); data->BlinkTimer = 0; } } static void window_map_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { preview_data *data = get_preview_data(widget); start_blink(data); (void)event; (void)user_data; } static void window_unmap_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { preview_data *data = get_preview_data(widget); stop_blink(data); (void)event; (void)user_data; } static void render_status_text(preview_data *data) { if (data->ProgressBar == NULL) return; char progressText[max_name]; int scale = zoom_to_scale(CFG->Zoom); if (scale == 0) g_snprintf(progressText, max_name, _("size %dx%d, zoom %2.f%%"), data->UF->rotatedWidth, data->UF->rotatedHeight, CFG->Zoom); else g_snprintf(progressText, max_name, _("size %dx%d, scale 1/%d"), data->UF->rotatedWidth, data->UF->rotatedHeight, scale); gtk_progress_bar_set_text(data->ProgressBar, progressText); gtk_progress_bar_set_fraction(data->ProgressBar, 0); } static gboolean render_raw_histogram(preview_data *data); static gboolean render_preview_image(preview_data *data); static gboolean render_live_histogram(preview_data *data); static gboolean render_spot(preview_data *data); static void draw_spot(preview_data *data, gboolean draw); static void render_special_mode(GtkWidget *widget, long mode) { preview_data *data = get_preview_data(widget); data->RenderMode = mode; preview_draw_crop(data); } static void render_init(preview_data *data) { /* Check if we need a new pixbuf */ int width = gdk_pixbuf_get_width(data->PreviewPixbuf); int height = gdk_pixbuf_get_height(data->PreviewPixbuf); ufraw_image_data *image = ufraw_get_image(data->UF, ufraw_display_phase, FALSE); if (width != image->width || height != image->height) { /* Calculate current viewport center */ GdkRectangle vp; gtk_image_view_get_viewport(GTK_IMAGE_VIEW(data->PreviewWidget), &vp); double xc = (vp.x + vp.width / 2.0) / width * image->width; double yc = (vp.y + vp.height / 2.0) / height * image->height; data->PreviewPixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image->width, image->height); /* Clear the pixbuffer to avoid displaying garbage */ gdk_pixbuf_fill(data->PreviewPixbuf, 0); gtk_image_view_set_pixbuf(GTK_IMAGE_VIEW(data->PreviewWidget), data->PreviewPixbuf, FALSE); g_object_unref(data->PreviewPixbuf); /* restore the viewport center */ gtk_image_view_set_offset(GTK_IMAGE_VIEW(data->PreviewWidget), xc - vp.width / 2, yc - vp.height / 2, FALSE); } } static GtkProgressBar *ProgressBar; static GTimer *ProgressTimer; static void preview_progress(int what, int ticks) { static int last_what, todo, done; gboolean update = FALSE; #ifdef _OPENMP #pragma omp master #endif update = TRUE; #ifdef _OPENMP #pragma omp critical(preview_progress) { #endif if (ticks < 0) { todo = -ticks; done = 0; last_what = what; } else { if (last_what == what) done += ticks; else update = FALSE; } #ifdef _OPENMP } #endif if (!update) return; // wrong thread for GTK or "what" mismatch if (g_timer_elapsed(ProgressTimer, NULL) < 0.07 && ticks >= 0) return; // avoid progress bar rendering hog g_timer_start(ProgressTimer); gboolean events = TRUE; double start = 0.0, stop = 1.0, fraction = 0.0; char *text = NULL; switch (what) { case PROGRESS_WAVELET_DENOISE: text = _("Wavelet denoising"); break; case PROGRESS_DESPECKLE: text = _("Despeckling"); break; case PROGRESS_INTERPOLATE: text = _("Interpolating"); break; case PROGRESS_RENDER: text = _("Rendering"); stop = 0.0; events = FALSE; // not needed in render_preview_image() break; case PROGRESS_LOAD: text = _("Loading preview"); break; case PROGRESS_SAVE: text = _("Saving image"); } if (ticks < 0 && text) gtk_progress_bar_set_text(ProgressBar, text); if (!events) return; fraction = todo ? start + (stop - start) * done / todo : 0; if (fraction > stop) fraction = stop; gtk_progress_bar_set_fraction(ProgressBar, fraction); while (gtk_events_pending()) gtk_main_iteration(); } static void preview_progress_enable(preview_data *data) { ProgressBar = data->ProgressBar; ProgressTimer = g_timer_new(); ufraw_progress = preview_progress; } static void preview_progress_disable(preview_data *data) { ufraw_progress = NULL; if (ProgressTimer != NULL) g_timer_destroy(ProgressTimer); render_status_text(data); } void resize_canvas(preview_data *data); static gboolean render_preview_now(preview_data *data) { if (data->FreezeDialog) return FALSE; while (g_idle_remove_by_data(data)) ; data->RenderSubArea = 0; if (data->UF->Images[ufraw_transform_phase].invalidate_event) resize_canvas(data); if (CFG->autoExposure == apply_state) { ufraw_invalidate_layer(data->UF, ufraw_develop_phase); ufraw_auto_expose(data->UF); gdouble lower, upper; g_object_get(data->ExposureAdjustment, "lower", &lower, "upper", &upper, NULL); /* Clip the exposure to prevent a "changed" signal */ if (CFG->exposure > upper) CFG->exposure = upper; if (CFG->exposure < lower) CFG->exposure = lower; gtk_adjustment_set_value(data->ExposureAdjustment, CFG->exposure); gtk_widget_set_sensitive(data->ResetExposureButton, fabs(conf_default.exposure - CFG->exposure) > 0.001); if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; } if (CFG->autoBlack == apply_state) { ufraw_invalidate_layer(data->UF, ufraw_develop_phase); ufraw_auto_black(data->UF); curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); gtk_widget_set_sensitive(data->ResetBlackButton, CFG->curve[CFG->curveIndex].m_anchors[0].x != 0.0 || CFG->curve[CFG->curveIndex].m_anchors[0].y != 0.0); } char text[max_name]; g_snprintf(text, max_name, _("Black point: %0.3lf"), CFG->curve[CFG->curveIndex].m_anchors[0].x); gtk_label_set_text(GTK_LABEL(data->BlackLabel), text); if (CFG->profileIndex[display_profile] == 0) { uf_get_display_profile(data->PreviewWidget, &data->UF->displayProfile, &data->UF->displayProfileSize); } if (CFG->autoCrop == apply_state) { ufraw_invalidate_layer(data->UF, ufraw_transform_phase); ufraw_get_image_dimensions(data->UF); CFG->CropX1 = (data->UF->rotatedWidth - data->UF->autoCropWidth) / 2; CFG->CropX2 = CFG->CropX1 + data->UF->autoCropWidth; CFG->CropY1 = (data->UF->rotatedHeight - data->UF->autoCropHeight) / 2; CFG->CropY2 = CFG->CropY1 + data->UF->autoCropHeight; update_crop_ranges(data, FALSE); CFG->autoCrop = enabled_state; } // We need to freeze the dialog in case an error message pops up in // lcms error handler. data->FreezeDialog = TRUE; ufraw_developer_prepare(data->UF, display_developer); data->FreezeDialog = FALSE; render_init(data); /* This will trigger the untiled phases if necessary. The progress bar * updates require gtk_main_iteration() calls which can only be * done when there are no pending idle tasks which could recurse * into ufraw_convert_image_area(). */ preview_progress_enable(data); data->FreezeDialog = TRUE; ufraw_convert_image_area(data->UF, 0, ufraw_first_phase); data->FreezeDialog = FALSE; preview_progress(PROGRESS_RENDER, -32); // Since we are already inside an idle callback, we should not use // gdk_threads_add_idle_full(). g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_preview_image), data, NULL); return FALSE; } void render_preview(preview_data *data) { while (g_idle_remove_by_data(data)) ; gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_preview_now), data, NULL); } static gboolean render_raw_histogram(preview_data *data) { if (data->FreezeDialog) return FALSE; guint8 pix[99], *p8, pen[4][3]; ufraw_image_type p16; int x, c, cl, y, y0, y1; int raw_his[raw_his_size][4], raw_his_max; int hisHeight = data->RawHisto->allocation.height - 2; hisHeight = MAX(MIN(hisHeight, his_max_height), data->HisMinHeight); GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->RawHisto)); if (pixbuf == NULL || gdk_pixbuf_get_height(pixbuf) != hisHeight + 2) { pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, raw_his_size + 2, hisHeight + 2); gtk_image_set_from_pixbuf(GTK_IMAGE(data->RawHisto), pixbuf); g_object_unref(pixbuf); } int colors = data->UF->colors; guint8 *pixies = gdk_pixbuf_get_pixels(pixbuf); int rowstride = gdk_pixbuf_get_rowstride(pixbuf); memset(pixies, 0, (gdk_pixbuf_get_height(pixbuf) - 1)*rowstride + gdk_pixbuf_get_width(pixbuf)*gdk_pixbuf_get_n_channels(pixbuf)); /* Normalize raw histogram data */ for (x = 0, raw_his_max = 1; x < raw_his_size; x++) { for (c = 0, y = 0; c < colors; c++) { if (CFG->rawHistogramScale == log_histogram) raw_his[x][c] = log(1 + data->raw_his[x][c]) * 1000; else raw_his[x][c] = data->raw_his[x][c]; y += raw_his[x][c]; } raw_his_max = MAX(raw_his_max, y); } /* Prepare pen color, which is not effected by exposure. * Use a small value to avoid highlights and then normalize. */ for (c = 0; c < colors; c++) { for (cl = 0; cl < colors; cl++) p16[cl] = 0; p16[c] = Developer->max * 0x08000 / Developer->rgbWB[c] * 0x10000 / Developer->exposure; develop(pen[c], p16, Developer, 8, 1); guint8 max = 1; for (cl = 0; cl < 3; cl++) max = MAX(pen[c][cl], max); for (cl = 0; cl < 3; cl++) pen[c][cl] = pen[c][cl] * 0xff / max; } /* Calculate the curves */ p8 = pix; guint8 grayCurve[raw_his_size + 1][4]; guint8 pureCurve[raw_his_size + 1][4]; for (x = 0; x < raw_his_size + 1; x++) { for (c = 0; c < colors; c++) { /* Value for pixel x of color c in a gray pixel */ for (cl = 0; cl < colors; cl++) p16[cl] = MIN((guint64)x * Developer->rgbMax * Developer->rgbWB[c] / Developer->rgbWB[cl] / raw_his_size, 0xFFFF); develop(p8, p16, Developer, 8, 1); grayCurve[x][c] = MAX(MAX(p8[0], p8[1]), p8[2]) * (hisHeight - 1) / MAXOUT; /* Value for pixel x of pure color c */ p16[0] = p16[1] = p16[2] = p16[3] = 0; p16[c] = MIN((guint64)x * Developer->rgbMax / raw_his_size, 0xFFFF); develop(p8, p16, Developer, 8, 1); pureCurve[x][c] = MAX(MAX(p8[0], p8[1]), p8[2]) * (hisHeight - 1) / MAXOUT; } } for (x = 0; x < raw_his_size; x++) { /* draw the raw histogram */ for (c = 0, y0 = 0; c < colors; c++) { for (y = 0; y < raw_his[x][c]*hisHeight / raw_his_max; y++) for (cl = 0; cl < 3; cl++) pixies[(hisHeight - y - y0)*rowstride + 3 * (x + 1) + cl] = pen[c][cl]; y0 += y; } /* draw curves on the raw histogram */ for (c = 0; c < colors; c++) { y = grayCurve[x][c]; y1 = grayCurve[x + 1][c]; for (; y <= y1; y++) for (cl = 0; cl < 3; cl++) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + cl] = pen[c][cl]; y1 = pureCurve[x][c]; for (; y < y1; y++) for (cl = 0; cl < 3; cl++) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + cl] = pen[c][cl] / 2; y1 = pureCurve[x + 1][c]; for (; y <= y1; y++) for (cl = 0; cl < 3; cl++) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + cl] = pen[c][cl]; } } gtk_widget_queue_draw(data->RawHisto); return FALSE; } static int choose_subarea(preview_data *data, int *chosen) { int subarea = -1; int max_area = -1; /* First of all, find the maximally visible yet unrendered subarea. * Refreshing visible subareas in the first place improves visual * feedback and overall user experience. */ ufraw_image_data *img = ufraw_get_image(data->UF, ufraw_display_phase, FALSE); GdkRectangle viewport; gtk_image_view_get_viewport( GTK_IMAGE_VIEW(data->PreviewWidget), &viewport); int i; for (i = 0; i < 32; i++) { /* Skip valid subareas */ if (img->valid & (1 << i)) continue; /* Skip areas chosen by other threads */ if (*chosen & (1 << i)) continue; UFRectangle rec = ufraw_image_get_subarea_rectangle(img, i); gboolean noclip = TRUE; if (rec.x < viewport.x) { rec.width -= (viewport.x - rec.x); rec.x = viewport.x; noclip = FALSE; } if (rec.x + rec.width > viewport.x + viewport.width) { rec.width = viewport.x + viewport.width - rec.x; noclip = FALSE; } if (rec.y < viewport.y) { rec.height -= (viewport.y - rec.y); rec.y = viewport.y; noclip = FALSE; } if (rec.y + rec.height > viewport.y + viewport.height) { rec.height = viewport.y + viewport.height - rec.y; noclip = FALSE; } /* Compute the visible area of the subarea */ int area = (rec.width > 0 && rec.height > 0) ? rec.width * rec.height : 0; if (area > max_area) { max_area = area; subarea = i; /* If this area is fully visible, stop searching */ if (noclip) break; } } if (subarea >= 0) *chosen |= 1 << subarea; return subarea; } /* * render_preview_image() is called after all non-tiled phases are rendered. * * OpenMP notes: * * Unfortunately ufraw_convert_image_area() still has some OpenMP awareness * which is related to OpenMP here. That should not be necessary. */ static gboolean render_preview_image(preview_data *data) { gboolean again = FALSE; int chosen = 0; if (data->FreezeDialog) return FALSE; int subarea[uf_omp_get_max_threads()]; int i; for (i = 0; i < uf_omp_get_max_threads(); i++) subarea[i] = -1; #ifdef _OPENMP #pragma omp parallel shared(chosen,data) reduction(||:again) { #pragma omp critical #endif subarea[uf_omp_get_thread_num()] = choose_subarea(data, &chosen); if (subarea[uf_omp_get_thread_num()] < 0) { data->RenderSubArea = -1; } else { ufraw_convert_image_area(data->UF, subarea[uf_omp_get_thread_num()], ufraw_phases_num - 1); again = TRUE; } #ifdef _OPENMP } #endif ufraw_image_data *img = ufraw_get_image(data->UF, ufraw_display_phase, FALSE); for (i = 0; i < uf_omp_get_max_threads(); i++) { if (subarea[i] >= 0) { UFRectangle area = ufraw_image_get_subarea_rectangle(img, subarea[i]); preview_draw_area(data, area.x, area.y, area.width, area.height); progress(PROGRESS_RENDER, 1); } } if (!again) { preview_progress_disable(data); gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_raw_histogram), data, NULL); gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_live_histogram), data, NULL); gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_spot), data, NULL); } return again; } static gboolean render_live_histogram(preview_data *data) { if (data->FreezeDialog) return FALSE; int x, y, c, min, max; ufraw_image_data *img = ufraw_get_image(data->UF, ufraw_develop_phase, TRUE); UFRectangle Crop; ufraw_get_scaled_crop(data->UF, &Crop); double rgb[3]; guint64 sum[3], sqr[3]; int live_his[live_his_size][4]; memset(live_his, 0, sizeof(live_his)); for (y = Crop.y; y < Crop.y + Crop.height; y++) for (x = Crop.x; x < Crop.x + Crop.width; x++) { guint8 *p8 = img->buffer + y * img->rowstride + x * img->depth; for (c = 0, max = 0, min = 0x100; c < 3; c++) { max = MAX(max, p8[c]); min = MIN(min, p8[c]); live_his[p8[c]][c]++; } if (CFG->histogram == luminosity_histogram) live_his[(int)(0.3 * p8[0] + 0.59 * p8[1] + 0.11 * p8[2])][3]++; if (CFG->histogram == value_histogram) live_his[max][3]++; if (CFG->histogram == saturation_histogram) { if (max == 0) live_his[0][3]++; else live_his[255 * (max - min) / max][3]++; } } int hisHeight = MIN(data->LiveHisto->allocation.height - 2, his_max_height); hisHeight = MAX(hisHeight, data->HisMinHeight); GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->LiveHisto)); if (pixbuf == NULL || gdk_pixbuf_get_height(pixbuf) != hisHeight + 2) { pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, live_his_size + 2, hisHeight + 2); gtk_image_set_from_pixbuf(GTK_IMAGE(data->LiveHisto), pixbuf); g_object_unref(pixbuf); } guint8 *pixies = gdk_pixbuf_get_pixels(pixbuf); int rowstride = gdk_pixbuf_get_rowstride(pixbuf); memset(pixies, 0, (gdk_pixbuf_get_height(pixbuf) - 1)*rowstride + gdk_pixbuf_get_width(pixbuf)*gdk_pixbuf_get_n_channels(pixbuf)); for (c = 0; c < 3; c++) { sum[c] = 0; sqr[c] = 0; for (x = 1; x < live_his_size; x++) { sum[c] += x * live_his[x][c]; sqr[c] += (guint64)x * x * live_his[x][c]; } } int live_his_max; for (x = 1, live_his_max = 1; x < live_his_size - 1; x++) { if (CFG->liveHistogramScale == log_histogram) for (c = 0; c < 4; c++) live_his[x][c] = log(1 + live_his[x][c]) * 1000; if (CFG->histogram == rgb_histogram) for (c = 0; c < 3; c++) live_his_max = MAX(live_his_max, live_his[x][c]); else if (CFG->histogram == r_g_b_histogram) live_his_max = MAX(live_his_max, live_his[x][0] + live_his[x][1] + live_his[x][2]); else live_his_max = MAX(live_his_max, live_his[x][3]); } for (x = 0; x < live_his_size; x++) for (y = 0; y < hisHeight; y++) if (CFG->histogram == r_g_b_histogram) { if (y * live_his_max < live_his[x][0]*hisHeight) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + 0] = 255; else if (y * live_his_max < (live_his[x][0] + live_his[x][1])*hisHeight) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + 1] = 255; else if (y * live_his_max < (live_his[x][0] + live_his[x][1] + live_his[x][2]) *hisHeight) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + 2] = 255; } else { for (c = 0; c < 3; c++) if (CFG->histogram == rgb_histogram) { if (y * live_his_max < live_his[x][c]*hisHeight) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + c] = 255; } else { if (y * live_his_max < live_his[x][3]*hisHeight) pixies[(hisHeight - y)*rowstride + 3 * (x + 1) + c] = 255; } } /* draw vertical line at quarters "behind" the live histogram */ for (y = -1; y < hisHeight + 1; y++) for (x = 64; x < 255; x += 64) { guint8 *pix = pixies + (hisHeight - y) * rowstride + 3 * (x + 1); if (pix[0] == 0 && pix[1] == 0 && pix[2] == 0) for (c = 0; c < 3; c++) pix[c] = 96; /* gray */ } gtk_widget_queue_draw(data->LiveHisto); int CropCount = Crop.width * Crop.height; for (c = 0; c < 3; c++) rgb[c] = sum[c] / CropCount; color_labels_set(data->AvrLabels, rgb); for (c = 0; c < 3; c++) rgb[c] = sqrt(sqr[c] / CropCount - rgb[c] * rgb[c]); color_labels_set(data->DevLabels, rgb); for (c = 0; c < 3; c++) rgb[c] = 100.0 * live_his[live_his_size - 1][c] / CropCount; color_labels_set(data->OverLabels, rgb); for (c = 0; c < 3; c++) rgb[c] = 100.0 * live_his[0][c] / CropCount; color_labels_set(data->UnderLabels, rgb); gchar buf[20]; g_snprintf(buf, sizeof(buf), "%d", data->UF->hotpixels); gtk_label_set_text(data->HotpixelCount, buf); return FALSE; } struct spot { int StartY; int EndY; int StartX; int EndX; int Size; }; static void calculate_spot(preview_data *data, struct spot *spot, int width, int height) { int spotHeight = abs(data->SpotY1 - data->SpotY2) * height / data->UF->rotatedHeight + 1; spot->StartY = MIN(data->SpotY1, data->SpotY2) * height / data->UF->rotatedHeight; if (spotHeight + spot->StartY > height) spot->StartY = height - spotHeight; spot->EndY = spot->StartY + spotHeight; int spotWidth = abs(data->SpotX1 - data->SpotX2) * width / data->UF->rotatedWidth + 1; spot->StartX = MIN(data->SpotX1, data->SpotX2) * width / data->UF->rotatedWidth; if (spotWidth + spot->StartX > width) spot->StartX = width - spotWidth; spot->EndX = spot->StartX + spotWidth; spot->Size = spotWidth * spotHeight; } static gboolean render_spot(preview_data *data) { if (data->FreezeDialog) return FALSE; if (data->SpotX1 < 0) return FALSE; if (data->SpotX1 >= data->UF->rotatedWidth || data->SpotY1 >= data->UF->rotatedHeight) return FALSE; ufraw_image_data *img = ufraw_get_image(data->UF, ufraw_develop_phase, TRUE); int width = img->width; int height = img->height; int outDepth = img->depth; void *outBuffer = img->buffer; img = ufraw_get_image(data->UF, ufraw_transform_phase, TRUE); int rawDepth = img->depth; void *rawBuffer = img->buffer; /* We assume that transform_phase and develop_phase buffer sizes are the * same. */ /* Scale image coordinates to Images[ufraw_develop_phase] coordinates */ /* TODO: explain and cleanup if necessary */ struct spot spot; calculate_spot(data, &spot, width, height); guint64 rawSum[4], outSum[3]; int c, y, x; for (c = 0; c < 3; c++) rawSum[c] = outSum[c] = 0; for (y = spot.StartY; y < spot.EndY; y++) { guint16 *rawPixie = rawBuffer + (y * width + spot.StartX) * rawDepth; guint8 *outPixie = outBuffer + (y * width + spot.StartX) * outDepth; for (x = spot.StartX; x < spot.EndX; x++, rawPixie += rawDepth / 2, outPixie += outDepth) { for (c = 0; c < data->UF->colors; c++) rawSum[c] += rawPixie[c]; for (c = 0; c < 3; c++) outSum[c] += outPixie[c]; } } double rgb[5]; for (c = 0; c < 3; c++) rgb[c] = outSum[c] / spot.Size; /* * Convert RGB pixel value to 0-1 space, intending to represent, * absent contrast manipulation and color issues, luminance relative * to an 18% grey card at 0.18. * The RGB color space is approximately linearized sRGB as it is not * affected from the ICC profile. */ guint16 rawChannels[4], linearChannels[3]; for (c = 0; c < data->UF->colors; c++) rawChannels[c] = rawSum[c] / spot.Size; develop_linear(rawChannels, linearChannels, Developer); double yValue = 0.5; extern const double xyz_rgb[3][3]; for (c = 0; c < 3; c++) yValue += xyz_rgb[1][c] * linearChannels[c]; yValue /= 0xFFFF; if (Developer->clipHighlights == film_highlights) yValue *= (double)Developer->exposure / 0x10000; rgb[3] = yValue; rgb[4] = value2zone(yValue); color_labels_set(data->SpotLabels, rgb); char tmp[max_name]; g_snprintf(tmp, max_name, "" " ", (int)rgb[0], (int)rgb[1], (int)rgb[2]); gtk_label_set_markup(data->SpotPatch, tmp); gtk_widget_show(GTK_WIDGET(data->SpotTable)); if (data->PageNum != data->PageNumCrop) draw_spot(data, TRUE); return FALSE; } static void close_spot(GtkWidget *widget, gpointer user_data) { (void)user_data; preview_data *data = get_preview_data(widget); draw_spot(data, FALSE); data->SpotX1 = -1; gtk_widget_hide(GTK_WIDGET(data->SpotTable)); } static void draw_spot(preview_data *data, gboolean draw) { if (data->SpotX1 < 0) return; int width = gdk_pixbuf_get_width(data->PreviewPixbuf); int height = gdk_pixbuf_get_height(data->PreviewPixbuf); data->SpotDraw = draw; /* Scale spot image coordinates to pixbuf coordinates */ int SpotY1 = MAX(MIN(data->SpotY1, data->SpotY2) * height / data->UF->rotatedHeight - 1, 0); int SpotY2 = MIN(MAX(data->SpotY1, data->SpotY2) * height / data->UF->rotatedHeight + 1, height - 1); int SpotX1 = MAX(MIN(data->SpotX1, data->SpotX2) * width / data->UF->rotatedWidth - 1, 0); int SpotX2 = MIN(MAX(data->SpotX1, data->SpotX2) * width / data->UF->rotatedWidth + 1, width - 1); preview_draw_area(data, SpotX1, SpotY1, SpotX2 - SpotX1 + 1, 1); preview_draw_area(data, SpotX1, SpotY2, SpotX2 - SpotX1 + 1, 1); preview_draw_area(data, SpotX1, SpotY1, 1, SpotY2 - SpotY1 + 1); preview_draw_area(data, SpotX2, SpotY1, 1, SpotY2 - SpotY1 + 1); } static void lch_to_color(float lch[3], GdkColor *color) { gint64 rgb[3]; uf_cielch_to_rgb(lch, rgb); color->red = pow((double)MIN(rgb[0], 0xFFFF) / 0xFFFF, 0.45) * 0xFFFF; color->green = pow((double)MIN(rgb[1], 0xFFFF) / 0xFFFF, 0.45) * 0xFFFF; color->blue = pow((double)MIN(rgb[2], 0xFFFF) / 0xFFFF, 0.45) * 0xFFFF; } static void widget_set_hue(GtkWidget *widget, double hue) { float lch[3]; GdkColor hueColor; lch[1] = 181.019336; // max_colorfulness = sqrt(128*128+128*128) lch[2] = hue * M_PI / 180; lch[0] = 0.75 * 100.0; // max_luminance = 100 lch_to_color(lch, &hueColor); gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &hueColor); lch[0] = 1.0 * 100.0; // max_luminance = 100 lch_to_color(lch, &hueColor); gtk_widget_modify_bg(widget, GTK_STATE_PRELIGHT, &hueColor); lch[0] = 0.5 * 100.0; // max_luminance = 100 lch_to_color(lch, &hueColor); gtk_widget_modify_bg(widget, GTK_STATE_ACTIVE, &hueColor); } static void update_shrink_ranges(preview_data *data); static void despeckle_update_sensitive(preview_data *data); /* update the UI entries that could have changed automatically */ static void update_scales(preview_data *data) { if (data->FreezeDialog) return; data->FreezeDialog = TRUE; if (CFG->BaseCurveIndex > camera_curve && !CFG_cameraCurve) gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex - 2); else gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex); gtk_combo_box_set_active(data->CurveCombo, CFG->curveIndex); int i; double max; char tmp[max_name]; gtk_adjustment_set_value(data->ExposureAdjustment, CFG->exposure); gtk_adjustment_set_value(data->ThresholdAdjustment, CFG->threshold); gtk_adjustment_set_value(data->HotpixelAdjustment, CFG->hotpixel); #ifdef UFRAW_CONTRAST gtk_adjustment_set_value(data->ContrastAdjustment, CFG->contrast); #endif gtk_adjustment_set_value(data->SaturationAdjustment, CFG->saturation); gtk_adjustment_set_value(data->GammaAdjustment, CFG->profile[0][CFG->profileIndex[0]].gamma); gtk_adjustment_set_value(data->LinearAdjustment, CFG->profile[0][CFG->profileIndex[0]].linear); uf_combo_box_set_data(data->BitDepthCombo, &CFG->profile[out_profile][CFG->profileIndex[out_profile]].BitDepth); curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); gtk_widget_set_sensitive(data->ResetGammaButton, fabs(profile_default_gamma(&CFG->profile[0][CFG->profileIndex[0]]) - CFG->profile[0][CFG->profileIndex[0]].gamma) > 0.001); gtk_widget_set_sensitive(data->ResetLinearButton, fabs(profile_default_linear(&CFG->profile[0][CFG->profileIndex[0]]) - CFG->profile[0][CFG->profileIndex[0]].linear) > 0.001); gtk_widget_set_sensitive(data->ResetExposureButton, fabs(conf_default.exposure - CFG->exposure) > 0.001); gtk_widget_set_sensitive(data->ResetThresholdButton, fabs(conf_default.threshold - CFG->threshold) > 1); gtk_widget_set_sensitive(data->ResetHotpixelButton, fabs(conf_default.hotpixel - CFG->hotpixel) > 0); #ifdef UFRAW_CONTRAST gtk_widget_set_sensitive(data->ResetContrastButton, fabs(conf_default.contrast - CFG->contrast) > 0.001); #endif gtk_widget_set_sensitive(data->ResetSaturationButton, fabs(conf_default.saturation - CFG->saturation) > 0.001); gtk_widget_set_sensitive(data->ResetBaseCurveButton, CFG->BaseCurve[CFG->BaseCurveIndex].m_numAnchors > 2 || CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[0].x != 0.0 || CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[0].y != 0.0 || CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[1].x != 1.0 || CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[1].y != 1.0); gtk_widget_set_sensitive(data->ResetBlackButton, CFG->curve[CFG->curveIndex].m_anchors[0].x != 0.0 || CFG->curve[CFG->curveIndex].m_anchors[0].y != 0.0); gtk_widget_set_sensitive(data->ResetCurveButton, CFG->curve[CFG->curveIndex].m_numAnchors > 2 || CFG->curve[CFG->curveIndex].m_anchors[1].x != 1.0 || CFG->curve[CFG->curveIndex].m_anchors[1].y != 1.0); for (i = 0; i < 3; ++i) gtk_adjustment_set_value(data->GrayscaleMixers[i], CFG->grayscaleMixer[i]); for (i = 0; i < data->UF->colors; ++i) { gtk_adjustment_set_value(data->DespeckleWindowAdj[i], CFG->despeckleWindow[i]); gtk_adjustment_set_value(data->DespeckleDecayAdj[i], CFG->despeckleDecay[i]); gtk_adjustment_set_value(data->DespecklePassesAdj[i], CFG->despecklePasses[i]); } for (i = 0; i < CFG->lightnessAdjustmentCount; ++i) { gtk_adjustment_set_value(data->LightnessAdjustment[i], CFG->lightnessAdjustment[i].adjustment); gtk_widget_set_sensitive(data->ResetLightnessAdjustmentButton[i], fabs(CFG->lightnessAdjustment[i].adjustment - 1.0) >= 0.01); } gtk_widget_set_sensitive(data->ResetGrayscaleChannelMixerButton, (CFG->grayscaleMixer[0] != conf_default.grayscaleMixer[0]) || (CFG->grayscaleMixer[1] != conf_default.grayscaleMixer[1]) || (CFG->grayscaleMixer[2] != conf_default.grayscaleMixer[2])); gtk_widget_set_sensitive(GTK_WIDGET(data->GrayscaleMixerTable), CFG->grayscaleMode == grayscale_mixer); despeckle_update_sensitive(data); for (max = 1, i = 0; i < 3; ++i) max = MAX(max, CFG->grayscaleMixer[i]); g_snprintf(tmp, max_name, "" " ", (int)(MAX(CFG->grayscaleMixer[0], 0) / max * 255), (int)(MAX(CFG->grayscaleMixer[1], 0) / max * 255), (int)(MAX(CFG->grayscaleMixer[2], 0) / max * 255)); gtk_label_set_markup(data->GrayscaleMixerColor, tmp); data->FreezeDialog = FALSE; update_shrink_ranges(data); render_preview(data); } static void auto_button_toggle(GtkToggleButton *button, gboolean *valuep) { if (gtk_toggle_button_get_active(button)) { /* the button is inactive most of the time, clicking on it activates it, but we immediately deactivate it here so this function is called again recursively via callback from gtk_toggle_button_set_active */ *valuep = !*valuep; gtk_toggle_button_set_active(button, FALSE); } /* if this function is called directly, the condition above is false and we only update the button image */ if (*valuep) gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( "object-automatic", GTK_ICON_SIZE_BUTTON)); else gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( "object-manual", GTK_ICON_SIZE_BUTTON)); } static void curve_update(GtkWidget *widget, long curveType) { preview_data *data = get_preview_data(widget); if (curveType == base_curve) { CFG->BaseCurveIndex = manual_curve; CFG->BaseCurve[CFG->BaseCurveIndex] = *curveeditor_widget_get_curve(data->BaseCurveWidget); if (CFG->autoExposure == enabled_state) CFG->autoExposure = apply_state; if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; } else { CFG->curveIndex = manual_curve; CFG->curve[CFG->curveIndex] = *curveeditor_widget_get_curve(data->CurveWidget); CFG->autoBlack = FALSE; auto_button_toggle(data->AutoBlackButton, &CFG->autoBlack); } ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static void spot_wb_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); struct spot spot; int width, height, x, y, c; guint64 rgb[4]; user_data = user_data; if (data->FreezeDialog) return; if (data->SpotX1 <= 0) return; width = gdk_pixbuf_get_width(data->PreviewPixbuf); height = gdk_pixbuf_get_height(data->PreviewPixbuf); /* Scale image coordinates to pixbuf coordinates */ calculate_spot(data, &spot, width, height); ufraw_image_data *image = ufraw_get_image(data->UF, ufraw_transform_phase, TRUE); for (c = 0; c < 4; c++) rgb[c] = 0; for (y = spot.StartY; y < spot.EndY; y++) for (x = spot.StartX; x < spot.EndX; x++) { guint16 *pixie = (guint16*)(image->buffer + (y * image->width + x) * image->depth); for (c = 0; c < data->UF->colors; c++) rgb[c] += pixie[c]; } for (c = 0; c < 4; c++) rgb[c] = MAX(rgb[c], 1); double chanMulArray[4]; for (c = 0; c < data->UF->colors; c++) chanMulArray[c] = (double)spot.Size * data->UF->rgbMax / rgb[c]; if (data->UF->colors < 4) chanMulArray[3] = chanMulArray[1]; UFObject *chanMul = ufgroup_element(CFG->ufobject, ufChannelMultipliers); ufnumber_array_set(chanMul, chanMulArray); } static void remove_hue_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); long i = (long)user_data; for (; i < CFG->lightnessAdjustmentCount - 1; i++) { CFG->lightnessAdjustment[i] = CFG->lightnessAdjustment[i + 1]; widget_set_hue(data->LightnessHueSelectButton[i], CFG->lightnessAdjustment[i].hue); } CFG->lightnessAdjustment[i] = conf_default.lightnessAdjustment[i]; gtk_widget_hide(GTK_WIDGET(data->LightnessAdjustmentTable[i])); CFG->lightnessAdjustmentCount--; ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static void calculate_hue(preview_data *data, int i) { ufraw_image_data *img = ufraw_get_image(data->UF, ufraw_transform_phase, FALSE); int width = img->width; int height = img->height; int rawDepth = img->depth; void *rawBuffer = img->buffer; struct spot spot; /* TODO: explain and cleanup if necessary */ calculate_spot(data, &spot, width, height); guint64 rawSum[4]; int c, y, x; for (c = 0; c < 3; c++) rawSum[c] = 0; for (y = spot.StartY; y < spot.EndY; y++) { guint16 *rawPixie = rawBuffer + (y * width + spot.StartX) * rawDepth; for (x = spot.StartX; x < spot.EndX; x++, rawPixie += rawDepth) { for (c = 0; c < data->UF->colors; c++) rawSum[c] += rawPixie[c]; } } guint16 rawChannels[4]; for (c = 0; c < data->UF->colors; c++) rawChannels[c] = rawSum[c] / spot.Size; float lch[3]; uf_raw_to_cielch(Developer, rawChannels, lch); CFG->lightnessAdjustment[i].hue = lch[2]; double hue = lch[2]; double sum = 0; for (y = spot.StartY; y < spot.EndY; y++) { guint16 *rawPixie = rawBuffer + (y * width + spot.StartX) * rawDepth; for (x = spot.StartX; x < spot.EndX; x++, rawPixie += rawDepth) { uf_raw_to_cielch(Developer, rawPixie, lch); double diff = fabs(hue - lch[2]); if (diff > 180.0) diff = 360.0 - diff; sum += diff * diff; } } double stddev = sqrt(sum / spot.Size); CFG->lightnessAdjustment[i].hueWidth = MIN(stddev * 2, 60); } static void select_hue_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); long i = (long)user_data; if (data->FreezeDialog) return; if (data->SpotX1 == -1) return; if (i < 0) { if (CFG->lightnessAdjustmentCount >= max_adjustments) { ufraw_message(UFRAW_ERROR, _("No more room for new lightness adjustments.")); return; } i = CFG->lightnessAdjustmentCount++; } calculate_hue(data, i); widget_set_hue(data->LightnessHueSelectButton[i], CFG->lightnessAdjustment[i].hue); gtk_widget_show_all(GTK_WIDGET(data->LightnessAdjustmentTable[i])); ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static void event_coordinate_rescale(gdouble *x, gdouble *y, preview_data *data) { int width = gdk_pixbuf_get_width(data->PreviewPixbuf); int height = gdk_pixbuf_get_height(data->PreviewPixbuf); /* Find location of event in the view. */ GdkRectangle viewRect; gtk_image_view_get_viewport(GTK_IMAGE_VIEW(data->PreviewWidget), &viewRect); int viewWidth = data->PreviewWidget->allocation.width; int viewHeight = data->PreviewWidget->allocation.height; if (viewWidth < width) { *x += viewRect.x; } else { *x -= (viewWidth - width) / 2; } if (viewHeight < height) { *y += viewRect.y; } else { *y -= (viewHeight - height) / 2; } if (*x < 0) *x = 0; if (*x > width) *x = width; if (*y < 0) *y = 0; if (*y > height) *y = height; /* Scale pixbuf coordinates to image coordinates */ double zoom = gtk_image_view_get_zoom(GTK_IMAGE_VIEW(data->PreviewWidget)); *x = *x * data->UF->rotatedWidth / width / zoom; *y = *y * data->UF->rotatedHeight / height / zoom; } static gboolean preview_button_press_event(GtkWidget *event_box, GdkEventButton *event, gpointer user_data) { preview_data *data = get_preview_data(event_box); (void)user_data; if (data->FreezeDialog) return FALSE; if (event->button != 1) return FALSE; event_coordinate_rescale(&event->x, &event->y, data); if (data->PageNum == data->PageNumSpot || data->PageNum == data->PageNumLightness || data->PageNum == data->PageNumGray) { data->PreviewButtonPressed = TRUE; draw_spot(data, FALSE); data->SpotX1 = data->SpotX2 = event->x; data->SpotY1 = data->SpotY2 = event->y; if (!is_rendering(data)) gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_spot), data, NULL); return TRUE; } if (data->PageNum == data->PageNumCrop || data->PageNum == data->PageNumLensfun) { data->PreviewButtonPressed = TRUE; return TRUE; } return FALSE; } static gboolean preview_button_release_event(GtkWidget *event_box, GdkEventButton *event, gpointer user_data) { preview_data *data = get_preview_data(event_box); (void)user_data; if (event->button != 1) return FALSE; data->PreviewButtonPressed = FALSE; return TRUE; } static void fix_crop_aspect(preview_data *data, CursorType cursor, gboolean render); static void set_new_aspect(preview_data *data); static void refresh_aspect(preview_data *data); static gboolean crop_motion_notify(preview_data *data, GdkEventMotion *event) { event_coordinate_rescale(&event->x, &event->y, data); int x = event->x; int y = event->y; int pixbufHeight = gdk_pixbuf_get_height(data->PreviewPixbuf); int pixbufWidth = gdk_pixbuf_get_width(data->PreviewPixbuf); int sideSizeX = MIN(16 * data->UF->rotatedWidth / pixbufWidth, (CFG->CropX2 - CFG->CropX1) / 3); int sideSizeY = MIN(16 * data->UF->rotatedHeight / pixbufHeight, (CFG->CropY2 - CFG->CropY1) / 3); if ((event->state & GDK_BUTTON1_MASK) == 0) { // While mouse button is not clicked we set the cursor type // according to mouse pointer location. const CursorType tr_cursor[16] = { crop_cursor, crop_cursor, crop_cursor, crop_cursor, crop_cursor, top_left_cursor, left_cursor, bottom_left_cursor, crop_cursor, top_cursor, move_cursor, bottom_cursor, crop_cursor, top_right_cursor, right_cursor, bottom_right_cursor }; int sel_cursor = 0; if (y >= CFG->CropY1 - 1) { if (y < CFG->CropY1 + sideSizeY) sel_cursor |= 1; else if (y <= CFG->CropY2 - sideSizeY) sel_cursor |= 2; else if (y <= CFG->CropY2) sel_cursor |= 3; } if (x >= CFG->CropX1 - 1) { if (x < CFG->CropX1 + sideSizeX) sel_cursor |= 4; else if (x <= CFG->CropX2 - sideSizeX) sel_cursor |= 8; else if (x <= CFG->CropX2) sel_cursor |= 12; } data->CropMotionType = tr_cursor[sel_cursor]; GtkWidget *event_box = gtk_widget_get_ancestor(data->PreviewWidget, GTK_TYPE_EVENT_BOX); gdk_window_set_cursor(event_box->window, data->Cursor[data->CropMotionType]); } else { // While mouse button is clicked we change crop according to cursor // type and mouse pointer location. if (data->CropMotionType == top_cursor || data->CropMotionType == top_left_cursor || data->CropMotionType == top_right_cursor) if (y < CFG->CropY2) CFG->CropY1 = y; if (data->CropMotionType == bottom_cursor || data->CropMotionType == bottom_left_cursor || data->CropMotionType == bottom_right_cursor) if (y > CFG->CropY1) CFG->CropY2 = y; if (data->CropMotionType == left_cursor || data->CropMotionType == top_left_cursor || data->CropMotionType == bottom_left_cursor) if (x < CFG->CropX2) CFG->CropX1 = x; if (data->CropMotionType == right_cursor || data->CropMotionType == top_right_cursor || data->CropMotionType == bottom_right_cursor) if (x > CFG->CropX1) CFG->CropX2 = x; if (data->CropMotionType == move_cursor) { int d = x - data->OldMouseX; if (CFG->CropX1 + d < 0) d = -CFG->CropX1; if (CFG->CropX2 + d >= data->UF->rotatedWidth) d = data->UF->rotatedWidth - CFG->CropX2; CFG->CropX1 += d; CFG->CropX2 += d; d = y - data->OldMouseY; if (CFG->CropY1 + d < 0) d = -CFG->CropY1; if (CFG->CropY2 + d >= data->UF->rotatedHeight) d = data->UF->rotatedHeight - CFG->CropY2; CFG->CropY1 += d; CFG->CropY2 += d; } if (data->CropMotionType != crop_cursor) { fix_crop_aspect(data, data->CropMotionType, TRUE); CFG->autoCrop = disabled_state; auto_button_toggle(data->AutoCropButton, &CFG->autoCrop); } } data->OldMouseX = x; data->OldMouseY = y; return TRUE; } static gboolean preview_motion_notify_event(GtkWidget *event_box, GdkEventMotion *event, gpointer user_data) { preview_data *data = get_preview_data(event_box); (void)user_data; if (!gtk_event_box_get_above_child(GTK_EVENT_BOX(event_box))) return FALSE; if (data->PageNum == data->PageNumCrop || data->PageNum == data->PageNumLensfun) return crop_motion_notify(data, event); if ((event->state & GDK_BUTTON1_MASK) == 0) return FALSE; if (!data->PreviewButtonPressed) return FALSE; draw_spot(data, FALSE); event_coordinate_rescale(&event->x, &event->y, data); data->SpotX2 = event->x; data->SpotY2 = event->y; if (!is_rendering(data)) gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_spot), data, NULL); return TRUE; } static gboolean(*gtk_image_view_scroll_event)(GtkWidget *widget, GdkEventScroll *event); static gboolean preview_scroll_event(GtkWidget *widget, GdkEventScroll *event) { // GtkImageView only knows how to handle scroll up or down // We also disable Ctrl+scroll which activates the zoom if ((event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_DOWN) && event->state & GDK_CONTROL_MASK) (*gtk_image_view_scroll_event)(widget, event); return TRUE; } static void update_shrink_ranges(preview_data *data) { if (data->FreezeDialog) return; data->FreezeDialog++; int croppedWidth = CFG->CropX2 - CFG->CropX1; int croppedHeight = CFG->CropY2 - CFG->CropY1; if (data->shrink != 0 && fabs(data->shrink - floor(data->shrink + 0.0005)) < 0.0005) { data->shrink = floor(data->shrink + 0.0005); data->height = croppedHeight / data->shrink; data->width = croppedWidth / data->shrink; } else { int size = floor(MAX(data->height, data->width) + 0.5); if (croppedHeight > croppedWidth) { data->height = size; data->width = size * croppedWidth / croppedHeight; data->shrink = (double)croppedHeight / size; } else { data->width = size; data->height = size * croppedHeight / croppedWidth; data->shrink = (double)croppedWidth / size; } } gtk_spin_button_set_range(data->HeightSpin, 10, croppedHeight); gtk_spin_button_set_range(data->WidthSpin, 10, croppedWidth); gtk_adjustment_set_value(data->ShrinkAdjustment, data->shrink); gtk_adjustment_set_value(data->HeightAdjustment, data->height); gtk_adjustment_set_value(data->WidthAdjustment, data->width); data->FreezeDialog--; } static void update_crop_ranges(preview_data *data, gboolean render) { if (data->FreezeDialog) return; /* Avoid recursive handling of the same event */ data->FreezeDialog++; gtk_spin_button_set_range(data->CropX1Spin, 0, CFG->CropX2 - 1); gtk_spin_button_set_range(data->CropY1Spin, 0, CFG->CropY2 - 1); gtk_spin_button_set_range(data->CropX2Spin, CFG->CropX1 + 1, data->UF->rotatedWidth); gtk_spin_button_set_range(data->CropY2Spin, CFG->CropY1 + 1, data->UF->rotatedHeight); gtk_adjustment_set_value(data->CropX1Adjustment, CFG->CropX1); gtk_adjustment_set_value(data->CropY1Adjustment, CFG->CropY1); gtk_adjustment_set_value(data->CropX2Adjustment, CFG->CropX2); gtk_adjustment_set_value(data->CropY2Adjustment, CFG->CropY2); data->FreezeDialog--; UFRectangle Crop; ufraw_get_scaled_crop(data->UF, &Crop); int CropX2 = Crop.x + Crop.width; int CropY2 = Crop.y + Crop.height; int x1[4], x2[4], y1[4], y2[4], i = 0; if (Crop.x != data->DrawnCropX1) { x1[i] = MIN(Crop.x, data->DrawnCropX1); x2[i] = MAX(Crop.x, data->DrawnCropX1); y1[i] = MIN(Crop.y, data->DrawnCropY1); y2[i] = MAX(CropY2, data->DrawnCropY2); data->DrawnCropX1 = Crop.x; i++; } if (CropX2 != data->DrawnCropX2) { x1[i] = MIN(CropX2, data->DrawnCropX2); x2[i] = MAX(CropX2, data->DrawnCropX2); y1[i] = MIN(Crop.y, data->DrawnCropY1); y2[i] = MAX(CropY2, data->DrawnCropY2); data->DrawnCropX2 = CropX2; i++; } if (Crop.y != data->DrawnCropY1) { y1[i] = MIN(Crop.y, data->DrawnCropY1); y2[i] = MAX(Crop.y, data->DrawnCropY1); x1[i] = MIN(Crop.x, data->DrawnCropX1); x2[i] = MAX(CropX2, data->DrawnCropX2); data->DrawnCropY1 = Crop.y; i++; } if (CropY2 != data->DrawnCropY2) { y1[i] = MIN(CropY2, data->DrawnCropY2); y2[i] = MAX(CropY2, data->DrawnCropY2); x1[i] = MIN(Crop.x, data->DrawnCropX1); x2[i] = MAX(CropX2, data->DrawnCropX2); data->DrawnCropY2 = CropY2; i++; } update_shrink_ranges(data); if (!render) return; // It is better not to draw lines than to draw partial lines: int saveDrawLines = CFG->drawLines; CFG->drawLines = 0; int pixbufHeight = gdk_pixbuf_get_height(data->PreviewPixbuf); int pixbufWidth = gdk_pixbuf_get_width(data->PreviewPixbuf); for (i--; i >= 0; i--) { x1[i] = MAX(x1[i] - 1, 0); x2[i] = MIN(x2[i] + 1, pixbufWidth); y1[i] = MAX(y1[i] - 1, 0); y2[i] = MIN(y2[i] + 1, pixbufHeight); preview_draw_area(data, x1[i], y1[i], x2[i] - x1[i], y2[i] - y1[i]); } CFG->drawLines = saveDrawLines; // Draw lines when idle if necessary if (CFG->drawLines > 0 && data->BlinkTimer == 0) { if (data->DrawCropID != 0) g_source_remove(data->DrawCropID); data->DrawCropID = gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE + 30, (GSourceFunc)(preview_draw_crop), data, NULL); } if (!is_rendering(data)) gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_live_histogram), data, NULL); } static void crop_reset(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); user_data = user_data; CFG->CropX1 = 0; CFG->CropY1 = 0; CFG->CropX2 = data->UF->rotatedWidth; CFG->CropY2 = data->UF->rotatedHeight; CFG->aspectRatio = ((float)data->UF->rotatedWidth) / data->UF->rotatedHeight; refresh_aspect(data); set_new_aspect(data); CFG->autoCrop = disabled_state; auto_button_toggle(data->AutoCropButton, &CFG->autoCrop); } static void zoom_update(GtkAdjustment *adj, gpointer user_data) { preview_data *data = get_preview_data(adj); if (data->FreezeDialog) return; (void)user_data; double oldZoom = CFG->Zoom; CFG->Zoom = gtk_adjustment_get_value(data->ZoomAdjustment); if (CFG->Zoom == oldZoom) return; // Set shrink/size values for preview rendering CFG->shrink = zoom_to_scale(CFG->Zoom); if (CFG->shrink == 0) { int cropHeight = data->UF->conf->CropY2 - data->UF->conf->CropY1; int cropWidth = data->UF->conf->CropX2 - data->UF->conf->CropX1; int cropSize = MAX(cropHeight, cropWidth); CFG->size = MIN(CFG->Zoom, 100.0) / 100.0 * cropSize; } else { CFG->size = 0; } render_status_text(data); gtk_image_view_set_zoom(GTK_IMAGE_VIEW(data->PreviewWidget), MAX(CFG->Zoom, 100.0) / 100.0); if (oldZoom < 100.0 || CFG->Zoom < 100.0) { ufraw_invalidate_layer(data->UF, ufraw_first_phase); render_preview(data); } } static void zoom_in_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; if (data->FreezeDialog) return; double zoom = CFG->Zoom; if (zoom >= 100.0) { zoom = (floor((zoom + 0.5) / 100.0) + 1) * 100.0; } else { int scale = zoom_to_scale(zoom); if (scale == 0) { scale = floor(100.0 / zoom); if (scale == 100.0 / zoom) scale--; } else { scale--; } zoom = MIN(MAX(floor(100.0 / scale), zoom + 1), 100.0); } gtk_adjustment_set_value(data->ZoomAdjustment, zoom); } static void zoom_out_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; if (data->FreezeDialog) return; double zoom = CFG->Zoom; if (zoom > 100.0) { zoom = (ceil((zoom - 0.5) / 100.0) - 1) * 100.0; } else { int scale = zoom_to_scale(zoom); if (scale == 0) { scale = ceil(100.0 / zoom); if (scale == 100.0 / zoom) scale++; } else { scale++; } zoom = floor(100.0 / scale); } gtk_adjustment_set_value(data->ZoomAdjustment, zoom); } static void zoom_fit_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; if (data->FreezeDialog) return; GtkWidget *preview = gtk_widget_get_ancestor(data->PreviewWidget, GTK_TYPE_IMAGE_SCROLL_WIN); int previewWidth = preview->allocation.width; int previewHeight = preview->allocation.height; double wScale = (double)data->UF->rotatedWidth / previewWidth; double hScale = (double)data->UF->rotatedHeight / previewHeight; double zoom = 100.0 / MAX(wScale, hScale); gtk_adjustment_set_value(data->ZoomAdjustment, zoom); } static void zoom_100_event(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; if (data->FreezeDialog) return; double zoom = 100.0; gtk_adjustment_set_value(data->ZoomAdjustment, zoom); } static void flip_image(GtkWidget *widget, int flip) { preview_data *data = get_preview_data(widget); int oldOrientation = CFG->orientation; double oldAngle = CFG->rotationAngle; ufraw_flip_orientation(data->UF, flip); data->FreezeDialog++; ufraw_unnormalize_rotation(data->UF); gtk_adjustment_set_value(data->RotationAdjustment, CFG->rotationAngle); data->UnnormalizedOrientation = CFG->orientation; ufraw_normalize_rotation(data->UF); data->FreezeDialog--; CFG->orientation = oldOrientation; CFG->rotationAngle = oldAngle; gtk_adjustment_value_changed(data->RotationAdjustment); } /* * Used to offer choices of aspect ratios, and to show numbers * as ratios. */ static const struct { float val; const char text[5]; } predef_aspects[] = { { 21.0 / 9.0, "21:9" }, { 16.0 / 10.0, "16:10" }, { 16.0 / 9.0, "16:9" }, { 3.0 / 2.0, "3:2" }, { 7.0 / 5.0, "7:5" }, { 4.0 / 3.0, "4:3" }, { 5.0 / 4.0, "5:4" }, { 1.0 / 1.0, "1:1" }, { 4.0 / 5.0, "4:5" }, { 3.0 / 4.0, "3:4" }, { 5.0 / 7.0, "5:7" }, { 2.0 / 3.0, "2:3" }, }; static void refresh_aspect(preview_data *data) { // Look through a predefined list of aspect ratios size_t i; for (i = 0; i < sizeof(predef_aspects) / sizeof(predef_aspects[0]); i++) if (CFG->aspectRatio >= predef_aspects[i].val * 0.999 && CFG->aspectRatio <= predef_aspects[i].val * 1.001) { data->FreezeDialog++; gtk_entry_set_text(data->AspectEntry, predef_aspects[i].text); data->FreezeDialog--; return; } char *text = g_strdup_printf("%.4g", CFG->aspectRatio); data->FreezeDialog++; gtk_entry_set_text(data->AspectEntry, text); data->FreezeDialog--; g_free(text); } static void fix_crop_aspect(preview_data *data, CursorType cursor, gboolean render) { double aspect; /* Sanity checks first */ if (CFG->CropX2 < CFG->CropX1) CFG->CropX2 = CFG->CropX1; if (CFG->CropY2 < CFG->CropY1) CFG->CropY2 = CFG->CropY1; if (CFG->CropX1 < 0) CFG->CropX1 = 0; if (CFG->CropX2 > data->UF->rotatedWidth) CFG->CropX2 = data->UF->rotatedWidth; if (CFG->CropY1 < 0) CFG->CropY1 = 0; if (CFG->CropY2 > data->UF->rotatedHeight) CFG->CropY2 = data->UF->rotatedHeight; if (!CFG->LockAspect) { update_crop_ranges(data, render); int dy = CFG->CropY2 - CFG->CropY1; CFG->aspectRatio = dy ? ((CFG->CropX2 - CFG->CropX1) / (float)dy) : 1.0; refresh_aspect(data); return; } if (CFG->aspectRatio == 0) aspect = ((double)data->UF->rotatedWidth) / data->UF->rotatedHeight; else aspect = CFG->aspectRatio; switch (cursor) { case left_cursor: case right_cursor: { /* Try to expand the rectangle evenly vertically, * if space permits */ double cy = (CFG->CropY1 + CFG->CropY2) / 2.0; double dy = (CFG->CropX2 - CFG->CropX1) * 0.5 / aspect; int fix_dx = 0; if (dy > cy) dy = cy, fix_dx++; if (cy + dy > data->UF->rotatedHeight) dy = data->UF->rotatedHeight - cy, fix_dx++; if (fix_dx) { double dx = floor(dy * 2.0 * aspect + 0.5); if (cursor == left_cursor) CFG->CropX1 = CFG->CropX2 - dx; else CFG->CropX2 = CFG->CropX1 + dx; } CFG->CropY1 = floor(cy - dy + 0.5); CFG->CropY2 = floor(cy + dy + 0.5); } break; case top_cursor: case bottom_cursor: { /* Try to expand the rectangle evenly horizontally, * if space permits */ double cx = (CFG->CropX1 + CFG->CropX2) / 2.0; double dx = (CFG->CropY2 - CFG->CropY1) * 0.5 * aspect; int fix_dy = 0; if (dx > cx) dx = cx, fix_dy++; if (cx + dx > data->UF->rotatedWidth) dx = data->UF->rotatedWidth - cx, fix_dy++; if (fix_dy) { double dy = floor(dx * 2.0 / aspect + 0.5); if (cursor == top_cursor) CFG->CropY1 = CFG->CropY2 - dy; else CFG->CropY2 = CFG->CropY1 + dy; } CFG->CropX1 = floor(cx - dx + 0.5); CFG->CropX2 = floor(cx + dx + 0.5); } break; case top_left_cursor: case top_right_cursor: case bottom_left_cursor: case bottom_right_cursor: { /* Adjust rectangle width/height according to aspect ratio * trying to preserve the area of the crop rectangle. * See the comment in set_new_aspect() */ double dy, dx = sqrt(aspect * (CFG->CropX2 - CFG->CropX1) * (CFG->CropY2 - CFG->CropY1)); int i; for (i = 0; i < 20; i++) { if (cursor == top_left_cursor || cursor == bottom_left_cursor) { if (CFG->CropX2 < dx) dx = CFG->CropX2; CFG->CropX1 = CFG->CropX2 - dx; } else { if (CFG->CropX1 + dx > data->UF->rotatedWidth) dx = data->UF->rotatedWidth - CFG->CropX1; CFG->CropX2 = CFG->CropX1 + dx; } dy = dx / aspect; if (cursor == top_left_cursor || cursor == top_right_cursor) { if (CFG->CropY2 < dy) { dx = CFG->CropY2 * aspect; continue; } CFG->CropY1 = CFG->CropY2 - dy; } else { if (CFG->CropY1 + dy > data->UF->rotatedHeight) { dx = (data->UF->rotatedHeight - CFG->CropY1) * aspect; continue; } CFG->CropY2 = CFG->CropY1 + dy; } break; } if (i == 10) g_warning("fix_crop_aspect(): loop not converging. " "aspect:%f dx:%f dy:%f X1:%d X2:%d Y1:%d Y2:%d\n", aspect, dx, dy, CFG->CropX1, CFG->CropX2, CFG->CropY1, CFG->CropY2); } break; case move_cursor: break; default: g_warning("fix_crop_aspect(): unknown cursor %d", cursor); return; } update_crop_ranges(data, render); } /* Modify current crop area so that it fits current aspect ratio */ static void set_new_aspect(preview_data *data) { float cx, cy, dx, dy; /* Crop area center never changes */ cx = (CFG->CropX1 + CFG->CropX2) / 2.0; cy = (CFG->CropY1 + CFG->CropY2) / 2.0; /* Adjust the current crop area width/height taking into account * the new aspect ratio. The rule is to keep one of the dimensions * and modify other dimension in such a way that the area of the * new crop area will be maximal. */ dx = CFG->CropX2 - cx; dy = CFG->CropY2 - cy; if (dx / dy > CFG->aspectRatio) dy = dx / CFG->aspectRatio; else dx = dy * CFG->aspectRatio; if (dx > cx) { dx = cx; dy = dx / CFG->aspectRatio; } if (cx + dx > data->UF->rotatedWidth) { dx = data->UF->rotatedWidth - cx; dy = dx / CFG->aspectRatio; } if (dy > cy) { dy = cy; dx = dy * CFG->aspectRatio; } if (cy + dy > data->UF->rotatedHeight) { dy = data->UF->rotatedHeight - cy; dx = dy * CFG->aspectRatio; } CFG->CropX1 = floor(cx - dx + 0.5); CFG->CropX2 = floor(cx + dx + 0.5); CFG->CropY1 = floor(cy - dy + 0.5); CFG->CropY2 = floor(cy + dy + 0.5); update_crop_ranges(data, TRUE); } static void lock_aspect(GtkToggleButton *button, gboolean *valuep) { if (gtk_toggle_button_get_active(button)) { *valuep = !*valuep; gtk_toggle_button_set_active(button, FALSE); } if (*valuep) { gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( "object-lock", GTK_ICON_SIZE_BUTTON)); gtk_widget_set_tooltip_text(GTK_WIDGET(button), _("Aspect ratio locked, click to unlock")); } else { gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( "object-unlock", GTK_ICON_SIZE_BUTTON)); gtk_widget_set_tooltip_text(GTK_WIDGET(button), _("Aspect ratio unlocked, click to lock")); } } static void aspect_changed(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); if (data->FreezeDialog) return; (void)user_data; const gchar *text = gtk_entry_get_text(data->AspectEntry); if (text) { float aspect = 0.0, aspect_div, aspect_quot; if (sscanf(text, "%f : %f", &aspect_div, &aspect_quot) == 2) { if (aspect_quot) aspect = aspect_div / aspect_quot; } else { sscanf(text, "%g", &aspect); } if (aspect >= 0.1 && aspect <= 10.0) CFG->aspectRatio = aspect; } set_new_aspect(data); CFG->LockAspect = TRUE; lock_aspect(data->LockAspectButton, &CFG->LockAspect); if (CFG->autoCrop == enabled_state) { CFG->autoCrop = apply_state; render_preview(data); } } static void set_darkframe_label(preview_data *data) { if (CFG->darkframeFile[0] != '\0') { char *basename = g_path_get_basename(CFG->darkframeFile); gtk_label_set_text(GTK_LABEL(data->DarkFrameLabel), basename); g_free(basename); } else { // No darkframe file gtk_label_set_text(GTK_LABEL(data->DarkFrameLabel), _("None")); } } static void set_darkframe(preview_data *data) { set_darkframe_label(data); ufraw_invalidate_darkframe_layer(data->UF); render_preview(data); } static void load_darkframe(GtkWidget *widget, void *unused) { preview_data *data = get_preview_data(widget); GtkFileChooser *fileChooser; char *basedir; if (data->FreezeDialog) return; basedir = g_path_get_dirname(CFG->darkframeFile); fileChooser = ufraw_raw_chooser(CFG, basedir, _("Load dark frame"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_STOCK_CANCEL, FALSE); free(basedir); if (gtk_dialog_run(GTK_DIALOG(fileChooser)) == GTK_RESPONSE_ACCEPT) { char *filename = gtk_file_chooser_get_filename(fileChooser); g_strlcpy(CFG->darkframeFile, filename, max_path); g_free(filename); ufraw_load_darkframe(data->UF); set_darkframe(data); } ufraw_focus(fileChooser, FALSE); gtk_widget_destroy(GTK_WIDGET(fileChooser)); (void)unused; } static void reset_darkframe(GtkWidget *widget, void *unused) { preview_data *data = get_preview_data(widget); if (data->FreezeDialog) return; if (CFG->darkframe == NULL) return; ufraw_close_darkframe(CFG); set_darkframe(data); (void)unused; } GtkWidget *notebook_page_new(GtkNotebook *notebook, char *text, char *icon) { GtkWidget *page = gtk_vbox_new(FALSE, 0); if (icon == NULL) { GtkWidget *label = gtk_label_new(text); gtk_notebook_append_page(notebook, GTK_WIDGET(page), label); } else { GtkWidget *event_box = gtk_event_box_new(); GtkWidget *image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(event_box), image); gtk_widget_show_all(event_box); gtk_notebook_append_page(notebook, GTK_WIDGET(page), event_box); gtk_widget_set_tooltip_text(event_box, text); } return page; } static void expander_expanded(GtkExpander *expander, GParamSpec *param_spec, gpointer user_data) { (void)param_spec; (void)user_data; preview_data *data = get_preview_data(expander); GtkWidget *panel = gtk_widget_get_parent(GTK_WIDGET(expander)); if (gtk_expander_get_expanded(expander)) { GtkWidget *histogram = g_object_get_data(G_OBJECT(expander), "expander-histogram"); if (histogram != NULL) { g_object_set_data(G_OBJECT(expander), "expander-maximized", (gpointer)FALSE); gtk_widget_set_size_request(histogram, -1, data->HisMinHeight); } gboolean expanderMaximized = GPOINTER_TO_INT( g_object_get_data(G_OBJECT(expander), "expander-maximized")); if (!expanderMaximized) gtk_box_set_child_packing(GTK_BOX(panel), GTK_WIDGET(expander), TRUE, TRUE, 0, GTK_PACK_START); } else { gtk_box_set_child_packing(GTK_BOX(panel), GTK_WIDGET(expander), FALSE, FALSE, 0, GTK_PACK_START); } } GtkWidget *table_with_frame(GtkWidget *box, char *label, gboolean expand) { GtkWidget *frame = gtk_frame_new(NULL); if (label != NULL) { GtkWidget *expander = gtk_expander_new(label); gtk_expander_set_expanded(GTK_EXPANDER(expander), expand); gtk_box_pack_start(GTK_BOX(box), expander, TRUE, TRUE, 0); g_signal_connect(expander, "notify::expanded", G_CALLBACK(expander_expanded), NULL); gtk_container_add(GTK_CONTAINER(expander), frame); } else { gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 0); } GtkWidget *table = gtk_table_new(10, 10, FALSE); gtk_container_add(GTK_CONTAINER(frame), table); return table; } static void button_update(GtkWidget *button, gpointer user_data) { preview_data *data = get_preview_data(button); user_data = user_data; int i; if (button == data->ResetGammaButton) { CFG->profile[0][CFG->profileIndex[0]].gamma = profile_default_gamma(&CFG->profile[0][CFG->profileIndex[0]]); } if (button == data->ResetLinearButton) { CFG->profile[0][CFG->profileIndex[0]].linear = profile_default_linear(&CFG->profile[0][CFG->profileIndex[0]]); } if (button == data->ResetExposureButton) { CFG->exposure = conf_default.exposure; CFG->autoExposure = FALSE; auto_button_toggle(data->AutoExposureButton, &CFG->autoExposure); } if (button == data->ResetThresholdButton) { CFG->threshold = conf_default.threshold; ufraw_invalidate_denoise_layer(data->UF); } if (button == data->ResetHotpixelButton) { CFG->hotpixel = conf_default.hotpixel; ufraw_invalidate_hotpixel_layer(data->UF); } #ifdef UFRAW_CONTRAST if (button == data->ResetContrastButton) { CFG->contrast = conf_default.contrast; } #endif if (button == data->ResetSaturationButton) { CFG->saturation = conf_default.saturation; } if (button == data->ResetBlackButton) { CurveDataSetPoint(&CFG->curve[CFG->curveIndex], 0, conf_default.black, 0); CFG->autoBlack = FALSE; auto_button_toggle(data->AutoBlackButton, &CFG->autoBlack); } if (button == data->AutoCurveButton) { CFG->curveIndex = manual_curve; ufraw_auto_curve(data->UF); CFG->autoBlack = enabled_state; auto_button_toggle(data->AutoBlackButton, &CFG->autoBlack); } if (button == data->ResetBaseCurveButton) { if (CFG->BaseCurveIndex == manual_curve) { CFG->BaseCurve[CFG->BaseCurveIndex].m_numAnchors = 2; CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[0].x = 0.0; CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[0].y = 0.0; CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[1].x = 1.0; CFG->BaseCurve[CFG->BaseCurveIndex].m_anchors[1].y = 1.0; } else { CFG->BaseCurveIndex = linear_curve; } curveeditor_widget_set_curve(data->BaseCurveWidget, &CFG->BaseCurve[CFG->BaseCurveIndex]); } if (button == data->ResetCurveButton) { if (CFG->curveIndex == manual_curve) { CFG->curve[CFG->curveIndex].m_numAnchors = 2; CFG->curve[CFG->curveIndex].m_anchors[1].x = 1.0; CFG->curve[CFG->curveIndex].m_anchors[1].y = 1.0; } else { CFG->curveIndex = linear_curve; } } if (button == data->ResetGrayscaleChannelMixerButton) { CFG->grayscaleMixer[0] = conf_default.grayscaleMixer[0]; CFG->grayscaleMixer[1] = conf_default.grayscaleMixer[1]; CFG->grayscaleMixer[2] = conf_default.grayscaleMixer[2]; } if (button == data->ResetDespeckleButton) { memcpy(CFG->despeckleWindow, conf_default.despeckleWindow, sizeof(CFG->despeckleWindow)); memcpy(CFG->despeckleDecay, conf_default.despeckleDecay, sizeof(CFG->despeckleDecay)); memcpy(CFG->despecklePasses, conf_default.despecklePasses, sizeof(CFG->despecklePasses)); ufraw_invalidate_despeckle_layer(data->UF); } for (i = 0; i < max_adjustments; ++i) { if (button == data->ResetLightnessAdjustmentButton[i]) { CFG->lightnessAdjustment[i].adjustment = 1.0; break; } } if (CFG->autoExposure == enabled_state) CFG->autoExposure = apply_state; if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static void grayscale_update(GtkWidget *button, gpointer user_data) { int i; preview_data *data = get_preview_data(button); for (i = 0; i < 6; ++i) if (button == data->GrayscaleButtons[i] && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) CFG->grayscaleMode = i; ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); (void)user_data; } static void restore_details_button_set(GtkButton *button, preview_data *data) { const char *state; switch (CFG->restoreDetails) { case clip_details: gtk_button_set_image(button, gtk_image_new_from_stock( GTK_STOCK_CUT, GTK_ICON_SIZE_BUTTON)); state = _("clip"); break; case restore_lch_details: gtk_button_set_image(button, gtk_image_new_from_stock( "restore-highlights-lch", GTK_ICON_SIZE_BUTTON)); state = _("restore in LCH space for soft details"); break; case restore_hsv_details: gtk_button_set_image(button, gtk_image_new_from_stock( "restore-highlights-hsv", GTK_ICON_SIZE_BUTTON)); state = _("restore in HSV space for sharp details"); break; default: state = "Error"; } char *text = g_strdup_printf(_("Restore details for negative EV\n" "Current state: %s"), state); gtk_widget_set_tooltip_text(GTK_WIDGET(button), text); g_free(text); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); } static void clip_highlights_button_set(GtkButton *button, preview_data *data) { const char *state; switch (CFG->clipHighlights) { case digital_highlights: gtk_button_set_image(button, gtk_image_new_from_stock( "clip-highlights-digital", GTK_ICON_SIZE_BUTTON)); state = _("digital linear"); break; case film_highlights: gtk_button_set_image(button, gtk_image_new_from_stock( "clip-highlights-film", GTK_ICON_SIZE_BUTTON)); state = _("soft film like"); break; default: state = "Error"; } char *text = g_strdup_printf(_("Clip highlights for positive EV\n" "Current state: %s"), state); gtk_widget_set_tooltip_text(GTK_WIDGET(button), text); g_free(text); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); } static void auto_button_toggled(GtkToggleButton *button, gboolean *valuep) { preview_data *data = get_preview_data(button); auto_button_toggle(button, valuep); if (*valuep == enabled_state) { *valuep = apply_state; render_preview(data); } } static void toggle_button_update(GtkToggleButton *button, gboolean *valuep) { preview_data *data = get_preview_data(button); if (valuep == &CFG->restoreDetails) { /* Our untoggling of the button creates a redundant event. */ if (gtk_toggle_button_get_active(button)) { /* Scroll through the settings. */ CFG->restoreDetails = (CFG->restoreDetails + 1) % restore_types; restore_details_button_set(GTK_BUTTON(button), data); ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } } else if (valuep == &CFG->clipHighlights) { /* Our untoggling of the button creates a redundant event. */ if (gtk_toggle_button_get_active(button)) { /* Scroll through the settings. */ CFG->clipHighlights = (CFG->clipHighlights + 1) % highlights_types; clip_highlights_button_set(GTK_BUTTON(button), data); ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } } else if (valuep == (void*)data->ChannelSelectButton) { if (data->ChannelSelect >= -1) { int i, b = 0; while (data->ChannelSelectButton[b] != button) ++b; if (gtk_toggle_button_get_active(button)) { /* ignore generated events, for render_preview() */ data->ChannelSelect = -2; for (i = 0; i < data->UF->colors; ++i) if (i != b) gtk_toggle_button_set_active( data->ChannelSelectButton[i], FALSE); data->ChannelSelect = b; } else { data->ChannelSelect = -1; } ufraw_invalidate_layer(data->UF, ufraw_develop_phase); render_preview(data); } } else { *valuep = gtk_toggle_button_get_active(button); if (valuep == &CFG->overExp || valuep == &CFG->underExp) { start_blink(data); switch_highlights(data); } else if (valuep == &CFG->smoothing) { ufraw_invalidate_smoothing_layer(data->UF); render_preview(data); } else if (valuep == &data->UF->mark_hotpixels) { if (data->UF->hotpixels) { ufraw_invalidate_hotpixel_layer(data->UF); render_preview(data); } } } } static void toggle_button(GtkTable *table, int x, int y, char *label, gboolean *valuep) { GtkWidget *widget, *align; widget = gtk_check_button_new_with_label(label); if (label == NULL) { align = gtk_alignment_new(1, 0, 0, 1); gtk_container_add(GTK_CONTAINER(align), widget); } else align = widget; gtk_table_attach(table, align, x, x + 1, y, y + 1, 0, 0, 0, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), *valuep); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggle_button_update), valuep); } static void adjustment_update_int(GtkAdjustment *adj, int *valuep) { int value = (int)floor(gtk_adjustment_get_value(adj) + 0.5); if (value == *valuep) return; *valuep = value; preview_data *data = get_preview_data(adj); if (data->FreezeDialog) return; if (valuep == &CFG->drawLines) { if (data->DrawCropID != 0) g_source_remove(data->DrawCropID); data->DrawCropID = gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE + 30, (GSourceFunc)(preview_draw_crop), data, NULL); } } static void despeckle_update_sensitive(preview_data *data) { conf_data *c = CFG; gboolean b; int i; b = FALSE; for (i = 0; i < data->UF->colors; ++i) { b |= fabs(c->despeckleWindow[i] - conf_default.despeckleWindow[i]) > 0.1; b |= fabs(c->despeckleDecay[i] - conf_default.despeckleDecay[i]) > 0.001; b |= fabs(c->despecklePasses[i] - conf_default.despecklePasses[i]) > 0.1; } gtk_widget_set_sensitive(data->ResetDespeckleButton, b); b = FALSE; for (i = 1; i < data->UF->colors; ++i) { b |= c->despeckleWindow[0] != c->despeckleWindow[i]; b |= c->despeckleDecay[0] != c->despeckleDecay[i]; b |= c->despecklePasses[0] != c->despecklePasses[i]; } gtk_widget_set_sensitive(GTK_WIDGET(data->DespeckleLockChannelsButton), !b); } /* * passes > window makes no sense. Either the number of passes is * ridiculously large or the same effect can be achieved by replacing * decay by pow(decay, original_passes). */ static void despeckle_apply_constraints(preview_data *data, GtkAdjustment **adjp, int ch) { conf_data *c = CFG; double value = gtk_adjustment_get_value(adjp[ch]); ++data->FreezeDialog; if (adjp == data->DespeckleWindowAdj && value < c->despecklePasses[ch] && value) { c->despecklePasses[ch] = value; gtk_adjustment_set_value(data->DespecklePassesAdj[ch], value); } if (adjp == data->DespecklePassesAdj && value > c->despeckleWindow[ch] && c->despeckleWindow[ch]) { c->despeckleWindow[ch] = value; gtk_adjustment_set_value(data->DespeckleWindowAdj[ch], value); } --data->FreezeDialog; } static gboolean despeckle_adjustment_update(preview_data *data, double *p) { conf_data *c = CFG; int i, j, match; GtkAdjustment **adjp = NULL; match = 0; for (i = 0; i < data->UF->colors; ++i) { if (p == &c->despeckleWindow[i]) { adjp = data->DespeckleWindowAdj; match = c->despecklePasses[i] ? 1 : -1; break; } if (p == &c->despeckleDecay[i]) { adjp = data->DespeckleDecayAdj; match = c->despeckleWindow[i] && c->despecklePasses[i] ? 1 : -1; break; } if (p == &c->despecklePasses[i]) { adjp = data->DespecklePassesAdj; match = c->despeckleWindow[i] ? 1 : -1; break; } } if (match > 0) despeckle_apply_constraints(data, adjp, i); if (match) { if (gtk_toggle_button_get_active(data->DespeckleLockChannelsButton)) { ++data->FreezeDialog; for (j = 0; j < data->UF->colors; ++j) { p[j - i] = *p; gtk_adjustment_set_value(adjp[j], *p); despeckle_apply_constraints(data, adjp, j); } --data->FreezeDialog; } despeckle_update_sensitive(data); } if (match > 0) { ufraw_invalidate_despeckle_layer(data->UF); render_preview(data); } return match ? TRUE : FALSE; } static void adjustment_update(GtkAdjustment *adj, double *valuep) { preview_data *data = get_preview_data(adj); if (valuep == &CFG->profile[0][0].gamma) valuep = (void *)&CFG->profile[0][CFG->profileIndex[0]].gamma; if (valuep == &CFG->profile[0][0].linear) valuep = (void *)&CFG->profile[0][CFG->profileIndex[0]].linear; if ((int *)valuep == &CFG->CropX1 || (int *)valuep == &CFG->CropX2 || (int *)valuep == &CFG->CropY1 || (int *)valuep == &CFG->CropY2) { /* values set by update_crop_ranges are ok and do not have to be fixed */ if (!data->FreezeDialog) { *((int *)valuep) = (int) gtk_adjustment_get_value(adj); CursorType cursor = left_cursor; if ((int *)valuep == &CFG->CropX1) cursor = left_cursor; if ((int *)valuep == &CFG->CropX2) cursor = right_cursor; if ((int *)valuep == &CFG->CropY1) cursor = top_cursor; if ((int *)valuep == &CFG->CropY2) cursor = bottom_cursor; fix_crop_aspect(data, cursor, TRUE); CFG->autoCrop = disabled_state; auto_button_toggle(data->AutoCropButton, &CFG->autoCrop); } return; } /* Do nothing if value didn't really change */ long accuracy = (long)g_object_get_data(G_OBJECT(adj), "Adjustment-Accuracy"); float change = fabs(*valuep - gtk_adjustment_get_value(adj)); float min_change = pow(10, -accuracy) / 2; if (change < min_change) return; else *valuep = gtk_adjustment_get_value(adj); if (valuep == &CFG->exposure) { CFG->autoExposure = FALSE; auto_button_toggle(data->AutoExposureButton, &CFG->autoExposure); if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; } else if (valuep == &CFG->threshold) { ufraw_invalidate_denoise_layer(data->UF); } else if (valuep == &CFG->hotpixel) { ufraw_invalidate_hotpixel_layer(data->UF); } else if (despeckle_adjustment_update(data, valuep)) { return; } else { if (CFG->autoExposure == enabled_state) CFG->autoExposure = apply_state; if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; } int croppedWidth = CFG->CropX2 - CFG->CropX1; int croppedHeight = CFG->CropY2 - CFG->CropY1; if (valuep == &data->shrink) { data->height = croppedHeight / data->shrink; data->width = croppedWidth / data->shrink; } if (valuep == &data->height) { data->width = data->height * croppedWidth / croppedHeight; data->shrink = (double)croppedHeight / data->height; } if (valuep == &data->width) { data->height = data->width * croppedHeight / croppedWidth; data->shrink = (double)croppedWidth / data->width; } ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static GtkWidget *stock_image_button(const gchar *stock_id, GtkIconSize size, const char *tip, GCallback callback, void *data) { GtkWidget *button; button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_stock(stock_id, size)); if (tip != NULL) gtk_widget_set_tooltip_text(button, tip); g_signal_connect(G_OBJECT(button), "clicked", callback, data); return button; } GtkWidget *stock_icon_button(const gchar *stock_id, const char *tip, GCallback callback, void *data) { return stock_image_button(stock_id, GTK_ICON_SIZE_BUTTON, tip, callback, data); } /* * Crop and spot area cannot be rotated but we make sure their coordinates * are valid. Try to preserve them over a rotate forth and back and try to * preserve their geometry. */ void resize_canvas(preview_data *data) { if (CFG->autoCrop == enabled_state) CFG->autoCrop = apply_state; gboolean FullCrop = CFG->CropX1 == 0 && CFG->CropX2 == data->UF->rotatedWidth && CFG->CropY1 == 0 && CFG->CropY2 == data->UF->rotatedHeight; ufraw_get_image_dimensions(data->UF); if (FullCrop) { if (CFG->LockAspect) { double newAspect = (double)data->UF->rotatedWidth / data->UF->rotatedHeight; // Allow 1/aspect switch even if aspect is locked. if (fabs(CFG->aspectRatio - 1 / newAspect) < 0.0001) { CFG->CropX2 = data->UF->rotatedWidth; CFG->CropY2 = data->UF->rotatedHeight; CFG->aspectRatio = newAspect; refresh_aspect(data); } } else { // Keep full crop CFG->CropX2 = data->UF->rotatedWidth; CFG->CropY2 = data->UF->rotatedHeight; } } int d = MIN(CFG->CropX1, CFG->CropX2 - data->UF->rotatedWidth); if (d > 0) { CFG->CropX1 -= d; CFG->CropX2 -= d; } d = MIN(CFG->CropY1, CFG->CropY2 - data->UF->rotatedHeight); if (d > 0) { CFG->CropY1 -= d; CFG->CropY2 -= d; } d = MIN(data->SpotX1, data->SpotX2 - data->UF->rotatedWidth); if (d > 0) { data->SpotX1 -= d; data->SpotX2 -= d; } d = MIN(data->SpotY1, data->SpotY2 - data->UF->rotatedHeight); if (d > 0) { data->SpotY1 -= d; data->SpotY2 -= d; } if (data->SpotX2 > data->UF->rotatedWidth || data->SpotY2 > data->UF->rotatedHeight) { data->SpotDraw = FALSE; data->SpotX1 = -1; data->SpotX2 = -1; data->SpotY1 = -1; data->SpotY2 = -1; } if (CFG->CropX2 > data->UF->rotatedWidth) fix_crop_aspect(data, top_right_cursor, FALSE); else if (CFG->CropY2 > data->UF->rotatedHeight) fix_crop_aspect(data, bottom_left_cursor, FALSE); else update_crop_ranges(data, FALSE); } static void adjustment_update_rotation(GtkAdjustment *adj, gpointer user_data) { preview_data *data = get_preview_data(adj); (void)user_data; /* Normalize the "unnormalized" value displayed to the user to * -180 < a <= 180, though we later normalize to an orientation * and flip plus 0 <= a < 90 rotation for processing. */ if (data->FreezeDialog) return; int oldFlip = CFG->orientation; ufraw_unnormalize_rotation(data->UF); CFG->rotationAngle = gtk_adjustment_get_value(data->RotationAdjustment); CFG->orientation = data->UnnormalizedOrientation; ufraw_normalize_rotation(data->UF); int newFlip = CFG->orientation; int flip; for (flip = 0; flip < 8; flip++) { CFG->orientation = oldFlip; ufraw_flip_orientation(data->UF, flip); if (CFG->orientation == newFlip) break; } CFG->orientation = oldFlip; ufraw_flip_image(data->UF, flip); gtk_widget_set_sensitive(data->ResetRotationAdjustment, CFG->rotationAngle != 0 || CFG->orientation != CFG->CameraOrientation); ufraw_invalidate_layer(data->UF, ufraw_transform_phase); render_preview(data); } static void ufraw_image_changed(UFObject *obj, UFEventType type) { if (type != uf_value_changed) return; preview_data *data = ufobject_user_data(obj); render_preview(data); } static void adjustment_reset_rotation(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; int oldOrientation = CFG->orientation; double oldAngle = CFG->rotationAngle; CFG->orientation = CFG->CameraOrientation; CFG->rotationAngle = 0; data->FreezeDialog++; ufraw_unnormalize_rotation(data->UF); gtk_adjustment_set_value(data->RotationAdjustment, CFG->rotationAngle); data->UnnormalizedOrientation = CFG->orientation; ufraw_normalize_rotation(data->UF); data->FreezeDialog--; CFG->orientation = oldOrientation; CFG->rotationAngle = oldAngle; gtk_adjustment_value_changed(data->RotationAdjustment); } static GtkWidget *reset_button(const char *tip, GCallback callback, void *data) { return stock_icon_button(GTK_STOCK_REFRESH, tip, callback, data); } void ufnumber_adjustment_scale(UFObject *obj, GtkTable *table, int x, int y, const char *label, const char *tip) { GtkWidget *w, *l, *icon; if (label != NULL) { w = gtk_event_box_new(); if (label[0] == '@') { icon = gtk_image_new_from_stock(label + 1, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_container_add(GTK_CONTAINER(w), icon); } else { l = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(l), 1, 0.5); gtk_container_add(GTK_CONTAINER(w), l); } gtk_table_attach(table, w, x, x + 1, y, y + 1, GTK_SHRINK | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); } w = ufnumber_hscale_new(obj); gtk_table_attach(table, w, x + 1, x + 5, y, y + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); w = ufnumber_spin_button_new(obj); gtk_table_attach(table, w, x + 5, x + 7, y, y + 1, GTK_SHRINK | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); } static GtkAdjustment *adjustment_scale(GtkTable *table, int x, int y, const char *label, double value, void *valuep, double min, double max, double step, double jump, long accuracy, const gboolean wrap_spinner, const char *tip, GCallback callback, GtkWidget **resetButton, const char *resetTip, GCallback resetCallback) { GtkAdjustment *adj; GtkWidget *w, *l, *icon; if (label != NULL) { w = gtk_event_box_new(); if (label[0] == '@') { icon = gtk_image_new_from_stock(label + 1, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_container_add(GTK_CONTAINER(w), icon); } else { l = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(l), 1, 0.5); gtk_container_add(GTK_CONTAINER(w), l); } gtk_table_attach(table, w, x, x + 1, y, y + 1, GTK_SHRINK | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); } adj = GTK_ADJUSTMENT(gtk_adjustment_new(value, min, max, step, jump, 0)); g_object_set_data(G_OBJECT(adj), "Adjustment-Accuracy", (gpointer)accuracy); w = gtk_hscale_new(adj); g_object_set_data(G_OBJECT(adj), "Parent-Widget", w); gtk_scale_set_draw_value(GTK_SCALE(w), FALSE); gtk_table_attach(table, w, x + 1, x + 5, y, y + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); g_signal_connect(G_OBJECT(adj), "value-changed", callback, valuep); w = gtk_spin_button_new(adj, step, accuracy); gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(w), FALSE); gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(w), GTK_UPDATE_IF_VALID); gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(w), wrap_spinner); gtk_table_attach(table, w, x + 5, x + 7, y, y + 1, GTK_SHRINK | GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(w, tip); if (resetButton != NULL) { *resetButton = reset_button(resetTip, resetCallback, NULL); gtk_table_attach(table, *resetButton, x + 7, x + 8, y, y + 1, 0, 0, 0, 0); } return adj; } static void set_save_tooltip(preview_data *data) { char *absFilename = uf_file_set_absolute(CFG->outputFilename); char *utf8 = g_filename_display_name(absFilename); char *text = g_strdup_printf(_("Filename: %s%s"), utf8, CFG->createID == also_id ? _("\nCreate also ID file") : CFG->createID == only_id ? _("\nCreate only ID file") : ""); g_free(utf8); g_free(absFilename); gtk_widget_set_tooltip_text(data->SaveButton, text); g_free(text); } static void outpath_chooser_changed(GtkFileChooser *chooser, gpointer user_data) { (void)user_data; preview_data *data = get_preview_data(chooser); if (data->FreezeDialog) return; char *path = gtk_file_chooser_get_filename(chooser); if (path == NULL) { // We should never get here g_warning("No output path in chooser"); return; } // Set the chosen path in the output filename char *basename = g_path_get_basename(CFG->outputFilename); char *filename = g_build_filename(path, basename, NULL); g_free(basename); g_strlcpy(CFG->outputFilename, filename, max_path); g_free(filename); // Set the chosen path as the output path, // only if it is different from the input path char *dirname = g_path_get_dirname(CFG->inputFilename); if (strcmp(path, dirname) == 0) { g_strlcpy(CFG->outputPath, "", max_path); } else { g_strlcpy(CFG->outputPath, path, max_path); } g_free(dirname); g_free(path); set_save_tooltip(data); } static void outfile_entry_changed(GtkEntry *entry, gpointer user_data) { (void)user_data; preview_data *data = get_preview_data(entry); if (data->FreezeDialog) return; char *dirname = g_path_get_dirname(CFG->outputFilename); char *fne = g_filename_from_utf8(gtk_entry_get_text(entry), -1, NULL, NULL, NULL); char *filename = g_build_filename(dirname, fne, NULL); g_strlcpy(CFG->outputFilename, filename, max_path); g_free(filename); g_free(dirname); g_free(fne); // Update the output type combo char *type = strrchr(CFG->outputFilename, '.'); if (type == NULL) return; int i; for (i = 0; data->TypeComboMap[i] >= 0; i++) { if (strcasecmp(type, file_type[data->TypeComboMap[i]]) == 0) gtk_combo_box_set_active(data->TypeCombo, i); } set_save_tooltip(data); } static void type_combo_changed(GtkComboBox *combo, gpointer *user_data) { (void)user_data; preview_data *data = get_preview_data(combo); if (data->FreezeDialog) return; int i = gtk_combo_box_get_active(combo); CFG->type = data->TypeComboMap[i]; // If type has not changed, do nothing char *type = strrchr(CFG->outputFilename, '.'); if (type != NULL && strcasecmp(type, file_type[CFG->type]) == 0) return; char *outfile = uf_file_set_type(CFG->outputFilename, file_type[CFG->type]); g_strlcpy(CFG->outputFilename, outfile, max_path); g_free(outfile); char *basename = g_path_get_basename(CFG->outputFilename); gtk_entry_set_text(data->OutFileEntry, basename); g_free(basename); set_save_tooltip(data); } static void combo_update(GtkWidget *combo, gint *valuep) { preview_data *data = get_preview_data(combo); if (data->FreezeDialog) return; *valuep = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); if (valuep == &CFG->BaseCurveIndex) { if (!CFG_cameraCurve && CFG->BaseCurveIndex > camera_curve - 2) CFG->BaseCurveIndex += 2; curveeditor_widget_set_curve(data->BaseCurveWidget, &CFG->BaseCurve[CFG->BaseCurveIndex]); } else if (valuep == &CFG->curveIndex) { curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); } if (CFG->autoExposure == enabled_state) CFG->autoExposure = apply_state; if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; ufraw_invalidate_layer(data->UF, ufraw_develop_phase); update_scales(data); } static void combo_update_simple(GtkWidget *combo, UFRawPhase phase) { preview_data *data = get_preview_data(combo); if (data->FreezeDialog) return; if (CFG->autoExposure == enabled_state) CFG->autoExposure = apply_state; if (CFG->autoBlack == enabled_state) CFG->autoBlack = apply_state; ufraw_invalidate_layer(data->UF, phase); update_scales(data); } static void radio_menu_update(GtkWidget *item, gint *valuep) { if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))) { preview_data *data = get_preview_data(item); *valuep = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(item), "Radio-Value")); render_preview(data); } } static void container_remove(GtkWidget *widget, gpointer user_data) { GtkContainer *container = GTK_CONTAINER(user_data); gtk_container_remove(container, widget); } static void delete_from_list(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); GtkDialog *dialog; long type, index; dialog = GTK_DIALOG(gtk_widget_get_ancestor(widget, GTK_TYPE_DIALOG)); type = (long)g_object_get_data(G_OBJECT(widget), "Type"); index = (long)user_data; if (type < profile_types) { gtk_combo_box_remove_text(data->ProfileCombo[type], index); CFG->profileCount[type]--; if (CFG->profileIndex[type] == index) CFG->profileIndex[type] = conf_default.profileIndex[type]; else if (CFG->profileIndex[type] > index) CFG->profileIndex[type]--; for (; index < CFG->profileCount[type]; index++) CFG->profile[type][index] = CFG->profile[type][index + 1]; gtk_combo_box_set_active(data->ProfileCombo[type], CFG->profileIndex[type]); } else if (type == profile_types + base_curve) { if (CFG_cameraCurve) gtk_combo_box_remove_text(data->BaseCurveCombo, index); else gtk_combo_box_remove_text(data->BaseCurveCombo, index - 2); CFG->BaseCurveCount--; if (CFG->BaseCurveIndex == index) CFG->BaseCurveIndex = conf_default.BaseCurveIndex; else if (CFG->BaseCurveIndex > index) CFG->BaseCurveIndex--; if (CFG->BaseCurveIndex == camera_curve && !CFG_cameraCurve) CFG->BaseCurveIndex = linear_curve; for (; index < CFG->BaseCurveCount; index++) CFG->BaseCurve[index] = CFG->BaseCurve[index + 1]; if (CFG->BaseCurveIndex > camera_curve && !CFG_cameraCurve) gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex - 2); else gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex); curveeditor_widget_set_curve(data->BaseCurveWidget, &CFG->BaseCurve[CFG->BaseCurveIndex]); } else if (type == profile_types + luminosity_curve) { gtk_combo_box_remove_text(data->CurveCombo, index); CFG->curveCount--; if (CFG->curveIndex == index) CFG->curveIndex = conf_default.curveIndex; else if (CFG->curveIndex > index) CFG->curveIndex--; for (; index < CFG->curveCount; index++) CFG->curve[index] = CFG->curve[index + 1]; gtk_combo_box_set_active(data->CurveCombo, CFG->curveIndex); curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); } data->OptionsChanged = TRUE; gtk_dialog_response(dialog, GTK_RESPONSE_APPLY); } // Duplicate CFG into RC, except for transform data, which is reset and // ufobject which is copied elegantly static void copy_conf_to_rc(preview_data *data) { UFObject *tmp = RC->ufobject; *RC = *data->UF->conf; RC->ufobject = tmp; conf_copy_transform(RC, &conf_default); UFObject *image = ufgroup_element(RC->ufobject, ufRawImage); ufobject_copy(image, data->UF->conf->ufobject); } static void configuration_save(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); (void)user_data; copy_conf_to_rc(data); conf_save(RC, NULL, NULL); } static void gimp_reset_clicked(GtkWidget *widget, GtkEntry *entry) { (void)widget; gtk_entry_set_text(entry, conf_default.remoteGimpCommand); } static void options_dialog(preview_data *data) { GtkWidget *optionsDialog, *profileTable[profile_types]; GtkWidget *notebook, *label, *page, *button, *text, *box, *image; GtkTable *baseCurveTable, *curveTable; GtkTextBuffer *confBuffer, *buffer; char txt[max_name], *buf; long i, j, response; if (data->FreezeDialog) return; data->OptionsChanged = FALSE; int saveBaseCurveIndex = CFG->BaseCurveIndex; int saveCurveIndex = CFG->curveIndex; int saveProfileIndex[profile_types]; for (i = 0; i < profile_types; i++) saveProfileIndex[i] = CFG->profileIndex[i]; optionsDialog = gtk_dialog_new_with_buttons(_("UFRaw options"), GTK_WINDOW(gtk_widget_get_toplevel(data->PreviewWidget)), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_resize(GTK_WINDOW(optionsDialog), 600, 400); g_object_set_data(G_OBJECT(optionsDialog), "Preview-Data", data); ufraw_focus(optionsDialog, TRUE); gtk_dialog_set_default_response(GTK_DIALOG(optionsDialog), GTK_RESPONSE_OK); notebook = gtk_notebook_new(); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(optionsDialog)->vbox), notebook); label = gtk_label_new(_("Settings")); page = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(page), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); box = gtk_vbox_new(FALSE, 0); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(page), box); profileTable[in_profile] = table_with_frame(box, _("Input color profiles"), TRUE); profileTable[out_profile] = table_with_frame(box, _("Output color profiles"), TRUE); profileTable[display_profile] = table_with_frame(box, _("Display color profiles"), TRUE); baseCurveTable = GTK_TABLE(table_with_frame(box, _("Base Curves"), TRUE)); curveTable = GTK_TABLE(table_with_frame(box, _("Luminosity Curves"), TRUE)); GtkTable *settingsTable = GTK_TABLE(table_with_frame(box, _("Settings"), TRUE)); // Remote Gimp command entry label = gtk_label_new(_("Remote Gimp command")); gtk_table_attach(settingsTable, label, 0, 1, 0, 1, 0, 0, 0, 0); GtkEntry *gimpEntry = GTK_ENTRY(gtk_entry_new()); gtk_entry_set_max_length(gimpEntry, max_path); gtk_entry_set_text(gimpEntry, data->UF->conf->remoteGimpCommand); gtk_table_attach(settingsTable, GTK_WIDGET(gimpEntry), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); // Remote Gimp command reset button button = reset_button( _("Reset command to default"), G_CALLBACK(gimp_reset_clicked), gimpEntry); gtk_table_attach(settingsTable, button, 2, 3, 0, 1, 0, 0, 0, 0); // blinkOverUnder toggle button GtkWidget *blinkButton = gtk_check_button_new_with_label( _("Blink Over/Underexposure Indicators")); gtk_table_attach(settingsTable, blinkButton, 0, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(blinkButton), CFG->blinkOverUnder); label = gtk_label_new(_("Configuration")); page = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(page), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); text = gtk_text_view_new(); gtk_container_add(GTK_CONTAINER(page), text); gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); confBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); GtkWidget *hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(box), hBox, FALSE, FALSE, 0); button = gtk_button_new_with_label(_("Save configuration")); gtk_box_pack_start(GTK_BOX(hBox), button, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(button, _("Save configuration to resource file ($HOME/.ufrawrc)")); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(configuration_save), NULL); label = gtk_label_new(_("Log")); page = gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(page), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); text = gtk_text_view_new(); gtk_container_add(GTK_CONTAINER(page), text); gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); char *log = ufraw_message(UFRAW_GET_LOG, NULL); if (log != NULL) { char *utf8_log = g_filename_display_name(log); gtk_text_buffer_set_text(buffer, utf8_log, -1); g_free(utf8_log); } label = gtk_label_new(_("About")); box = gtk_vbox_new(FALSE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); image = gtk_image_new_from_stock("ufraw", GTK_ICON_SIZE_DIALOG); gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "UFRaw " VERSION "\n"); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), _( "The Unidentified Flying Raw " "(UFRaw) is a utility to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera " "Raw (DCRaw)\n" "for the actual encoding of the raw images.\n\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n\n")); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); while (1) { for (j = 0; j < profile_types; j++) { gtk_container_foreach(GTK_CONTAINER(profileTable[j]), (GtkCallback)(container_remove), profileTable[j]); GtkTable *table = GTK_TABLE(profileTable[j]); for (i = conf_default.profileCount[j]; i < CFG->profileCount[j]; i++) { g_snprintf(txt, max_name, "%s (%s)", CFG->profile[j][i].name, CFG->profile[j][i].productName); label = gtk_label_new(txt); gtk_table_attach_defaults(table, label, 0, 1, i, i + 1); button = gtk_button_new_from_stock(GTK_STOCK_DELETE); g_object_set_data(G_OBJECT(button), "Type", (void*)j); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(delete_from_list), (gpointer)i); gtk_table_attach(table, button, 1, 2, i, i + 1, 0, 0, 0, 0); } } gtk_container_foreach(GTK_CONTAINER(baseCurveTable), (GtkCallback)(container_remove), baseCurveTable); for (i = camera_curve + 1; i < CFG->BaseCurveCount; i++) { label = gtk_label_new(CFG->BaseCurve[i].name); gtk_table_attach_defaults(baseCurveTable, label, 0, 1, i, i + 1); button = gtk_button_new_from_stock(GTK_STOCK_DELETE); g_object_set_data(G_OBJECT(button), "Type", (gpointer)profile_types + base_curve); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(delete_from_list), (gpointer)i); gtk_table_attach(baseCurveTable, button, 1, 2, i, i + 1, 0, 0, 0, 0); } gtk_container_foreach(GTK_CONTAINER(curveTable), (GtkCallback)(container_remove), curveTable); for (i = linear_curve + 1; i < CFG->curveCount; i++) { label = gtk_label_new(CFG->curve[i].name); gtk_table_attach_defaults(curveTable, label, 0, 1, i, i + 1); button = gtk_button_new_from_stock(GTK_STOCK_DELETE); g_object_set_data(G_OBJECT(button), "Type", (gpointer)profile_types + luminosity_curve); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(delete_from_list), (gpointer)i); gtk_table_attach(curveTable, button, 1, 2, i, i + 1, 0, 0, 0, 0); } conf_save(CFG, NULL, &buf); gtk_text_buffer_set_text(confBuffer, buf, -1); g_free(buf); gtk_widget_show_all(optionsDialog); response = gtk_dialog_run(GTK_DIALOG(optionsDialog)); /* APPLY only marks that something changed and we need to refresh */ if (response == GTK_RESPONSE_APPLY) continue; if (strcmp(CFG->remoteGimpCommand, gtk_entry_get_text(gimpEntry)) != 0) data->OptionsChanged = TRUE; if (CFG->blinkOverUnder != gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(blinkButton))) data->OptionsChanged = TRUE; if (!data->OptionsChanged) { /* If nothing changed there is nothing to do */ } else if (response == GTK_RESPONSE_OK) { g_strlcpy(CFG->remoteGimpCommand, gtk_entry_get_text(gimpEntry), max_path); g_strlcpy(RC->remoteGimpCommand, CFG->remoteGimpCommand, max_path); RC->blinkOverUnder = CFG->blinkOverUnder = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(blinkButton)); /* Copy profiles and curves from CFG to RC and save .ufrawrc */ if (memcmp(&RC->BaseCurve[RC->BaseCurveIndex], &CFG->BaseCurve[RC->BaseCurveIndex], sizeof(CurveData)) != 0) RC->BaseCurveIndex = CFG->BaseCurveIndex; for (i = 0; i < CFG->BaseCurveCount; i++) RC->BaseCurve[i] = CFG->BaseCurve[i]; RC->BaseCurveCount = CFG->BaseCurveCount; if (memcmp(&RC->curve[RC->curveIndex], &CFG->curve[RC->curveIndex], sizeof(CurveData)) != 0) RC->curveIndex = CFG->curveIndex; for (i = 0; i < CFG->curveCount; i++) RC->curve[i] = CFG->curve[i]; RC->curveCount = CFG->curveCount; for (i = 0; i < profile_types; i++) { if (memcmp(&RC->profile[i][RC->profileIndex[i]], &CFG->profile[i][RC->profileIndex[i]], sizeof(profile_data)) != 0) RC->profileIndex[i] = CFG->profileIndex[i]; for (j = 0; j < CFG->profileCount[i]; j++) RC->profile[i][j] = CFG->profile[i][j]; RC->profileCount[i] = CFG->profileCount[i]; } conf_save(RC, NULL, NULL); } else { /* response==GTK_RESPONSE_CANCEL or window closed */ /* Copy profiles and curves from RC to CFG */ /* We might remove 'too much' here, but it causes no harm */ for (i = 0; i < CFG->BaseCurveCount; i++) gtk_combo_box_remove_text(data->BaseCurveCombo, 0); for (i = 0; i < RC->BaseCurveCount; i++) { CFG->BaseCurve[i] = RC->BaseCurve[i]; if ((i == custom_curve || i == camera_curve) && !CFG_cameraCurve) continue; if (i <= camera_curve) gtk_combo_box_append_text(data->BaseCurveCombo, _(CFG->BaseCurve[i].name)); else gtk_combo_box_append_text(data->BaseCurveCombo, CFG->BaseCurve[i].name); } CFG->BaseCurveCount = RC->BaseCurveCount; CFG->BaseCurveIndex = saveBaseCurveIndex; if (CFG->BaseCurveIndex > camera_curve && !CFG_cameraCurve) gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex - 2); else gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex); for (i = 0; i < CFG->curveCount; i++) gtk_combo_box_remove_text(data->CurveCombo, 0); for (i = 0; i < RC->curveCount; i++) { CFG->curve[i] = RC->curve[i]; if (i <= linear_curve) gtk_combo_box_append_text(data->CurveCombo, _(CFG->curve[i].name)); else gtk_combo_box_append_text(data->CurveCombo, CFG->curve[i].name); } CFG->curveCount = RC->curveCount; CFG->curveIndex = saveCurveIndex; gtk_combo_box_set_active(data->CurveCombo, CFG->curveIndex); for (j = 0; j < profile_types; j++) { for (i = 0; i < CFG->profileCount[j]; i++) gtk_combo_box_remove_text(data->ProfileCombo[j], 0); for (i = 0; i < RC->profileCount[j]; i++) { CFG->profile[j][i] = RC->profile[j][i]; if (i < conf_default.profileCount[j]) gtk_combo_box_append_text(data->ProfileCombo[j], _(CFG->profile[j][i].name)); else gtk_combo_box_append_text(data->ProfileCombo[j], CFG->profile[j][i].name); } CFG->profileCount[j] = RC->profileCount[j]; CFG->profileIndex[j] = saveProfileIndex[j]; gtk_combo_box_set_active(data->ProfileCombo[j], CFG->profileIndex[j]); } } ufraw_focus(optionsDialog, FALSE); gtk_widget_destroy(optionsDialog); start_blink(data); ufraw_invalidate_layer(data->UF, ufraw_develop_phase); render_preview(data); return; } } static gboolean window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { preview_data *data = get_preview_data(widget); user_data = user_data; event = event; if (data->FreezeDialog) return TRUE; g_object_set_data(G_OBJECT(widget), "WindowResponse", (gpointer)GTK_RESPONSE_CANCEL); gtk_main_quit(); return TRUE; } static void expander_state(GtkWidget *widget, gpointer user_data) { preview_data *data = get_preview_data(widget); const char *text; GtkWidget *label; int i; user_data = user_data; if (!GTK_IS_EXPANDER(widget)) return; label = gtk_expander_get_label_widget(GTK_EXPANDER(widget)); text = gtk_label_get_text(GTK_LABEL(label)); for (i = 0; expanderText[i] != NULL; i++) if (!strcmp(text, _(expanderText[i]))) CFG->expander[i] = gtk_expander_get_expanded(GTK_EXPANDER(widget)); } static void panel_size_allocate(GtkWidget *panel, GtkAllocation *allocation, gpointer user_data) { (void)user_data; preview_data *data = get_preview_data(panel); // Raw expander status GtkWidget *rawExpander = gtk_widget_get_ancestor(data->RawHisto, GTK_TYPE_EXPANDER); gboolean rawMaximized = GPOINTER_TO_INT( g_object_get_data(G_OBJECT(rawExpander), "expander-maximized")); int rawHisHeight = data->RawHisto->allocation.height - 2; gboolean rawExpanded = gtk_expander_get_expanded(GTK_EXPANDER(rawExpander)); // Live expander status GtkWidget *liveExpander = gtk_widget_get_ancestor(data->LiveHisto, GTK_TYPE_EXPANDER); gboolean liveMaximized = GPOINTER_TO_INT( g_object_get_data(G_OBJECT(liveExpander), "expander-maximized")); int liveHisHeight = data->LiveHisto->allocation.height - 2; gboolean liveExpanded = gtk_expander_get_expanded(GTK_EXPANDER(liveExpander)); // Stop allocating space to histogram after maximum height was reached gboolean maximizeAll = TRUE; if (rawExpanded && rawHisHeight <= his_max_height) maximizeAll = FALSE; if (liveExpanded && liveHisHeight <= his_max_height) maximizeAll = FALSE; if (maximizeAll && !rawMaximized) { gtk_box_set_child_packing(GTK_BOX(panel), rawExpander, FALSE, FALSE, 0, GTK_PACK_START); gtk_widget_set_size_request(data->RawHisto, data->RawHisto->allocation.width, his_max_height + 2); g_object_set_data(G_OBJECT(rawExpander), "expander-histogram", data->RawHisto); g_object_set_data(G_OBJECT(rawExpander), "expander-maximized", (gpointer)TRUE); } if (maximizeAll && !liveMaximized) { GtkWidget *expander = gtk_widget_get_ancestor(data->LiveHisto, GTK_TYPE_EXPANDER); gtk_box_set_child_packing(GTK_BOX(panel), expander, FALSE, FALSE, 0, GTK_PACK_START); gtk_widget_set_size_request(data->LiveHisto, data->LiveHisto->allocation.width, his_max_height + 2); g_object_set_data(G_OBJECT(liveExpander), "expander-histogram", data->LiveHisto); g_object_set_data(G_OBJECT(liveExpander), "expander-maximized", (gpointer)TRUE); } GList *children = gtk_container_get_children(GTK_CONTAINER(panel)); int childAlloc = 0; for (; children != NULL; children = g_list_next(children)) childAlloc += GTK_WIDGET(children->data)->allocation.height; // If there is no extra space in the box expandable widgets must // be shrinkable if (allocation->height == childAlloc) { if (rawExpanded && rawMaximized) { if (data->RawHisto->requisition.height != data->HisMinHeight) gtk_widget_set_size_request(data->RawHisto, data->RawHisto->allocation.width, data->HisMinHeight); gboolean rawExpandable; gtk_box_query_child_packing(GTK_BOX(panel), rawExpander, &rawExpandable, NULL, NULL, NULL); if (!rawExpandable) gtk_box_set_child_packing(GTK_BOX(panel), rawExpander, TRUE, TRUE, 0, GTK_PACK_START); g_object_set_data(G_OBJECT(rawExpander), "expander-maximized", (gpointer)FALSE); } if (liveExpanded && liveMaximized) { if (data->LiveHisto->requisition.height != data->HisMinHeight) gtk_widget_set_size_request(data->LiveHisto, data->LiveHisto->allocation.width, data->HisMinHeight); gboolean liveExpandable; gtk_box_query_child_packing(GTK_BOX(panel), liveExpander, &liveExpandable, NULL, NULL, NULL); if (!liveExpandable) gtk_box_set_child_packing(GTK_BOX(panel), liveExpander, TRUE, TRUE, 0, GTK_PACK_START); g_object_set_data(G_OBJECT(liveExpander), "expander-maximized", (gpointer)FALSE); } } if (!is_rendering(data)) { // Redraw histograms if size allocation has changed GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->RawHisto)); rawHisHeight = data->RawHisto->allocation.height; if (pixbuf == NULL || gdk_pixbuf_get_height(pixbuf) != rawHisHeight) if (rawExpanded) gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_raw_histogram), data, NULL); pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->LiveHisto)); liveHisHeight = data->LiveHisto->allocation.height; if (pixbuf == NULL || gdk_pixbuf_get_height(pixbuf) != liveHisHeight) if (liveExpanded) gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)(render_live_histogram), data, NULL); } } static gboolean histogram_menu(GtkMenu *menu, GdkEventButton *event) { preview_data *data = get_preview_data(menu); if (data->FreezeDialog) return FALSE; if (event->button != 3) return FALSE; gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } static void control_button_event(GtkWidget *widget, long type) { preview_data *data = get_preview_data(widget); if (data->FreezeDialog == TRUE) return; data->FreezeDialog = TRUE; GtkWindow *window = GTK_WINDOW(gtk_widget_get_toplevel(widget)); gtk_widget_set_sensitive(data->Controls, FALSE); long response = UFRAW_NO_RESPONSE; int status = UFRAW_SUCCESS; // Switch from preview shrink/size to final shrink/size int shrinkSave = CFG->shrink; int sizeSave = CFG->size; if (fabs(data->shrink - floor(data->shrink + 0.0005)) < 0.0005) { CFG->shrink = floor(data->shrink + 0.0005); CFG->size = 0; } else { CFG->shrink = 1; CFG->size = floor(MAX(data->height, data->width) + 0.5); } switch (type) { case options_button: data->FreezeDialog = FALSE; options_dialog(data); break; case cancel_button: response = GTK_RESPONSE_CANCEL; break; case delete_button: if (ufraw_delete(widget, data->UF) == UFRAW_SUCCESS) response = UFRAW_RESPONSE_DELETE; break; case save_button: preview_progress_enable(data); status = ufraw_save_now(data->UF, widget); preview_progress_disable(data); if (status == UFRAW_SUCCESS) response = GTK_RESPONSE_OK; break; case gimp_button: if (ufraw_send_to_gimp(data->UF) == UFRAW_SUCCESS) response = GTK_RESPONSE_OK; break; case ok_button: preview_progress_enable(data); status = (*data->SaveFunc)(data->UF, widget); preview_progress_disable(data); if (status == UFRAW_SUCCESS) response = GTK_RESPONSE_OK; } if (response != UFRAW_NO_RESPONSE) { // Finish this session g_object_set_data(G_OBJECT(window), "WindowResponse", (gpointer)response); gtk_main_quit(); } else { // Restore setting CFG->shrink = shrinkSave; CFG->size = sizeSave; data->FreezeDialog = FALSE; gtk_widget_set_sensitive(data->Controls, TRUE); // cases that set error status require redrawing of the preview image if (status != UFRAW_SUCCESS) { ufraw_invalidate_layer(data->UF, ufraw_raw_phase); render_preview(data); } } } static gboolean control_button_key_press_event( GtkWidget *widget, GdkEventKey *event, preview_data *data) { if (data->FreezeDialog == TRUE) return FALSE; (void)widget; // Check that the Alt key is pressed if (!(event->state & GDK_MOD1_MASK)) return FALSE; int i; for (i = 0; i < num_buttons; i++) { if (data->ButtonMnemonic[i] == 0) continue; if (gdk_keyval_to_lower(event->keyval) == data->ButtonMnemonic[i]) { control_button_event(data->ControlButton[i], i); return TRUE; } } return FALSE; } static GtkWidget *control_button(const char *stockImage, const char *tip, ControlButtons buttonEnum, preview_data *data) { GtkWidget *button = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock( stockImage, GTK_ICON_SIZE_BUTTON)); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(control_button_event), (gpointer)buttonEnum); char **tipParts = g_strsplit(tip, "_", 2); if (tipParts[0] == NULL || tipParts[1] == NULL) { // No mnemonic gtk_widget_set_tooltip_text(button, tip); return button; } char hot_char[7]; int hot_char_len = g_utf8_next_char(tipParts[1]) - tipParts[1]; memcpy(hot_char, tipParts[1], hot_char_len); hot_char[hot_char_len] = 0; char *tooltip = g_strdup_printf(_("%s%s (Alt-%s)"), tipParts[0], tipParts[1], hot_char); gtk_widget_set_tooltip_text(button, tooltip); g_free(tooltip); data->ButtonMnemonic[buttonEnum] = gdk_keyval_to_lower( gdk_unicode_to_keyval(g_utf8_get_char(tipParts[1]))); data->ControlButton[buttonEnum] = button; g_strfreev(tipParts); return button; } static void notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, int page_num, gpointer user_data) { (void)page; (void)user_data; preview_data *data = get_preview_data(notebook); if (data->FreezeDialog == TRUE) return; if (data->ChannelSelect >= 0) gtk_toggle_button_set_active( data->ChannelSelectButton[data->ChannelSelect], FALSE); GtkWidget *event_box = gtk_widget_get_ancestor(data->PreviewWidget, GTK_TYPE_EVENT_BOX); if (page_num == data->PageNumSpot || page_num == data->PageNumLightness || page_num == data->PageNumGray) { gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box), TRUE); gdk_window_set_cursor(event_box->window, data->Cursor[spot_cursor]); draw_spot(data, TRUE); } else if (page_num == data->PageNumCrop || page_num == data->PageNumLensfun) { gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box), TRUE); gdk_window_set_cursor(event_box->window, data->Cursor[crop_cursor]); draw_spot(data, FALSE); } else { gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box), FALSE); draw_spot(data, TRUE); } data->PageNum = page_num; } static void list_store_add(GtkListStore *store, char *name, char *var) { if (var != NULL && strlen(var) > 0) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, name, 1, var, -1); } } static void rawhistogram_fill_interface(preview_data *data, GtkTable* table) { GtkWidget *event_box; GdkPixbuf *pixbuf; guint8 *pixies; GtkWidget *menu; GSList *group; GtkWidget *menu_item; int rowstride; event_box = gtk_event_box_new(); gtk_table_attach(table, event_box, 0, 1, 1, 2, GTK_EXPAND, GTK_EXPAND | GTK_FILL, 0, 0); pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, raw_his_size + 2, his_max_height + 2); data->RawHisto = gtk_image_new_from_pixbuf(pixbuf); gtk_widget_set_size_request(data->RawHisto, raw_his_size + 2, data->HisMinHeight + 2); g_object_unref(pixbuf); gtk_container_add(GTK_CONTAINER(event_box), data->RawHisto); pixies = gdk_pixbuf_get_pixels(pixbuf); rowstride = gdk_pixbuf_get_rowstride(pixbuf); memset(pixies, 0, (gdk_pixbuf_get_height(pixbuf) - 1)* rowstride + gdk_pixbuf_get_width(pixbuf)*gdk_pixbuf_get_n_channels(pixbuf)); menu = gtk_menu_new(); g_object_set_data(G_OBJECT(menu), "Parent-Widget", event_box); g_signal_connect_swapped(G_OBJECT(event_box), "button_press_event", G_CALLBACK(histogram_menu), menu); group = NULL; menu_item = gtk_radio_menu_item_new_with_label(group, _("Linear")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 0, 1); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->rawHistogramScale == linear_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)linear_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->rawHistogramScale); menu_item = gtk_radio_menu_item_new_with_label(group, _("Logarithmic")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 1, 2); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->rawHistogramScale == log_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)log_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->rawHistogramScale); gtk_widget_show_all(menu); } static void hotpixel_fill_interface(preview_data *data, GtkWidget *page) { GtkWidget *button; GtkWidget *label; GtkBox *box; GtkWidget *frame; frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0); box = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); label = gtk_label_new(_("Hot pixels: ")); gtk_box_pack_start(box, label, FALSE, FALSE, 0); data->HotpixelCount = GTK_LABEL(gtk_label_new(NULL)); gtk_box_pack_start(box, GTK_WIDGET(data->HotpixelCount), FALSE, FALSE, 0); button = gtk_check_button_new_with_label(_("mark")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), data->UF->mark_hotpixels); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_button_update), &data->UF->mark_hotpixels); gtk_box_pack_start(box, button, FALSE, FALSE, 3); gtk_box_pack_start(box, gtk_label_new(NULL), TRUE, TRUE, 0); data->HotpixelAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->hotpixel, 0.0, 999.99, 0.1, 0.5, 0)); g_object_set_data(G_OBJECT(data->HotpixelAdjustment), "Adjustment-Accuracy", (gpointer)3); button = gtk_spin_button_new(data->HotpixelAdjustment, 0.001, 3); g_object_set_data(G_OBJECT(data->HotpixelAdjustment), "Parent-Widget", button); g_signal_connect(G_OBJECT(data->HotpixelAdjustment), "value-changed", G_CALLBACK(adjustment_update), &CFG->hotpixel); gtk_widget_set_tooltip_text(button, _("Hot pixel sensitivity")); gtk_box_pack_start(box, button, FALSE, FALSE, 0); button = reset_button( _("Reset hot pixel sensitivity"), G_CALLBACK(button_update), NULL); gtk_box_pack_end(box, button, FALSE, FALSE, 0); gtk_widget_set_sensitive(button, FALSE); data->ResetHotpixelButton = button; } static void livehistogram_fill_interface(preview_data *data, GtkTable *table) { GtkWidget *event_box; GdkPixbuf *pixbuf; guint8 *pixies; GtkWidget *menu; GSList *group; GtkWidget *menu_item; GtkWidget *button; int rowstride; int i; event_box = gtk_event_box_new(); gtk_table_attach(table, event_box, 0, 7, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0); pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, live_his_size + 2, his_max_height + 2); data->LiveHisto = gtk_image_new_from_pixbuf(pixbuf); gtk_container_add(GTK_CONTAINER(event_box), data->LiveHisto); gtk_widget_set_size_request(data->LiveHisto, raw_his_size + 2, data->HisMinHeight + 2); g_object_unref(pixbuf); pixies = gdk_pixbuf_get_pixels(pixbuf); rowstride = gdk_pixbuf_get_rowstride(pixbuf); memset(pixies, 0, (gdk_pixbuf_get_height(pixbuf) - 1)* rowstride + gdk_pixbuf_get_width(pixbuf)*gdk_pixbuf_get_n_channels(pixbuf)); menu = gtk_menu_new(); g_object_set_data(G_OBJECT(menu), "Parent-Widget", event_box); g_signal_connect_swapped(G_OBJECT(event_box), "button_press_event", G_CALLBACK(histogram_menu), menu); group = NULL; menu_item = gtk_radio_menu_item_new_with_label(group, _("RGB histogram")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 0, 1); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->histogram == rgb_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)rgb_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->histogram); menu_item = gtk_radio_menu_item_new_with_label(group, _("R+G+B histogram")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 1, 2); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->histogram == r_g_b_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)r_g_b_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->histogram); menu_item = gtk_radio_menu_item_new_with_label(group, _("Luminosity histogram")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 2, 3); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->histogram == luminosity_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)luminosity_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->histogram); menu_item = gtk_radio_menu_item_new_with_label(group, _("Value (maximum) histogram")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 3, 4); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->histogram == value_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)value_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->histogram); menu_item = gtk_radio_menu_item_new_with_label(group, _("Saturation histogram")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 4, 5); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->histogram == saturation_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)saturation_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->histogram); menu_item = gtk_separator_menu_item_new(); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 5, 6); group = NULL; menu_item = gtk_radio_menu_item_new_with_label(group, _("Linear")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 6, 7); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->liveHistogramScale == linear_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)linear_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->liveHistogramScale); menu_item = gtk_radio_menu_item_new_with_label(group, _("Logarithmic")); gtk_menu_attach(GTK_MENU(menu), menu_item, 0, 1, 7, 8); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), CFG->liveHistogramScale == log_histogram); g_object_set_data(G_OBJECT(menu_item), "Radio-Value", (gpointer)log_histogram); g_signal_connect(G_OBJECT(menu_item), "toggled", G_CALLBACK(radio_menu_update), &CFG->liveHistogramScale); gtk_widget_show_all(menu); i = 2; data->AvrLabels = color_labels_new(table, 0, i++, _("Average:"), pixel_format, without_zone); data->DevLabels = color_labels_new(table, 0, i++, _("Std. deviation:"), pixel_format, without_zone); data->OverLabels = color_labels_new(table, 0, i, _("Overexposed:"), percent_format, without_zone); toggle_button(table, 4, i, NULL, &CFG->overExp); button = gtk_button_new_with_label(_("Indicate")); gtk_table_attach(table, button, 6, 7, i, i + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); g_signal_connect(G_OBJECT(button), "pressed", G_CALLBACK(render_special_mode), (void *)render_overexposed); g_signal_connect(G_OBJECT(button), "released", G_CALLBACK(render_special_mode), (void *)render_default); i++; data->UnderLabels = color_labels_new(table, 0, i, _("Underexposed:"), percent_format, without_zone); toggle_button(table, 4, i, NULL, &CFG->underExp); button = gtk_button_new_with_label(_("Indicate")); gtk_table_attach(table, button, 6, 7, i, i + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); g_signal_connect(G_OBJECT(button), "pressed", G_CALLBACK(render_special_mode), (void *)render_underexposed); g_signal_connect(G_OBJECT(button), "released", G_CALLBACK(render_special_mode), (void *)render_default); } static void whitebalance_fill_interface(preview_data *data, GtkWidget *page) { GtkTable *table; GtkTable *subTable; int i; GtkWidget *event_box; GtkWidget *button; GtkWidget *label; GtkComboBox *combo; GtkBox *box; GtkWidget *frame; ufraw_data *uf = data->UF; UFObject *image = CFG->ufobject; /* Start of White Balance setting page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); box = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_table_attach(table, GTK_WIDGET(box), 0, 8, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); UFObject *wb = ufgroup_element(image, ufWB); combo = GTK_COMBO_BOX(ufarray_combo_box_new(wb)); gtk_box_pack_start(box, GTK_WIDGET(combo), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(combo), _("White Balance")); button = ufnumber_spin_button_new( ufgroup_element(image, ufWBFineTuning)); gtk_box_pack_start(box, button, FALSE, FALSE, 0); if (!ufgroup_has(wb, uf_camera_wb)) { event_box = gtk_event_box_new(); label = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON); gtk_container_add(GTK_CONTAINER(event_box), label); gtk_box_pack_start(box, event_box, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(event_box, _("Cannot use camera white balance.")); } else if (!uf->wb_presets_make_model_match) { event_box = gtk_event_box_new(); label = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON); gtk_container_add(GTK_CONTAINER(event_box), label); gtk_box_pack_start(box, event_box, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(event_box, _("There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported.")); } GtkWidget *resetWB = ufobject_reset_button_new( _("Reset white balance to initial value")); ufobject_reset_button_add(resetWB, ufgroup_element(image, ufWB)); ufobject_reset_button_add(resetWB, ufgroup_element(image, ufWBFineTuning)); gtk_box_pack_start(box, resetWB, FALSE, FALSE, 0); ufobject_set_user_data(image, data); ufobject_set_changed_event_handle(image, ufraw_image_changed); subTable = GTK_TABLE(gtk_table_new(10, 1, FALSE)); gtk_table_attach(table, GTK_WIDGET(subTable), 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); ufnumber_adjustment_scale(ufgroup_element(image, ufTemperature), subTable, 0, 0, _("Temperature"), _("White balance color temperature (K)")); ufnumber_adjustment_scale(ufgroup_element(image, ufGreen), subTable, 0, 1, _("Green"), _("Green component")); // Spot WB button: button = stock_icon_button(GTK_STOCK_COLOR_PICKER, _("Select a spot on the preview image to apply spot white balance"), G_CALLBACK(spot_wb_event), NULL); gtk_table_attach(subTable, button, 7, 8, 0, 2, 0, 0, 0, 0); box = GTK_BOX(gtk_hbox_new(0, 0)); gtk_table_attach(table, GTK_WIDGET(box), 0, 1, 2, 3, 0, 0, 0, 0); label = gtk_label_new(_("Chan. multipliers:")); gtk_box_pack_start(box, label, FALSE, FALSE, 0); for (i = 0; i < data->UF->colors; i++) { button = ufnumber_array_spin_button_new( ufgroup_element(image, ufChannelMultipliers), i); gtk_box_pack_start(box, button, FALSE, FALSE, 0); } ufobject_reset_button_add(resetWB, ufgroup_element(image, ufChannelMultipliers)); /* Interpolation is temporarily in the WB page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); // box = GTK_BOX(gtk_hbox_new(FALSE, 6)); // gtk_table_attach(table, GTK_WIDGET(box), 0, 1, 0, 1, // GTK_EXPAND|GTK_FILL, 0, 0, 0); event_box = gtk_event_box_new(); GtkWidget *icon = gtk_image_new_from_stock("interpolation", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_container_add(GTK_CONTAINER(event_box), icon); gtk_table_attach(table, event_box, 0, 1, 0, 1, 0, 0, 0, 0); gtk_widget_set_tooltip_text(event_box, _("Bayer pattern interpolation")); combo = GTK_COMBO_BOX(uf_combo_box_new_text()); if (data->UF->HaveFilters) { if (data->UF->colors == 4) { uf_combo_box_append_text(combo, _("VNG four color interpolation"), (void*)four_color_interpolation); uf_combo_box_append_text(combo, _("Bilinear interpolation"), (void*)bilinear_interpolation); } else { uf_combo_box_append_text(combo, _("AHD interpolation"), (void*)ahd_interpolation); uf_combo_box_append_text(combo, _("VNG interpolation"), (void*)vng_interpolation); uf_combo_box_append_text(combo, _("VNG four color interpolation"), (void*)four_color_interpolation); uf_combo_box_append_text(combo, _("PPG interpolation"), (void*)ppg_interpolation); uf_combo_box_append_text(combo, _("Bilinear interpolation"), (void*)bilinear_interpolation); } #ifdef ENABLE_INTERP_NONE uf_combo_box_append_text(combo, _("No interpolation"), (void*)none_interpolation); #endif uf_combo_box_set_data(combo, &CFG->interpolation); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(combo_update_simple), (gpointer)ufraw_first_phase); } else { gtk_combo_box_append_text(combo, _("No Bayer pattern")); gtk_combo_box_set_active(combo, 0); gtk_widget_set_sensitive(GTK_WIDGET(combo), FALSE); } gtk_table_attach(table, GTK_WIDGET(combo), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); // Color smoothing button button = gtk_toggle_button_new(); gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_BUTTON)); gtk_table_attach(table, button, 2, 3, 0, 1, 0, 0, 0, 0); gtk_widget_set_tooltip_text(button, _("Apply color smoothing")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), CFG->smoothing); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_button_update), &CFG->smoothing); if (!data->UF->HaveFilters) gtk_widget_set_sensitive(button, FALSE); /* Denoising is temporarily in the WB page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); data->ThresholdAdjustment = adjustment_scale(table, 0, 0, _("Denoise"), CFG->threshold, &CFG->threshold, 0.0, 1000.0, 10, 50, 0, FALSE, _("Threshold for wavelet denoising"), G_CALLBACK(adjustment_update), &data->ResetThresholdButton, _("Reset denoise threshold to default"), G_CALLBACK(button_update)); /* Hot pixel shaving */ hotpixel_fill_interface(data, page); // Dark frame controls: box = GTK_BOX(gtk_hbox_new(FALSE, 0)); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); label = gtk_label_new(_("Dark Frame:")); gtk_box_pack_start(box, label, FALSE, FALSE, 0); label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(box, label, TRUE, TRUE, 6); data->DarkFrameLabel = GTK_LABEL(label); set_darkframe_label(data); button = stock_icon_button(GTK_STOCK_OPEN, _("Load dark frame"), G_CALLBACK(load_darkframe), NULL); gtk_box_pack_start(box, button, FALSE, FALSE, 0); button = reset_button( _("Reset dark frame"), G_CALLBACK(reset_darkframe), NULL); gtk_box_pack_start(box, button, FALSE, FALSE, 0); /* End of White Balance setting page */ } static void lightness_fill_interface(preview_data *data, GtkWidget *page) { long i; /* Start of Lightness Adjustments page */ GtkTable *table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); for (i = 0; i < max_adjustments; ++i) { GtkTable *subTable = GTK_TABLE(gtk_table_new(10, 1, FALSE)); gtk_table_attach(table, GTK_WIDGET(subTable), 0, 10, i, i + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->LightnessAdjustmentTable[i] = subTable; data->LightnessAdjustment[i] = adjustment_scale(subTable, 0, 0, NULL, CFG->lightnessAdjustment[i].adjustment, &CFG->lightnessAdjustment[i].adjustment, 0, 2, 0.01, 0.10, 2, FALSE, NULL, G_CALLBACK(adjustment_update), &data->ResetLightnessAdjustmentButton[i], _("Reset adjustment"), G_CALLBACK(button_update)); data->LightnessHueSelectButton[i] = stock_icon_button( GTK_STOCK_COLOR_PICKER, _("Select a spot on the preview image to choose hue"), G_CALLBACK(select_hue_event), (gpointer)i); widget_set_hue(data->LightnessHueSelectButton[i], CFG->lightnessAdjustment[i].hue); gtk_table_attach(subTable, data->LightnessHueSelectButton[i], 8, 9, 0, 1, 0, 0, 0, 0); data->LightnessHueRemoveButton[i] = stock_icon_button( GTK_STOCK_CANCEL, _("Remove adjustment"), G_CALLBACK(remove_hue_event), (gpointer)i); gtk_table_attach(subTable, data->LightnessHueRemoveButton[i], 9, 10, 0, 1, 0, 0, 0, 0); } // Hue select button: data->LightnessHueSelectNewButton = stock_icon_button( GTK_STOCK_COLOR_PICKER, _("Select a spot on the preview image to choose hue"), G_CALLBACK(select_hue_event), (gpointer) - 1); gtk_table_attach(table, data->LightnessHueSelectNewButton, 0, 1, max_adjustments, max_adjustments + 1, 0, 0, 0, 0); /* End of Lightness Adjustments page */ } static void grayscale_fill_interface(preview_data *data, GtkWidget *page) { GtkTable *table; GtkWidget *label; int i; /* Start of Grayscale page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); label = gtk_label_new(_("Grayscale Mode:")); gtk_table_attach(table, label, 0, 1, 0, 1, 0, 0, 0, 0); for (i = 0; i < 5; ++i) { data->GrayscaleButtons[i] = gtk_radio_button_new_with_label_from_widget( (i > 0) ? GTK_RADIO_BUTTON(data->GrayscaleButtons[0]) : NULL, _(grayscaleModeNames[i])); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( data->GrayscaleButtons[i]), CFG->grayscaleMode == i); gtk_table_attach(table, data->GrayscaleButtons[i], 1, 2, i, i + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); g_signal_connect(G_OBJECT(data->GrayscaleButtons[i]), "toggled", G_CALLBACK(grayscale_update), NULL); } data->GrayscaleMixerTable = GTK_TABLE(gtk_table_new(3, 3, FALSE)); gtk_table_attach(table, GTK_WIDGET(data->GrayscaleMixerTable), 0, 2, 6, 7, GTK_EXPAND | GTK_FILL, 0, 0, 0); for (i = 0; i < 3; ++i) { data->GrayscaleMixers[i] = adjustment_scale( data->GrayscaleMixerTable, 0, i, i == 0 ? "@channel-red" : i == 1 ? "@channel-green" : "@channel-blue", CFG->grayscaleMixer[i], &CFG->grayscaleMixer[i], -2.0, 2.0, .01, 0.10, 2, FALSE, NULL, G_CALLBACK(adjustment_update), NULL, NULL, NULL); } data->GrayscaleMixerColor = GTK_LABEL(gtk_label_new(NULL)); gtk_widget_set_size_request(GTK_WIDGET(data->GrayscaleMixerColor), 99, -1); gtk_table_attach(data->GrayscaleMixerTable, GTK_WIDGET(data->GrayscaleMixerColor), 0, 6, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->ResetGrayscaleChannelMixerButton = reset_button( _("Reset channel mixer"), G_CALLBACK(button_update), NULL); gtk_table_attach(data->GrayscaleMixerTable, data->ResetGrayscaleChannelMixerButton, 6, 7, 3, 4, 0, 0, 0, 0); /* End of Grayscale page */ } static void denoise_fill_interface(preview_data *data, GtkWidget *page) { GtkWidget *button, *label, *icon; GtkTable *table; GtkBox *box; int i; table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); int right = 6 + data->UF->colors; // Right column location icon = gtk_image_new_from_stock("gtk-help", GTK_ICON_SIZE_BUTTON); gtk_table_attach(table, icon, right, right + 1, 0, 1, 0, 0, 0, 0); gtk_widget_set_tooltip_text(icon, _( "Despeckling is mainly useful when combining a high ISO number " "with a high channel multiplier: when one channel has a very bad " "signal to noise ratio. Try setting window size, color decay and " "number of passes to 50,0,5 for that channel. When a channel " "contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When " "on then window size cannot be smaller than the number of passes.")); /* buttons on the right */ box = GTK_BOX(gtk_vbox_new(FALSE, 0)); button = gtk_toggle_button_new(); gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_stock( "object-lock", GTK_ICON_SIZE_BUTTON)); data->DespeckleLockChannelsButton = GTK_TOGGLE_BUTTON(button); gtk_box_pack_start(box, button, FALSE, FALSE, 0); gtk_table_attach(table, GTK_WIDGET(box), right, right + 1, 1, 4, GTK_FILL, 0, 0, 0); gtk_widget_set_tooltip_text(button, _("Update channel parameters together")); data->ResetDespeckleButton = reset_button(_("Reset despeckle parameters"), G_CALLBACK(button_update), NULL); gtk_box_pack_start(box, data->ResetDespeckleButton, FALSE, FALSE, 0); /* channel to view */ label = gtk_label_new(_("View channel:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(table, label, 0, 6, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); for (i = 0; i < data->UF->colors; ++i) { button = gtk_toggle_button_new(); gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_stock( i == 0 ? "channel-red" : i == 1 || i == 3 ? "channel-green" : "channel-blue", GTK_ICON_SIZE_BUTTON)); data->ChannelSelectButton[i] = GTK_TOGGLE_BUTTON(button); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_button_update), data->ChannelSelectButton); gtk_table_attach(table, button, 6 + i, 6 + i + 1, 0, 1, 0, 0, 0, 0); } data->ChannelSelect = -1; /* Parameters */ label = gtk_label_new(_("Window size:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(table, label, 0, 6, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); for (i = 0; i < data->UF->colors; ++i) { data->DespeckleWindowAdj[i] = GTK_ADJUSTMENT( gtk_adjustment_new(CFG->despeckleWindow[i], 0.0, 999.0, 1.0, 1.0, 0)); g_object_set_data(G_OBJECT(data->DespeckleWindowAdj[i]), "Adjustment-Accuracy", (gpointer)0); button = gtk_spin_button_new(data->DespeckleWindowAdj[i], 1.0, 0); g_object_set_data(G_OBJECT(data->DespeckleWindowAdj[i]), "Parent-Widget", button); g_signal_connect(G_OBJECT(data->DespeckleWindowAdj[i]), "value-changed", G_CALLBACK(adjustment_update), &CFG->despeckleWindow[i]); gtk_table_attach(table, button, 6 + i, 6 + i + 1, 1, 2, GTK_FILL, 0, 0, 0); } label = gtk_label_new(_("Color decay:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(table, label, 0, 6, 2, 3, GTK_FILL | GTK_EXPAND, 0, 0, 0); for (i = 0; i < data->UF->colors; ++i) { data->DespeckleDecayAdj[i] = GTK_ADJUSTMENT( gtk_adjustment_new(CFG->despeckleDecay[i], 0.0, 1.0, 0.1, 0.1, 0)); g_object_set_data(G_OBJECT(data->DespeckleDecayAdj[i]), "Adjustment-Accuracy", (gpointer)2); button = gtk_spin_button_new(data->DespeckleDecayAdj[i], 1.0, 2); g_object_set_data(G_OBJECT(data->DespeckleDecayAdj[i]), "Parent-Widget", button); g_signal_connect(G_OBJECT(data->DespeckleDecayAdj[i]), "value-changed", G_CALLBACK(adjustment_update), &CFG->despeckleDecay[i]); gtk_table_attach(table, button, 6 + i, 6 + i + 1, 2, 3, GTK_FILL, 0, 0, 0); } label = gtk_label_new(_("Passes:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(table, label, 0, 6, 3, 4, GTK_FILL | GTK_EXPAND, 0, 0, 0); for (i = 0; i < data->UF->colors; ++i) { data->DespecklePassesAdj[i] = GTK_ADJUSTMENT( gtk_adjustment_new(CFG->despecklePasses[i], 0.0, 99.0, 1.0, 1.0, 0)); g_object_set_data(G_OBJECT(data->DespecklePassesAdj[i]), "Adjustment-Accuracy", (gpointer)0); button = gtk_spin_button_new(data->DespecklePassesAdj[i], 1.0, 0); g_object_set_data(G_OBJECT(data->DespecklePassesAdj[i]), "Parent-Widget", button); g_signal_connect(G_OBJECT(data->DespecklePassesAdj[i]), "value-changed", G_CALLBACK(adjustment_update), &CFG->despecklePasses[i]); gtk_table_attach(table, button, 6 + i, 6 + i + 1, 3, 4, GTK_FILL, 0, 0, 0); } } static void basecurve_fill_interface(preview_data *data, GtkWidget *page, int curveeditorHeight) { GtkTable *table; GtkBox *box; GtkWidget *align; GtkWidget *button; int i; /* Start of Base Curve page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); box = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_table_attach(table, GTK_WIDGET(box), 0, 9, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->BaseCurveCombo = GTK_COMBO_BOX(uf_combo_box_new_text()); /* Fill in the curve names, skipping custom and camera curves if there is * no cameraCurve. This will make some mess later with the counting */ for (i = 0; i < CFG->BaseCurveCount; i++) { if ((i == custom_curve || i == camera_curve) && !CFG_cameraCurve) continue; if (i <= camera_curve) gtk_combo_box_append_text(data->BaseCurveCombo, _(CFG->BaseCurve[i].name)); else gtk_combo_box_append_text(data->BaseCurveCombo, CFG->BaseCurve[i].name); } /* This is part of the mess with the combo_box counting */ if (CFG->BaseCurveIndex > camera_curve && !CFG_cameraCurve) gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex - 2); else gtk_combo_box_set_active(data->BaseCurveCombo, CFG->BaseCurveIndex); g_signal_connect(G_OBJECT(data->BaseCurveCombo), "changed", G_CALLBACK(combo_update), &CFG->BaseCurveIndex); gtk_box_pack_start(box, GTK_WIDGET(data->BaseCurveCombo), TRUE, TRUE, 0); button = stock_icon_button(GTK_STOCK_OPEN, _("Load base curve"), G_CALLBACK(load_curve), (gpointer)base_curve); gtk_box_pack_start(box, button, FALSE, FALSE, 0); button = stock_icon_button(GTK_STOCK_SAVE_AS, _("Save base curve"), G_CALLBACK(save_curve), (gpointer)base_curve); gtk_box_pack_start(box, button, FALSE, FALSE, 0); box = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_table_attach(table, GTK_WIDGET(box), 0, 9, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->BaseCurveWidget = curveeditor_widget_new(curveeditorHeight, 256, curve_update, (gpointer)base_curve); curveeditor_widget_set_curve(data->BaseCurveWidget, &CFG->BaseCurve[CFG->BaseCurveIndex]); align = gtk_alignment_new(1, 0, 0, 1); gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(data->BaseCurveWidget)); gtk_box_pack_start(box, align, TRUE, TRUE, 0); data->ResetBaseCurveButton = reset_button( _("Reset base curve to default"), G_CALLBACK(button_update), NULL); align = gtk_alignment_new(0, 1, 1, 0); gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(data->ResetBaseCurveButton)); gtk_box_pack_start(box, align, FALSE, FALSE, 0); /* End of Base Curve page */ } static void colormgmt_fill_interface(preview_data *data, GtkWidget *page, int plugin) { GtkTable *table; GtkWidget *button; GtkWidget *event_box; GtkWidget *icon; GtkWidget *label; GtkComboBox *combo; int i; long j; /* Start of Color management page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); for (j = 0; j < profile_types; j++) { event_box = gtk_event_box_new(); icon = gtk_image_new_from_stock( j == in_profile ? "icc-profile-camera" : j == out_profile ? "icc-profile-output" : j == display_profile ? "icc-profile-display" : "error", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_container_add(GTK_CONTAINER(event_box), icon); gtk_table_attach(table, event_box, 0, 1, 4 * j + 1, 4 * j + 2, 0, 0, 0, 0); gtk_widget_set_tooltip_text(event_box, j == in_profile ? _("Input ICC profile") : j == out_profile ? _("Output ICC profile") : j == display_profile ? _("Display ICC profile") : "Error"); data->ProfileCombo[j] = GTK_COMBO_BOX(uf_combo_box_new_text()); for (i = 0; i < CFG->profileCount[j]; i++) if (i < conf_default.profileCount[j]) { gtk_combo_box_append_text(data->ProfileCombo[j], _(CFG->profile[j][i].name)); } else { gtk_combo_box_append_text(data->ProfileCombo[j], CFG->profile[j][i].name); } uf_combo_box_set_data(data->ProfileCombo[j], &CFG->profileIndex[j]); g_signal_connect_after(G_OBJECT(data->ProfileCombo[j]), "changed", G_CALLBACK(combo_update_simple), (gpointer)ufraw_develop_phase); gtk_table_attach(table, GTK_WIDGET(data->ProfileCombo[j]), 1, 8, 4 * j + 1, 4 * j + 2, GTK_FILL, GTK_FILL, 0, 0); button = stock_icon_button(GTK_STOCK_OPEN, NULL, G_CALLBACK(load_profile), (void *)j); gtk_table_attach(table, button, 8, 9, 4 * j + 1, 4 * j + 2, GTK_SHRINK, GTK_FILL, 0, 0); } data->GammaAdjustment = adjustment_scale(table, 1, 3, _("Gamma"), CFG->profile[0][CFG->profileIndex[0]].gamma, &CFG->profile[0][0].gamma, 0.1, 1.0, 0.01, 0.05, 2, FALSE, _("Gamma correction for the input profile"), G_CALLBACK(adjustment_update), &data->ResetGammaButton, _("Reset gamma to default"), G_CALLBACK(button_update)); data->LinearAdjustment = adjustment_scale(table, 1, 4, _("Linearity"), CFG->profile[0][CFG->profileIndex[0]].linear, &CFG->profile[0][0].linear, 0.0, 1.0, 0.01, 0.05, 3, FALSE, _("Linear part of the gamma correction"), G_CALLBACK(adjustment_update), &data->ResetLinearButton, _("Reset linearity to default"), G_CALLBACK(button_update)); label = gtk_label_new(_("Output intent")); gtk_table_attach(table, label, 0, 3, 6, 7, 0, 0, 0, 0); combo = GTK_COMBO_BOX(uf_combo_box_new_text()); gtk_combo_box_append_text(combo, _("Perceptual")); gtk_combo_box_append_text(combo, _("Relative colorimetric")); gtk_combo_box_append_text(combo, _("Saturation")); gtk_combo_box_append_text(combo, _("Absolute colorimetric")); uf_combo_box_set_data(GTK_COMBO_BOX(combo), (int *)&CFG->intent[out_profile]); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(combo_update_simple), (gpointer)ufraw_develop_phase); gtk_table_attach(table, GTK_WIDGET(combo), 3, 8, 6, 7, GTK_FILL, 0, 0, 0); label = gtk_label_new(_("Output bit depth")); gtk_table_attach(table, label, 0, 4, 7, 8, 0, 0, 0, 0); data->BitDepthCombo = GTK_COMBO_BOX(uf_combo_box_new_text()); uf_combo_box_append_text(data->BitDepthCombo, "8", (void*)8); if (plugin != 1) uf_combo_box_append_text(data->BitDepthCombo, "16", (void*)16); uf_combo_box_set_data(GTK_COMBO_BOX(data->BitDepthCombo), &CFG->profile[out_profile][CFG->profileIndex[out_profile]].BitDepth); g_signal_connect_after(G_OBJECT(data->BitDepthCombo), "changed", G_CALLBACK(combo_update_simple), (gpointer)ufraw_develop_phase); gtk_table_attach(table, GTK_WIDGET(data->BitDepthCombo), 4, 5, 7, 8, 0, 0, 0, 0); label = gtk_label_new(_("Display intent")); gtk_table_attach(table, label, 0, 3, 10, 11, 0, 0, 0, 0); combo = GTK_COMBO_BOX(uf_combo_box_new_text()); gtk_combo_box_append_text(combo, _("Perceptual")); gtk_combo_box_append_text(combo, _("Relative colorimetric")); gtk_combo_box_append_text(combo, _("Saturation")); gtk_combo_box_append_text(combo, _("Absolute colorimetric")); gtk_combo_box_append_text(combo, _("Disable soft proofing")); uf_combo_box_set_data(GTK_COMBO_BOX(combo), (int *)&CFG->intent[display_profile]); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(combo_update_simple), (gpointer)ufraw_develop_phase); gtk_table_attach(table, GTK_WIDGET(combo), 3, 8, 10, 11, GTK_FILL, 0, 0, 0); /* End of Color management page */ } static void corrections_fill_interface(preview_data *data, GtkWidget *page, int curveeditorHeight) { GtkTable *table; GtkWidget *button; GtkBox *box; GtkTable *subTable; int i; /* Start of Corrections page */ /* Contrast and Saturation adjustments */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); #ifdef UFRAW_CONTRAST data->ContrastAdjustment = adjustment_scale(table, 0, 0, _("Contrast"), CFG->contrast, &CFG->contrast, 0, 8.0, 0.01, 0.1, 2, FALSE, _("Global contrast adjustment"), G_CALLBACK(adjustment_update), &data->ResetContrastButton, _("Reset global contrast to default"), G_CALLBACK(button_update)); #endif data->SaturationAdjustment = adjustment_scale(table, 0, 1, _("Saturation"), CFG->saturation, &CFG->saturation, 0.0, 8.0, 0.01, 0.1, 2, FALSE, _("Saturation"), G_CALLBACK(adjustment_update), &data->ResetSaturationButton, _("Reset saturation to default"), G_CALLBACK(button_update)); table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); box = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_table_attach(table, GTK_WIDGET(box), 0, 9, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->CurveCombo = GTK_COMBO_BOX(uf_combo_box_new_text()); /* Fill in the curve names */ for (i = 0; i < CFG->curveCount; i++) if (i <= linear_curve) gtk_combo_box_append_text(data->CurveCombo, _(CFG->curve[i].name)); else gtk_combo_box_append_text(data->CurveCombo, CFG->curve[i].name); gtk_combo_box_set_active(data->CurveCombo, CFG->curveIndex); g_signal_connect(G_OBJECT(data->CurveCombo), "changed", G_CALLBACK(combo_update), &CFG->curveIndex); gtk_box_pack_start(box, GTK_WIDGET(data->CurveCombo), TRUE, TRUE, 0); button = stock_icon_button(GTK_STOCK_OPEN, _("Load curve"), G_CALLBACK(load_curve), (gpointer)luminosity_curve); gtk_box_pack_start(box, button, FALSE, FALSE, 0); button = stock_icon_button(GTK_STOCK_SAVE_AS, _("Save curve"), G_CALLBACK(save_curve), (gpointer)luminosity_curve); gtk_box_pack_start(box, button, FALSE, FALSE, 0); subTable = GTK_TABLE(gtk_table_new(9, 9, FALSE)); gtk_table_attach(table, GTK_WIDGET(subTable), 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->CurveWidget = curveeditor_widget_new(curveeditorHeight, 256, curve_update, (gpointer)luminosity_curve); curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); gtk_table_attach(subTable, data->CurveWidget, 1, 8, 1, 8, GTK_EXPAND | GTK_FILL, 0, 0, 0); data->AutoCurveButton = stock_icon_button("object-manual", _("Auto adjust curve\n(Flatten histogram)"), G_CALLBACK(button_update), NULL); gtk_table_attach(subTable, data->AutoCurveButton, 8, 9, 6, 7, 0, 0, 0, 0); data->ResetCurveButton = reset_button( _("Reset curve to default"), G_CALLBACK(button_update), NULL); gtk_table_attach(subTable, data->ResetCurveButton, 8, 9, 7, 8, 0, 0, 0, 0); data->BlackLabel = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(data->BlackLabel), 0.5, 1.0); gtk_label_set_angle(GTK_LABEL(data->BlackLabel), 90); gtk_table_attach(subTable, data->BlackLabel, 0, 1, 5, 6, 0, GTK_FILL | GTK_EXPAND, 0, 0); data->ResetBlackButton = reset_button( _("Reset black-point to default"), G_CALLBACK(button_update), NULL); gtk_table_attach(subTable, GTK_WIDGET(data->ResetBlackButton), 0, 1, 7, 8, 0, 0, 0, 0); data->AutoBlackButton = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); gtk_table_attach(subTable, GTK_WIDGET(data->AutoBlackButton), 0, 1, 6, 7, 0, GTK_SHRINK, 0, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(data->AutoBlackButton), _("Auto adjust black-point")); auto_button_toggle(data->AutoBlackButton, &CFG->autoBlack); g_signal_connect(G_OBJECT(data->AutoBlackButton), "toggled", G_CALLBACK(auto_button_toggled), &CFG->autoBlack); /* End of Corrections page */ } static void transformations_fill_interface(preview_data *data, GtkWidget *page) { GtkTable *table; GtkWidget *button; GtkWidget *entry; GtkWidget *label; /* Start of transformations page */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); /* Start of Crop controls */ label = gtk_label_new(_("Left:")); gtk_table_attach(table, label, 0, 1, 1, 2, 0, 0, 0, 0); data->CropX1Adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->CropX1, 0, data->UF->rotatedWidth, 1, 1, 0)); data->CropX1Spin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->CropX1Adjustment, 1, 0)); g_object_set_data(G_OBJECT(data->CropX1Adjustment), "Parent-Widget", data->CropX1Spin); gtk_table_attach( table, GTK_WIDGET(data->CropX1Spin), 1, 2, 1, 2, 0, 0, 0, 0); g_signal_connect(G_OBJECT(data->CropX1Adjustment), "value-changed", G_CALLBACK(adjustment_update), &CFG->CropX1); label = gtk_label_new(_("Top:")); gtk_table_attach(table, label, 1, 2, 0, 1, 0, 0, 0, 0); data->CropY1Adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->CropY1, 0, data->UF->rotatedHeight, 1, 1, 0)); data->CropY1Spin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->CropY1Adjustment, 1, 0)); g_object_set_data(G_OBJECT(data->CropY1Adjustment), "Parent-Widget", data->CropY1Spin); gtk_table_attach(table, GTK_WIDGET(data->CropY1Spin), 2, 3, 0, 1, 0, 0, 0, 0); g_signal_connect(G_OBJECT(data->CropY1Adjustment), "value-changed", G_CALLBACK(adjustment_update), &CFG->CropY1); label = gtk_label_new(_("Right:")); gtk_table_attach(table, label, 2, 3, 1, 2, 0, 0, 0, 0); data->CropX2Adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->CropX2, 0, data->UF->rotatedWidth, 1, 1, 0)); data->CropX2Spin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->CropX2Adjustment, 1, 0)); g_object_set_data(G_OBJECT(data->CropX2Adjustment), "Parent-Widget", data->CropX2Spin); gtk_table_attach(table, GTK_WIDGET(data->CropX2Spin), 3, 4, 1, 2, 0, 0, 0, 0); g_signal_connect(G_OBJECT(data->CropX2Adjustment), "value-changed", G_CALLBACK(adjustment_update), &CFG->CropX2); label = gtk_label_new(_("Bottom:")); gtk_table_attach(table, label, 1, 2, 2, 3, 0, 0, 0, 0); data->CropY2Adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->CropY2, 0, data->UF->rotatedHeight, 1, 1, 0)); data->CropY2Spin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->CropY2Adjustment, 1, 0)); g_object_set_data(G_OBJECT(data->CropY2Adjustment), "Parent-Widget", data->CropY2Spin); gtk_table_attach(table, GTK_WIDGET(data->CropY2Spin), 2, 3, 2, 3, 0, 0, 0, 0); g_signal_connect(G_OBJECT(data->CropY2Adjustment), "value-changed", G_CALLBACK(adjustment_update), &CFG->CropY2); data->AutoCropButton = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); gtk_table_attach(table, GTK_WIDGET(data->AutoCropButton), 4, 5, 1, 2, 0, 0, 0, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(data->AutoCropButton), _("Auto fit crop area")); auto_button_toggle(data->AutoCropButton, &CFG->autoCrop); g_signal_connect(G_OBJECT(data->AutoCropButton), "toggled", G_CALLBACK(auto_button_toggled), &CFG->autoCrop); // Crop reset button: button = reset_button( _("Reset the crop area"), G_CALLBACK(crop_reset), NULL); gtk_table_attach(table, button, 5, 6, 1, 2, 0, 0, 0, 0); /* Aspect ratio controls */ table = GTK_TABLE(table_with_frame(page, NULL, FALSE)); label = gtk_label_new(_("Aspect ratio:")); gtk_table_attach(table, label, 0, 1, 0, 1, 0, 0, 0, 0); entry = gtk_combo_box_entry_new_text(); data->AspectEntry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(entry))); gtk_entry_set_width_chars(data->AspectEntry, 6); gtk_entry_set_alignment(data->AspectEntry, 0.5); gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 0, 1, 0, 0, 5, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(data->AspectEntry), _("Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)")); size_t s; for (s = 0; s < sizeof(predef_aspects) / sizeof(predef_aspects[0]); s++) { gtk_combo_box_append_text(GTK_COMBO_BOX(entry), predef_aspects[s].text); } g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(aspect_changed), NULL); data->LockAspectButton = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); gtk_table_attach(table, GTK_WIDGET(data->LockAspectButton), 2, 3, 0, 1, 0, 0, 0, 0); g_signal_connect(G_OBJECT(data->LockAspectButton), "clicked", G_CALLBACK(lock_aspect), &CFG->LockAspect); // Update the icon and tooltip. lock_aspect(data->LockAspectButton, &CFG->LockAspect); /* Get initial aspect ratio */ if (CFG->aspectRatio != 0.0) set_new_aspect(data); else { int dy = CFG->CropY2 - CFG->CropY1; CFG->aspectRatio = dy ? ((CFG->CropX2 - CFG->CropX1) / (float)dy) : 1.0; } refresh_aspect(data); /* Size/shrink controls */ data->shrink = CFG->shrink; if (CFG->size == 0) { data->width = 0; data->height = 0; } else { data->shrink = 0; if (data->UF->rotatedWidth > data->UF->rotatedHeight) { data->width = CFG->size; data->height = CFG->size * data->UF->rotatedHeight / data->UF->rotatedWidth; } else { data->width = CFG->size * data->UF->rotatedWidth / data->UF->rotatedHeight; data->height = CFG->size; } } table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); label = gtk_label_new(_("Shrink factor")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, 0, 0, 0, 0); data->ShrinkAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(data->shrink, 1, 100, 1, 2, 0)); g_object_set_data(G_OBJECT(data->ShrinkAdjustment), "Adjustment-Accuracy", (gpointer)3); data->ShrinkSpin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->ShrinkAdjustment, 1, 3)); g_object_set_data(G_OBJECT(data->ShrinkAdjustment), "Parent-Widget", data->ShrinkSpin); g_signal_connect(G_OBJECT(data->ShrinkAdjustment), "value-changed", G_CALLBACK(adjustment_update), &data->shrink); gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(data->ShrinkSpin), 1, 2, 0, 1, 0, 0, 0, 0); label = gtk_label_new(_("Width")); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2, 0, 0, 0, 0); data->WidthAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(data->width, 10, 99999, 10, 100, 0)); g_object_set_data(G_OBJECT(data->WidthAdjustment), "Adjustment-Accuracy", (gpointer)0); data->WidthSpin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->WidthAdjustment, 10, 0)); g_object_set_data(G_OBJECT(data->WidthAdjustment), "Parent-Widget", data->WidthSpin); g_signal_connect(G_OBJECT(data->WidthAdjustment), "value-changed", G_CALLBACK(adjustment_update), &data->width); gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(data->WidthSpin), 2, 3, 1, 2, 0, 0, 0, 0); label = gtk_label_new(_("Height")); gtk_table_attach(GTK_TABLE(table), label, 3, 4, 1, 2, 0, 0, 0, 0); data->HeightAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(data->height, 10, 99999, 10, 100, 0)); g_object_set_data(G_OBJECT(data->HeightAdjustment), "Adjustment-Accuracy", (gpointer)0); data->HeightSpin = GTK_SPIN_BUTTON(gtk_spin_button_new( data->HeightAdjustment, 10, 0)); g_object_set_data(G_OBJECT(data->HeightAdjustment), "Parent-Widget", data->HeightSpin); g_signal_connect(G_OBJECT(data->HeightAdjustment), "value-changed", G_CALLBACK(adjustment_update), &data->height); gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(data->HeightSpin), 4, 5, 1, 2, 0, 0, 0, 0); /* Orientation controls */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); label = gtk_label_new(_("Orientation:")); gtk_table_attach(table, label, 0, 1, 0, 1, 0, 0, 0, 0); button = stock_image_button("object-rotate-right", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL, G_CALLBACK(flip_image), (gpointer)6); gtk_table_attach(table, button, 1, 2, 0, 1, 0, 0, 0, 0); button = stock_image_button("object-rotate-left", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL, G_CALLBACK(flip_image), (gpointer)5); gtk_table_attach(table, button, 2, 3, 0, 1, 0, 0, 0, 0); button = stock_image_button("object-flip-horizontal", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL, G_CALLBACK(flip_image), (gpointer)1); gtk_table_attach(table, button, 3, 4, 0, 1, 0, 0, 0, 0); button = stock_image_button("object-flip-vertical", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL, G_CALLBACK(flip_image), (gpointer)2); gtk_table_attach(table, button, 4, 5, 0, 1, 0, 0, 0, 0); /* Rotation controls */ table = GTK_TABLE(table_with_frame(page, NULL, TRUE)); ufraw_unnormalize_rotation(data->UF); data->RotationAdjustment = adjustment_scale( table, 0, 0, _("Rotation"), CFG->rotationAngle, NULL, -180, 180, 0.1, 1, 2, TRUE, _("Rotation angle"), G_CALLBACK(adjustment_update_rotation), &data->ResetRotationAdjustment, _("Reset rotation angle"), G_CALLBACK(adjustment_reset_rotation)); data->UnnormalizedOrientation = CFG->orientation; ufraw_normalize_rotation(data->UF); gtk_widget_set_sensitive(data->ResetRotationAdjustment, CFG->rotationAngle != 0 || CFG->orientation != CFG->CameraOrientation); // drawLines toggle button adjustment_scale(GTK_TABLE(table), 0, 1, _("Grid lines"), CFG->drawLines, &CFG->drawLines, 0, 20, 1, 1, 0, FALSE, _("Number of grid lines to overlay in the crop area"), G_CALLBACK(adjustment_update_int), NULL, NULL, NULL); /* End of transformation page */ } static void save_fill_interface(preview_data *data, GtkWidget *page, int plugin) { GtkWidget *button; GtkWidget *frame; GtkWidget *vBox; GtkWidget *hBox; GtkWidget *label; GtkWidget *event_box; int i; /* Start of Save page */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0); vBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(vBox)); hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0); label = gtk_label_new(_("Path")); gtk_box_pack_start(GTK_BOX(hBox), label, FALSE, FALSE, 0); GtkWidget *chooser = gtk_file_chooser_button_new( _("Select output path"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); /* Add shortcut to path of input file */ if (strlen(CFG->inputFilename) > 0) { char *cp = g_path_get_dirname(CFG->inputFilename); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(chooser), cp, NULL); g_free(cp); } // Set a small width to make sure the combo-box is not too big. // The final size is set by the EXPAND|FILL options. gtk_widget_set_size_request(chooser, 50, -1); char *absFilename = uf_file_set_absolute(CFG->outputFilename); gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(chooser), absFilename); g_free(absFilename); gtk_box_pack_start(GTK_BOX(hBox), chooser, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(chooser), "selection-changed", G_CALLBACK(outpath_chooser_changed), NULL); if (plugin == 3) gtk_widget_set_sensitive(chooser, FALSE); hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0); label = gtk_label_new(_("Filename")); gtk_box_pack_start(GTK_BOX(hBox), label, FALSE, FALSE, 0); data->OutFileEntry = GTK_ENTRY(gtk_entry_new()); char *basename = g_path_get_basename(CFG->outputFilename); char *basename_dn = g_filename_display_name(basename); gtk_entry_set_text(data->OutFileEntry, basename_dn); g_free(basename_dn); g_free(basename); gtk_box_pack_start(GTK_BOX(hBox), GTK_WIDGET(data->OutFileEntry), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(data->OutFileEntry), "changed", G_CALLBACK(outfile_entry_changed), NULL); if (plugin == 3) gtk_widget_set_sensitive(GTK_WIDGET(data->OutFileEntry), FALSE); data->TypeCombo = GTK_COMBO_BOX(gtk_combo_box_new_text()); i = 0; gtk_combo_box_append_text(data->TypeCombo, "PPM"); data->TypeComboMap[i++] = ppm_type; #ifdef HAVE_LIBPNG gtk_combo_box_append_text(data->TypeCombo, "PNG"); data->TypeComboMap[i++] = png_type; #endif #ifdef HAVE_LIBTIFF gtk_combo_box_append_text(data->TypeCombo, "TIFF"); data->TypeComboMap[i++] = tiff_type; #endif #ifdef HAVE_LIBJPEG gtk_combo_box_append_text(data->TypeCombo, "JPEG"); data->TypeComboMap[i++] = jpeg_type; #endif #ifdef HAVE_LIBCFITSIO gtk_combo_box_append_text(data->TypeCombo, "FITS"); data->TypeComboMap[i++] = fits_type; #endif data->TypeComboMap[i] = -1; for (i = 0; data->TypeComboMap[i] >= 0; i++) if (data->TypeComboMap[i] == CFG->type) gtk_combo_box_set_active(data->TypeCombo, i); gtk_box_pack_start(GTK_BOX(hBox), GTK_WIDGET(data->TypeCombo), FALSE, FALSE, 0); g_signal_connect(G_OBJECT(data->TypeCombo), "changed", G_CALLBACK(type_combo_changed), &CFG->type); if (plugin == 3) gtk_widget_set_sensitive(GTK_WIDGET(data->TypeCombo), FALSE); gtk_box_pack_start(GTK_BOX(vBox), gtk_hseparator_new(), FALSE, FALSE, 0); #ifdef HAVE_LIBJPEG hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0); label = gtk_label_new(_("JPEG compression level")); gtk_box_pack_start(GTK_BOX(hBox), label, FALSE, FALSE, 0); GtkAdjustment *compressAdj = GTK_ADJUSTMENT(gtk_adjustment_new(CFG->compression, 0, 100, 5, 10, 0)); GtkWidget *scale = gtk_hscale_new(compressAdj); gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); gtk_box_pack_start(GTK_BOX(hBox), scale, TRUE, TRUE, 0); button = gtk_spin_button_new(compressAdj, 5, 0); g_object_set_data(G_OBJECT(compressAdj), "Parent-Widget", button); gtk_box_pack_start(GTK_BOX(hBox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(compressAdj), "value-changed", G_CALLBACK(adjustment_update_int), &CFG->compression); button = uf_check_button_new(_("JPEG progressive encoding"), &CFG->progressiveJPEG); gtk_box_pack_start(GTK_BOX(vBox), button, FALSE, FALSE, 0); #endif // HAVE_LIBJPEG #if defined(HAVE_LIBTIFF) && defined(HAVE_LIBZ) button = uf_check_button_new(_("TIFF lossless Compress"), &CFG->losslessCompress); gtk_box_pack_start(GTK_BOX(vBox), button, FALSE, FALSE, 0); #endif // HAVE_LIBTIFF && HAVE_LIBZ #if defined(HAVE_EXIV2) && (defined(HAVE_LIBJPEG) || defined(HAVE_LIBPNG)) button = uf_check_button_new(_("Embed EXIF data in output"), &CFG->embedExif); gtk_widget_set_sensitive(button, data->UF->inputExifBuf != NULL); gtk_box_pack_start(GTK_BOX(vBox), button, FALSE, FALSE, 0); #endif // HAVE_EXIV2 && (HAVE_LIBJPEG || HAVE_LIBPNG) hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0); label = gtk_label_new(_("Create ID file ")); gtk_box_pack_start(GTK_BOX(hBox), label, FALSE, FALSE, 0); GtkComboBox *idCombo = GTK_COMBO_BOX(gtk_combo_box_new_text()); gtk_combo_box_append_text(idCombo, _("No")); gtk_combo_box_append_text(idCombo, _("Also")); gtk_combo_box_append_text(idCombo, _("Only")); uf_combo_box_set_data(idCombo, &CFG->createID); gtk_box_pack_start(GTK_BOX(hBox), GTK_WIDGET(idCombo), FALSE, FALSE, 0); hBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0); event_box = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(hBox), event_box, FALSE, FALSE, 0); label = gtk_label_new(_("Save image defaults ")); gtk_container_add(GTK_CONTAINER(event_box), label); gtk_widget_set_tooltip_text(event_box, _("Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved.")); GtkComboBox *confCombo = GTK_COMBO_BOX(gtk_combo_box_new_text()); gtk_combo_box_append_text(confCombo, _("Never again")); gtk_combo_box_append_text(confCombo, _("Always")); gtk_combo_box_append_text(confCombo, _("Just this once")); uf_combo_box_set_data(confCombo, &CFG->saveConfiguration); gtk_box_pack_start(GTK_BOX(hBox), GTK_WIDGET(confCombo), FALSE, FALSE, 0); button = uf_check_button_new(_("Remember output path"), &CFG->RememberOutputPath); gtk_box_pack_start(GTK_BOX(vBox), button, FALSE, FALSE, 0); button = uf_check_button_new( _("Overwrite existing files without asking"), &CFG->overwrite); gtk_box_pack_start(GTK_BOX(vBox), button, FALSE, FALSE, 0); /* End of Save page */ } static void exif_fill_interface(preview_data *data, GtkWidget *page) { GtkWidget *align; GtkWidget *frame; GtkWidget *vBox; GtkWidget *label; ufraw_data *uf = data->UF; /* Start of EXIF page */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0); vBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(vBox)); GtkListStore *store; store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); align = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(vBox), align, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(align), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview), 0); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE); // does not work??? gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE); g_object_unref(store); gtk_container_add(GTK_CONTAINER(align), treeview); GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes( _("Tag"), gtk_cell_renderer_text_new(), "text", 0, NULL); gtk_tree_view_column_set_sort_column_id(column, 0); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); column = gtk_tree_view_column_new_with_attributes( _("Value"), gtk_cell_renderer_text_new(), "text", 1, NULL); gtk_tree_view_column_set_sort_column_id(column, 1); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); // Fill table with EXIF tags list_store_add(store, _("Camera maker"), CFG->make); list_store_add(store, _("Camera model"), CFG->model); list_store_add(store, _("Timestamp"), CFG->timestampText); list_store_add(store, _("Shutter time"), CFG->shutterText); list_store_add(store, _("Aperture"), CFG->apertureText); list_store_add(store, _("ISO speed"), CFG->isoText); list_store_add(store, _("Focal length"), CFG->focalLenText); list_store_add(store, _("35mm focal length"), CFG->focalLen35Text); list_store_add(store, _("Lens"), CFG->lensText); list_store_add(store, _("Flash"), CFG->flashText); list_store_add(store, _("White balance"), CFG->whiteBalanceText); label = gtk_label_new(NULL); gchar *message = g_strdup_printf(_("EXIF data read by %s"), CFG->exifSource); gtk_label_set_markup(GTK_LABEL(label), message); gtk_box_pack_start(GTK_BOX(vBox), label, FALSE, FALSE, 0); g_free(message); if (uf->inputExifBuf == NULL) { label = gtk_label_new(NULL); char *text = g_strdup_printf("%s", _("Warning: EXIF data will not be sent to output")); gtk_label_set_markup(GTK_LABEL(label), text); g_free(text); gtk_box_pack_start(GTK_BOX(vBox), label, FALSE, FALSE, 0); } /* End of EXIF page */ } int ufraw_preview(ufraw_data *uf, conf_data *rc, int plugin, long(*save_func)()) { GtkWidget *previewWindow, *previewVBox; GtkTable *table; GtkBox *previewHBox, *box, *hbox; GtkWidget *button, *vBox, *page; GdkRectangle screen; int max_preview_width, max_preview_height; int preview_width, preview_height, i, c; int status, curveeditorHeight; preview_data PreviewData; preview_data *data = &PreviewData; /* Fill the whole structure with zeros, to avoid surprises */ memset(&PreviewData, 0, sizeof(PreviewData)); data->UF = uf; data->SaveFunc = save_func; data->rc = rc; data->SpotX1 = -1; data->SpotX2 = -1; data->SpotY1 = -1; data->SpotY2 = -1; data->SpotDraw = FALSE; data->FreezeDialog = TRUE; data->DrawnCropX1 = 0; data->DrawnCropX2 = 99999; data->DrawnCropY1 = 0; data->DrawnCropY2 = 99999; data->BlinkTimer = 0; data->DrawCropID = 0; for (i = 0; i < num_buttons; i++) { data->ControlButton[i] = NULL; data->ButtonMnemonic[i] = 0; } previewWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); char *utf8_filename = g_filename_display_name(uf->filename); char *previewHeader = g_strdup_printf(_("%s - UFRaw"), utf8_filename); gtk_window_set_title(GTK_WINDOW(previewWindow), previewHeader); g_free(previewHeader); g_free(utf8_filename); ufraw_icons_init(); gtk_window_set_icon_name(GTK_WINDOW(previewWindow), "ufraw"); g_signal_connect(G_OBJECT(previewWindow), "delete-event", G_CALLBACK(window_delete_event), NULL); g_signal_connect(G_OBJECT(previewWindow), "map-event", G_CALLBACK(window_map_event), NULL); g_signal_connect(G_OBJECT(previewWindow), "unmap-event", G_CALLBACK(window_unmap_event), NULL); g_signal_connect(G_OBJECT(previewWindow), "key-press-event", G_CALLBACK(control_button_key_press_event), data); g_object_set_data(G_OBJECT(previewWindow), "Preview-Data", data); ufraw_focus(previewWindow, TRUE); /* With the following guesses the window usually fits into the screen. * There should be more intelligent settings to window size. */ gdk_screen_get_monitor_geometry(gdk_screen_get_default(), 0, &screen); max_preview_width = MIN(def_preview_width, screen.width - 416); max_preview_height = MIN(def_preview_height, screen.height - 152); int scale = MAX((uf->rotatedWidth - 1) / max_preview_width, (uf->rotatedHeight - 1) / max_preview_height) + 1; scale = MAX(scale, 1); CFG->Zoom = 100.0 / scale; // Make preview size a tiny bit larger to prevent rounding errors // that will cause the scrollbars to appear. preview_width = (uf->rotatedWidth + 1) / scale; preview_height = (uf->rotatedHeight + 1) / scale; curveeditorHeight = screen.height < 900 ? 192 : 256; data->HisMinHeight = screen.height < 900 ? 16 * (screen.height - 600) / 50 : 96; if (data->HisMinHeight < 2) data->HisMinHeight = 2; previewHBox = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_container_add(GTK_CONTAINER(previewWindow), GTK_WIDGET(previewHBox)); previewVBox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(previewHBox, previewVBox, FALSE, FALSE, 2); g_signal_connect(G_OBJECT(previewVBox), "size-allocate", G_CALLBACK(panel_size_allocate), NULL); table = GTK_TABLE(table_with_frame(previewVBox, _(expanderText[raw_expander]), CFG->expander[raw_expander])); rawhistogram_fill_interface(data, table); // Spot values: data->SpotTable = GTK_TABLE(table_with_frame(previewVBox, NULL, FALSE)); data->SpotLabels = color_labels_new(data->SpotTable, 0, 0, _("Spot values:"), pixel_format, with_zone); data->SpotPatch = GTK_LABEL(gtk_label_new(NULL)); // Set a small width to make sure the combo-box is not too big. // The final size is set by the EXPAND|FILL options. gtk_widget_set_size_request(GTK_WIDGET(data->SpotPatch), 50, -1); gtk_table_attach(data->SpotTable, GTK_WIDGET(data->SpotPatch), 6, 7, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); button = stock_image_button(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU, NULL, G_CALLBACK(close_spot), NULL); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_table_attach(data->SpotTable, button, 7, 8, 0, 1, 0, 0, 0, 0); // Exposure: table = GTK_TABLE(table_with_frame(previewVBox, NULL, FALSE)); data->ExposureAdjustment = adjustment_scale(table, 0, 0, "@exposure", CFG->exposure, &CFG->exposure, -6, 6, 0.01, 1.0 / 6, 2, FALSE, _("Exposure compensation in EV"), G_CALLBACK(adjustment_update), NULL, NULL, NULL); button = gtk_toggle_button_new(); gtk_table_attach(table, button, 7, 8, 0, 1, 0, 0, 0, 0); restore_details_button_set(GTK_BUTTON(button), data); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_button_update), &CFG->restoreDetails); button = gtk_toggle_button_new(); gtk_table_attach(table, button, 8, 9, 0, 1, 0, 0, 0, 0); clip_highlights_button_set(GTK_BUTTON(button), data); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_button_update), &CFG->clipHighlights); data->AutoExposureButton = GTK_TOGGLE_BUTTON(gtk_toggle_button_new()); gtk_table_attach(table, GTK_WIDGET(data->AutoExposureButton), 9, 10, 0, 1, 0, 0, 0, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(data->AutoExposureButton), _("Auto adjust exposure")); auto_button_toggle(data->AutoExposureButton, &CFG->autoExposure); g_signal_connect(G_OBJECT(data->AutoExposureButton), "toggled", G_CALLBACK(auto_button_toggled), &CFG->autoExposure); data->ResetExposureButton = reset_button(_("Reset exposure to default"), G_CALLBACK(button_update), NULL); gtk_table_attach(table, data->ResetExposureButton, 10, 11, 0, 1, 0, 0, 0, 0); GtkNotebook *notebook = GTK_NOTEBOOK(gtk_notebook_new()); g_signal_connect(G_OBJECT(notebook), "switch-page", G_CALLBACK(notebook_switch_page), NULL); data->Controls = GTK_WIDGET(notebook); gtk_box_pack_start(GTK_BOX(previewVBox), GTK_WIDGET(notebook), FALSE, FALSE, 0); page = notebook_page_new(notebook, _("White balance"), "white-balance"); /* Set this page to be the opening page. */ data->PageNumSpot = gtk_notebook_page_num(notebook, page); data->PageNum = data->PageNumSpot; whitebalance_fill_interface(data, page); page = notebook_page_new(notebook, _("Grayscale"), "grayscale"); data->PageNumGray = gtk_notebook_page_num(notebook, page); grayscale_fill_interface(data, page); // page = notebook_page_new(notebook, _("Denoising"), "denoise"); denoise_fill_interface(data, page); #ifdef HAVE_LENSFUN /* Lens correction page */ page = notebook_page_new(notebook, _("Lens correction"), "lens"); data->PageNumLensfun = gtk_notebook_page_num(notebook, page); lens_fill_interface(data, page); #else /* HAVE_LENSFUN */ data->PageNumLensfun = -1; #endif /* HAVE_LENSFUN */ page = notebook_page_new(notebook, _("Base curve"), "base-curve"); basecurve_fill_interface(data, page, curveeditorHeight); page = notebook_page_new(notebook, _("Color management"), "color-management"); colormgmt_fill_interface(data, page, plugin); page = notebook_page_new(notebook, _("Correct luminosity, saturation"), "color-corrections"); corrections_fill_interface(data, page, curveeditorHeight); page = notebook_page_new(notebook, _("Lightness Adjustments"), "hueadjust"); data->PageNumLightness = gtk_notebook_page_num(notebook, page); lightness_fill_interface(data, page); page = notebook_page_new(notebook, _("Crop and rotate"), "crop"); data->PageNumCrop = gtk_notebook_page_num(notebook, page); transformations_fill_interface(data, page); if (plugin == 0 || plugin == 3) { page = notebook_page_new(notebook, _("Save"), GTK_STOCK_SAVE_AS); save_fill_interface(data, page, plugin); } page = notebook_page_new(notebook, _("EXIF"), "exif"); exif_fill_interface(data, page); table = GTK_TABLE(table_with_frame(previewVBox, _(expanderText[live_expander]), CFG->expander[live_expander])); livehistogram_fill_interface(data, table); /* Right side of the preview window */ vBox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(previewHBox, vBox, TRUE, TRUE, 2); GtkWidget *PreviewEventBox = gtk_event_box_new(); data->PreviewWidget = gtk_image_view_new(); gtk_image_view_set_interpolation(GTK_IMAGE_VIEW(data->PreviewWidget), GDK_INTERP_NEAREST); gtk_image_view_set_zoom(GTK_IMAGE_VIEW(data->PreviewWidget), 1.0); gtk_event_box_set_above_child(GTK_EVENT_BOX(PreviewEventBox), TRUE); GtkWidget *scroll = gtk_image_scroll_win_new( GTK_IMAGE_VIEW(data->PreviewWidget)); gtk_widget_set_size_request(scroll, preview_width, preview_height); GtkWidget *container = gtk_widget_get_ancestor(data->PreviewWidget, GTK_TYPE_TABLE); g_object_ref(G_OBJECT(data->PreviewWidget)); gtk_container_remove(GTK_CONTAINER(container), data->PreviewWidget); gtk_container_add(GTK_CONTAINER(PreviewEventBox), data->PreviewWidget); g_object_unref(G_OBJECT(data->PreviewWidget)); gtk_table_attach(GTK_TABLE(container), PreviewEventBox, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_box_pack_start(GTK_BOX(vBox), scroll, TRUE, TRUE, 0); data->PreviewButtonPressed = FALSE; g_signal_connect(G_OBJECT(PreviewEventBox), "button-press-event", G_CALLBACK(preview_button_press_event), NULL); g_signal_connect(G_OBJECT(PreviewEventBox), "button-release-event", G_CALLBACK(preview_button_release_event), NULL); g_signal_connect(G_OBJECT(PreviewEventBox), "motion-notify-event", G_CALLBACK(preview_motion_notify_event), NULL); gtk_widget_add_events(PreviewEventBox, GDK_POINTER_MOTION_MASK); // Hide zoom key bindings from GtkImageView GtkImageViewClass *klass = GTK_IMAGE_VIEW_GET_CLASS(GTK_IMAGE_VIEW(data->PreviewWidget)); GtkBindingSet *binding_set = gtk_binding_set_by_class(klass); gtk_binding_entry_remove(binding_set, GDK_1, 0); gtk_binding_entry_remove(binding_set, GDK_2, 0); gtk_binding_entry_remove(binding_set, GDK_3, 0); gtk_binding_entry_remove(binding_set, GDK_plus, 0); gtk_binding_entry_remove(binding_set, GDK_equal, 0); gtk_binding_entry_remove(binding_set, GDK_KP_Add, 0); gtk_binding_entry_remove(binding_set, GDK_minus, 0); gtk_binding_entry_remove(binding_set, GDK_KP_Subtract, 0); gtk_binding_entry_remove(binding_set, GDK_x, 0); // GtkImageView should only get the scoll up/down events GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; gtk_image_view_scroll_event = widget_class->scroll_event; widget_class->scroll_event = preview_scroll_event; data->ProgressBar = GTK_PROGRESS_BAR(gtk_progress_bar_new()); gtk_box_pack_start(GTK_BOX(vBox), GTK_WIDGET(data->ProgressBar), FALSE, FALSE, 0); /* Control buttons at the bottom */ GtkBox *ControlsBox = GTK_BOX(gtk_hbox_new(FALSE, 6)); gtk_box_pack_start(GTK_BOX(vBox), GTK_WIDGET(ControlsBox), FALSE, FALSE, 6); // Zoom buttons are centered: GtkBox *ZoomBox = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_box_pack_start(ControlsBox, GTK_WIDGET(ZoomBox), TRUE, FALSE, 0); // Zoom out button: button = stock_icon_button(GTK_STOCK_ZOOM_OUT, NULL, G_CALLBACK(zoom_out_event), NULL); gtk_box_pack_start(ZoomBox, button, FALSE, FALSE, 0); // Zoom percentage spin button: data->ZoomAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new( CFG->Zoom, 100 / max_scale, 400, 1, 1, 0)); g_object_set_data(G_OBJECT(data->ZoomAdjustment), "Adjustment-Accuracy", (gpointer)0); button = gtk_spin_button_new(data->ZoomAdjustment, 1, 0); g_object_set_data(G_OBJECT(data->ZoomAdjustment), "Parent-Widget", button); g_signal_connect(G_OBJECT(data->ZoomAdjustment), "value-changed", G_CALLBACK(zoom_update), NULL); gtk_box_pack_start(ZoomBox, button, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(button, _("Zoom percentage")); // Zoom in button: button = stock_icon_button(GTK_STOCK_ZOOM_IN, NULL, G_CALLBACK(zoom_in_event), NULL); gtk_box_pack_start(ZoomBox, button, FALSE, FALSE, 0); // Zoom fit button: button = stock_icon_button(GTK_STOCK_ZOOM_FIT, NULL, G_CALLBACK(zoom_fit_event), NULL); gtk_box_pack_start(ZoomBox, button, FALSE, FALSE, 0); // Zoom max button: button = stock_icon_button(GTK_STOCK_ZOOM_100, NULL, G_CALLBACK(zoom_100_event), NULL); gtk_box_pack_start(ZoomBox, button, FALSE, FALSE, 0); // The rest of the control button are aligned to the right box = GTK_BOX(gtk_hbox_new(FALSE, 6)); gtk_box_pack_start(GTK_BOX(ControlsBox), GTK_WIDGET(box), FALSE, FALSE, 0); /* Options button */ button = gtk_button_new(); hbox = GTK_BOX(gtk_hbox_new(FALSE, 6)); gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(hbox)); gtk_box_pack_start(hbox, gtk_image_new_from_stock( GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_BUTTON), FALSE, FALSE, 0); gtk_box_pack_start(hbox, gtk_label_new(_("Options")), FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(control_button_event), (gpointer)options_button); gtk_box_pack_start(box, button, FALSE, FALSE, 0); if (!plugin) { // Comment to translator: All control buttons // "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" // should have unique mnemonics. // Delete button: button = control_button(GTK_STOCK_DELETE, _("_Delete"), delete_button, data); gtk_box_pack_start(box, button, FALSE, FALSE, 0); } // Cancel button: button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(control_button_event), (gpointer)cancel_button); gtk_box_pack_start(box, button, FALSE, FALSE, 0); /* plugin=0 : Normal stand-alone * plugin=1 : Gimp plug-in * plugin=2 : Cinepaint plug-in * plugin=3 : Stand-alone with --output option */ if (plugin == 1 || plugin == 2) { // OK button for the plug-in data->SaveButton = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_box_pack_start(box, data->SaveButton, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(data->SaveButton), "clicked", G_CALLBACK(control_button_event), (gpointer)ok_button); gtk_widget_grab_focus(data->SaveButton); } else { // Save button for the stand-alone tool data->SaveButton = gtk_button_new_from_stock(GTK_STOCK_SAVE); gtk_box_pack_start(box, data->SaveButton, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(data->SaveButton), "clicked", G_CALLBACK(control_button_event), (gpointer)save_button); set_save_tooltip(data); } if (plugin == 0) { // Send to Gimp button GtkWidget *gimpButton = control_button("gimp", _("Send image to _Gimp"), gimp_button, data); gtk_box_pack_start(box, gimpButton, FALSE, FALSE, 0); } // Apply WindowMaximized state from previous session if (CFG->WindowMaximized) gtk_window_maximize(GTK_WINDOW(previewWindow)); gtk_widget_show_all(previewWindow); gtk_widget_hide(GTK_WIDGET(data->SpotTable)); for (i = CFG->lightnessAdjustmentCount; i < max_adjustments; i++) gtk_widget_hide(GTK_WIDGET(data->LightnessAdjustmentTable[i])); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), data->PageNumSpot); if (CFG->WindowMaximized) { gtk_widget_set_size_request(scroll, -1, -1); render_status_text(data); while (gtk_events_pending()) gtk_main_iteration(); // scroll widget is allocated size only after gtk_widget_show_all() int scrollWidth = scroll->allocation.width; int scrollHeight = scroll->allocation.height; double wScale = (double)data->UF->rotatedWidth / scrollWidth; double hScale = (double)data->UF->rotatedHeight / scrollHeight; CFG->Zoom = 100 / MAX(wScale, hScale); preview_width = uf->rotatedWidth * CFG->Zoom / 100; preview_height = uf->rotatedHeight * CFG->Zoom / 100; } // Allocate the preview pixbuf data->PreviewPixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, preview_width, preview_height); gdk_pixbuf_fill(data->PreviewPixbuf, 0); gtk_image_view_set_pixbuf(GTK_IMAGE_VIEW(data->PreviewWidget), data->PreviewPixbuf, FALSE); g_object_unref(data->PreviewPixbuf); for (i = 0; i < cursor_num; i++) data->Cursor[i] = gdk_cursor_new(Cursors[i]); gdk_window_set_cursor(PreviewEventBox->window, data->Cursor[spot_cursor]); gtk_widget_set_sensitive(data->Controls, FALSE); preview_progress_enable(data); ufraw_load_raw(uf); preview_progress_disable(data); gtk_widget_set_sensitive(data->Controls, TRUE); // Should only happen if ufraw_load_raw() failed: if (data->UF->rgbMax == 0) data->UF->rgbMax = 0xffff; // prevents division by zero /* After window size was set, the user may want to re-size it. * This function is called after the progress-bar text was set, * to make sure that there are no scroll-bars on the initial preview. */ gtk_widget_set_size_request(scroll, -1, -1); // Set shrink/size values for preview rendering CFG->shrink = zoom_to_scale(CFG->Zoom); if (CFG->shrink == 0) { int cropHeight = data->UF->conf->CropY2 - data->UF->conf->CropY1; int cropWidth = data->UF->conf->CropX2 - data->UF->conf->CropX1; int cropSize = MAX(cropHeight, cropWidth); CFG->size = MIN(CFG->Zoom, 100.0) / 100.0 * cropSize; } else { CFG->size = 0; } ufraw_invalidate_layer(data->UF, ufraw_first_phase); /* Save initial WB data for the sake of "Reset WB" */ UFObject *Image = CFG->ufobject; ufobject_set_default(ufgroup_element(Image, ufChannelMultipliers)); ufobject_set_default(ufgroup_element(Image, ufWB)); ufobject_set_default(ufgroup_element(Image, ufWBFineTuning)); /* Update the curve editor in case ufraw_convert_image() modified it. */ curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); memset(data->raw_his, 0, sizeof(data->raw_his)); data->RenderSubArea = -1; data->FreezeDialog = FALSE; data->RenderMode = render_default; /* This will start the conversion and enqueue rendering functions */ update_scales(data); render_preview_now(data); update_crop_ranges(data, FALSE); /* Collect raw histogram data */ ufraw_image_data *image = ufraw_get_image(data->UF, ufraw_first_phase, TRUE); for (i = 0; i < image->height * image->width; i++) { guint16 *buf = (guint16*)(image->buffer + i * image->depth); for (c = 0; c < data->UF->colors; c++) data->raw_his[MIN(buf[c] * (raw_his_size - 1) / data->UF->rgbMax, raw_his_size - 1)][c]++; } data->OverUnderTicker = 0; gtk_main(); status = (long)g_object_get_data(G_OBJECT(previewWindow), "WindowResponse"); gtk_container_foreach(GTK_CONTAINER(previewVBox), (GtkCallback)(expander_state), NULL); CFG->WindowMaximized = (gdk_window_get_state(GTK_WIDGET(previewWindow)->window) & GDK_WINDOW_STATE_MAXIMIZED) == GDK_WINDOW_STATE_MAXIMIZED; ufraw_focus(previewWindow, FALSE); gtk_widget_destroy(previewWindow); for (i = 0; i < cursor_num; i++) gdk_cursor_unref(data->Cursor[i]); /* Make sure that there are no preview idle task remaining */ while (g_idle_remove_by_data(data)) ; if (data->BlinkTimer) { g_source_remove(data->BlinkTimer); data->BlinkTimer = 0; } if (data->DrawCropID != 0) g_source_remove(data->DrawCropID); if (status == GTK_RESPONSE_OK) { gboolean SaveRC = FALSE; if (RC->RememberOutputPath != CFG->RememberOutputPath) { RC->RememberOutputPath = CFG->RememberOutputPath; SaveRC = TRUE; } if (!CFG->RememberOutputPath) g_strlcpy(CFG->outputPath, "", max_path); if (strncmp(RC->outputPath, CFG->outputPath, max_path) != 0) { g_strlcpy(RC->outputPath, CFG->outputPath, max_path); SaveRC = TRUE; } if (CFG->saveConfiguration == enabled_state) { /* Save configuration from CFG, but not the output filename. */ strcpy(CFG->outputFilename, ""); copy_conf_to_rc(data); conf_save(RC, NULL, NULL); /* If save 'only this once' was chosen, then so be it */ } else if (CFG->saveConfiguration == apply_state) { CFG->saveConfiguration = disabled_state; /* Save configuration from CFG, but not the output filename. */ strcpy(CFG->outputFilename, ""); copy_conf_to_rc(data); conf_save(RC, NULL, NULL); } else if (CFG->saveConfiguration == disabled_state) { /* If save 'never again' was set in this session, we still * need to save this setting */ if (RC->saveConfiguration != disabled_state) { RC->saveConfiguration = disabled_state; conf_save(RC, NULL, NULL); } else if (SaveRC) { conf_save(RC, NULL, NULL); } strcpy(RC->inputFilename, ""); strcpy(RC->outputFilename, ""); } } else { strcpy(RC->inputFilename, ""); strcpy(RC->outputFilename, ""); } // UFRAW_RESPONSE_DELETE requires no special action if (rc->darkframe != data->UF->conf->darkframe) ufraw_close_darkframe(data->UF->conf); ufraw_close(data->UF); g_free(data->SpotLabels); g_free(data->AvrLabels); g_free(data->DevLabels); g_free(data->OverLabels); g_free(data->UnderLabels); if (status != GTK_RESPONSE_OK) return UFRAW_CANCEL; return UFRAW_SUCCESS; } ufraw-0.19.2/README0000664000175000017500000006247412123762711010551 00000000000000UFRaw - Unidentified Flying Raw A utility to read and manipulate raw images from digital cameras http://ufraw.sourceforge.net/ by Udi Fuchs UFRaw is a utility to read and manipulate raw images from digital cameras. It can be used by itself or as a GIMP or CinePaint plug-in. It reads raw images using Dave Coffin's raw conversion utility DCRaw. It supports basic color management using Little CMS, allowing the user to apply color profiles. UFRaw was originally based on the GIMP plug-in by Dave Coffin http://www.cybercom.net/~dcoffin/ and on Pawel T. Jochym's (jochym at ifj edu pl) GIMP plug-in. UFRaw is licensed under the GNU General Public License version 2 or later. Terminology =========== This document uses the (Linux) term "development package" to denote that not only must a program be installed so that it can be run (binaries, shared libraries), but also so that other programs can be compiled against it (include files, static libraries). Many Linux packaging systems split programs into a regular and development package along these lines. Other packaging systems, such as pkgsrc, generally have a single package that includes the entire program, including header files. Installation ============ (If building from CVS rather than a release see also "Building UFRaw from CVS", below.) Building UFRaw requires development packages for GLib >= 2.12 and lcms >= 1.14. There are many optional dependencies which enable building additional programs and adding features to existing programs. The UFRaw build process expects Perl to be present (for pod2man). It is needed only if you are changing ufraw.pod or if you are building from CVS. A modern make is required. GNU make and BSD make both work currently. In case of trouble, try GNU make. Building UFRaw on the PowerPC platform requires GCC version 3.4 or newer. The first step of the installation is to run the configure script: ./configure At the end of the configuration you will get a summary of the installation settings. If most optional dependencies are present it will look like this: configure: ====================== summary ===================== configure: build GTK GUI: yes configure: build GIMP plug-in: yes configure: build CinePaint plug-in: yes configure: EXIF support using exiv2: yes configure: JPEG support: yes configure: JPEG2000 (libjasper) support: yes configure: TIFF support: yes configure: PNG support: yes configure: FITS support: yes configure: gzip compressed raw support: yes configure: bzip2 compressed raw support: yes configure: Lens defects correction via lensfun: yes If some of the lines end with 'no' instead of 'yes', UFRaw can still be built, but the named option will be disabled. Development packages for GTK+ version 2.12 or higher and GtkImageView version 1.6 or higher are required for the GUI. Development packages for GIMP version 2.2 or higher is required to build the GIMP plug-in. Development packages for Cinepaint-gtk version 0.22 or higher is required to build the Cinepaint plug-in. The development package for exiv2 version 0.20 or higher is required for reading the EXIF data. Among the supported formats are Canon (CRW, CR2), Fuji (RAF), Minolta (MRW), Nikon (NEF), Pentax (PEF), Samsung (PEF), Sony (SR2, ARW) and Adobe's DNG. If the configuration script does not find this package EXIF support will be omitted. The libjpeg development package is required for saving image in the JPEG format in the stand-alone tool. It is also needed to support Kodak DC120 and Adobe's lossy DNG. If the configuration script does not find this package JPEG support will be omitted. The libjasper development package is required to support image files from Red movie cameras. If the configuration script does not find this package support for such image files will be omitted. The libtiff development package is required for saving images in the TIFF format. If the configuration script does not find this package TIFF support will be omitted. The zlib development package is required for saving images in the TIFF format with lossless compression. If the configuration script does not find this package compressed TIFF support will be omitted. This pacakage also enables loading of raw files compressed with gzip. The libbz2 development package is required for loading of raw files compressed with bzip2. UFRaw is written in both C and C++, so if you set CFLAGS you should also set CXXFLAGS. If you do not set them, then the default for GNU C is "-W -Wall -g -O3 -fomit-frame-pointer". Other options for the configuration script are: --disable-openmp: don't try to use OpenMP support even if it is apparently present. --enable-extras: build the extra binaries - dcraw, nikon-curve. --enable-mime: install mime files (see mime section later on). --enable-dst-correction: enable DST correction for file timestamps. --enable-contrast: enable the contrast setting option. --enable-x-trans: enable support for the FUJIFILM 'X-Trans' sensor. --enable-interp-none: enable 'None' interpolation (mostly for debugging). --enable-valgrind: enable debugging with valgrind --with-prefix=PREFIX: use also PREFIX as input prefix for the build. --enable-no-cygwin: add the -mno-cygwin flag to CFLAGS and CXXFLAGS (only in Windows). --with-dosprefix=PREFIX: PREFIX is the prefix in DOS format (needed only in Windows). To build UFRaw: make To make a system wide installation: make install Note that the GIMP and Cinepaint plugins, if built, will be installed into UFRaw's prefix. Thus, if UFRaw's prefix is different from GIMP's and Cinepaint's prefix, you may have to add plugin directories to the search path, add symbolic links, or something similar. To use the UFRaw GIMP plugin, ensure that other raw converters (e.g. rawphoto) are not installed because they may claim the raw file first, preventing UFRaw from running. If one of the packages (lcms, libjpeg, libtiff, zlib etc.) is not installed on your system, and you can not install it using the normal packaging system, you can build it locally and use UFRaw's configuration option --with-prefix to point to its location. To build any of the above packages download the package and type: ./configure --prefix=$PREFIX make make install If zlib is built only locally you will have to configure libtiff with the command: ./configure --prefix=$PREFIX --with-zlib-include-dir=$PREFIX/include --with-zlib-lib-dir=$PREFIX/lib Finally, you should configure UFRaw with the command: ./configure --prefix=$PREFIX --with-prefix=$PREFIX Install mime files ================== Your desktop can automatically generate thumbnails to raw files and associate them with UFRaw by installing some mime file. To enable this option you need to use the configuration option '--enable-mime'. This options is limited to the GNOME desktop at the moment. The file ufraw-mime.xml is already part of shared-mime-info 0.21. If you are using an older version of this package, you should: cp ufraw-mime.xml /usr/share/mime/packages/ To finish the installation you should use the following (assuming you are using --prefix=/usr): # Associate mime type to raw images: $ (only needed if you are using shared-mime-info < 0.21) update-mime-database /usr/share/mime # Install UFRaw's thumbnails generator: GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` gconftool-2 --makefile-install-rule /usr/share/gconf/schemas/ufraw.schemas # Associate UFRaw with the raw images mime types: update-desktop-database More information can be found at: http://www.chauveau-central.net/page/c_raw.html http://www.penguin.cz/~utx/gnome-dcraw MS-Windows installation ======================= Windows users can simply download ufraw-VERSION-setup.exe that automatically installs UFRaw. Here are a few pointers if you still want to build UFRaw yourself. 'make install' will try to make a Unix like installation into /usr/local. 'make windows-installer' will create a Windows installer and 'make install-windows' will run this installer. For creating the installer UFRaw needs to know the path to all the DLLs. For this you should use the configuration option --with-dosprefix. For example, from CygWin: ./configure --with-prefix=/cygdrive/c/mingw32 --with-dosprefix=c:\\mingw32 \ --target=i686-mingw32msvc --host=i686-mingw32msvc --build=i686-mingw32msvc pkg-config behaves differently under MinGW32. Therefore, if you are cross-compiling from Linux or CygWin, you will have to modify all the *.pc files that come with the different packages. The following script should do the trick in Debian (update TARGET to your needs): TARGET=/opt/i586-mingw32msvc for f in $TARGET/lib/pkgconfig/*.pc ; do cat $f | sed s+^prefix=.*+prefix=$TARGET+ > $f.tmp mv $f.tmp $f done The gimp-dev package can be tricky to find. You can download it from: http://www.gimp.org/win32/gimp-dev-2.2.7.zip To build Cygwin binaries you can use the development libraries from: http://cygwinports.dotsrc.org/ Building UFRaw from CVS ======================= The development version has the following caveats: autoconf and automake must be installed. ./autogen.sh must be run before ./configure. The format of the ID files and of the configuration file $HOME/.ufrawrc may and will change before the final release. I try to make sure that the new releases will read such files correctly even if they are from previous releases. No attempt is made to keep backward compatibility with the different stages of the development versions. If you use the development version you might have to delete or fix manually such files from time to time. Last but not least, the development version is poorly tested and has some half written features, therefore it is bound to have bugs... Source control of UFRaw via CVS =============================== UFRaw has a CVS repository on sourceforge. Using the CVS, new versions of dcraw.c can be easily updated. Copy the latest version of dcraw.c from Dave Coffin to a UFRaw working directory with the filename dcraw.cc. Then type: cvs update -r dcraw-original-branch dcraw.cc cvs commit -m "dcraw original 7.86 (1.304)." dcraw.cc cvs update -A cvs update -j dcraw-original-latest -j dcraw-original-branch dcraw.cc cvs commit -m "dcraw modified 7.86 (1.304)." dcraw.cc cvs tag -F -r dcraw-original-branch dcraw-original-latest dcraw.cc This would commit the original dcraw.cc to the dcraw-original-branch and update the modified dcraw.cc in the main trunk. Remember to use the correct version (7.86 in the example) and revision (1.304 in the example) numbers. This update procedure is not foolproof. First there can be conflicts that have to be resolved. But even if there are no conflicts, one should check if there are new global variables or functions and add them to dcraw.h. One should also check if there where changes to the functions hat_transform(), wavelet_denoise(), scale_colors(), pre_interpolate(), border_interpolate(), lin_interpolate(), vng_interpolate(), ppg_interpolate(), ahd_interpolate(), convert_to_rgb(), fuji_rotate() or main(). Such changes could affect dcraw_indi.c or dcraw_api.cc. For Packagers ============= You are free to package UFRaw in any way, as long as it complies with the GNU GPL. The followings are just recommendations. Do not package the executables generated by by --enable-extras. These extras are there for testing the code during development. They are of no interest to end user. Specifically, if you want to package dcraw, you should use Dave's original code and not UFRaw's modified code. Notice also that the UFRaw executables have different dependencies. * ufraw-gimp depends on libgimp and all its derivatives. * ufraw only depends on libgtk and its derivatives. * ufraw-batch only depends on glib. In addition all the executables may depend on lcms, libjpeg, libtiff, zlib, exiv2 and lensfun, depending on the way you configured UFRaw's build. Lastly, I'm requesting that you should consider adding a link to http://ufraw.sourceforge.net/ where ever is appropriate on the package page. This site is the main source of information about UFRaw, including an up to date user guide. History ======= 25/03/2013 - UFRaw-0.19.2 released, based on DCRaw v 9.17. * Bug fix release. 07/03/2013 - UFRaw-0.19.1 released, based on DCRaw v 9.17. * Fix crash triggered by compiler optimization. 26/02/2013 - UFRaw-0.19 released, based on DCRaw v 9.17. * Maintenance release with lots of bug fixes. 20/02/2011 - UFRaw-0.18 released, based on DCRaw v 9.06. * New Traditional Chinese translation by Tetralet. * Port UFRaw to OpenSolaris. Patch by James Lee. 01/04/2010 - UFRaw-0.17 released, based on DCRaw v 8.99. * Lens distortion corrections using lenfun. This feature is now fully implemented and enabled by default. * Added a despeckling/denoising algorithm to solve issues with images taken under very difficult lighting conditions, like deep sea diving. It may be useful in other situations too. Patch by Frank van Maarseveen. * Enabled hot pixel elimination by default. * Calculate live histogram from working color-space instead of display color-space. Calculate live histogram from cropped area only. Based on patches by Konrad. * Added auto-crop option. * Allow upto 400% zoom. 15/10/2009 - UFRaw-0.16 released, based on DCRaw v 8.98. * New German translation by Matthias Urlichs and Chris Leick. * New Simplified Chinese translation. * Added --with-gtk configuration option to make GTK optional. * When GTK is used, the GtkImageView library is mandatory. * Added lightness adjustments by hue. Based on patch by Bruce Guenter. * Added --color-smoothing command line switch. * Added --maximize-window command line switch. * Configurable frame lines overlay. Patch by Bruce Guenter. * OpenMP support for preview redrawing. Patch by Bruce Guenter. * OpenMP support for VNG interpolation. Patch by Bruce Guenter. * Added rotation control to the transformations page of the GUI. Patch by Frank van Maarseveen. * Initial implementation of 100% preview. Based on patches by Frank van Maarseveen. * Added support for hot pixel elimination. It is an experimental feature enabled by the configuration switch --enable-hotpixels. Based on patch by Frank van Maarseveen. 24/12/2008 - UFRaw-0.15 released, based on DCRaw v 8.89. * Multiprocessing support using OpenMP. Patch by Bruce Guenter. * Add progress report during the loading of raw files. * Add JPEG optimization to reduce the file size without effecting image quality. * Compatibility with the just released Exiv2-0.18. * Support sRAW1 and sRAW2 formats of the Canon 50D and 5D Mark II. * Some annoying bugs got squashed. 19/10/2008 - UFRaw-0.14.1 release, based on DCRaw v 8.88. * Fix the "Send to Gimp" option to work with Gimp-2.6 that no longer ships the remote-gimp command. * Output and Display intents where switched when a proofing transformation was used. 16/10/2008 - UFRaw-0.14 release, based on DCRaw v 8.88. * Change license from 'GPLv2' to 'GPLv2 or later'. * Move save-as dialog controls to main window. * Add a 'remember output path' option. * Grayscale conversion. Patch by Bruce Guenter. * Experimental lensfun support. Patch by Andrew Zabolotny. Enable with './configure --with-lensfun'. Read http://ufraw.sourceforge.net/lensfun.html before using it. * Experimental contrast adjustment. Patch by Bruce Guenter. Enabled with './configure --enable-contrast'. * Added --enable-dst-correction configuration option to use local time (with DST) for file timestamps. * Arbitrary rotation support for ufraw-batch. Patch by Martin Ling. * Write EXIF data to TIFF files. Requires the soon to be released Exiv2-0.18. * Load private resource file $HOME/.ufraw-gtkrc at startup. * Replace the "use matrix" check box with a "Color matrix" profile. Patch by Rafael Espindola. * Remove misleading or irrelevant EXIF fields. Patch by Martin Ling. * Added --rotate=no to ufraw-batch. This is useful for creating contact sheets. Patch by Serge Droz. * Improved auto-exposure/black/curve tools by using normalized raw histogram instead of raw luminosity histogram. * For JPEG output, 2x2 sampling for the chrominance components was used by default. Now for compression>90 we use 2x1 sampling and for compression>92 we use 1x1 sampling. * Use predictor value 2 when saving deflated TIFFs for much better compression. * New Swedish translation by Daniel Nylander. * New Czech translation by Milan Knizek. * New Italian translation by Daniele Medri. * New Dutch translation by Simon Oosthoek. * New Norwegian translation by Alvin Brattli. * New Serbian translation (Cyrillic and Latin) by Milos Popovic. * New Catalan translation by Paco Riviere. 12/11/2007 - UFRaw-0.13 release, based on DCRaw v 8.80. * Simplified output path logic - output path defaults to the path of the input path. * Added 'System profile' option to read display ICC profile from the X display. Based on code from Gimp. * Do not read/write display ICC profile from/to ID files. * Show camera white balance in EXIF page. Patch by Erik Burrows. * Automatically fit histograms to allocated height. * Read Canon lens from EXIF data. Patch by Andreas Steinel. * Improved PPG interpolation. Patch by Alain Desbiolles. * Remember maximized state of window between sessions. * Add color smoothing option to all interpolation. Based on patch by alexander melkozerov. AHD+smoothing is exactly the same as the now obsolete EAHD. * Added darkframe to GUI (patch by Bruce Guenter). * Darkframe subtraction also handles hot pixels (patch by Bruce Guenter). * Show spot values only if spot is selected and allow unselecting spot values. * Add FITS output. Patch by Andreas Steinel. This option is disabled by default. * Progressive JPEG encoding. Patch by Bruce Guenter. * Blink over/under exposure in preview. Patch by Bruce Guenter. * Enable --output option for stand-alone tool. It forces the output filename to the value specified. It is useful for F-Spot. Patch by Stephane Delcroix. * Reimplemented the EXIF page. Patch by Andrew Zabolotny. * Display flash mode in EXIF page. * Moved shrink/size controls from Save dialog to main window. * Added delete button to stand-alone tool. * Added 'send to Gimp' option to stand-alone tool. * Made the save-as button an icon only, to save space. * Added option to save as PNG 8 or 16 bits. * Write EXIF data to PNG files. Based on code from DigiKam. * Added aspect ratio control. Patch by Andrew Zabolotny. * New Spanish translation by Enrique Jorreto Ledesma. * New Polish translation by Tomasz Golinski. * New Korean translation by Homin Lee. 10/08/2007 - UFRaw-0.12.1 release, based on DCRaw v 8.77. * Fixed handling of non integer shrink factors. * Fixed crash when spot selector reached image boundary. * Some TIFF images were wrongly identified as raw file. 30/07/2007 - UFRaw-0.12 released, based on DCRaw v 8.77. * Full color management workflow with camera, display and output profiles. * Added image cropping. Patch contributed by Martin Ling. * Added rotate/flip support. Patch contributed by Bruce Guenter. * Added scrolling and panning. Based on the new GtkImageView widget by Bjoern Lindqvist. * Added support for dcraw's wavelet denoising. Code contributed by Niels Kristian Bech Jensen. * Added Patterned Pixel Grouping (PPG) Interpolation. It can be even better than other interpolations in some cases and much faster. Patch contributed by Alain Desbiolles. * Added EAHD interpolation. It is an enhancement of the AHD interpolation with another phase of color smoothing. The improvement is mostly seen in high contrast as it removes color artifacts such as chromatic aberration. Patch contributed by Michael Goertz. * Read raw files compressed with gzip or bzip2. Patch contributed by Bruce Guenter. * Display luminosity value and Adams' zone for spot value. Patch contributed by Greg Troxel. * Added 'max zoom' (only 50% at the moment) and 'zoom to fit' buttons. * Retain some hue and saturation when clipping pixels. This is only relevant when applying positive exposure compensation, and mostly for Canon cameras where positive exposure is applied by default. * Added a Cinepaint plug-in. Thanks to Cinepaint developer Kai-Uwe Behrmann. * Based the user interface more on icons and less on text. * Removed dependency on libexif. * Dozens of smaller fixes. 06/03/2007 - UFRaw-0.11 released, based on DCRaw v 8.62. * Add option to restore highlights. The restoration can be done either in HSV space giving sharp details or in LCH space giving soft natural details. This option is relevant when applying negative exposure correction in UFRaw. * Add option for soft, filmlike clipping of highlights. This option is relevant when applying positive exposure correction in UFRaw. * Give the correct camera exposure by default for Canon DSLRs. Until now raw images from these cameras came out under exposed. * For Windows users, fix conflict with the liblcms-1.dll supplied with the Gimp windows instaler. * Added translation to Danish, Japanese and Portuguese. 26/10/2006 - UFRaw-0.10 released, based on DCRaw v 8.41. * Apply luminosity curve and saturation corrections in LCH(ab) space. * Add the '--embedded-image' option to ufraw-batch for reading the embedded preview image in raw files. * Use the above code in the Gimp plug-in for a much quicker generation of the preview thumbnails. * Add mime types to recognize raw files in the Gnome desktop. * Add schemas to generate thumbnails for these mime types. * Modify the desktop entry to associate ufraw with these mime types. * If 'save ID' is set to 'never again' then .ufrawrc is not written after each processed image. * Add a 'Cancel' button to the 'Options' window. * Fix compatibility issues with GTK+ 2.10. * When handling ID files save output image in same directory as ID file. * If input and output filenames in the ID file have the same path, then input filename is searched for in the path of the ID file. This allows moving raw and ID files together between folders. * Add translations to French and Russian. * Some bug corrections. 12/08/2006 - UFRaw-0.9.1 released, based on DCRaw v8.29. * Recognize Sony's *.arw file type. * Redirect exiv2 warnings from the terminal to the log. * Fix build for some build environments (libjpeg errors). * Treat Minolta's Alpha and Maxxum models as the Dynax model for WB presets. 03/08/2006 - UFRaw-0.9 released, based on DCRaw v8.28. * Display EXIF data in user interface. * Add darkframe subtraction option. * More conservative highlight unclipping. * Support filenames in URI format. * Some bug corrections. 13/05/2006 - UFRaw-0.8.1 released, based on DCRaw v8.15. * Fix Gimp plug-in half-interpolation crash. * Fix possible crash in auto-exposure. 04/05/2006 - UFRaw-0.8 released, based on DCRaw v8.13. * Preliminary zoom support, only up to 50% and with no scrolling. * Auto white balance is much faster. * Auto exposure is smarter, and hopefully better. * Auto black and auto curve are much faster. * EXIF data of Canon CRW files can be read using Exiv2 (not enabled by default). * EXIF data of Fuji RAF files can be read using libexif (not enabled by default). * White balance presets for more cameras. * Fix the bug that sometimes caused a 'maze effect'. * A few minor bug fixes. 03/03/2006 - UFRaw-0.7 released, based on DCRaw v8.05. * Much more accurate white balance temperature setting. * White balance presets per camera model. * Show the channel multipliers in the UI. * Apply base curve before gamma curve. * Fix a few general bugs. * Fix camera specific bugs for Sony F828, Sigma Foveon, Nikon D2H, D1X. 13/11/2005 - UFRaw-0.6 released, based on DCRaw v7.84. * Enabled AHD (Adaptive Homogeneity-Directed) interpolation. * Added base curve, which simulates Nikon tone curve behavior. (The old correction curve is still there.) * Automatically apply the embedded custom curve only if the camera was setup to use this curve. * Support the D1X rectangular pixels. * Fix EXIF support with libtiff 3.7.4. * Some bug fixes. 25/09/2005 - UFRaw-0.5 released, based on DCRaw v7.65. * Read support for Nikon Tone Curve (NTC/NCV) files. * Added a curve editor. * Added control on the base curve (see the user guide for more information). * Support the new DCRaw color matrices for better color rendering. * More controls can be set from the command-line. * Preliminary EXIF support. * New UFRaw ID files contain all the conversion parameters and allow for batch conversion. * New 'ufraw-batch' replaces 'ufraw --batch'. * Numerous other changes. * Notice that the new Adaptive Homogeneity-Directed interpolation is still not enabled. 08/02/2005 - UFRaw-0.4 released, based on DCRaw v6.33. * Rotate Fuji images by 45 degrees. * Preview dialog is more responsive. * Disable internationalization for Hebrew and Arabic (The right to left setting doesn't do good to the preview dialog). * Bug correction - ufraw --batch did not calculate WB in some cases. * Bug correction - Seg Fault for some images. 23/01/2005 - UFRaw-0.3 released, based on DCRaw v6.23. * Added basic color management support using Little CMS. * Made a stand-alone version with a GUI interface and batch processing support. Images can be saved in the PPM, TIFF, and JPEG formats. * Settings are saved between sessions in a configuration file. * Added white balance presets (direct sunlight, cloudy, shade, flash, etc.) * Several possible live histograms. * Initial (a bit slow) support for thumbnails in the GIMP 2.0 open file dialog. * Many smaller changes. 28/10/2004 - UFRaw-0.2 released, based on DCRaw v6.10. * Added support for Nikon Tone Curves. * This version can be used on the smaller 1024x768 screens. * I'm finally satisfied with the Saturation control. * Many small changes. 11/10/2004 - UFRaw-0.1 released, based on DCRaw v6.07. * Initial version. ufraw-0.19.2/ufraw_icon.ico0000644000175000017500000000727611335734227012523 0000000000000000¨(0` ±±±¯¯¯xxw ©©©>=<Y_e£££¡¡¡654ŸŸŸ4321//™™™¥ª¬,+*``_“““&%$YXXXXWWVVÎÑÖ ‰‰‰¹ººIHHZXVyyyCBBBBA bce@@? ((*£¤¤¡¢¢°³¸Ÿ  ggg›œœËÍ͸»½aaa**)(('Z[ZGIJ$$#‹ŒŒVWV!" UUUSSS‡ŒQQQLML³µµ][Z~~Ÿ¡¤[YX||}AAA qrr|„777hhi 111 dde./.¼ÁÉ!!!1/./-,-+*MNN)'&JJK²´µ'%$[ZYZXXWVU!PUXuuwrst¸¸¸¶¶¶nop´´´²²²°°°®®® " ªªª ¨¨¨ =<;¦¦¦’”•ÅÉÉÔÚߢ¢¢¨²¹543žžžVWXœœœˆŠ‹˜˜˜.,,-,+”””€‚ƒ*((]]\&$$ŽŽŽgjm$""XWWŒŒŒxz{" ŠŠŠ POO„„„¸¹¹¶··HLQ€€€kln²³³|||zzzEED®¯¯¬­­ ª««  ;;::99¢££YZ\jjj÷öóœdddbbb–——```’““\\\‘‘ZZZVVV½¾¿RRR¬‰–PPP°²²º¿ÃSRP  Ž“gjrVWZ®®­—˜™[[\YYZjih–›Ÿšš™0.-QQRPQQ¸»»^]\(&%&$#FGG$"!zz|#" ©«¬···µµµKKIÂÂÕäU«t˜«pJ“†ÞÐLPÒZ+KŽ(@ÇÇ•ËiiMMj%š#ð¿‡‡Â…šÑF±a(õ¡ëIjkÖ™ÅXÇáâÎ ‡‡‡»* ””©ìbææchŸ©xïõ•ŠõoÇÉÉ”®žÑ¶‡¿‡¸¹¿.¹‡ ‚aceí#¼ªß_ÝÀÌÉ,¿v‘ï‡ ‡Ü¿¹¯Gv^xv Z”ì™ö»V®´gÝÞŒCÌËE¼»Y ¿¿ 3ÜÙ$¤`­xWzeíïn©Äô8 ÞçÑ(‚ŠÐ¶zxvx¸¹¹¹¸*¹&G¢¦Y}}Ÿlrñîtyg§qÍmfdÎ̽x÷ rzzW¯¯¯&³zzY¶¸--±XÊ·{wsq!8Í/FEBCr}Ÿ¦[µµµµµµµµRR¶R¹×A¼Ë°€~²Ôusq!8_|QC Ðèö¸¸¸¸S-ØÚºÓ;¼ÑX"å4ˆ€~{wô§ó¥êÕD=‘Ÿ ÐA>>:]½)FÉÁ®›Êåˆ €~·y¬uH§ó!7˜\Ä5ÁtT°ª"£ž?ÈÆÃ¾0~´²€68‰Uœ°®ª£—’Æ‹ˆ ƒ€€ªÄ°'pމäÛÛ„„„ÆàÃ4„ãÅëÇÎBÅ],¢°°T¨¯ lÓ e›¼¸š¥±6Œ¢*Ì/¯1tnÇqÈf³s9•ÜNeÑ5•”íÞkëýVR†¡“\{@€wß}Ë÷½·ånÿo§²X¦$mÿë‚ä¥*Òz¥S_.ˆ›¦ùY`dlØÐ4-öú«§øøòGd©@²L‰t]§÷t/U¡@>677ë~51>½=ƒc {´P¨’€¥á83ñUwWá ¿¨¹çù ¿ÎÍm¨Ç0 êëëùîò·BJùIÀ4Íþ®çº+ÇáÔ±Ã|pa†ÒIªkk +0LÏóÈdÖȤӬÛ6޽ÎKÝÍ„*,,Ëbé¯%é8Îý±Õ<`dl¸Ý2­¶h´‰t:Íñ£OÒyxßüt“ë +ÜL$XZ±ê#ö„híhäÙŽ½´DkÐ4 ×u ‡Ã|}iÂñ<ï=ØÒd]×{»ººM!¾ï£ª*û¢»9ùb-B„xž‡ Û¹\Ž`0Èúú:.&úc“yÀÈØpHÓ´m۵͇³Ý`sø¾_r­©©‰©©IÇó¼ÑüÁ7æíaÉd²¤A¹°,‹©_~Àù€a}O3™ ¹\nǦ[UWWÇ×…òÓþØ€ŒŒ ?S]½«±¦¦UU‰D"E¯ã½$¥äÂÅÏs¾ðÏn뺮¿ÙüPs —¬ùN´¸˜À¶×fûc¿´ÍÌM«3sÓ÷uò-Ààö`É/óA©èö¿üçnþ‰Ê×:IEND®B`‚ufraw-0.19.2/icons/interpolation.svg0000644000175000017500000000732211335734227014406 00000000000000 image/svg+xml ufraw-0.19.2/icons/icc-profile-display.svg0000644000175000017500000002537611335734227015367 00000000000000 image/svg+xml ufraw-0.19.2/icons/curve-24.png0000644000175000017500000000133011335734227013044 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<UIDATH‰­–AHTQ†¿3‘ Ž*3• 10Ä&ˆÜ$­\´Dw¶ª…’3`»@¡–³ "0k3ÍR$ÈfÑj„Y(Ù¢0ñ©ÐøN‹¹o¼oõ©óoîýÏ}çþïœóÎቪÒLH6ûĢˡ@N"—Tu? ÆœµÏ†Ì³@È™ƒN³nšu@DV-Ç$ð½o%“ñ©yT€²ªŒ`7€ª– Ç;«ç"6w;=>@‘à–þþgŒŽ×Þ8—SÊå÷”JÙÞngp°”N‘>`\D^}Ƭìîþò=82òPççOZ vಈ¤–ÇÆžvE"ñÕ‰‰Ø‹¡¡øT>¯ÀWàðè ·÷» kk=ž?pÍ3{àxyÝ›žžk ‡o\mkã¯ënNåóãªúÁŠ*M*õøÀÎN;©T^—–еó:þìï·¶„ÃÜŠÇ¿ÛõÏèÌL®¥DµØè® Œ?§³‘ý,Yk„v“jMÞoÍù€ˆØ~'ñ$P°j} "`x©ªkp|Å=øR$"·{æíŽ =(êkðØÞ5ãr¨ëà>Õï}G§¯AÃ>ˆPrÏe6‹Žàioo§è: ÀâÑž ¶À ¨ª?š)àëà³ ¯ÎUƒÃ>l¶ÉÉÇ8N Ñh’h4F&sÞø"¸H,ÖE,Ð t ?þv++0s_D¶Œ5a@÷ <."%U].®ëàºU±J¥láÇú)ù†·‘fÿ¶Ôã‰L⯺?cËIEND®B`‚ufraw-0.19.2/icons/tca.svg0000644000175000017500000001742511335734227012273 00000000000000 image/svg+xml A A A ufraw-0.19.2/icons/hueadjust.svg0000644000175000017500000000623611335734227013516 00000000000000 image/svg+xml ufraw-0.19.2/icons/restore-lch-24.png0000644000175000017500000000164011335734227014153 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<IDATH‰µ•_hSgÆïI“ž¤ç,%œT¼hG§P­“€H¬¸»ZÁ›íj°ë]Ä€ TðÆoñb•ÁH -f•éÅœ²06“FÍ ñ˜sÞ]¤1Ò4;Ùó~Ï÷>ÏsÎûýUåÿ|Œ~E$%"?ˆÈMqúvPÕЋÅ&mÛ^tGÇQÛ¶b±ØT?\ +‘mÛ}ŸN§×uQU,Ë¢\.—‹Åâg¿ü?´DÑhô’ïûN£ÑxýUFƒf³™6MóÛ0~¨ªš½Æ‚ ˆ‡ñÂDdÀó<\×Å0 à^¯A_ü~ “IÕ'ìÝkP­*ÏžÅQDÞÙ`x¸‘ÈçÿàΟóç¡Z…Ë—¡RâêÕè«w2Ø¿_òss$÷탵µ–L‚ë¹s.é4ïKîÑ#]î)ÒkýŽŒðá™3ü©ŠÎÏ£ á‹ÑJ¥Ÿ8Áo€ÝKg{Ì™~õýtú4êy”й¹V¼¾ŽærÜ|+ƒl–KÅ"A:y²;-ŸïÄóó¸»wóévZ]û@DÌl–OvíBJ%é.m$¾ßŠ%1>Η}ÍÁž=|U(ÐlC×®¡««Ýp뺸Øé_¹ÂÓáa> -Ñì,?¿ :…Áª&Tµó®×-={6¢ªUE›MôàA¾Ûª×µLS)’ÞLOgùx ˜@ °‰Ç;¶ü|M$ŽCj«^—ibµã/15õÁfÚ ¼ N&3A­öË@±,ÞÛª×5Éëë”Û±mŒŽ¦€*›âà‘NbYÏÖ‘_*u¸= ?fµTj÷®#"@(ÿà 0€ÈKà++xÅ"?mÕÛn“Y33Ük6ÛPJU“ªj¾1уªjo6´VCæ6`ôµÑFG™<~œ{â‡ÝŠ÷ïã9°㭮LÌf¹01A6“açô4;s9†<––¨-/ów¹Ì_kkܾ{—oT5ØV'ìNÞ4‹E"˜œd6ð ~ ªê‡qÿèC³$ÜRêIEND®B`‚ufraw-0.19.2/icons/digital-24.png0000644000175000017500000000254311335734227013344 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<àIDATH‰¥”YL”W†Ÿ3óÏ ð¨lŠ+ T¥UDëcÚ´Z›ªÕb©$ôÂtIzÓ “&H“Þô¢Öö¢6­µ…Ö*RmLƒMý‘º#Eq©ë à0,Ã03Ìz1̰޴ý’“?çä;ß“÷Í{~!¥dbÙíö9Ë¢Vf¦GÙb”o ‹=攘pÈ3:–-êœ=ÛøøZCϾ×^Jtï*©ìúÏ»Ýnú ŠW±Fòd a¼QH²2-½f£híuúÏä­Š±ÄFT—wÿÀ‹ÀÙœ„{¬êäQ"\Î2q2k÷û“ˆêŒ ÷ÆXõ˜Œº¿m6¥)}±Ùãr~º(#þzIÉÑ‘‰e °`Ù°€ä.xµËKÕÞ‡Ôí~ˆÑi$¦1†?(ô:èîOéîõ§´ßõ „ÜÞׯõ<¸·­³öâÀgRJUUÕ‡3rï{&žÏ~}q>ú×÷pp+DxÙ0[£æV1 ˜”ÀÓa€ÝnVú¬>~Î×pÖ@ÞUè˜ޤqXnDŒñ“» ^Œpçý;FY@Ru@ÍT‹ÖJN?e  0y!îû­Pš vÖ^&ÿ¼wFu!…z>´­ÐM赸V¸Â^8Ô7à£ýA€ÍEuZe¥PS#æàwbÙmP;UA€+Ç5ùÆÄ šŽÆíhŒ nŽ8|»OÁ&6#"ñ&Æ>#ÀMUUû€1ÿŸ‰2¹©ßì¦Æª~KÍÄÙ•8È» ‘Ãã–\ɇڱuàº-ßa{&*X(K,2Ú!£Þú ¾|§w[²‚F×nļò“B®Ú'‰¼Aþ4@Àòá¾éî,m ®·S½ ’¿ÎUíPycù¤þÄÁv˜àÿ4@¬gM€nìqOLˆÉ k/ƒy2nÃÎ*8Ù]€lÉÕŽR—¥Ã p#ä?€Ê?À!Örø‹£¤*.†0Û V_ UíFÈn†ìfæœNÏ—L²'¤`¤ð•„ÓR/VutzE]ƒHnîYhhr÷‚?Úk¹‹TÑES†“§nKÄuŽç4€Rr¼¼¨Bö¸hü£ä8ûœ-mÖ'N¦{X Ç9Â4L†ÅÁÅç|´Ydˆ:¹'Àoõ3˜>ˆaÀòÒCR¤N;#4vJ)z¥@Ф Ámôجš-m®i¾o”~mGw¯äKýºQ¯q…áz\Há${½1P¥è?"Ð$¥h^Ö¤x„ Aš£:tzŠQѬ(úØ´¹úÔ´Bó^)å‡>Ÿ Ôßúóæ-÷©©À®]•ÂâŸrÚî/Ý7à±–õù;ÈS4½N\m,zºNÆÿaV!DÀdÒ-|vµµMUÕ 3*Uii©Fð¡¬8ûÅӀͶÞ8® R€~¡?n× ~¬ 0uø4ÀÔÚü^µØðËwo–ù¾[{Š*'*ŠÎs€K@ ü:Ó ÝL‡3Õ¶’£®]E?Ûî6ó‡€& a¦{ÿõt$¸c=IEND®B`‚ufraw-0.19.2/icons/grayscale-24.png0000644000175000017500000000041411335734227013674 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs™™䔥;tEXtSoftwarewww.inkscape.org›î<‰IDATH‰íÕÁ !П(ÎEA°mĺ,ÀR¬Gðn ÓArÚ]–rˆÞfàƒsñÁ\þ#çüÂÆÑà½GJ©%ÑZcŒÞûÄAD0Æü"BkíŽ)¥ÀZ{Æ9÷õýkO)>wÞ_@޹5Z­uIe~ÌŒ9çòÒ¿̼åDo³¼#‹^q`~IEND®B`‚ufraw-0.19.2/icons/manual-24.png0000644000175000017500000000230011341013025013152 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<=IDATH‰TiH\W=÷½7‹³˜qÓQh­6‰[âDÍDÇD´±R—ÔhHjF5è’¡h,%]*XÄ`0B,%”4ý‘Ôˆ”Ô¢6Åâ—¦q×q¶÷æëkÄ639ðÁ}÷<¾s¿D„íVXXùF’Ì0p8<ç‹x_ŒÃÎ}?±µµU 3=¥ý.ÕågKïzx³ùÃÔ7nððŒˆp6¿2·ãnÿž-ÈòÁ¹5ç‘i¨ø@Ø¡`£2Ž–žÙÄ„¨@å÷]s]E¾àVóO€Ç’*kÈØ¸Æ<”˜w zýG7öÈ“¾FÀ@~qXÁ±•­„?œP@Úü†C2_-¾î«Õ×Õ®ãát¡ <”,4—t´H=;ùHš]Í[€\°AàVÆÆeÎ  Y ƒôb÷öó†§*!ÀD€‰ô̰ZUUÅyº V›ù‡óƒ‘ôHv¿•s¦Èë.”ŠÑ0æp2€‘[×n†(¹=çØÄ]<7{05ÆûZ,K ž¥8 È xáÐT‚.ûÖ>•±K #&Ò!*Ê.¼Ô”——Ïk5ªÇ ‚À¨‰øuQ<5¸&íĉ֤ô×;¼~ù!Ïxº¤·{ô–<ÓÁ%MCÅK`` 소æ àâµîÛ}Ë]Å[´´´ŒŒtvv޵··»¶ p˜ÛÆ‹s‰ú€¦Ëß”‡'ëå7 Ž·Îž¿òæþÌÂxcœ`› }-äÛí.½w½æóOïý1=¢¬ûÏežó¡¸¼w2)Q™þÛöœ^»öõ+ÁŠ´G™é§s.T^ÎÐr†%ÀDAŠÔ'W?ùì`jriv"­§ºº:šˆÖS´'ß.{úpêBDjô¶Û}[9}HvËĬtFÀz6DÈ69%¬!ƒ{C„¯Æÿ¾ÿ±ÏÛ±®®.ÄÉ3;™?—²X__¯~n›z‹îƒI"xn½€ü9ëB Ü> å¬ËžYr¹™šˆv?WƒYkkkèž]GòçRVþ}éáÙ¶¶6žˆÐÜܬÔ2Ã2`"†LÒ †¿Â4Æ{^Gàt:5sKÎãËnµÆs'—qã%%%˜Íf;/3@`XU»WVíY^ ‚0–uâ@Ad÷ƒ'6‡#ád~Eä++vº¯€ $ï hÌ-H¨Ø±‹þ‹%àbEÝŒ•Ô PÀF<Ü$cø1Ù§æ?Gð½ÈwïôF¹icpÀ­AÍyœ€äré*+/…½”À/†?pAÆËm¿‡ú‰÷ÕX@ËVl‘î›:Á6ဠîé+à}y¬©©É/%±ôJCCƒŽˆ¦1v&Òg[ˆµµµ!'rͧjjjäDä»ÀvÛxìKvh9ÝPv~'þVàèíOI[IEND®B`‚ufraw-0.19.2/icons/automatic-24.png0000644000175000017500000000161011341013025013666 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<IDATH‰µ•KH”QÇgêèdS£R„=¬&²L‡P{hHDP…PPQD {­*¢E« URDA´lY‘ô Ò¨„°(2±Œš±|13ŽßœwtFs"%/\øÎ9ÿ{þçõÝ+ªÊT.Û”z© "…Û cžªv´M–`T"ž¹ É»¦_œ²„]\“&Y±JŠÌ÷)Ù k/Š8=!UEÄ‘@ŠÀºCï!½ðBì)„!ë}§T›ÏNˆÀD¸ æ^[qjxä4WìÿW‚‘©~z Ö»¿`‡ óâ°sÿ!‘Ê"ó*Œ,oÑØC_5Ì:’Î’¸¾új!ÖÙgAü€\©ì…H'dyÀQy­ÀcX¶rDÊ.Ë3ªÂÊœöÊѼV‹jó Ù*¸üF­;~Â÷ÀY™›DŠÛÁ{˜Î< 2ìI`^ä®w-Èr ?Að=\[% ŽnÐ t]‡Ùå`ß<:0í€7«U»¿Ž$_"åç!³nüD!-2íï} ƒŒ™`óÁó=ISä¯Ï9 -žbúpX{c¦+‚X¤û“l/Aò@òÿ${Yd3Î]ÈÞaœ[wáÕ2°š ®û(4­†H8¢ýšðÑšJ¡}=ð#® ›qî=Π @5ô Þí„ÈMøp@õçGÐ>ƒw†ÍD„»ÌT¹“ëPU…@Ðô@¿À³:Õ–ÕÀ‘ËNõÛg`WR†`o+^s× °ç1Slà>)²f)¬\ 2Çàd!¬{,RZÍ×$Õ{ "vÀ©ªa#n€ìÐõfï×8Ãk±™ÿ&z žìLy]«ªX ùm#ÐhÈJ·ÇÕ@Èm‡Öj CáøþHUc¨ê„6”@UT)”Ÿ{T *kÇâ'ñ¢…z!r´ >Ô«}«ðn¯“Úà^”ø^²|÷X\Ê&ÿ¯5åþ”ü{6€ýfضoIEND®B`‚ufraw-0.19.2/icons/lock.svg0000644000175000017500000002156611335734227012455 00000000000000 image/svg+xml ufraw-0.19.2/icons/lens.svg0000644000175000017500000004107511335734227012463 00000000000000 image/svg+xml Photo Camera Jakub Steiner http://jimmac.musichall.cz photo camera snap picture ufraw-0.19.2/icons/crop-24.png0000644000175000017500000000315211335734227012667 00000000000000‰PNG  IHDR©JLÎsBIT|dˆ pHYsÅʼnÖïtEXtSoftwarewww.inkscape.org›î<çIDATH‰µÖklTÕðÿ>ï™étíLJm/°¡Š-eh§­ÐN©VúÐ%Õh¢ñÔ{ýp¤\KŒæ¢ Ñk[‚ɽ$à5Z5Ô‚BMÅ‘™Rƒ Zã« L¡Ã<ú`Ú™s朳ýàAkÅìä|9k­ýËÚg%ûà™îÃ[Y±”RŠËù0º®Wˆ¢øžÏëZˆË¸G^Qú¾Gv-°ØAŸ×•wÙ ^0ž#X×ùYfËÏë²_ˆRé™3P“_“¶Û;ŠŒ&SÐçueýÕZZZòÚÚÚv¬ZµêûÒÒÒƒV«õÊ‹ Y–Iè“öõ½ Nµë\" ø¼.éR‘ææfÑh4Z¿~ýýÝÝÝ‹(¥USSSf „°ÀpK—.]‚*wÒÉÓÈ’ÎÓxû2Q|^)Ýn®©©©Èív“‘‘D£Ñ)¥Ç!+srr‹/¾›¥TàY ?7 'OÙcà+kÖVˆ¢¸×çu1ó!íí킪ª7744Hªª¢§§'‰Dþ!BcqqñÛ;wîÌv8›YN³~ÿa¼óÎÀùby&‚¢¿åI×”VzDQxi>HQ”–²²2ƒ¦it||üÉdª.))yy×®]§Ó ³Ù,2<Ïižº´¶6]¼A*†’’«ŒE‹Š[º:kþ÷GÇqÿôx<Ùªª¢»»;133óÝòåË{vìØ‘~¿_±X,GMUÉX8ŒS§Â€¡¡§Îœ×@•§P^^jv:w<ûhµï·Hkk«M×õ’‚‚8p@‹Åb‘úúú¶mÛfW¡PH;zôè²,ßÉhšJÎF#ˆFc€h4F‡‡?Fc¨&£ªje¶Õjùû³Vo¼RUõNÇc–e===ZcccáæÍ›m±X {öì™ïʲ\Ýßß?˰«—^{5V¬X~ṯD'&& à¶ö:KV–©ó?ÿªÚðKÃ0êêê¤ÞÞ^ZXXH:::ÌÁ`PÛ¾}ûx<ßÐÛÛÛÔßßF‘ >mêʲ²ÆïƧ§§,Ë¢¾¾Öj4ž~º£²Ý}ýºÒ³ÙŒÝ»w£³³“ïêêJìß¿ÿ ˲ËöîÝûú…Ý“ÿ>Ù;ñ#È9€µƒƒƒ‰¹`Òé4ûÊ+¯¢¯oßEš{¶®ÓA” òE~nã'TV’ÐwŒÇ7S&ó !]±„ã)òÊïõûýˆ'¼vëÍëIÿš÷ÐÃmO¶r#GɬÛpxkŽMBn˜n»Þêª%ñcŸB´çböÄ7X™}<¹€|«Íç€Ñ5•œžE"ñó„¹Ý+³-Î%¢ÝÁ;Ó¦†Êÿ.++{nÚêiàŒf"~ ¢gP¤q”/[dEñÏë*š"]›j§$CV¶AjW_øôŠç˜À±M!1­AQ),Y,ª¯ÔñÑT>ˆÅtd l&…›–D Ÿz?,ËJå¦îЙ9;â8NonnD]íêó/ËÜXœ“I!9«£ÈÉâÖ ]·QD’,”d¹‰ãh(ˆC•´Àí®¸B„!Ÿ×•3ç7J§’ÂP 0¡iJ©~>àpÛ…i ôðU¸ÂƱ ZŸt’d(ÍeM££''9ŽËÐ `Íï UUËOž½äë[V+5°á±±ðÝRÝoQ !kùÊÙ¹ê¥ôR @Íý[O¤«™JBH ¥tÃó[†^èœw츿¤!Hv{»rîÜ0Ëó%™œÔ3™-V6ïí9×ÒåÁt"1¨«=“š=I5µaøÅÇSV÷O“½ºqÁÉIEND®B`‚ufraw-0.19.2/icons/rectify-24.png0000644000175000017500000000132511335734227013371 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsi")tEXtSoftwarewww.inkscape.org›î<RIDATH‰í•ÁkAÆ¿÷fÖ%ÙlÒbjL Ò¢àA‚,[/‚ôä!T(B)õæÑ£€ž<[ï^Š)äàA»ô^±x[â©•Ú$¤A’ÍÎ<Ý„J¬Z¡¡ï o¾ß̼73$"8ÍÆ§ª~8üý¯_Ÿœ¬¯\¹'ÆÅZÍJ%`6`îÙ^¯S ÃgtÒ›¼¼¼üN)UÄÞ^îr«u½³½ÍbíPœ“Í¢Ñj½?ñˆèF©Tº¤ÆÇ±»º »¿ÿëÀFB4vb€ˆôÚí6Z­VÃÔjÛé›G|ú+@†#Ê8Ì™CD‘¯Üé,p׊"r€°,†˜Ÿå Ã3?`æ‡Ì\dæ‚ÖÚsÇefÞÜÜq]WÅqÜššº?33óñw‹666¥Ô Çq&|ß÷}ÿœR J)03úöÖÖ2™Lì[»Ý~<==]=°¾¾>â8Îë\.w§T*i­=*ÎÌc`­…1Qíîìì<} `äȱh¥ÔU¥Ô­ÑÑQÏ÷}h­¢"2ŠãÖÚß·ËåòÅ$I^®¬¬*•Ê="JÄ""$"˜››Ë,---äóù'Ùl¶àyžïy^Þu]Ñhß$‘z½þ=Š¢G‹‹‹ôtEĈ€ˆÒª‚;??_‚àZ¹\¾éûþm­õGD‡O ¥Ð®1¦Þív£ƒƒƒ/Íf³¶¶¶ö¹Z­6S€ UQ ã¨R»ß)-E0©¤¥iÈÞÙ§ÿ§öýp$W³«'‰IEND®B`‚ufraw-0.19.2/icons/restore-lch.svg0000644000175000017500000001742111335734227013747 00000000000000 image/svg+xml UFRaw Unclip LCH Udi Fuchs ufraw-0.19.2/icons/icc-profile-display-24.png0000644000175000017500000000170311335734227015563 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<@IDATH‰µ”]h›UÇïG“6âLÓh‰S¬¸bW,«N±Rñkc³¸‹e¿ævãoE "êÊæÇ­C)z£FÐy!Ú:*‚XµC*¸Ò/ö©¡I“¼çü½hSK“Éšéž—çpÎïù8çu$ñš p€Ô]í|1×Â'êääG¯jÿ¯Ž$nàÔøiæ› ,QGNê“h=ò ['. ðº&:óËÈ` XÙŒIßIì©~;Q-Àíç¯Fá5€¿âC€Ï ¹èû|÷v‡ûR F«ªà~æé—Þüí‹8.€]‘Š@ŽXÑäÜsuãAÑ*”ÉdB###ÏOMM}°6îðÃàQ;›%ùâQ¬µd³Y<Ï[•ïûxžWçy^«ëº3M¥RôôôÄÖÇý,fBàxXkéí}™¡¡ŸqcŠ Œ)b­ÁZÉ" cöìÙAOÏA`Ê"œ³ Kcã­€K±˜§PXZñ•¿óùEææÒHÂZk×ÜN"3BŽGµÎs~À^6e\ÂàøTX¿s°Öž°‹ÈðµDªÖÚ’Êfà„§ª­Àqþ©àÑŽÄí1êR85Ý¢Û2gžàÕ‡ûÊ Ôü¤ª I8“õpì³#Ü|÷ R©(,ÿè øþ[ãT}‹Jgür(4ôÙϾ7¶qË–{\€C>ƒ—f ¥ ¬ 0&ÀÚõZ~hRIÉb­°Öâ˜à*ˆ4Am,M$ºÍ/eI/LZkÛººv’L~ºRÖxÉêV[²‡Ý»w"‰â%Ñ?¸iû{ì¸î8Ïí_m@ôìäØèèh["‘ààÁ‡6Ü¢ááažÕÉÇ»ú?^wJ}Çã-‰'_šÎ„X€ëçaë\¹³Ðð§ðr9 ä0WsÓ—Í~ó•óã—g~ŸKJ:[6œ’îÐ~ŽJµ‡¤G·HŸG¤_‘òHÚ”‘nüm@û&»×îû7•Z{5ÞÔ*=–ÞAúÚ‘¦›5ŸïÐ êË5]èÁ%ù¬³ûãtŸ›gðš0ѫی7sló»$—Wk7<›ŠÔ·ÚTÿCŸ6œm%ý ;ƒÌ:¢“IEND®B`‚ufraw-0.19.2/icons/vignetting.svg0000644000175000017500000001533711335734227013702 00000000000000 image/svg+xml ufraw-0.19.2/icons/white-balance-24.png0000644000175000017500000000211611335734227014426 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<ËIDATH‰­•[h\edzÙ[zÜnnd7›·»5 Ò“`*¤ÖkêCõÁ´}IðAP¤¨,}È£"øP¼¤Ô„"X°êCŠ`ìB m"V±Ú–¦ÙvsëÆ${s7{Ƈì&›½(¢‡3gæ?óŸ™oލ*"â<ªúÿ³ˆª"5r’'X%B’»¤¸FŒ/IRÕØ'h’o``ÓšÉ!Âs$ “â{VSÕŸÿ=A­üÎ>üÔaÅQ¥À !Æ ¤¸I’kĸë2þ÷".œ@8I B-øðáÁ­BdXÈu#B‚Ù\—_«êm›"çð!vöãâyvÐŽŸüÉò]®îñ ßꊾ`)‚í†U5¥ê˜.é+z[²À´õ#Qn§øøÝ€‡z”PÞd-¨¾ ÈÙ§ª›Ux±çô(ì¼»óêêôêqj8„ªi&Ã.ZØIœ8k|UB«~¸ [6\yµé^þ€ßš MSŽr‡$7Tu6o/Q?´O•0ô‘ê‚,Ü:;;w‰HKÑ€}Ó  ‚³/€Å“À줪²FµÎˆ“ÁÃhV½Àn œ«¾¨\"PÕ›Û:9û|äÙHž—Ö÷reÜМj¦so'eä à;à àH¡#7¢š—){ÃÖE¤ƒjâÐì.—àq` ø8Z†`æòq àÃ…aÜ2Ìc‡•EÝO]‡6޼­"Ò^Dp¦²©ÒÐs`ÅѰޠuuu%ˆÓ"ÏNACÞxý3¨ÿÎåýV©ÃB5òÚiôÉWÁjl¸¢ÓðVO³ŠÙÓÖ“ªŠ žwj‹.lt!Ò‡ê%+°›nZi=£…¸‡IÓ˜„¹Ó5Ðå-7ž&–³ÿÏí…K,¸P„4™2Ï:àb_NgIõ"R.]7œÏ[1™ä2ýå@ìàS_Ïæv»7 à  ¾9??ßw&›|…!)¿ P´M *swttŒx½ÞþŒ™ÙsêíS§Ó¹ cš&£ŸŒšC×ý‰D:LáDz0²2ñGš=ÄyÌZ’}Cº†††Ž÷ööVlÌb±[Y¢¢ö¨`¿²åjZ¹Ê<“h%ìv{%×–dÁsÝC:“fyey ‰MßâÆªH0>>¾233“1MSsB^7MUÕ–ú|µ>]ZZ²NÜž‰D"ç©tNÀÃÆÊ̽ÿIO¨jº8×_àj‚›ø IEND®B`‚ufraw-0.19.2/icons/flip-vert-24.png0000644000175000017500000000113011335734227013626 00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ6·ÑåIDATxœå•=kAÇ;»{^²pDó%,¬­-Ä46–‚ˆEðŠè7ó¢¬A|C›@ `g„€I.‹+´:¹Kööæv63»{Ù;ÌÜä*X†Ùgžÿo^ž‡þ73@ÿýÉ gÊBÊîĬ5Vq=—ŸWšÀL™ø2³ÖX%Üévºµ€•ÏJCFúâQ¡µFAítç–JAló¥þ‰V³Eç ƒÖ:ýi ‰J®ËÃÅ#!Ž Pœ¼úú+n^¾5¼ö"°DÃÏ€³À4°.„@kMÜ‹sÿ }ÿ4@;dG÷+=s˜R®"#™û£ Çè,Ï÷p]Hß@F²è-“©È±‰JÀIóÁ¯øLS' À¤IU9U¡Ûé–³½Á@š*•¤~?d½à8ʨ³ÖÁ»×¸ž‡Š‰J0Ù)´Ö„íÍ:Oî?¸ÀQF ˜íŠ‚ëçoð«ñ›žì ˆï·øñm+Ÿ³éؘ¿v—öŸ6Zë¾øöÆ6 –rñð“cêÀvEùf€æòÛÇ¡¾¹Ëâã墸^6[Í£L6sçÞí¼á\.1Fã) ®œ´ø0äÜ$Ä‹±šþ_‰ÑË í¸ŠIEND®B`‚ufraw-0.19.2/icons/restore-hsv.svg0000644000175000017500000002033311335734227013775 00000000000000 image/svg+xml UFRaw Unclip HSV Udi Fuchs ufraw-0.19.2/icons/film-24.png0000644000175000017500000000221611335734227012653 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î< IDATH‰µ–OhwÇ?¿ÙÙÝ™Yw“lÖuCc‚) 6h"H…¨=´èÅ“‚(¤z-íI{,´PöÐ(õ¢‡RO^* V¨#-H•Ø4ÿ¶˜¸jþ³³™Ùy=ÄDÝf7-´ÞeÞo>ß÷¾ï7JDø?C_ï¡RªH1à‘ˆÌþ[°RÊW­N ”2R©Ô…x<þŽïû]aÆÂ0Tñxü…®ëÅbñ‡ÅÅÅÓ"²\j[–õU4í,‹v©Tjâ¥@S:¾àÀr}}½o¤mÛÒßß444ü$E„Ê4Mó“L&3ÑÓÓ#»wï–L&󇈠Ô××õõõå6mÚ¤APÙAJ¥"½½½o×ÕÕ}SÙ¹eYg2™OÛÚÚÚ"‘È5 •ŠöÄb1D„mÛ¶ÑÕÕÅljF£lݺ•‰‰ à •2v*¥t LÓü°±±ñL6›m\Ï6  TZؼڭeYLOOÓÝÝM:frrÛ¶Z[K-€õþACCÃg¶mo®ö]4€\nùY¡p€l6‹mÛÌÏÏc$ D„ÇåäÉÅ@‰ÄçÙlö‹æææ-Õàk55á:5ÉÙ³sA¦¹…D"€ïû¼x‘G©i.^\BÓBϲ¬o[ZZÞO&“‰Zð5¥ààÁþþyFFæ¹v-ÎØXËòYXhoŠE‰04du´··w›¦Ù¾f áêU(—K´¶ºx^™íÛ…cÇàùóƒƒ]Äão™Á=Ïó]×}¾& iP*Áð0ÁÊDºþŠ£TÓ¬íH†äóù‰±±± ®ëî}Ý"˽:B,†úº åÍX^^–ñññŸÇ9."“k)¥T$ñ8œ>½’{öÀ•+00ãöm¸w¯6Ü÷}ÆÇÇo;ŽóîëðÕ ÔªEçν*?—.-³oìÚ7oV˜ššºï8Î{"âUÖ4@Ó´r¹ÿ‡‡áÎË—aq±:Üó<ñ<ï{)®W׉€çÁàºpâ A]âÑ#8t¨ºÀììì´çy_V«ë¬l¥ip÷.ìßçÏÃè(<{¶ñeÁqj „OŸ22{æ Ož` +—Ñc1-I•Ki5|߯yé"ôõ©?—–8tëLMA"É$45U±\.“ÏçÇÂ0üÛú®œ€ÑQ>:z”¶#GÈíØ¾aNÅà"‚ëºáÜÜÜôÒÒÒo®ëž‘™ äw¥ÔÞB¯;;é=|˜–æf¬™™@]¿¾r°Pð‚|ÁO¾ï_‘B-ðj¨Ê¿ ¥TØ©ël6 :x x"òã?Öø¯ã/T½iƒ/¶ôIEND®B`‚ufraw-0.19.2/icons/rotate-270-24.png0000644000175000017500000000157211335734227013534 00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs † †Ae·tIMEÒ:01OÑIDATxœ½•ÍkTWÆï=çQ«±ZéªÐB!JWA\HŠ;7](­T[Á…Å¥àFÄA©àZ(¸ü@Q´ˆŠ¥ÐÒPéG’™d’ÜÉL&ã9÷uqïÜÜ¡¹™Ä.ÌÌyïóœóœç}ưòÀ¬¢Ue€ €¦¼Kp+"›½ùç]éËÁ À7ªj4¢SŸ~Ùù}MJÒó$Ëdàa<šÕÎÚ€ˆ| lú–#*"è«•™,ObÃL™§ªú—1fð°‘,Å,$úª¬ÿQ®U¨ŽUiÍ·’EŒ5ˆûw|ìÆÚ!ïý°ª¾|/¸ç¯Ÿ0ßlU§™o¶ºTADðÞóíÐwXk‡œs3$F(”(ú7ìdø·aæf¨*ªŠ÷÷ÆÇ1ªJLjWï^Á9÷0 Ã0¶ ÙòÃÞcÔ&kxçñ>¦>Uçðî#úò{¼[T¢oM_²³8þXŸW¦è’ªÎˆÈ–“~$ªF4^Ï1òb4ÑИ¯ï>’É?ݺ„÷þN:3¦AÉéoÎPþ·ÂØ?cþ ì;¸ë"ÉfÃ0ì¯Ëãö´Œäü‰ Aû=uË4€ mF’V×—^^UgMw¯ßø‚œƒ Ðts]/÷ÊCrik…ô³u€U•öB;´Vó$½¢¢ßZ» ‘A`°n–Ê÷‡9OT’ãzß ±:Pœ!¨Ø”žÔa燻ºJåûÔ¦ê´æ[ÌÎÌrlßqŒ1{½÷Ï€—éI—”H€uƘÏs¥ÇÑ#&F'øùéµÌ’ªÊde ç­f+³o£Þû9r“\[ñRåQ5¢½ÐÎâݽó4MF^ŒráÔŨ( ;kí€sî1À•Û—±Öfàí…6Q5âìÑs‰žË„]Q ö°øWÙõcö¤=ý¬"®ók!°^D6«êZ]‹HSUkÀð†œ,+%È÷þoé˜DŽ%ß[½ð1Œ~WIEND®B`‚ufraw-0.19.2/icons/crop.svg0000644000175000017500000002554211335734227012466 00000000000000 image/svg+xml ufraw-0.19.2/icons/manual.svg0000644000175000017500000003311611341013025012753 00000000000000 image/svg+xml ufraw-0.19.2/icons/grayscale.svg0000644000175000017500000001021511335734227013464 00000000000000 image/svg+xml ufraw-0.19.2/icons/automatic.svg0000644000175000017500000003337311341013025013471 00000000000000 image/svg+xml ufraw-0.19.2/icons/geometry-24.png0000644000175000017500000000337211335734227013563 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<wIDATH‰u•kl×Çwföi¯w kÁ°\chHHc…Ä$¡¥¢Uj1J[H[¢´n“†FªJ*ú*)‘Ò/MÔR()QÛ("N"ч’(IÉ‚0ԀënŠÁ6Øø±ÞÙÝٙݙ¹·°]'itt¥«sÿÿó?÷ž{„R €Æµ­!àÀf T6&&×,j&c¦V n¿u§Û=¡”¢qmk3pX„¦÷Š@h€@0ƒ”!|¿JI/Žôã(á¢éYtúabLÜrµ*Ûõø^ ø7ð@wº}Øh\ÛªûZ…qû=;æ|mçÉo/¦þŽjšb渒Û'_pÉIð• Ò“xEûB–¾Îˆ§P¸%Í~õ™²ÿŸ?sKöï/À6`•v[ý/¶>µóJ[=Ïé‚(€Ï“X®TÅ€““áÊøHIb9>–ícI 1jÖ$)¥GÉ^ÿÃÓ-Î厶J#¦*ñ k[WÀz„È×?úÓ¿n_ÂÎ)ð²ç•/\º¸ ÿú`2›3yÇ"Ÿµ| _™—Z~lñÝ-ƒÃŽ–é-`^ÊQ9òâgJ×:v/z0P}=mV«ÖÀr¡ž]wU´Dtæ+ðÆ2Ú©ÎŽÕ9ÍŠ=GŒä2\¹LFË’ëË}6÷ök Ö³òÊÜGž<Úpw ×yø™…_¬¬v‹K~€Ò×#ýf¨¡È±ya–úŠâááÐÉ3«Ìß°©«_ASC’ć]xùîâ:=x7^z²½êÞ¯?L.4Jªˆ†UPe=¾èœ(šuʱV€ŽÐýˆÎlÇSÇ;ޝ·f•‚Á± _ÝòRh¤R)î[sÛ¿·Yïˆë"±T&Í“Ú/"³ÿžXN¾§#6%Ë¢€OaŸ8ubaÆ0#Ù^“5÷~Üu]zzz¨©©aë–­x#·zG ªé1??º1<' !ÊÅ×BQ!\ ¨()ɻܞ`4kbær˜¦IWWcccd³YNŸ>M$A–BÞj= º®0ÿåP¶„]ݲeh¦‰’Fºó¬œ(™˜N–z¯`š&¹\ŽÚÚZš››q‡uëÖÑ×׆)AÉi%¡˜ÆÄe=–<ÎM3€^U¶ëÎö þ%cf”fzdí,ýýýÄãq”R´µµáyBÞ{ÿ=\Ã!(H5$4P>#”PNq1ð‘œÁuÆ—H_¡|°3ÒwrúP¨RÅ¢³E¬4T1V-Ò“©åãÀw•e6%þÉþñãGî4{K\ŸŸ·†d¡”—VÙöìRÎÓ£³5Chb:k¥À³Åq½ñÚ#™­¡ª¸i )}ïGSó`3Ð.fÍ?ýþ /̬­o™zßÏ¿¼?Qç/ 'D•òÕ´'+e~˜Ñ¹ïÙVu×ú €ý»ß’7¯îëN·ÔºÓí¯¯«Ìжò»//›W¾'®>·ù—ñ”w{t¶¨šÞWôm+9µð‰—Z§ÀÝo¦äÍkmÀ»ÝéöƒÆŒdŸrO¿õ,FàÇÁ¿ÑÓÿâã}ËlVžt-(啲³ªàZ”ƒó›ö-ýáÁ7¦»'ÞL•½¶”|gúùNÍd€Æµ­€W@Thsë~ytïóçVçŽh-¬Ò+çªX±îƒä†Ç®Î,£}èéVyãòS(åÛ'+òi‚I’À!à "éÔR+_1VÜÑh\“ùØÝ\>ðÎmò¯]Ü¢ìB p øfwºýcäŸ"˜$À`/@Ó‡D8z „¯JV¾_;^vÏw§Ûå'±þ'Á ¢ð¹O¸üèœòît{æÿaü'[QÄЮIEND®B`‚ufraw-0.19.2/icons/rotate-90-24.png0000644000175000017500000000140311335734227013445 00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs † †Ae·tIMEÒ3Þ`_IDATxœå”KKTaÇç2Š: Ô'ˆ¾@kÛAø‚ "ˆ hQí"Ã(7™QFá&,Z„ ™Ùª M^ÉÑt$GTÆs?ç}ßçÌ”ãÜ\õÀYœ÷òÿ=ïsƒÿÑTòéûx<ö°aÈ?yÑšn¥ûI€¨§ÑÀL™E@Ss™Ãn=ºY¢ÕN5¥T„LfÇ üÀƒ(ŒB°¹¾ÉÏ+Ü¾Ú `²a€¦iêýÒžãâ:.¢”*íK)ÙÚØfêãaò¬o¨"ĬæùÛ…1ì «`øRHÌ”‰aH))lï0ûu–ÕlŽÑá1€c@3àÖ„Aˆç¸X›ÂV¥…eîÝèöFú™þ<Íü÷yF‡ß–¿\kOrÌ”©&³ã¸Ž‹ïù,ÎeéºÜm9À €™/3Ì}Û%> l–‡§â ¢0"ð‚RR»¯ôt[À,ÀÊâJ1,5Å«†(â„JQºã%â/_t3µÄ«HªÅ0⊠NžÒÀ`µžxE€a!€¸¡*˜ Ì'´¦8TH²¦i8v\ifÊd`¤`hIÎË"þZk…QútÇ™ìÀÁvž¾ø•ˆ*@½øôÀ2µ •:Y7MC*‘e‰ôù“XÏåñ]¥B|ÏDZ]lËÁÙqðs×Î䫽¤Ú,Ò“ y€Þ¡žø5†JáX¹å5î\¿[< È÷Ä®QQkš!Gº®#eM×PRAÜ€`WÖž0Õ× ¤h#®ý–²}XlþôÉ.«(•ǸX²uûaßì7}¬€r\UNBÜÚÕ¶ž†¢‚^.*"qjY š‰È¾´fVB:::ˆ‚tfN2znjjjššš’†r`ZJÆÆÆRN>yjO•vVêêê>:4JF:vn]·–n^RB®¦š½º±jbVš’†ÒÎÇ‚‚‚ξªRF:~vbRRR§ž‹hbQ©¦ž¶²¤†jJÞÞÞ–“ˆ˜“‚HHH¨’xyvl¼¼¼111lldbN2FB6¾®žÔÔÔ†~i_I.zfMZVF°ijV7~~~]ZPöööxrb±®¦fffž›“ÇÅÀ“Ž€ž‚\`_XZRDf^NDA;ŽŠz›}YNNBŽŠ€ŽrP972zbBââÚŽ†r†~p¤¢›NI;¶šz‚~i¨¨¨”””xxx ¹µ±SPJâÞÚp^EÎÎɳ®¢Â»¯nfVÚÖÎqbIpX:b^NÚÚÚ©Šdrn^}v‚jIòòòF>4ÓÑ΀yj§¢•æææzvb¢¢–ËÊÂÆ²–¶’nŽvWއ62*vrk!þþþ¦–†_R= ¼¦Œ¾žvNNHÂÂÂ&&&¢†j‹†```€eEnfRmPž†cj^J”Žz–~\¾šrZJ6ºµ©º¢~Ž…nVF2ÆÂºŠ†z”ŠzÎÊÈZPZVOªª¢æâÞ”“Žž–‚NJFywr¾º62.rncJE6ÚÖÒbJ2¶’j¢ž”BBB’uR666¢¢¢&"¶¶¶qZ>ª¦–bV>†rZ***žšŽµ²ªiV>NJB¾žzn^J¾¶ŽŽŽrrrކzÎÎÎŽv^NNNІnYF+²²²ZZZŠŠŠw^?VRBÞÞÖ¥†arnZÆÂ¶gZD>>>ІviR6‚~qnnnžžž“Švb^JÊÊÊ–zVîîîB>2JJ>yr^ºšq^VF¯ªjfW›–ˆÕÒʆ†€TJ8‚zfVVPjfRªªž‰nMâââÿÿÿæ StRNS@æØfbKGDˆH pHYsÄÄ•+tIME× 6jò à IDAT(Ïc` Eå:`e’„6’¸’û‡˜°³ÔN$‰ ¼¹z o§JH½‹G’¨‘}ð¡¦&HÂ9P*^Þ"–ªÑÈøÏíFÖ£¼$WÏhÊȨ D/.ÔrHÅï´…I02Z˜*x*ü“e¼ ¯°‡™Ï˜ªãö…·dõ—@°I—¡Wo¹ýžúJBÂùn¼ÄNÛw¢A]ÔŸ«§/TˆÿË=;馥Å>7°Ìë$·[ï8ôjç¿´}÷NpòíéW/ÞIüëá6yŸ`ä{¹MYnMv»i ÜË7ÅX/zOöM¹pÐÒ¾èòå"XxËIfff¾iùÚˆŽµ'[]°nNqIEND®B`‚ufraw-0.19.2/icons/icc-profile-output-24.png0000644000175000017500000000154211335734227015457 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<ßIDATH‰µ•]lKqÆ=ºÓöhªë*ØGT™òóâb2nH6bHdŒÄI%.Å2Ä EvA„Æg$$•Œ+´‰]t±!£Vuº³v¯‹S2´¢Å›¼999'ÏïyÞüÿy-"Âÿ,+ÀV¢ /§ÐKËPBM”ÞOmôÛO~¿¿ÝãñÌrºI&“—zzz®ç$ˆsä^ rA³âÓ²J.]é’çSkjjö566&u]—|U__rµõ$¯–<Çð™aF :wèoй¶fïî]™¡Á¸V숔.†& 〒ìÄJoð);¬‹;·µ:‹°ª(3Á†9ÞQ`oð1X@{Ëö¿Ñ6VŒÃ„€ëÄ êîö’¨uèî­­8À2¯A,x n‡®ýµóïÁ¦C&ûjÁLóïJY‚–M`Ã|þcÀz\ [`”‚E¼¥ãKóV£=š†8²m-P7ñý nn®Í P±EM÷ÅÔTÚIäN„®ææœލ)®a^´+冗v¸}5ÈÑ-¿Ê(y­¨èvxã‡gåÐy«˃D£n¾©­Móøê H®Ï ý`pžjÃ]UKØ[MgÅy²nídú· D„Ss¥4Ò!»ÍÕ_¹<š ¤ªTIEND®B`‚ufraw-0.19.2/icons/color-management-24.png0000644000175000017500000000207011335734227015152 00000000000000‰PNG  IHDRàw=ø pHYsœÄuö„tIME× ;3|Æ@×IDATHǽ–]L[eǧ=íée-ßÐjìX6™1 ÌD/ˆ‰bc¢†o¼0¢11ñÊi?/€yã…†9ƒW¿¢Ù àW¶`,ÛÔ,lÒ’¶ Ji»ÑBé×ãE ÔeÌÅ7ùŸ“s.~ÿçüß÷yÏ ÿÇxJ&:Zådt§|)íòÕP¯œi½Yl Y¾÷ýNÔ i …™îÆ1ü4·õ<¦4Oÿ'ƒw%ÐþçÒÀ –€Nrñ*^TºÞ¨îcbÕ‚0l’Jˆeû'Œ´É³}¿É¸ý† Œèv‚¨ëàÆ5å1pŠs=½tŒÉ÷– Ò¨è7@ ÒÖÝÍÌòG«—·¼gåÍŽ-$‘`dØ×SQ4!{×Gþ”®ƒ×m  ¥6VnÚ7S‚jöb¡#‹èøf -÷º.ƒ»( ªßÉjå`¥ŽrªñPÎ^ìÆ`Xúá™i’…ÁkN¾î¶EÝÜ´NÖ5y¨¡†z*ñPÅØ2û R3§âüáïÄ÷Aë5Í#ór‘42¬6$°¡›$í¤ØÅžü"Ú\f¾ñ)ÈWLS¶ÿa¥spâo_`D›¸IIQ¥€UÔã¤uâF‹WÃ\„k!Ò‘Ýà_nÀ{Â+Çž<øLg ¹[бàPAu¸¨§7öd-„JáÒ6—C¤æ·C¸.˜áÄòÎ}ë T€r gÁÅ ”ŠÐ„PP‘ZF e!d…Y̧ š˜@\¸ ‘0Œ~Ý#wÞkçèûÏ+-;â*@gŽ_?OÙyr@VÁ•†ŠXr`J)à× h‚9 Ì[aa¢Y˜ê`¡r.äºéz£U{¿ ðŒªŒºÄÈà&SÜó–àÖ$Ø2 ÏË  2Á¬ Âf˜±‚?Q=ä­W‰E&{sÉíêjVÛSŒ¸II°FÁ•ó ¨K@B!àÓ`ʱˆZœ·(×ûÙU6Lgc¿òÒý>ÎçàAÇÇ/ÓMQ¨G´è® À¤ “Fˆ[@²…5RbG~˜ CØôŸ)¯í[ftS¬Ž=?‰ÏÀÍ Ü„®@KýàžC<„ËИs‹ò!Ûú•—›}ÿÖhêúgŠW½—0M‚Ó–iЦ‹”Àc£ÑÜϧ§+“·[Ü¿›‹ÏÝ$ò¢&ò"?+"¡K·É!9’ßòÿ@Ýüâ‘rºæcŒ4hØ{«l¤ÏyLâpê&Þk‘²_zÅ}3XàØjCâìPNIEND®B`‚ufraw-0.19.2/icons/lens-24.png0000644000175000017500000000250611335734227012667 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<ÃIDATH‰½•ÏkSYÇ?÷%iû’צPµ:&&•–*‰Å¦vÊøºq£ Á…»2€Žâ0³¨ÌÌb ÅÁa`(ât9¸+"‚èÖ…ƒ£ X¨P-B“ôGÚ$Í÷lnrgѾGk+îæÀ÷ÞïçžsÏ;G(¥øœ !Ú~àÔ–÷o-½^mùK¥ÔÒgE”R»h~$ ¾àrkoã^ZâÓ„}Àß@ ½½“'OrâÄ ¢Ñ(õzééifffH&“d2ûhøV)5µCo;@ñðà6 ƒ[·nqåÊjµRÊ^­V‘RòäÉîÝ»G¹\f+šï•Rc»BˆðpŸ;wŽÑÑQ8€”’r¹L&“!“É iû÷ïÇ0 ¼¸¸ÈØØ¯_¿¶!J©„B4l=\Ïàà ãããH))•JLNN’L&±,‹b±€×ëÅëõÒÓÓCww·Õ;w˜žž˜ú•R6àWàçææf=zD[[©TЉ‰ –––d``€X,ÆÒÒׯ_çãÇtttpúôiêõ:Ùl–‘‘LÓQJýâB| ܼy¿ßO±Xdbb‚\.Çèè(½½½Î;µ´´ ëº˜ŸŸÇívFijjââÅ‹ÌÌÌ @Ÿ‡ÃX–E*•¢R©P*•&“É0;;Ë^–N§ —Ë!¥¤V«9lYŸfU«U,ËÂår!„À²,ÖÖÖBì)P(0 ƒ£GÒÐЀÇãÙµG¦Þ¾}‹išø|>§Î à ›Í~põêU<¡Pˆ@ àR©”½eʼ{÷Ó4ÙØØÀçóÐÐÐ@$! í…B qéÒ%4M# Q*•œÔÙ· ˜ŸŸÇ²,¤”„Ãar¹Õj!H)Éçó?~œh4JWW¡Pˆr¹L{{;ǹù‚ xåÖ•JE3 ƒƒÒØØˆËå"›Íbš&Åb‘}ûöqæÌΞ=‹¦iœ?žJ¥Âêê*Õj•L&C½^gjjŠD"›=éG·R*-„¸ üÇéêꢥ¥…`0ˆÏçãÍ›7x½^òù<+++¸\.>|øàä|mm )%ëëëÄãqûö·•RéíÍ.DŽ;ÆÐÐÐŽ|/,,°¼¼L.—£µµ•#GŽ ikkcqqÑ)Ïû÷ïÛ%bN³Bôÿ®ÎÎN._¾Œßïw .— ]×Ñ4 )%•JÅY+ <|ø¹¹9€ðRê%ì87€ß·Ý¸b±Ø® Ún‰D‚§OŸbY–÷”R:š_™~¿Ÿ@ à¸2Û …‚}tÏ‘ùÿýO¢ °ÙÎclö,;_ 6ÿŸð¯RjaoøTŽ”ÎÒTtQIEND®B`‚ufraw-0.19.2/icons/icc-profile-output.svg0000644000175000017500000001200711335734227015245 00000000000000 image/svg+xml ufraw-0.19.2/icons/exposure.svg0000644000175000017500000000613711335734227013374 00000000000000 image/svg+xml ufraw-0.19.2/icons/lock-24.png0000644000175000017500000000165111335734227012656 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs˜˜6ÓGßtEXtSoftwarewww.inkscape.org›î<&IDATH‰µ–KHTQÇÿgî5i^4–FsLm¤TP$ºˆD+jU´qÓJ[nÚµiÑÆU -‚ÌÚ#(èLB"ø"oÓ •ãÍIç^çžóµ¨|4÷:&xá.νßùÿ¾Çù>#"å#Ô1–YPPÐäp8ŠEyFƒD´•t_²l6›»®®îYcccQCCC¦ÛíF0Ô¾ƒÁž‘‘‘®}ˆÈô-))¹ÔÞÞ>‰D¨··Wkii™mnnþÐÙÙ¹Èï÷«õõõ}RÍ4LÅX[[[Ç———©««ë»×ë½ûW€»¬¬ìm__Ÿ>44Ä+++þ7 ªªê‘¢(¢»»{=;;»ÕÀ¹¸¸¸pp:::Â.—+÷ÀÌçóM…Ãaª®®~gæ„Õj-÷ù|‘@ @555l,&¥É«¨¨HŸ˜˜ÀÜÜÜS³úmll|ŽÅbHKKËIzŠ^>9sÂ.Ó½ÅUv!;¯¶vqaA—iÖï´Kë;§Ø}îfB¬¶Ð[ž;?§¬ÎX{ç–WÚ>?7ø{ò«¸zÇæt31Ð@B \¨à\…Ð5p®‚븮Aç1躮«Ðõ-¬.ÊKªf)½vûsø§Ñ,æ±93XlåAB¨B¸¸ pN @¤³ðT€€Äˆ™¥ÚÃÂÒ~ÍŸØ´ Öf€×ý'1<泸Ÿ3—Ã`Ð÷™„@ç #c™Hµž„#éXYOÅ)çdR€AŠ6ŒT•A’íÛkI’)+©¸ @M0²ÛÎ~ƒ*ˆEù²\ã‡×àÖÕyœõ„"Çqýâ0„¾|X@bŠ úSÆ×ˆ:?†ù¥ò‰„AŠ`&”uË ˜TϹ)"È y³Ùˆ ÖÚÌ@}ßÿX¯×™š(Š˜ˆHÞÖšív @§ÓAkÍ~¿g·Ûp8Ê)/r^g7—ª‹”_spÓK)?ÁÙàWåXÒ®Ën·›ÙW%‡ ßÁ-äðƒKòV«EÇÎZcLµiåq3õQeöΈn%B×È19…—0ư\.Ý Š”7›M‚ (¥üŒ\DuÄRØ nrø‹ÈÓZO§ÓF’$¤Œ[ž”ROÀ„Ó3W^Eä]Ýû·åšÚ$³¿7IEND®B`‚ufraw-0.19.2/icons/ufraw_icons.h0000644000175000017500000052716011341013221013452 00000000000000/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (ufraw_icon) #endif #ifdef __GNUC__ static const guint8 ufraw_icon[] __attribute__ ((__aligned__ (4))) = #else static const guint8 ufraw_icon[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (2361) */ "\0\0\11Q" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (192) */ "\0\0\0\300" /* width (48) */ "\0\0\0""0" /* height (48) */ "\0\0\0""0" /* pixel_data: */ "\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\213\0\0" "\0\0\6\274\274\264\11\255\254\250A\265\265\262_\226\217\240\244\227\203" "\271\263\317\316\306\12\247\0\0\0\0\13ca^\377\23\25\24\377\32\34\34\377Z[Z" "\377\20\22\21\377JLK\377jkk\377ddd\377}||\370\202\202\200\216\266\261" "\257\17\225\0\0\0\0\30\265\257\247\14\237\232\223B\224\221\215f\223\220" "\217\210\225\224\222\253\224\224\222\267\225\224\223\301\227\227\226" "\307\231\230\227\306\236\235\234\307\241\240\237\302\225\224\222\316" "iij\377__`\377bcc\377]]^\377``a\377RRR\377TTT\377bcb\377.0/\377WXX\377" "\77@A\377\31\33\32\377\202zzz\377\2ssq\303\256\253\243\3\221\0\0\0\0" "\23\275\265\252\11\204\177|]{zx\272{{z\366|||\377\200\200\200\377\203" "\203\203\377\207\207\207\377\211\211\211\377\216\216\216\377\217\217" "\217\377\224\224\224\377\226\226\226\377\230\230\230\377\234\234\234" "\377\236\236\236\377\242\242\242\377\243\243\243\377\245\245\245\377" "\202\250\250\250\377\12\251\251\251\377\241\241\241\377\230\230\230\377" "\217\217\217\377\200\200\200\377ddd\377zzz\377yyy\377tts\377\216\213" "\207)\220\0\0\0\0\40okgVged\346ccd\377ggg\377kkk\377ppp\377rrr\377xx" "x\377zzz\377\200\200\200\377\201\201\201\377\206\206\206\377\212\212" "\212\377\214\214\213\377\222\222\222\377\223\223\223\377\227\227\227" "\377\234\234\234\377\235\235\235\377\241\241\241\377\243\243\242\377" "\244\244\243\377\251\251\251\377\252\252\252\377\254\254\254\377\257" "\257\256\377\257\257\257\377\261\261\261\377\250\250\250\377\234\234" "\233\377\210\210\210\377\274\272\2701\216\0\0\0\0&\222\210|\5KHE\242" "333\377+,.\377+,-\377\36\36\40\377\32\32\34\377\33\34\34\377\40\"!\377" "#$$\377$%$\377(*(\377./.\377898\377ABA\377LNM\377\\\\\\\377jjj\377||" "|\377\214\214\214\377\221\221\221\377\230\230\230\377\232\232\232\377" "\234\234\234\377\242\242\242\377\243\243\243\377\247\247\247\377\252" "\252\252\377\253\253\253\377\257\257\257\377\260\260\260\377\263\263" "\263\377\264\264\264\377\265\265\263\377\267\267\265\326\267\267\270" "\207\272\272\2719\314\314\312\2\212\0\0\0\0\12\"\40\36\235$%&\377AAA" "\377SSS\377556\377\3\4\6\377\13\14\16\377\33\33\34\377\35\35\35\377\23" "\24\26\377\202\12\12\14\377\1\11\12\14\377\202\12\12\14\377\31\11\12" "\12\377\10\12\11\377\7\11\10\377\6\10\7\377\7\10\10\377\24\26\25\377" "')(\377:;;\377PPP\377iii\377\201\202\201\377\231\232\232\377\240\240" "\240\377\242\242\242\377\250\250\250\377\252\252\252\377\256\256\256" "\377\261\261\261\377\262\262\262\377\265\265\265\377\267\267\266\377" "\267\267\267\377\271\271\270\327\273\273\271v\300\277\272\22\210\0\0" "\0\0\14*((\252MMM\377QQQ\377UUU\377SST\377\26\27\30\377\14\15\17\377" "\35\36\40\377\40\40!\377\27\30\31\377\12\14\16\377\13\14\16\377\210\14" "\14\16\377\202\13\14\14\377\24\13\14\15\377\13\14\13\377\11\12\13\377" "\10\10\11\377\12\13\13\377!\"!\377;<;\377ZZZ\377zzz\377\231\231\231\377" "\250\250\250\377\252\252\252\377\257\257\256\377\262\262\260\377\264" "\264\264\377\266\266\266\377\270\270\270\377\272\272\270\367\276\274" "\271\252\307\300\273/\206\0\0\0\0\13]TM\14NKJ\244OON\376RRR\377VVV\377" "889\377\20\21\23\377\11\12\14\377\20\22\23\377\31\32\34\377\26\27\31" "\377\202\16\17\21\377\1\16\20\22\377\202\17\20\22\377\203\20\20\22\377" "\202\17\20\22\377\11\17\17\21\377\16\16\20\377\16\17\20\377\17\20\22" "\377\16\17\21\377\14\16\20\377\13\14\16\377\13\14\15\377\12\13\14\377" "\202\10\11\12\377\14\40\40\"\377DDD\377iii\377\221\221\220\377\253\253" "\252\377\256\256\256\377\262\262\262\377\266\266\266\377\270\270\270" "\377\272\271\271\376\275\274\271\250\277\277\277\30\206\0\0\0\0\17h^" "U8[VS\260RQQ\372PPQ\377BBB\377<<=\377345\377\33\33\35\377\13\14\15\377" "\16\17\21\377\17\20\22\377\20\21\23\377\22\23\25\377\20\21\23\377\12" "\12\14\377\203\10\10\12\377\13\11\11\13\377\12\12\14\377\13\13\15\377" "\10\10\12\377\7\7\11\377\17\17\21\377\26\26\27\377\31\32\33\377\27\30" "\31\377\17\20\22\377\14\16\20\377\202\14\15\17\377\14\35\36\40\377\36" "\37!\377\26\30\32\377\40\"#\377FFF\377ppp\377\237\237\237\377\260\260" "\260\377\264\264\262\377\267\267\266\377\270\270\270\354\300\275\273" "H\207\0\0\0\0\16umi\37\\XV~YVT\332TSS\377VVV\377ZZZ\377QQQ\377::;\377" "$%&\377\11\12\14\377\6\6\10\377\15\16\20\377\5\6\10\377\1\2\4\377\202" "\2\2\4\377\203\1\2\4\377\27\1\1\3\377\1\1\2\377\7\7\10\377\21\21\23\377" "\30\31\32\377\36\37\40\377!!\"\377\22\22\24\377\20\21\23\377\16\20\22" "\377\16\17\21\377\40\40\"\377&')\377#$&\377!\"$\377\34\34\36\377\26\26" "\30\377234\377dde\377\234\234\234\377\261\261\261\377\265\265\265\370" "\274\273\267b\210\0\0\0\0\15\317\302\274\1pge3\\ZY\202YXX\312WVV\374" "XXX\377\\\\\\\377@@A\377\2\2\4\377\22\23\25\377+-,\377!\"#\377\2\3\5" "\377\204\1\2\4\377\30\2\3\5\377\1\1\2\377\2\2\3\377\10\10\12\377\20\20" "\22\377\26\26\27\377\22\23\24\377\2\4\6\377\10\11\13\377\20\21\23\377" "\22\23\25\377\32\33\35\377013\377,,.\377()+\377$&(\377\"#%\377\40\40" "\"\377\24\25\27\377\6\6\10\377667\377|||\377\256\256\254\376\265\264" "\262d\213\0\0\0\0\24vtt\25```]\\\\\\\234\\[\\\330//1\376(()\377|||\377" "\212\212\212\377PPP\377*+,\377\13\14\15\377\2\3\5\377\2\2\4\377\2\3\5" "\377\12\12\14\377\10\10\12\377\2\2\4\377\5\5\7\377\7\10\12\377\2\3\5" "\377\202\1\2\4\377\20\4\4\6\377**,\377<=\77\377:<>\377457\377./1\377" "*+-\377&')\377#$&\377\37\40\"\377\6\7\11\377\10\12\14\377HHH\3779:;\377" "\177\177\200\375\255\256\256;\216\0\0\0\0\10xww\21bbaKhhh~`__\260\\[" "[\342ZYY\377QRR\377\1\2\4\377\203\2\3\5\377\12\6\6\10\377\13\13\15\377" "\32\33\34\377((*\377456\377((*\377\26\26\30\377&&(\377,,.\377,-/\377" "\202-.0\377\14*+-\377$%'\377\36\36\40\377\26\26\30\377\20\21\23\377!" "\"$\377IJL\377\\]]\377VWW\377245\377IJK\266\331\321\314\4\222\0\0\0\0" "\5~zz\21GGEX\10\10\12\347\2\3\5\377\2\2\4\377\202\2\3\5\377\27$%&\377" "\237\237\237\377\374\374\374\377\304\304\302\377WWX\377\40\40\"\377P" "PQ\377LLL\377CDE\377/02\377./1\377BBD\377IJJ\377NOP\377WXX\377^``\377" "\\^_\377Z[]\377XXZ\377UVW\377PRT\377\"\"$\277\336\326\322\2\224\0\0\0" "\0\21\\WT\11\34\33\33_\23\22\24\233\20\20\21\260\27\27\27\237310agca" "P\244\241\237r\213\212\210\235CBC\251VWV\300a``\341a`_\366^]\\\376ZZ" "Z\377YZ\\\377YZ[\377\202XY[\377\10XXZ\377VXZ\377VVX\377WWY\376XXY\347" "VVW\273HHJnXXY\14\242\0\0\0\0\12\304\300\274\10\240\234\231\22\205\200" "}\40pll'pom.kjh,mlj,usq'\200}|\40\204\202\200\14\377\0\0\0\0\377\0\0" "\0\0\377\0\0\0\0\242\0\0\0\0\2\354\362\363\2\353\361\362\1\377\0\0\0" "\0\377\0\0\0\0\345\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (exposure_24) #endif #ifdef __GNUC__ static const guint8 exposure_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 exposure_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1019) */ "\0\0\4\23" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231\377\377\377\0\1\0\0\0\10\223\0\0\0@\2\0\0\0H\0\0\0\6\202\377\377" "\377\0\1\0\0\0@\223\0\0\0\377\2\4\4\4\374\0\0\0v\202\377\377\377\0\1" "\0\0\0@\205\0\0\0\377\3\230\230\230\377\240\240\240\377LLL\377\212\0" "\0\0\377\3\12\12\12\366\241\241\241\377\0\0\0p\202\377\377\377\0\1\0" "\0\0@\205\0\0\0\377\3\340\340\340\377\377\377\377\377\240\240\240\377" "\211\0\0\0\377\4\12\12\12\366\334\334\334\377\277\277\277\377\0\0\0p" "\202\377\377\377\0\1\0\0\0@\205\0\0\0\377\3\340\340\340\377\377\377\377" "\377\240\240\240\377\210\0\0\0\377\5\12\12\12\366\334\334\334\377\377" "\377\377\377\277\277\277\377\0\0\0p\202\377\377\377\0\1\0\0\0@\202\0" "\0\0\377\1\230\230\230\377\202\240\240\240\377\3\364\364\364\377\377" "\377\377\377\334\334\334\377\202\240\240\240\377\1LLL\377\204\0\0\0\377" "\2\12\12\12\366\334\334\334\377\202\377\377\377\377\2\277\277\277\377" "\0\0\0p\202\377\377\377\0\1\0\0\0@\202\0\0\0\377\1\340\340\340\377\207" "\377\377\377\377\1\240\240\240\377\203\0\0\0\377\2\12\12\12\366\334\334" "\334\377\203\377\377\377\377\2\277\277\277\377\0\0\0p\202\377\377\377" "\0\1\0\0\0@\202\0\0\0\377\1\344\344\344\377\202\340\340\340\377\3\373" "\373\373\377\377\377\377\377\364\364\364\377\202\340\340\340\377\1\230" "\230\230\377\202\0\0\0\377\2\12\12\12\366\334\334\334\377\204\377\377" "\377\377\2\277\277\277\377\0\0\0p\202\377\377\377\0\1\0\0\0@\205\0\0" "\0\377\3\340\340\340\377\377\377\377\377\240\240\240\377\204\0\0\0\377" "\2\12\12\12\366\334\334\334\377\205\377\377\377\377\2\277\277\277\377" "\0\0\0p\202\377\377\377\0\1\0\0\0@\205\0\0\0\377\3\340\340\340\377\377" "\377\377\377\240\240\240\377\203\0\0\0\377\2\12\12\12\366\334\334\334" "\377\206\377\377\377\377\2\277\277\277\377\0\0\0p\202\377\377\377\0\1" "\0\0\0@\205\0\0\0\377\3\344\344\344\377\340\340\340\377\230\230\230\377" "\202\0\0\0\377\2\12\12\12\366\334\334\334\377\207\377\377\377\377\2\277" "\277\277\377\0\0\0p\202\377\377\377\0\1\0\0\0@\211\0\0\0\377\2\12\12" "\12\366\334\334\334\377\210\377\377\377\377\2\277\277\277\377\0\0\0p" "\202\377\377\377\0\1\0\0\0@\210\0\0\0\377\2\12\12\12\366\334\334\334" "\377\211\377\377\377\377\2\277\277\277\377\0\0\0p\202\377\377\377\0\1" "\0\0\0@\207\0\0\0\377\3\12\12\12\366\334\334\334\377\357\357\357\377" "\210\277\277\277\377\3\357\357\357\377\277\277\277\377\0\0\0p\202\377" "\377\377\0\1\0\0\0@\206\0\0\0\377\4\12\12\12\366\334\334\334\377\377" "\377\377\377\277\277\277\377\210\0\0\0\377\202\277\277\277\377\1\0\0" "\0p\202\377\377\377\0\1\0\0\0@\205\0\0\0\377\2\12\12\12\366\334\334\334" "\377\202\377\377\377\377\1\277\277\277\377\210\0\0\0\377\202\277\277" "\277\377\1\0\0\0p\202\377\377\377\0\1\0\0\0@\204\0\0\0\377\2\12\12\12" "\366\334\334\334\377\203\377\377\377\377\1\357\357\357\377\210\277\277" "\277\377\3\357\357\357\377\277\277\277\377\0\0\0p\202\377\377\377\0\1" "\0\0\0@\203\0\0\0\377\2\12\12\12\366\334\334\334\377\216\377\377\377" "\377\2\277\277\277\377\0\0\0p\202\377\377\377\0\1\0\0\0@\202\0\0\0\377" "\2\12\12\12\366\334\334\334\377\217\377\377\377\377\2\277\277\277\377" "\0\0\0p\202\377\377\377\0\4\0\0\0@\0\0\0\377\12\12\12\366\334\334\334" "\377\220\377\377\377\377\2\277\277\277\377\0\0\0p\202\377\377\377\0\3" "\0\0\0H\4\4\4\374\241\241\241\377\221\277\277\277\377\2\217\217\217\377" "\0\0\0p\202\377\377\377\0\2\0\0\0\6\0\0\0v\223\0\0\0p\1\0\0\0\27\231" "\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (film_24) #endif #ifdef __GNUC__ static const guint8 film_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 film_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1371) */ "\0\0\5s" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\235\377\377\377\0\4\0\0\0$\0\0\0""6\0\0\0<\0\0\0\27\215\377\377\377" "\0\1\0\0\0\12\203\377\377\377\0\12\0\0\0\10\16\16\16\226\25\25\25\321" "\20\20\20\366\16\16\16\374\14\14\14\375\23\23\23\362\27\27\27\322\16" "\16\16\216\0\0\0\6\207\377\377\377\0\4\0\0\0\30\12\12\12\253\17\17\17" "\317\6\6\6\347\202\377\377\377\0\4\0\0\0\31\22\22\22\324AAA\375\20\20" "\20\377\204\0\0\0\377\4\30\30\30\377\77\77\77\374\21\21\21\320\0\0\0" "\15\205\377\377\377\0\5\11\11\11r\24\24\24\340000\377333\377\24\24\24" "\336\202\377\377\377\0\4\20\20\20\263GGG\377MMM\377\14\14\14\377\203" "\0\0\0\377\5\1\1\1\377\24\24\24\377MMM\377EEE\377\17\17\17\252\204\377" "\377\377\0\2\11\11\11q\35\35\35\354\203333\377\1\24\24\24\336\202\377" "\377\377\0\11\36\36\25\343MMM\377LLL\377---\377RRR\377***\377///\377" "JJJ\377***\377\202MMM\377\2\35\35\27\330\0\0\0\4\202\377\377\377\0\2" "\10\10\10f\33\33\33\352\204333\377\1\24\24\24\336\202\377\377\377\0\1" "\27\27\6\370\202MMM\377\15""777\377555\377RRR\377AAA\377+++\377BBB\377" "MMM\377LLL\377;;\20\364\0\0\0\16\377\377\377\0\10\10\10a\31\31\31\350" "\205333\377\1\24\24\24\336\202\377\377\377\0\2BB\0\34588!\377\203MMM" "\377\2BBB\377III\377\202MMM\377\6LLL\37733\35\377\230\230\2\334\0\0\0" "\15\12\12\12\205\36\36\36\353\206333\377\1\24\24\24\336\202\377\377\377" "\0\5[[\0\335\275\275\2\377AA\20\377==/\377FFF\377\202MMM\377\7HHH\377" "==,\377>>\17\377\305\305\2\377\307\307\0\324\12\12\12\254&&&\364\207" "333\377\1\24\24\24\336\202\377\377\377\0\15\\\\\0\335\377\377\0\377\374" "\374\0\377\311\311\0\377||\7\377YY\12\377cc\5\377TT\1\377hh\0\377__\0" "\377\222\222\3\377,,\12\366***\374\210333\377\1\24\24\24\336\202\377" "\377\377\0\13\\\\\0\336\377\377\0\377\224\224\0\377vv\0\377yy\0\377w" "w\0\377[[\2\377ww\0\377\277\277\0\377MM\3\377**(\377\211333\377\2+++" "\372\12\12\12\314\202\377\377\377\0\12^^\0\336\370\370\0\377TT\0\377" "rr\0\377zz\0\377ww\0\377__\5\377ww\0\377\277\277\0\377NN\10\377\2103" "33\377\4""111\377\27\27\27\337\10\10\10\210\0\0\0\5\202\377\377\377\0" "\2__\0\337\370\370\0\377\204\177\177\0\377\4ee\5\377\177\177\0\377\303" "\303\0\377NN\10\377\207333\377\3---\376\14\14\14\305\0\0\0\37\203\377" "\377\377\0\3\0\0\0\1bb\0\337\377\377\0\377\202\367\367\0\377\6\265\265" "\0\377%%\0\377\305\305\13\377CC\0\377\221\221\0\377NN\10\377\206333\377" "\3...\377\14\14\14\302\0\0\0\10\204\377\377\377\0\3\0\0\0\2dd\0\337\370" "\370\0\377\204\177\177\0\377\4ee\5\377\177\177\0\377\303\303\0\377NN" "\10\377\206333\377\2\20\20\20\323\0\0\0\11\205\377\377\377\0\13\0\0\0" "\4ff\0\337\374\374\0\377\252\252\0\377\200\200\0\377\77\77\0\377GG\0" "\377dd\5\377$$\0\377\265\265\0\377NN\10\377\205333\377\2+++\376\10\10" "\10\177\206\377\377\377\0\10\0\0\0\5ii\0\337\364\364\0\377cc\0\377vv" "\0\377\233\233\0\377\341\341\0\377ss\6\377\202\377\377\0\377\1NN\10\377" "\205333\377\2\24\24\24\341\0\0\0\14\206\377\377\377\0\10\0\0\0\6jj\0" "\340\366\366\0\377//\0\377oo\0\377$$\0\377uu\0\377``\5\377\202\377\377" "\0\377\1NN\10\377\205333\377\1\20\20\20\313\207\377\377\377\0\10\0\0" "\0\4VV\0\320\373\373\0\311\250\250\0\334\222\222\0\344\204\204\0\352" "\201\201\0\356{{\7\373\202\377\377\0\377\1NN\10\377\205333\377\1\13\13" "\13\264\210\377\377\377\0\7""44\0\265\356\356\0\377jj\0\377LL\0\377W" "W\0\377dd\0\377}}\7\377\202\377\377\0\377\1NN\10\377\203333\377\3""0" "00\377\24\24\24\334\11\11\11Q\210\377\377\377\0\7\16\16\0$DD\0\324\224" "\224\0\377\221\221\0\377\214\214\0\377\212\212\0\377~~\7\377\202\377" "\377\0\377\6NN\10\377222\377(((\375\27\27\27\340\12\12\12\266\0\0\0\30" "\212\377\377\377\0\6\0\0\0\15//\0\244SS\0\330\236\236\0\364\270\270\0" "\376\240\240\3\377\202\267\267\0\377\4""99\0\373\11\11\11\245\5\5\5h" "\0\0\0\25\216\377\377\377\0\7\0\0\0\3\0\0\0""1\4\4\0F\14\14\0j\0\0\0" "b\0\0\0I\0\0\0A\245\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (digital_24) #endif #ifdef __GNUC__ static const guint8 digital_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 digital_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1595) */ "\0\0\6S" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\204\377\377\377\0\4@@@TpmK\207\230\223U{\250\242Y\27\224\377\377\377" "\0\10@@@\310@@@\377GFA\377GGA\341tpL\304\212\206R\255TT=#\252\237U\30" "\217\377\377\377\0\4@@@\14@@@\373ED9\377SN,\377\203@@@\377\6AA\77\377" "kiK\353soL\302_]Gt\226\221Tl\242\242]\26\213\377\377\377\0\10@@@H@@@" "\377pT\35\377\377\0\0\377\345\30\0\377\254B\7\377Wl\34\3775]5\377\203" "@@@\377\6ONC\377VTE\344fdI\267\214\210Q\256|xM<\237\237`\10\207\377\377" "\377\0\3@@@\210@@@\377\235J\13\377\203\377\0\0\377\6X\247\0\377\0\377" "\0\377\6\355\6\377\25\275\25\377ga\31\377SO-\377\203@@@\377\5AA\77\377" "kiK\352\177|O\315AAA]@@@\34\204\377\377\377\0\3@@@\310@@@\377\322(\2" "\377\203\377\0\0\377\1\31\346\0\377\202\0\377\0\377\7\6\371\0\377\366" "\11\0\377\377\0\0\377\345\30\0\377\233P\10\377%\215%\3775]5\377\203@" "@@\377\1@@@\317\203\377\377\377\0\7@@@\15@@@\373:N:\377\177\177\0\377" "\300\77\0\377\367\10\0\377\331&\0\377\203\0\377\0\377\1;\304\0\377\203" "\377\0\0\377\1\256Q\0\377\202\0\377\0\377\4\6\355\6\377'\212'\377@@@" "\377@@@\217\203\377\377\377\0\3@@@H@@@\377+~+\377\202\0\377\0\377\6\7" "\370\0\377\31\231L\377\0~\201\377\0\277@\377\0\370\7\377z\205\0\377\203" "\377\0\0\377\1o\220\0\377\203\0\377\0\377\3*\201*\377@@@\377@@@O\203" "\377\377\377\0\3@@@\211@@@\377\33\255\33\377\203\0\377\0\377\1\0X\247" "\377\202\0\0\377\377\6\0\10\367\3770\244*\377\200\177\0\377\277@\0\377" "\367\10\0\377/\320\0\377\203\0\377\0\377\3:Q:\377@@@\375@@@\21\203\377" "\377\377\0\3@@@\311@@@\377\13\335\13\377\203\0\377\0\377\1\0\30\347\377" "\202\0\0\377\377\2\0\6\371\377\0\365\12\377\202\0\377\0\377\7\6\346\22" "\377\0>\300\377\0\200\177\377\0\302=\377\11\332\17\377@@@\377@@@\317" "\203\377\377\377\0\7@@@\15@@@\373KG5\377\330&\0\377\230g\0\377W\250\0" "\377\22\304(\377\203\0\0\377\377\1\0=\302\377\203\0\377\0\377\1\0\256" "Q\377\203\0\0\377\377\3\13J\235\377@@@\377@@@\217\203\377\377\377\0\3" "@@@I@@@\377pS\34\377\203\377\0\0\377\5\226i\0\377\0\326)\377\0\227h\377" "\0Y\246\377\10\214j\377\203\0\377\0\377\1\0m\222\377\203\0\0\377\377" "\3\34Tq\377@@@\377@@@O\203\377\377\377\0\3@@@\211@@@\377\236I\13\377" "\203\377\0\0\377\1V\251\0\377\203\0\377\0\377\5\276A\0\377\330'\0\377" "\227h\0\377V\251\0\377\0>\300\377\203\0\0\377\377\3""4GK\377@@@\375@" "@@\21\203\377\377\377\0\4@@@\311@@@\377\257@\7\377\375\1\0\377\202\377" "\0\0\377\1\27\350\0\377\202\0\377\0\377\2\7\370\0\377\367\10\0\377\202" "\377\0\0\377\7\353\24\0\377\1\376\0\377\0\324+\377\0\223l\377\4^\227" "\377@@@\377@@@\316\203\377\377\377\0\2@@@\15@@@\374\202@@@\377\7GH7\377" "kU\36\377\207Y\16\377\13\333\13\377\0\376\0\377\0\377\0\377=\302\0\377" "\203\377\0\0\377\1\255R\0\377\203\0\377\0\377\3\33\256\33\377@@@\377" "@@@\216\203\377\377\377\0\5@@@\5\227\217T\253\226\222U\337xuN\340CCA" "\372\203@@@\377\7;M;\377+{+\377Y|\23\377\322'\1\377\376\0\0\377\377\0" "\0\377n\221\0\377\203\0\377\0\377\3+~+\377@@@\377@@@N\204\377\377\377" "\0\10\247\241Y\243\250\242Y\377\251\242Y\311\246\237W\251\241\233W\331" "\210\204Q\307^\\G\323KJB\373\203@@@\377\4IG6\377pS\35\3775\227\27\377" "\13\334\13\377\202\0\376\0\377\3;N;\377@@@\375@@@\20\204\377\377\377" "\0\14\250\242Z\245\250\242Y\377\250\242Z\315\251\243X\256\250\242Y\377" "\250\243Y\277\250\242Y\302\250\241Y\353\230\224T\271\211\205Q\313daG" "\327CC@\372\203@@@\377\4;N;\377.t.\377@@@\377@@@\316\205\377\377\377" "\0\5\247\244XW\250\242X\371\247\241Z\271\247\243Y\256\250\242Y\377\202" "\251\242Y\300\11\250\242Y\377\250\241Z\260\250\242X\333\250\242X\373" "\242\236X\200\237\231V\322\211\205Q\312LKB\314HGA\373\202@@@\377\1@@" "@\216\205\377\377\377\0\23\252\252U\3\250\242X\320\250\242W\214\247\242" "Xc\250\242X\373\247\241Y\246\247\242Y\272\250\242Y\377\246\242Y\254\250" "\242Z\336\250\242Y\377\250\242W\216\250\242Y\343\250\242Y\377\250\242" "Yd\247\241X\340\241\233W\335nlK\254@@@<\207\377\377\377\0\20\200\200" "\200\2\231\231f\5\250\242X\310\247\242Xc\247\242Xh\247\242Y\375\251\244" "Zt\250\242X\315\250\242Y\377\250\242Yq\250\242Y\345\250\242Y\377\250" "\242Yr\250\242Y\335\250\242Y\377\250\242Y\204\214\377\377\377\0\14\266" "\222I\7\250\242Y\244\244\244[\34\250\242Y\217\250\242Y\356\243\243\\" "\31\250\242Y\312\250\242Y\371\250\242Y\77\250\242Y\333\250\242Y\377\250" "\242Y\201\217\377\377\377\0\11\257\237`\20\252\245Zc\377\377\377\0\250" "\242Y\210\250\242Y\341\250\242Y\5\250\242Y\261\250\242Y\366\250\242Y" "5\222\377\377\377\0\6\250\242Y\6\250\242Y\36\377\377\377\0\250\242YB" "\250\242Y\311\250\242Y\3\205\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (restore_lch_24) #endif #ifdef __GNUC__ static const guint8 restore_lch_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 restore_lch_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1113) */ "\0\0\4q" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\242\377\377\377\0\4\0\0\0\22\0\0\0\256\0\0\0\262\0\0\0\24\223\377\377" "\377\0\2\6\6\6*\15\15\15\303\202\24\24\24\377\2\15\15\15\302\6\6\6-\221" "\377\377\377\0\10\14\14\14>,,,\353AAA\377666\377555\377AAA\377,,,\352" "\17\17\17C\220\377\377\377\0\10\21\21\21\321)))\377999\377555\377444" "\377999\377(((\377\27\27\27\311\220\377\377\377\0\10\20\20\20\331)))" "\377999\377555\377444\377999\377(((\377\25\25\25\322\220\377\377\377" "\0\10\21\21\21\335###\377...\377000\377222\377///\377&&&\377\25\25\25" "\326\220\377\377\377\0\10\22\22\22\34422%\37711\27\377\\\\\31\377MM\30" "\377<" "\377\361\361\312\377\375\375\317\377\377\377\344\377\377\377\211\377" "\377\377\0\377\347\347\0\377,,\0\200\204\377\377\377\0\2\0\0\0\5\0\0" "\0\12\202\0\0\0\15\4\0\0\0\26$$\0```\0\333\365\365\0\377\204\377\377" "\0\377\10\366\366\32\377\346\346\243\377\347\347\247\377\377\377\233" "\377\377\377\77\377\377\377\0\377\226\226\0\356\4\4\0/\212\377\377\377" "\0\3\0\0\0\32;;\0\277\316\316\0\370\204\377\377\0\377\2\377\377\7\377" "\377\377,\377\202\377\377\0\377\2\356\356\0\37766\0\253\214\377\377\377" "\0\4\0\0\0\1--\0\206jj\0\331\335\335\0\375\205\377\377\0\377\3\341\341" "\0\375CC\0\306\0\0\0\17\216\377\377\377\0\11\0\0\0\15))\0\200QQ\0\315" "||\0\343\243\243\0\360\247\247\0\362dd\0\32466\0\235\0\0\0\6\222\377" "\377\377\0\4\0\0\0\14\0\0\0)\0\0\0/\0\0\0\1\315\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (interpolation_24) #endif #ifdef __GNUC__ static const guint8 interpolation_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 interpolation_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (861) */ "\0\0\3u" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\264\377\377\377\0\6\377\0\0\77\377\0\0\265\377\0\0\345\377\0\0\353\377" "\0\0\256\377\0\0F\204\377\377\377\0\6\0\377\0\77\0\377\0\265\0\377\0" "\345\0\377\0\353\0\377\0\256\0\377\0F\207\377\377\377\0\1\377\0\0n\206" "\377\0\0\377\1\377\0\0q\202\377\377\377\0\1\0\377\0n\206\0\377\0\377" "\1\0\377\0q\205\377\377\377\0\2\377\0\0@\377\0\0\376\207\377\0\0\377" "\3\377\0\0<\0\377\0@\0\377\0\376\207\0\377\0\377\1\0\377\0<\204\377\377" "\377\0\1\377\0\0\253\210\377\0\0\377\2\377\0\0\263\0\377\0\253\210\0" "\377\0\377\1\0\377\0\263\204\377\377\377\0\1\377\0\0\353\210\377\0\0" "\377\2\377\0\0\340\0\377\0\353\210\0\377\0\377\1\0\377\0\340\204\377" "\377\377\0\1\377\0\0\345\210\377\0\0\377\2\377\0\0\352\0\377\0\345\210" "\0\377\0\377\1\0\377\0\352\204\377\377\377\0\1\377\0\0\265\210\377\0" "\0\377\2\377\0\0\253\0\377\0\265\210\0\377\0\377\1\0\377\0\253\204\377" "\377\377\0\1\377\0\0\77\207\377\0\0\377\3\377\0\0\376\377\0\0@\0\377" "\0\77\207\0\377\0\377\2\0\377\0\376\0\377\0@\205\377\377\377\0\2\377" "\0\0n\377\0\0\376\205\377\0\0\377\1\377\0\0n\202\377\377\377\0\2\0\377" "\0n\0\377\0\376\205\0\377\0\377\1\0\377\0n\207\377\377\377\0\6\377\0" "\0@\377\0\0\253\377\0\0\353\377\0\0\345\377\0\0\265\377\0\0\77\204\377" "\377\377\0\6\0\377\0@\0\377\0\253\0\377\0\353\0\377\0\345\0\377\0\265" "\0\377\0\77\210\377\377\377\0\6\0\377\0\77\0\377\0\265\0\377\0\345\0" "\377\0\353\0\377\0\256\0\377\0F\204\377\377\377\0\6\0\0\377\77\0\0\377" "\265\0\0\377\345\0\0\377\353\0\0\377\256\0\0\377F\207\377\377\377\0\1" "\0\377\0n\206\0\377\0\377\1\0\377\0q\202\377\377\377\0\1\0\0\377n\206" "\0\0\377\377\1\0\0\377q\205\377\377\377\0\2\0\377\0@\0\377\0\376\207" "\0\377\0\377\3\0\377\0<\0\0\377@\0\0\377\376\207\0\0\377\377\1\0\0\377" "<\204\377\377\377\0\1\0\377\0\253\210\0\377\0\377\2\0\377\0\263\0\0\377" "\253\210\0\0\377\377\1\0\0\377\263\204\377\377\377\0\1\0\377\0\353\210" "\0\377\0\377\2\0\377\0\340\0\0\377\353\210\0\0\377\377\1\0\0\377\340" "\204\377\377\377\0\1\0\377\0\345\210\0\377\0\377\2\0\377\0\352\0\0\377" "\345\210\0\0\377\377\1\0\0\377\352\204\377\377\377\0\1\0\377\0\265\210" "\0\377\0\377\2\0\377\0\253\0\0\377\265\210\0\0\377\377\1\0\0\377\253" "\204\377\377\377\0\1\0\377\0\77\207\0\377\0\377\3\0\377\0\376\0\377\0" "@\0\0\377\77\207\0\0\377\377\2\0\0\377\376\0\0\377@\205\377\377\377\0" "\2\0\377\0n\0\377\0\376\205\0\377\0\377\1\0\377\0n\202\377\377\377\0" "\2\0\0\377n\0\0\377\376\205\0\0\377\377\1\0\0\377n\207\377\377\377\0" "\6\0\377\0@\0\377\0\253\0\377\0\353\0\377\0\345\0\377\0\265\0\377\0\77" "\204\377\377\377\0\6\0\0\377@\0\0\377\253\0\0\377\353\0\0\377\345\0\0" "\377\265\0\0\377\77\264\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (white_balance_24) #endif #ifdef __GNUC__ static const guint8 white_balance_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 white_balance_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1490) */ "\0\0\5\352" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\3\377\377\377\0\0\0\0\17\0\0\0&\226\377\377\377\0\7\0\17\0z\0""1\0\360" "\0#\0\327\0\32\0\275\0\22\0\226\0\6\0F\0\0\0\14\221\377\377\377\0\1\0" "\30\0\267\203\0`\0\377\7\0Z\0\377\0E\0\372\0,\0\341\0\37\0\311\0\26\0" "\255\0\16\0o\0\0\0+\215\377\377\377\0\3\0\20\0\333\0G\0\373\0Y\0\377" "\205\0`\0\377\10\0_\0\377\0P\0\377\0""7\0\363\0#\0\335\0\33\0\273\0\22" "\0\224\0\6\0E\0\0\0\13\210\377\377\377\0\7\0\0\0\15\0\10\0M\0\11\0\307" "\0\31\0\310\0*\0\336\0D\0\370\0[\0\377\206\0`\0\377\7\0[\0\377\0E\0\372" "\0,\0\341\0\40\0\310\0\26\0\253\0\16\0m\0\0\0#\206\377\377\377\0\10\0" "\0\0\255\0\0\0s\0\0\0\10\0\6\0D\0\23\0\230\0\35\0\277\0(\0\337\0[\0\377" "\207\0`\0\377\4\0_\0\377\0Q\0\377\0""8\0\354\0\16\0\244\205\377\377\377" "\0\2\0\0\0\351\0\0\0\325\204\377\377\377\0\2\0\22\0\220\0Z\0\377\202" "\0`\0\377\3\0""1\0\355\0@\0\364\0T\0\377\202\0`\0\377\4\0_\0\377\0`\0" "\377\0O\0\377\0\15\0j\204\377\377\377\0\4\0\0\0&\0\0\0\346\0\0\0\327" "\0\0\0""7\203\377\377\377\0\1\0\25\0\250\202\0`\0\377\12\0N\0\377\16" "\27\16\301\0\1\0""1\0\21\0z\0\27\0\255\0\40\0\310\0\33\0\351\0""7\0\367" "\0,\0\354\0\0\0\35\204\377\377\377\0\4\0\0\0b\0\0\0\251\0\0\0v\0\0\0" "\231\203\377\377\377\0\1\0\32\0\265\202\0`\0\377\2\31;\31\377999\306" "\204\377\377\377\0\3\0\0\0\230\0\0\0\217\0\13\0l\205\377\377\377\0\5" "\0\0\0\237\0\0'u\0\0\316Z\0\0""3\360\0\0\0\11\202\377\377\377\0\6\0\37" "\0\302\0`\0\377\0]\0\377;J;\377hhh\347\0\0\0\34\203\377\377\377\0\2\0" "\0\0\331\0\0\0\312\206\377\377\377\0\2\0\0b\350\0\0\375\370\202\0\0\377" "\377\11\0\0\342\325\0\0\377\15\377\377\377\0\0\"\0\323\0`\0\377\10D\10" "\377\220\222\220\377\217\217\217\377\0\0\0@\202\377\377\377\0\4\0\0\0" "\34\0\0\0\354\0\0\0\346\0\0\0\"\204\377\377\377\0\2\0\0\2325\0\0\370" "\377\204\0\0\377\377\10\0\0\377\230\377\377\377\0\0&\0\337\0`\0\377#" "<#\377\277\277\277\377\217\217\217\377\0\0\0@\202\377\377\377\0\4\0\0" "\0`\0\0\0\253\0\0\0\222\0\0\0x\204\377\377\377\0\1\0\0\252\231\205\0" "\0\377\377\10\0\0\373\355\0\0\0\24\0""1\0\350\0U\0\377U_U\377\277\277" "\277\377\217\217\217\377\0\0\0@\202\377\377\377\0\4\0\0\0\243\0\0\0g" "\0\0\0;\0\0\0\317\204\377\377\377\0\1\0\0\213\276\205\0\0\377\377\10" "\0\0\361\362\0\0\0.\0>\0\363\13""5\13\375\255\255\255\377\277\277\277" "\377\217\217\217\377\0\0\0@\202\377\377\377\0\5\37\0\0\351\334\0\0\215" "\376\0\0\221[\0\0\354\0\0\0'\203\377\377\377\0\2\0\0$\324\0\0\374\367" "\204\0\0\377\377\4\0\0\230\362\0\4\0N\0I\0\376\37""1\37\374\202\277\277" "\277\377\5\217\217\217\377\0\0\0@\377\377\377\0\221\0\0O\356\0\0\375" "\203\377\0\0\377\1\304\0\0\316\202\377\377\377\0\4\0\0\0\22\0\2\0\335" "\0\3h\211\0\2\255\364\202\0\2\261\377\5\0\2\237\317\0\2\14\312\0\11\0" "\225\0;\0\374RWR\371\202\277\277\277\377\4\217\217\217\377\0\0\0@\377" "\377\377\0\333\0\0\327\205\377\0\0\377\4\377\0\0;\377\377\377\0\0\0\0" "6\0""4\0\372\205\0J\0\377\4\0A\0\377\0\21\0\310\0\37\0\341\203\203\203" "\371\202\277\277\277\377\4\217\217\217\377\0\0\0@\377\377\377\0\364\0" "\0\372\205\377\0\0\377\4\322\0\0\213\377\377\377\0\0\2\0C\0""3\0\373" "\205\0D\0\372\4\0;\0\373\0\21\0\325\0\22\0\271\213\213\213\374\202\277" "\277\277\377\4\217\217\217\377\0\0\0@\0\0\0\3\330\0\0\374\205\377\0\0" "\377\3\177\0\0\256\377\377\377\0\0\0\0\17\207\0\0\0""8\3\0\12\0\330\32" "\32\32\276\232\232\232\377\202\277\277\277\377\4\232\232\232\377###\263" "\14\14\14{q\0\0\345\204\377\0\0\377\2\367\0\0\343\10\0\0\334\206\377" "\377\377\0\5\0\0\0\17(((\217@@@\314;>;\370\267\267\267\377\204\277\277" "\277\377\12\275\275\275\377UYU\375\22\37\22\3712\25\10\363T\14\0\363" "[\14\0\372J\15\0\342\20\21\0\253\0\13\0\327\0\0\0\31\205\377\377\377" "\0\2\0\0\0@\211\211\211\377\210\277\277\277\377\2IUI\377\0_\0\377\205" "\0`\0\377\2\0""4\0\350\0\0\0\30\205\377\377\377\0\2\0\0\0@\217\217\217" "\377\210\277\277\277\377\4IRI\377\27;\27\377\21""6\21\377\0'\0\352\203" "\0)\0\340\2\0\24\0\344\0\0\0\30\205\377\377\377\0\16\0\0\0@RRR\360pp" "p\353nnn\352mmm\351lll\351jjj\350iii\347ggg\347fff\346eee\346ccc\345" "OOO\351\30\30\30i\212\377\377\377\0\16\0\0\0\10\0\0\0\37\0\0\0\36\0\0" "\0\34\0\0\0\33\0\0\0\32\0\0\0\30\0\0\0\27\0\0\0\26\0\0\0\24\0\0\0\23" "\0\0\0\22\0\0\0\20\0\0\0\6\205\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (color_management_24) #endif #ifdef __GNUC__ static const guint8 color_management_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 color_management_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1437) */ "\0\0\5\265" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231\0\0\0\0\5a\377\320@0\377\274\356'\377\264\377;\377\265\260\217\377" "\3210\223\0\0\0\0\7+\377\302\337\0\377\260\377\0\377\252\377\0\377\242" "\377\11\377\233\377E\377\254\260\250\377\325\37\220\0\0\0\0\11\223\377" "\343;\1\377\273\377\0\377\265\377\0\377\256\377\0\377\246\377\0\377\234" "\377\0\377\220\377\33\377\215\357[\377\241`\217\0\0\0\0\13""9\377\322" "R\0\377\276\377\0\377\272\377\0\377\263\377\0\377\253\377\0\377\241\377" "\0\377\224\377\0\377\204\377\2\377l\3778\377l\220\324\377\313\20\215" "\0\0\0\0\14\77\377\324y\0\377\305\377\0\377\276\377\0\377\270\377\0\377" "\260\377\0\377\247\377\0\377\232\377\0\377\212\377\0\377q\377\0\377\77" "\377c\377*\317\301\377\222\40\214\0\0\0\0\15""9\377\330\200\0\377\310" "\377\0\377\304\377\0\377\276\377\0\377\266\377\0\377\255\377\0\377\241" "\377\0\377\220\377\0\377x\377\0\377H\377K\377\0\377\220\377\33\357\322" "\377\210@\213\0\0\0\0\16.\377\327d\0\377\316\377\0\377\311\377\0\377" "\304\377\0\377\274\377\0\377\264\377\0\377\250\377\0\377\230\377\0\377" "\200\377\0\377R\377J\377\7\377\212\377\0\377\266\377\16\377\335\377Q" "`\212\0\0\0\0\17/\377\336\\\0\377\324\377\0\377\317\377\0\377\312\377" "\0\377\304\377\0\377\273\377\0\377\260\377\0\377\240\377\0\377\211\377" "\14\377_\377a\377=\377\224\377\30\377\274\377\1\377\337\377\11\377\372" "\377=\200\211\0\0\0\0\21i\377\352@\0\377\331\377\0\377\326\377\0\377" "\320\377\0\377\313\377\0\377\304\377\0\377\270\377\0\377\252\377\0\377" "\224\377&\377r\377x\377a\377\247\377N\377\315\377/\377\360\377\10\377" "\377\365\0\377\377\3468\260\377\355\245\20\207\0\0\0\0\22\275\377\367" "3\2\377\340\377\0\377\334\377\0\377\330\377\0\377\323\377\0\377\314\377" "\0\377\303\377\0\377\265\377\0\377\237\377J\377\212\377\220\377\177\377" "\274\377r\377\343\377a\377\375\372F\377\377\341\30\377\377\314\1\377" "\377\305)\315\377\337\2350\207\0\0\0\0\22$\377\353\377\0\377\345\377" "\0\377\341\377\0\377\334\377\0\377\326\377\0\377\316\377\0\377\302\377" "\15\377\256\377l\377\243\377\247\377\233\377\324\377\221\377\370\375" "\204\377\377\346i\377\377\314L\377\377\266(\377\377\246\6\377\377\244" "\32\340\377\266[0\206\0\0\0\0\23*\377\362\317\0\377\355\377\0\377\353" "\377\0\377\350\377\0\377\342\377\0\377\334\377\0\377\322\377*\377\304" "\377\212\377\276\377\300\377\270\377\356\376\261\377\377\355\233\377" "\377\317\177\377\377\266e\377\377\242N\377\377\2224\377\377\204\21\377" "\377\205\26\377\377\242]`\205\0\0\0\0\24;\377\372\240\0\377\366\377\0" "\377\365\377\0\377\363\377\0\377\360\377\0\377\354\377\0\377\346\377" "T\377\336\377\247\377\334\377\336\377\330\377\376\363\312\377\377\322" "\251\377\377\266\216\377\377\240x\377\377\216c\377\377}P\377\377n<\377" "\377`\37\377\377]\20\377\377\213\\\220\204\0\0\0\0\3N\377\377r\0\377" "\377\377\0\376\377\377\202\0\376\376\377\21\0\376\375\377\16\375\374" "\377~\375\373\377\305\375\372\377\362\365\361\377\377\330\324\377\377" "\267\264\377\377\236\233\377\377\211\206\377\377ws\377\377fb\377\377" "VQ\377\377F@\377\3772*\377\377\35\22\377\3774\77\240\377\324\333\20\202" "\0\0\0\0\27\230\374\377@\0\366\377\377\0\365\377\377\0\363\377\377\0" "\360\377\377\0\354\377\377+\346\377\377\222\343\377\377\317\340\377\377" "\372\330\373\377\377\270\333\377\377\233\274\377\377\204\245\377\377" "o\221\377\377\\\177\377\377Jo\377\3772a\377\377\26S\377\377\3L\377\377" "\0G\377\377\0D\377\377%b\320\377[\212\21\202\0\0\0\0\26\35\355\377\337" "\0\350\377\377\0\343\377\377\0\334\377\377\0\322\377\377N\307\377\377" "\237\302\377\377\322\275\377\377\372\264\374\377\377\227\340\377\377" "|\304\377\377d\255\377\377N\232\377\3774\212\377\377\24|\377\377\2r\377" "\377\0l\377\377\0h\377\377\0c\377\377\12e\377\377-u\300\377d\226@\202" "\0\0\0\0\24""9\345\377\240\0\331\377\377\0\321\377\377\0\306\377\377" "\13\264\377\377k\251\377\377\250\242\377\377\326\230\377\377\372\214" "\376\377\377q\345\377\377U\312\377\3774\264\377\377\22\244\377\377\1" "\227\377\377\0\216\377\377\0\207\377\377\0\200\377\377\23\203\337\377" "@\225\220\377\212\273!\204\0\0\0\0\22\205\352\377O\4\312\377\377\0\276" "\377\377\0\254\377\377$\225\377\377|\212\377\377\257~\377\377\330p\377" "\377\372]\376\377\3777\351\377\377\21\320\377\377\1\276\377\377\0\260" "\377\377\0\246\377\377\14\242\377\377\35\240\260\377q\277`\377~\302\11" "\207\0\0\0\0\16""1\305\377\337\0\250\377\377\0\216\377\377Br\377\377" "\210d\377\377\264R\377\377\3322\377\377\372\20\377\377\377\0\356\377" "\377\0\330\377\377\0\311\377\377&\305\357\377G\306\220\377\207\325!\212" "\0\0\0\0\14L\275\377`\0\217\377\377\10h\377\377]H\377\377\222)\377\377" "\273\12\377\377\336\0\377\377\372\0\377\377\377\16\363\377\3772\345\300" "\377X\341Q\377\0\252\0\215\0\0\0\0\10+\204\377\337\40*\377\377s\7\377" "\377\243\0\377\377\306\1\377\377\345%\377\357\3728\377\200\377\222\376" "\40\220\0\0\0\0\5}\227\3770h\31\377\357\222\16\377\377\2768\377\300\333" "^\377P\224\0\0\0\0\2\230,\377\22\314\217\377\40\221\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (color_corrections_24) #endif #ifdef __GNUC__ static const guint8 color_corrections_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 color_corrections_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1349) */ "\0\0\5]" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\242\377\377\377\0\1\377\377\0\200\202\377\377\0\377\1\377\377\0\200" "\216\377\377\377\0\2\377\377\0_\377\377\0\4\204\377\377\377\0\1\377\377" "\0\200\202\377\377\0\377\1\377\377\0\200\205\377\377\377\0\1\377\377" "\0\24\207\377\377\377\0\4\377\377\0\217\377\377\0\377\377\377\0\253\377" "\377\0\4\203\377\377\377\0\1\377\377\0\200\202\377\377\0\377\1\377\377" "\0\200\204\377\377\377\0\3\377\377\0:\377\377\0\357\377\377\0e\205\377" "\377\377\0\1\377\377\0P\203\377\377\0\377\5\377\377\0\253\377\377\0\4" "\377\377\0""0\377\377\0\211\377\377\0\336\202\377\377\0\377\11\377\377" "\0\333\377\377\0\203\377\377\0\"\377\377\377\0\377\377\0D\377\377\0\364" "\377\377\0\377\377\377\0\375\377\377\0V\205\377\377\377\0\1\377\377\0" "\217\202\377\377\0\377\14\377\377\0\356\377\377\0\224\377\377\0\373\373" "\373\0\377\316\316\0\377\237\237\0\377\377\377f\377\377\3774\377\377" "\377\7\377\377\377\0\364\377\377\0v\377\377\0\360\202\377\377\0\377\2" "\377\377\0\350\377\377\0.\206\377\377\377\0\21\377\377\0\217\377\377" "\0\356\377\377\0\323\377\377\0\377\253\253\0\377\24\24\0\377\0\0\0\377" "@\13\0\377\377\312\310\377\377\377\377\377\377\377\354\377\377\377V\377" "\377\377\0\377\377\377\0\305\377\377\0\372\377\377\0\342\377\377\0&\210" "\377\377\377\0\3\377\377\0\224\377\377\0\377hh\0\377\202\0\0\0\377\1" "{\0\0\377\202\377\0\0\377\1\377\204\204\377\202\377\377\377\377\4\377" "\377\227\377\377\377\0\377\377\377\0\225\377\377\0\37\210\377\377\377" "\0\3\377\377\0""6\377\377\0\374\252\252\0\377\203\0\0\0\377\1\315\0\0" "\377\202\377\0\0\377\1\37722\377\203\377\377\377\377\3\377\377V\377\377" "\377\0\363\377\377\0\37\210\377\377\377\0\3\377\377\0\215\371\371\0\377" "\25\25\0\377\203\0\0\0\377\1q\0\0\377\202\377\0\0\377\1\377\216\216\377" "\203\377\377\377\377\3\377\377\354\377\377\377\7\377\377\377\0m\205\377" "\377\377\0\203\377\377\0\200\2\377\377\0\340\314\314\0\377\205\0\0\0" "\377\2""2\10\0\377\377\324\312\377\205\377\377\377\377\2\377\3774\377" "\377\377\0\320\203\377\377\0\200\202\377\377\377\0\204\377\377\0\377" "\1\231\231\0\377\202\0\0\0\377\10\0&\0\377\0\11\0\377\0\0\0\377\10\10" "\0\377\377\377\361\377\377\377\377\377\366\366\377\377\331\331\377\377" "\202\377\377\377\377\1\377\377f\377\204\377\377\0\377\202\377\377\377" "\0\204\377\377\0\377\16\231\231\0\377\0\0\0\377\0\233\0\377\0\377\0\377" "\0\356\0\377\0-\0\377\7\7\0\377\377\377\356\377\322\322\377\377\21\21" "\377\377\0\0\377\377dd\377\377\377\377\377\377\377\377f\377\204\377\377" "\0\377\202\377\377\377\0\203\377\377\0\200\4\377\377\0\331\313\313\0" "\377\0\16\0\377\0\374\0\377\202\0\377\0\377\4\0\213\0\377\6\6\0\377\377" "\377\354\377tt\377\377\202\0\0\377\377\4\3\3\377\377\361\361\377\377" "\377\3773\377\377\377\0\311\203\377\377\0\200\205\377\377\377\0\4\377" "\377\0~\370\370\0\377\23\23\0\377\0\311\0\377\202\0\377\0\377\4\0I\0" "\377\4\4\0\377\377\377\351\377\266\266\377\377\202\0\0\377\377\4""66" "\377\377\377\377\352\377\377\377\6\377\377\377\0^\210\377\377\377\0\20" "\377\377\0\30\377\377\0\354\251\251\0\377\0\16\0\377\0f\0\377\0""7\0" "\377\0\0\0\377\3\3\0\377\377\377\347\377\377\377\377\377\310\310\377" "\377\231\231\377\377\361\361\377\377\377\377U\377\377\377\0\332\377\377" "\0\12\210\377\377\377\0\4\377\377\0\1\377\377\0\220\377\377\0\377hh\0" "\377\203\0\0\0\377\2\2\2\0\377\377\377\344\377\203\377\377\377\377\4" "\377\377\227\377\377\377\0\374\377\377\0\210\377\377\0\4\207\377\377" "\377\0\22\377\377\0\2\377\377\0\235\377\377\0\377\377\377\0\314\377\377" "\0\375\251\251\0\377\23\23\0\377\0\0\0\377\1\1\0\377\377\377\342\377" "\377\377\377\377\377\377\355\377\377\377W\377\377\377\0\371\377\377\0" "\306\377\377\0\377\377\377\0\251\377\377\0\3\205\377\377\377\0\2\377" "\377\0\5\377\377\0\251\203\377\377\0\377\12\377\377\0\177\377\377\0\333" "\370\370\0\377\313\313\0\377\231\231\0\377\377\377[\377\377\3774\377" "\377\377\5\377\377\377\0\313\377\377\0u\203\377\377\0\377\2\377\377\0" "\246\377\377\0\3\204\377\377\377\0\2\377\377\0\36\377\377\0\347\202\377" "\377\0\377\5\377\377\0\232\377\377\0\2\377\377\0\10\377\377\0A\377\377" "\0\272\202\377\377\0\377\5\377\377\0\267\377\377\0;\377\377\0\4\377\377" "\377\0\377\377\0\222\202\377\377\0\377\2\377\377\0\343\377\377\0\33\205" "\377\377\377\0\4\377\377\0-\377\377\0\356\377\377\0\220\377\377\0\1\203" "\377\377\377\0\1\377\377\0\200\202\377\377\0\377\1\377\377\0\200\204" "\377\377\377\0\3\377\377\0\224\377\377\0\343\377\377\0$\207\377\377\377" "\0\1\377\377\0\35\205\377\377\377\0\1\377\377\0\200\202\377\377\0\377" "\1\377\377\0\200\204\377\377\377\0\2\377\377\0\1\377\377\0\27\216\377" "\377\377\0\1\377\377\0\200\202\377\377\0\377\1\377\377\0\200\242\377" "\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (icc_profile_camera_24) #endif #ifdef __GNUC__ static const guint8 icc_profile_camera_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 icc_profile_camera_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1577) */ "\0\0\6A" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231\0\0\0\0\5a\377\320@0\377\274\356'\377\264\377;\377\265\257\217\377" "\3210\223\0\0\0\0\7+\377\302\337\0\377\260\377\0\377\252\377\0\377\242" "\377\11\377\233\377E\377\254\260\250\377\325\37\220\0\0\0\0\11\223\377" "\343;\1\377\273\377\0\377\265\377\0\377\256\377\0\377\246\377\0\377\234" "\377\0\377\220\377\33\377\215\357[\377\241`\217\0\0\0\0\21""9\377\322" "S\0\377\276\377\0\377\272\377\0\377\263\377\0\377\253\377\0\377\241\377" "\0\376\225\377\1\376\204\377\2\376l\3778\377m\220\270\311\265'\220\222" "\221~oqp\225qsr\223\206\210\207\"\377\377\377\1\376\376\376\3\207\0\0" "\0\0\20>\377\324y\0\377\305\377\0\377\276\377\0\377\270\377\0\377\260" "\377\0\377\247\377\0\377\232\377\0\377\212\377\0\377q\377\24\356J\377" "\177\207|\374}\177~\377VXW\377LNM\377=\77>\354[]\\'\210\0\0\0\0\23""9" "\377\330\200\0\377\310\377\14\371\304\377>\347\273\3775\334\254\377\31" "\357\252\377\21\363\240\377.\354\231\377+\344\202\377BvP\377HHH\3774" "55\377465\377343\377,-,\377566\311ijkk\224\224\226L\265\265\265\15\205" "\0\0\0\0\24.\377\330d\27\350\300\377\213\246\240\377~\235\226\377lyu" "\377GHH\377aaa\377fff\377tvu\377,.-\377\13\14\14\377\16\16\16\377\23" "\23\23\377\17\16\16\377\14\12\13\377\36\36\37\377CDF\377QRT\377EEE\347" "\243\243\243\5\204\0\0\0\0\24/\377\336\\.\222\201\377ooo\377^`_\377H" "JI\377./.\377;;;\377\215\215\215\377LNM\377BDC\377\200\200\200\377\206" "\206\206\377kkk\377GHG\377455\377345\3779:<\377CDF\377>>>\377___,\204" "\0\0\0\0\24i\377\352@,WN\3778&\"\377S41\377G')\377\32\20\20\377%%%\377" "=\77>\377666\377\231\235\234\377bef\377ACF\377LOQ\3775;<\377056\3770" "33\377)++\377<>=\377@@@\377>>>h\204\0\0\0\0\24\275\377\3673'ID\377$\35" "\32\3778)*\377(\31\32\377\16\7\7\377988\377243\377abb\377LPO\377\371#!\"\377@BB\377+*+\377" "\10\7\7\377000\377***\377)+,\377FHG\377-$\"\3774((\377VJJ\3774''\377" ")\37\36\377.,*\377*++\377(&'\377.-.\377mL4\241\205\0\0\0\0\24)78\363" "!\37\40\377>@@\377('(\377\10\6\7\377000\377$$$\377\35\37\40\377GJI\377" "*!\40\377+\37\37\377E99\3772&&\377)\40\37\377A\77=\377(((\377\32\30\30" "\377-,-\377\243C\26\377\377\213\\\217\204\0\0\0\0\26,01\355\35\34\32" "\377<\77>\377%$%\377\7\6\6\377...\377\40\40\40\377\24\24\24\377>\77\77" "\3771+)\377)\37\35\377&\33\32\377*\35\32\377,&'\377HFI\377\36\35\36\377" "'%&\377766\377\242.*\377\377\34\22\377\3774\77\240\377\324\333\20\202" "\0\0\0\0;.+,\347\32\31\27\3777:9\377$##\377\10\7\7\377***\377\40\40\40" "\377\21\21\21\377\40\40\40\377JLJ\377420\3771&'\377.))\377BAC\377(')" "\377\24\22\23\377&$&\377666\377\221#C\377\377\0G\377\377\0D\377\377%" "b\320\377[\212\21\0\0\0\0+&&\337\31\30\26\377576\377%$$\377\13\11\12" "\377)))\377!!!\377\35\35\35\377\25\25\25\377\33\33\33\37700/\377+,+\377" "&(*\377\33\35\36\377\16\15\16\377\23\21\22\377)'(\377333\377\227\36O" "\377\377\0c\377\377\12e\377\377.v\300\377d\227@\376\375\373\1-,*\343" "\26\26\24\377465\377(''\377\20\16\17\377)))\377(((\377\26\26\26\377\33" "\33\33\377\25\24\23\377\22\21\17\377\202\20\17\15\377\10\16\15\13\377" "\16\14\14\377\23\21\22\377#!\"\377---\377\236\32X\354\377@\225\217\377" "\212\273!\202\0\0\0\0\24\376\376\374\1A@\77\263$('\344(HO\377!>H\377" "%>K\3779JZ\377FHZ\377NFZ\377RBX\377S;R\377Q4K\377O-F\377P.F\377S+D\377" "V.G\377W0H\377S+B\355J5@\314q_i2\207\0\0\0\0\16""1\304\377\337\0\250" "\377\377\0\216\377\377Br\377\377\210d\377\377\264R\377\377\3322\377\377" "\372\17\377\377\377\0\356\377\377\0\330\377\377\0\311\377\377&\305\357" "\377G\305\217\377\207\325!\212\0\0\0\0\13L\276\377`\0\217\377\377\11" "h\377\377]H\377\377\222)\377\377\273\13\377\377\336\0\377\377\372\0\377" "\377\377\16\363\377\3772\345\300\377X\340Q\216\0\0\0\0\10+\204\377\337" "!*\377\377s\7\377\377\243\0\377\377\306\1\377\377\345%\377\357\3728\377" "\200\377\222\376\40\220\0\0\0\0\5}\226\3770h\31\377\357\222\16\377\377" "\2768\377\300\333^\377P\224\0\0\0\0\2\230,\377\22\314\217\377\40\221" "\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (icc_profile_output_24) #endif #ifdef __GNUC__ static const guint8 icc_profile_output_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 icc_profile_output_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1041) */ "\0\0\4)" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231\377\377\377\0\5`\377\317@/\377\274\356'\377\263\377:\377\265\257" "\212\377\3170\203\377\377\377\0\2!!!s333\241\206333\240\1(((L\207\377" "\377\377\0\12+\377\301\337\0\377\260\377\0\377\251\377\0\377\241\377" "\11\377\233\377D\377\254\257\245\377\326\37,,,tMMM\365\367\367\367\377" "\206\377\377\377\377\1""333\240\206\377\377\377\0\13\223\377\341;\1\377" "\273\377\0\377\264\377\0\377\256\377\0\377\246\377\0\377\233\377\0\377" "\220\377#\233_\366\225\232\227\363\207\207\207\377\367\367\367\377\206" "\377\377\377\377\1""333\240\206\377\377\377\0\13""8\377\323R\0\377\276" "\377\0\377\271\377\0\377\262\377\0\377\253\377\0\377\241\377\24\237d" "\377\214\237\226\377\377\377\377\377\207\207\207\377\367\367\367\377" "\206\377\377\377\377\1""333\240\206\377\377\377\0\7>\377\325x\0\377\305" "\377\0\377\275\377\0\377\267\377\0\377\260\377\24\237o\377\214\237\230" "\377\202\377\377\377\377\2\207\207\207\377\367\367\367\377\206\377\377" "\377\377\1""333\240\206\377\377\377\0\6""8\377\331\177\0\377\310\377" "\0\377\304\377\0\377\275\377\16\222l\377FOL\377\203\177\177\177\377\2" "CCC\377\367\367\367\377\206\377\377\377\377\1""333\240\206\377\377\377" "\0\5.\377\326d\0\377\316\377\0\377\311\377\0\377\304\377\40\177f\377" "\214\377\377\377\377\1""333\240\206\377\377\377\0\5-\377\335[\0\377\323" "\377\0\377\316\377\0\377\312\377\40\177i\377\214\377\377\377\377\1""3" "33\240\206\377\377\377\0\5h\377\347@\0\377\331\377\0\377\325\377\0\377" "\320\377\40\177l\377\214\377\377\377\377\1""333\240\206\377\377\377\0" "\5\271\377\3653\2\377\340\377\0\377\334\377\0\377\330\377\40\177n\377" "\214\377\377\377\377\1GD>\261\207\377\377\377\0\4#\377\352\377\0\377" "\345\377\0\377\341\377\40\177r\377\214\377\377\377\377\2yY*\363\377\265" "Z0\206\377\377\377\0\4)\377\361\317\0\377\355\377\0\377\352\377\40\177" "v\377\214\377\377\377\377\3\177Q&\377\377\204\26\377\377\244^_\205\377" "\377\377\0\4;\377\372\237\0\377\366\377\0\377\364\377\40\177{\377\214" "\377\377\377\377\4\177I6\377\377`\36\377\377]\20\377\377\213[\217\204" "\377\377\377\0\4N\377\377r\0\377\377\377\0\376\376\377\40\177\177\377" "\214\377\377\377\377\6\177@>\377\377F@\377\3772*\377\377\34\22\377\377" "3@\240\377\317\317\20\202\377\377\377\0\4\227\373\377@\0\366\377\377" "\0\365\377\377\40{\177\377\214\377\377\377\377\7\1772D\377\377\26S\377" "\377\3K\377\377\0G\377\377\0D\377\377%c\317\377Z\207\21\202\377\377\377" "\0\3\35\355\377\337\0\347\377\377\40t\177\377\214\377\377\377\377\7\177" "\40J\377\377\0l\377\377\0g\377\377\0c\377\377\12d\377\377-u\277\377d" "\227@\202\377\377\377\0\3""8\345\377\237\0\330\377\377\40n\177\377\214" "\377\377\377\377\5\177\40R\377\377\0\200\377\377\22\202\337\377@\226" "\217\377\203\271!\204\377\377\377\0\3\206\353\377N\4\311\377\377\40g" "\177\377\214\377\377\377\377\3o,R\342\377q\277_\377q\252\11\207\377\377" "\377\0\17""1\305\377\337\14\202\277\377\40U\177\3778J\177\377SE\177\377" "c>\177\377q2\177\377}%\177\377\177\40y\377\177\40q\377\177\40k\377|." "g\371f8W\325A8>\254(((L\211\377\377\377\0\13K\277\377_\0\216\377\377" "\10h\377\377]H\377\377\222(\377\377\273\12\377\377\335\0\377\377\371" "\0\377\377\377\16\363\377\3771\346\277\377V\342P\216\377\377\377\0\10" "*\204\377\337\40*\377\377s\7\377\377\242\0\377\377\305\1\377\377\344" "%\377\357\3718\377\200\377\217\367\40\220\377\377\377\0\5}\230\377/g" "\31\377\357\222\16\377\377\2777\377\277\331\\\377P\224\377\377\377\0" "\2\226-\377\21\317\217\377\40\221\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (icc_profile_display_24) #endif #ifdef __GNUC__ static const guint8 icc_profile_display_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 icc_profile_display_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1491) */ "\0\0\5\353" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231\377\377\377\0\5`\377\317@/\377\274\356'\377\263\377:\377\265\257" "\212\377\3170\223\377\377\377\0\7+\377\301\337\0\377\260\377\0\377\251" "\377\0\377\241\377\11\377\233\377D\377\254\257\245\377\326\37\220\377" "\377\377\0\11\223\377\341;\1\377\273\377\0\377\264\377\0\377\256\377" "\0\377\246\377\0\377\233\377\0\377\220\377\33\377\215\357Z\377\237`\217" "\377\377\377\0\13""8\377\323R\0\377\276\377\0\377\271\377\0\377\262\377" "\0\377\253\377\0\377\241\377\0\377\224\377\0\377\204\377\2\377k\3777" "\377m\217\317\377\277\20\215\377\377\377\0\14>\377\325x\0\377\305\377" "\23\224s\377Fuh\377Gwh\377Gwf\377Gwd\377Gwa\377Gw\\\377GwS\377YrP\366" "[\\Y\325\206WWW\317\2JJJ\325\34\34\34S\204\377\377\377\0\14""8\377\331" "\177\0\377\310\377\33\201i\377\366\366\366\377\364\364\364\377\352\352" "\352\377\355\355\355\377\360\360\360\377\363\363\363\377\367\367\367" "\377\372\372\372\377\375\375\375\377\206\377\377\377\377\2\317\317\317" "\377&&&e\204\377\377\377\0\24.\377\326d\0\377\316\377\33\202l\377\364" "\364\364\377xx}\377<\377//=\377..;\377--:\377**6\377vvy\377\315\315\315\377\"\"\"b\204" "\377\377\377\0\24-\377\335[\0\377\323\377\33\203o\377\362\362\362\377" "tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\37722a" "\377,,Z\377&&R\377!!K\377\32\32@\377ddi\377\314\314\314\377\40\40\40" "`\204\377\377\377\0\24h\377\347@\0\377\331\377\32\204r\377\361\361\361" "\377tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\377" "22a\377,,Z\377&&R\377!!K\377\32\32@\377aaf\377\313\313\313\377\36\36" "\36^\204\377\377\377\0\24\271\377\3653\2\377\340\377\32\205v\377\357" "\357\357\377tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\377" "77h\37722a\377,,Z\377&&R\377!!K\377\32\32A\377__d\377\312\312\312\377" "\34\34\34\\\205\377\377\377\0\23#\377\352\377\31\207|\377\355\355\355" "\377tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\377" "22a\377,,Z\377&&R\377!!K\377\32\32A\377]]b\377\310\310\310\377\32\32" "\32Y\205\377\377\377\0\23)\377\361\317\31\210\200\377\353\353\353\377" "tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\37722a" "\377,,Z\377&&R\377!!K\377\33\33B\377[[`\377\307\307\307\377xR3\225\205" "\377\377\377\0\24;\377\372\237\31\211\205\377\351\351\351\377tt{\377" "SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\37722a\377,,Z" "\377&&R\377!!K\377\33\33C\377YY^\377\306\306\306\377\261E\21\377\377" "\213[\217\204\377\377\377\0\26N\377\377r\30\212\212\377\347\347\347\377" "tt{\377SS\213\377SS\215\377NN\206\377HH~\377CCw\377==p\37777h\37722a" "\377,,Z\377&&R\377!!K\377\33\33C\377XX]\377\305\305\305\377\262'\"\377" "\377\34\22\377\3773@\240\377\317\317\20\202\377\377\377\0\27\227\373" "\377@\30\207\213\377\346\346\346\377tt{\377SS\213\377SS\215\377NN\206" "\377HH~\377CCw\377==p\37777h\37722a\377,,Z\377&&R\377!!K\377\33\33C\377" "XX]\377\304\304\304\377\263\6""7\377\377\0G\377\377\0D\377\377%c\317" "\377Z\207\21\202\377\377\377\0\26%}\205\360\344\344\344\377tt{\377QQ" "\207\377PP\211\377LL\202\377FFz\377AAs\377;;l\37755e\37700^\377++W\377" "%%O\377\40\40I\377\32\32A\377VV\\\377\302\302\302\377\264\3J\377\377" "\0c\377\377\12d\377\377-u\277\377d\227@\202\377\377\377\0\24/mv\322\342" "\342\342\377\275\275\277\377mmt\377lls\377llr\377kkq\377kkp\377jjp\377" "iio\377iin\377hhm\377ggl\377ggk\377ffk\377\255\255\257\377\301\301\301" "\377\257\16Z\350\377@\226\217\377\203\271!\204\377\377\377\0\2\77UX\253" "\266\266\266\377\216\317\317\317\377\2\234\234\234\377\27\15\20O\206" "\377\377\377\0\17\23\23\23(,\200\240\354\20s\247\377\20d\247\3777S\247" "\377`K\247\377z@\247\377\221-\247\377\244\31\246\377\247\20\235\377\247" "\20\220\377\247\20\207\377\244&\202\366\2105o\275I6@{\202'''h\1\0\0\0" "\30\207\377\377\377\0\13K\277\377_\0\216\377\377\10h\377\377]H\377\377" "\222(\377\377\273\12\377\377\335\0\377\377\371\0\377\377\377\16\363\377" "\3771\346\277\377V\342P\216\377\377\377\0\10*\204\377\337\40*\377\377" "s\7\377\377\242\0\377\377\305\1\377\377\344%\377\357\3718\377\200\377" "\217\367\40\220\377\377\377\0\5}\230\377/g\31\377\357\222\16\377\377" "\2777\377\277\331\\\377P\224\377\377\377\0\2\226-\377\21\317\217\377" "\40\221\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (curve_24) #endif #ifdef __GNUC__ static const guint8 curve_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 curve_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1478) */ "\0\0\5\336" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\224\377\377\377\0\203\0\200\200p\1\0\200\2008\211\377\377\377\0\1\0" "\0\0\10\212\377\377\377\0\203\0\200\200\377\4\0\200\200\200\377\377\377" "\0\0\0\0\204\0\0\0\240\202\0\0\0@\202\0\0\0X\202\0\0\0@\1\0\0\0p\203" "\0\0\0@\1\0\0\0j\203\0\0\0@\3\0\0\0j\0\0\0@\0\0\0M\203\0\200\200\377" "\2\0\200\200\200\377\377\377\0\202\0\0\0\200\202\377\377\377\0\202\0" "\0\0\40\202\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\202\377" "\377\377\0\4\0\0\0\5\0\0\0j\0\0\0~\0\0\0\356\203\0\200\200\377\2\0\200" "\200\200\377\377\377\0\202\0\0\0\200\202\377\377\377\0\202\0\0\0\40\202" "\377\377\377\0\6\0\0\0@\377\377\377\0\0\0\0$\0\0\0`\0\0\0\240\0,,\267" "\203\0\200\200\377\7\0\40\40\376\0\0\0\254\0\\\\d\0NNv\0\200\200H\0\200" "\200$\377\377\377\0\202\0\0\0\200\202\377\377\377\0\202\0\0\0\40\4\377" "\377\377\0\0\0\0(\0\0\0\247\0\0\0\327\202\0\0\0\377\2\0\0\0\376\0\"\"" "\353\203\0\200\200\377\1\0kkL\202\377\377\377\0\1\0\0\0@\203\377\377" "\377\0\2\0\0\0\213\0\0\0\240\202\0\0\0@\12\310ee\266\341pp\321\317gg" "\342\205BB\375\0\0\0\374\0\0\0\313\0\0\0\220\0\0\0\\\0\0\0s\0HHp\203" "\0\200\200\377\1\0HHp\202\0\0\0@\1\0\0\0_\203\377\377\377\0\202\0\0\0" "\200\202\377\377\377\0\1\366{{\317\202\377\200\200\377\2\312ee\347\0" "\0\0N\203\377\377\377\0\2\0\0\0@\0\200\200.\202\0\200\200\270\2\0tt\312" "\0\200\200.\202\377\377\377\0\1\0\0\0@\203\377\377\377\0\202\0\0\0\200" "\202\377\377\377\0\1\347ss\334\202\377\200\200\377\2\377\200\200\270" "\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377" "\377\377\0\1\0\0\0@\203\377\377\377\0\202\0\0\0\200\202\377\377\377\0" "\1\320hh\364\202\377\200\200\377\2\377\200\200\270\0\0\0@\203\377\377" "\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0" "@\203\377\377\377\0\6\0\0\0\204\0\0\0\240\0\0\0@\0\0\0s\0\0\0\377\0\0" "\0\227\202\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0\0p\203" "\0\0\0@\1\0\0\0j\203\377\377\377\0\202\0\0\0\200\4\377\377\377\0\0\0" "\0\300\0\0\0\344\0\0\0#\202\377\377\377\0\1\0\0\0@\203\377\377\377\0" "\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377" "\377\377\0\202\0\0\0\200\4\0\0\0""9\0\0\0\377\0\0\0|\0\0\0\40\202\377" "\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0" "\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\202\0\0\0\200\4\0" "\0\0\221\0\0\0\366\0\0\0(\0\0\0\40\202\377\377\377\0\1\0\0\0@\203\377" "\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0" "\0\0@\203\377\377\377\0\4\0\0\0\213\0\0\0\240\0\0\0\347\0\0\0\305\202" "\0\0\0X\202\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0\0p\203" "\0\0\0@\1\0\0\0_\203\377\377\377\0\4\0\0\0\200\0\0\0\226\0\0\0\377\0" "\0\0e\202\0\0\0\40\202\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0" "\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377" "\377\0\4\0\0\0\200\0\0\0\275\0\0\0\376\0\0\0\31\202\0\0\0\40\202\377" "\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0" "\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\4\0\0\0\200\0\0\0" "\332\0\0\0\320\377\377\377\0\202\0\0\0\40\202\377\377\377\0\1\0\0\0@" "\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377" "\0\1\0\0\0@\203\377\377\377\0\4\0\0\0\204\0\0\0\366\0\0\0\265\0\0\0@" "\202\0\0\0X\202\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0\0p\203\0\0\0@\1\0\0" "\0p\203\0\0\0@\1\0\0\0j\202\377\377\377\0\5\0\200\200\22\0oo\346\0dd" "\377\0rr\337\0\200\200Q\202\0\0\0\40\202\377\377\377\0\1\0\0\0@\203\377" "\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0" "\0\0@\202\377\377\377\0\1\0\200\200\30\203\0\200\200\377\1\0\200\200" "h\202\0\0\0\40\202\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@" "\203\377\377\377\0\1\0\0\0@\203\377\377\377\0\1\0\0\0@\202\377\377\377" "\0\1\0\200\200\30\203\0\200\200\377\1\0JJ\264\202\0\0\0\220\202\0\0\0" "\200\1\0\0\0\234\203\0\0\0\200\1\0\0\0\240\203\0\0\0\200\1\0\0\0\240" "\203\0\0\0\200\5\0\0\0\233\0\0\0\34\377\377\377\0\0\200\200\26\0~~\364" "\202\0||\370\1\0FF\260\210\0\0\0\200\1\0\0\0\204\203\0\0\0\200\1\0\0" "\0\204\204\0\0\0\200\1\0\0\0\34\231\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (lock_24) #endif #ifdef __GNUC__ static const guint8 lock_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 lock_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1320) */ "\0\0\5@" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\242\377\377\377\0\5\0\0\0\27###_000\212\15\15\15<\0\0\0\6\221\377\377" "\377\0\10\12\12\12\32FFF\301\214\214\214\350\313\313\313\377\345\345" "\345\377\257\257\257\370mmm\336777\202\217\377\377\377\0\13,,,Eggg\330" "\351\351\351\377\257\257\257\371\\\\\\\334III\313rrr\350\311\311\311" "\377\273\273\273\370>>>\261\0\0\0\7\214\377\377\377\0\14\0\0\0\12^^^" "\322\354\354\354\377~~~\347&&&s\0\0\0\7\377\377\377\0\0\0\0\32""000\271" "\261\261\261\374\304\304\304\375444\217\214\377\377\377\0\4""666\223" "\335\335\335\376\230\230\230\362\33\33\33^\204\377\377\377\0\5\0\0\0" "\4+++\274\303\303\303\377qqq\341\21\21\21\36\212\377\377\377\0\4\0\0" "\0\1jjj\327\341\341\341\377777\277\206\377\377\377\0\4\12\12\12""1jj" "j\351\311\311\311\377888\236\212\377\377\377\0\4\0\0\0!\234\234\234\354" "\266\266\266\377\32\32\32b\207\377\377\377\0\3""666\301\300\300\300\377" "JJJ\272\210\377\377\377\0\6\257\237\40\20\273\243\37\213\245\222\40\306" "\300\262Y\377\252\232A\373\256\231\35\266\203\274\245\40\250\1\274\244" "\40\250\203\273\244\40\250\5\224\203!\341\270\251R\377\234\214/\357\271" "\242\37\247\264\237!U\206\377\377\377\0\23\272\243\37\223\343\325k\376" "\356\343\205\377\355\341|\377\354\337u\377\353\335m\377\352\333f\377" "\347\331^\377\344\326V\377\342\322O\377\337\317G\377\334\313@\377\331" "\3079\377\325\3040\377\321\300)\377\316\274!\377\312\270\33\377\271\242" "\37\352\261\233!\27\205\377\377\377\0\2\274\245\40\262\356\343\201\377" "\205\345\320\17\377\14\343\316\16\377\340\314\16\377\336\311\16\377\333" "\307\15\377\330\304\15\377\326\302\15\377\323\277\14\377\320\275\14\377" "\316\272\13\377\313\270\14\377\274\247\31\353\263\237\40(\205\377\377" "\377\0\2\274\245\40\262\355\341x\377\205\345\320\17\377\14\343\316\16" "\377\331\306\17\377\306\264\22\377\333\307\15\377\330\304\15\377\326" "\302\15\377\323\277\14\377\320\275\14\377\316\272\13\377\313\270\13\377" "\274\247\31\353\263\237\40(\205\377\377\377\0\2\274\245\40\262\354\337" "o\377\205\345\320\17\377\14\226\212!\377]Z;\377^\\L\377\200x0\377\325" "\302\21\377\326\302\15\377\323\277\14\377\320\275\14\377\316\272\13\377" "\313\270\13\377\274\247\31\353\263\237\40(\205\377\377\377\0\2\274\245" "\40\262\352\335f\377\204\345\320\17\377\2\341\315\20\377^Z8\377\202d" "dd\377\11aaa\377\302\2647\377\326\302\15\377\323\277\14\377\320\275\14" "\377\316\272\13\377\313\270\13\377\274\247\31\353\263\237\40(\205\377" "\377\377\0\2\274\245\40\262\351\333\\\377\204\345\320\17\377\2\331\305" "\21\377a^D\377\203ddd\377\10\302\267O\377\326\302\15\377\323\277\14\377" "\320\275\14\377\316\272\13\377\313\270\13\377\274\247\31\353\263\237" "\40(\205\377\377\377\0\2\274\245\40\262\350\331T\377\205\345\320\17\377" "\14\213\202*\377bb\\\377ccc\377\213\206]\377\332\310!\377\326\302\15" "\377\323\277\14\377\320\275\14\377\316\272\13\377\313\270\13\377\274" "\247\31\353\263\237\40(\205\377\377\377\0\2\274\245\40\262\347\327K\377" "\205\345\320\17\377\14\343\316\16\377\207\201;\377hg^\377\332\311$\377" "\330\304\15\377\326\302\15\377\323\277\14\377\320\275\14\377\316\272" "\13\377\313\270\13\377\274\247\31\353\263\237\40(\205\377\377\377\0\2" "\274\245\40\262\346\325A\377\205\345\320\17\377\14\326\302\22\377ljZ" "\377ddd\377\276\264U\377\330\304\15\377\326\302\15\377\323\277\14\377" "\320\275\14\377\316\272\13\377\313\270\13\377\274\247\31\353\263\237" "\40(\205\377\377\377\0\2\274\245\40\262\344\3239\377\205\345\320\17\377" "\1\257\241*\377\202ddd\377\11\224\221t\377\333\311\"\377\326\302\15\377" "\323\277\14\377\320\275\14\377\316\272\13\377\313\270\13\377\274\247" "\31\353\263\237\40(\205\377\377\377\0\2\274\245\40\262\343\321/\377\204" "\345\320\17\377\2\343\316\17\377\207\202L\377\202ddd\377\11jjj\377\326" "\314x\377\326\302\15\377\323\277\14\377\320\275\14\377\316\272\13\377" "\313\270\13\377\274\247\31\353\263\237\40(\205\377\377\377\0\2\274\245" "\40\262\342\317&\377\204\345\320\17\377\15\344\317\20\377\255\2413\377" "\253\2407\377\266\255U\377\302\272q\377\331\321\203\377\326\302\15\377" "\323\277\14\377\320\275\14\377\316\272\13\377\313\270\13\377\274\247" "\31\353\263\237\40(\205\377\377\377\0\3\274\246\37\243\335\310\36\377" "\345\321\23\377\204\345\320\17\377\14\343\316\16\377\340\314\16\377\336" "\311\16\377\333\307\15\377\330\304\15\377\326\302\15\377\323\277\14\377" "\320\275\14\377\316\272\13\377\313\270\13\377\272\245\33\352\267\237" "\40\40\205\377\377\377\0\2\265\241\"&\274\245\40\311\205\275\245\37\327" "\203\273\245\37\327\203\272\244\37\327\203\271\242\37\327\2\270\242\37" "\327\270\240\40\227\233\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (unlock_24) #endif #ifdef __GNUC__ static const guint8 unlock_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 unlock_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1341) */ "\0\0\5U" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\233\377\377\377\0\7\0\0\0\14JJJ\200lll\235{{{\260kkk\237OOO\212\40\40" "\40#\220\377\377\377\0\12FFFQ\214\214\214\323\344\344\344\377\337\337" "\337\377\332\332\332\377\334\334\334\377\344\344\344\377\247\247\247" "\347UUU\231\0\0\0\3\215\377\377\377\0\13\13\13\13\25\221\221\221\327" "\341\341\341\377\277\277\277\375fff\322ZZZ\267bbb\311\225\225\225\356" "\330\330\330\377\335\335\335\376UUU\242\215\377\377\377\0\5^^^\252\340" "\340\340\377\256\256\256\371000\210\0\0\0\2\202\377\377\377\0\5!!!9a" "aa\313\326\326\326\377\322\322\322\372@@@[\213\377\377\377\0\4""666O" "\306\306\306\366\317\317\317\377III\271\205\377\377\377\0\4$$$7\213\213" "\213\352\337\337\337\377uuu\300\213\377\377\377\0\4[[[\224\337\337\337" "\377\214\214\214\356\31\31\31""1\206\377\377\377\0\4""999\232\316\316" "\316\377\224\224\224\345\0\0\0\14\212\377\377\377\0\3vvv\270\323\323" "\323\377___\315\207\377\377\377\0\4\31\31\31P\252\252\252\377\305\305" "\305\376%%%I\212\377\377\377\0\3\204\204\204\326\313\313\313\377MMM\254" "\203\377\377\377\0\25\266\237\"'\274\245#\277\300\2532\324\300\2531\324" "\274\250/\327\264\242;\374\304\263M\377\262\237/\351\276\250+\323\275" "\247*\323\274\247)\323\274\246(\322\273\245'\322\273\245&\322\272\244" "$\322\271\243#\322\270\242\40\316\267\240\40lGGG\320lll\323///\201\203" "\377\377\377\0\22\273\244\40\267\355\342\203\377\357\343w\377\356\342" "p\377\355\340j\377\355\337c\377\354\336\\\377\352\333U\377\350\331N\377" "\345\326G\377\342\322A\377\337\3179\377\333\3122\377\327\307+\377\324" "\302$\377\320\276\35\377\314\272\27\377\271\243\36\347\206\377\377\377" "\0\2\273\244\40\311\360\345\177\377\205\345\320\17\377\13\343\316\17" "\377\341\314\16\377\336\312\16\377\333\307\16\377\331\305\15\377\326" "\302\15\377\323\300\15\377\321\275\14\377\316\273\14\377\313\270\14\377" "\272\245\34\347\206\377\377\377\0\2\273\244\40\311\357\343v\377\205\345" "\320\17\377\13\343\316\17\377\306\264\22\377\265\246\27\377\333\307\16" "\377\331\305\15\377\326\302\15\377\323\300\15\377\321\275\14\377\316" "\273\14\377\313\270\14\377\272\245\34\347\206\377\377\377\0\2\273\244" "\40\311\356\341m\377\205\345\320\17\377\13{s*\377ZXG\377^^U\377|u5\377" "\327\304\20\377\326\302\15\377\323\300\15\377\321\275\14\377\316\273" "\14\377\313\270\14\377\272\245\34\347\206\377\377\377\0\2\273\244\40" "\311\355\337d\377\204\345\320\17\377\2\325\302\22\377\\YB\377\202ddd" "\377\10dca\377\311\2725\377\326\302\15\377\323\300\15\377\321\275\14" "\377\316\273\14\377\313\270\14\377\272\245\34\347\206\377\377\377\0\2" "\273\244\40\311\354\335Z\377\204\345\320\17\377\2\321\276\22\377`^I\377" "\202ddd\377\10eee\377\316\301B\377\326\302\15\377\323\300\15\377\321" "\275\14\377\316\273\14\377\313\270\14\377\272\245\34\347\206\377\377" "\377\0\2\273\244\40\311\353\333R\377\205\345\320\17\377\13\217\205*\377" "edY\377cca\377\244\234W\377\333\310\30\377\326\302\15\377\323\300\15" "\377\321\275\14\377\316\273\14\377\313\270\14\377\272\245\34\347\206" "\377\377\377\0\2\273\244\40\311\352\332H\377\205\345\320\17\377\13\341" "\315\20\377\201{B\377pn[\377\334\312\40\377\331\305\15\377\326\302\15" "\377\323\300\15\377\321\275\14\377\316\273\14\377\313\270\14\377\272" "\245\34\347\206\377\377\377\0\2\273\244\40\311\351\330\77\377\205\345" "\320\17\377\13\312\270\31\377ff`\377eee\377\302\267W\377\331\305\15\377" "\326\302\15\377\323\300\15\377\321\275\14\377\316\273\14\377\313\270" "\14\377\272\245\34\347\206\377\377\377\0\2\273\244\40\311\347\3266\377" "\205\345\320\17\377\1\240\2256\377\202ddd\377\10\231\225v\377\334\311" "\36\377\326\302\15\377\323\300\15\377\321\275\14\377\316\273\14\377\313" "\270\14\377\272\245\34\347\206\377\377\377\0\2\273\244\40\311\346\324" "-\377\204\345\320\17\377\2\341\314\20\377urX\377\202ddd\377\10kkk\377" "\327\316u\377\326\302\15\377\323\300\15\377\321\275\14\377\316\273\14" "\377\313\270\14\377\272\245\34\347\206\377\377\377\0\2\273\244\40\311" "\345\322$\377\204\345\320\17\377\14\341\315\22\377\277\260'\377\277\261" ".\377\307\274M\377\320\306l\377\333\320h\377\326\302\15\377\323\300\15" "\377\321\275\14\377\316\273\14\377\313\270\14\377\272\245\34\347\206" "\377\377\377\0\3\273\244\40\264\334\310\35\377\342\316\23\377\204\342" "\315\20\377\13\340\313\20\377\336\311\17\377\334\307\17\377\331\305\17" "\377\327\303\16\377\324\300\16\377\321\276\16\377\317\273\15\377\315" "\271\15\377\311\266\16\377\271\242\36\347\206\377\377\377\0\2\265\236" "\"!\274\245\37\260\205\274\245\37\303\1\273\245\37\303\202\273\244\37" "\303\1\272\244\37\303\202\272\243\37\303\5\271\243\37\303\271\242\37" "\303\270\242\37\303\270\242\37\301\267\240\40`\230\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (automatic_24) #endif #ifdef __GNUC__ static const guint8 automatic_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 automatic_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1089) */ "\0\0\4Y" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\266\377\377\377\0\3\0\0)Q\0\0""1b\0\0\35(\222\377\377\377\0\1\0\0\17" "\36\202\377\377\377\0\3\0\0<\263\0\0@\377\0\0""1^\202\377\377\377\0\1" "\0\0\0\11\216\377\377\377\0\13\0\0-a\0\0\77\335\0\0\37&\377\377\377\0" "\0\0<\263\0\0@\377\0\0""1^\377\377\377\0\0\0/_\0\0;\237\0\0\4\20\214" "\377\377\377\0\14\0\0\3\24\0\0\77\322\0\0@\377\0\0=\274\0\0""9\226\0" "\0@\354\0\0@\377\0\0>\305\0\0""5\201\0\0@\364\0\0@\377\0\0""3}\215\377" "\377\377\0\2\0\0\40/\0\0>\320\207\0\0@\377\2\0\0""9\226\0\0\5\14\216" "\377\377\377\0\1\0\0;\251\206\0\0@\377\2\0\0@\373\0\0\35,\202\377\377" "\377\0\6\0\0""0l\0\0<\246\0\0\36<\377\377\377\0\0\0\0\4\0\0\22-\204\377" "\377\377\0\11\0\0%K\0\0=\302\0\0>\310\0\0@\370\0\0@\377\0\0@\360\0\0" "3Z\0\0""1K\0\0\77\316\202\0\0@\377\13\0\0>\303\0\0<\265\0\0""5\231\0" "\0;\251\0\0@\377\0\0""4y\377\377\377\0\0\0+Q\0\0@\360\0\0""5\210\0\0" "\0\11\202\377\377\377\0\1\0\0/X\204\0\0@\377\1\0\0=\275\202\377\377\377" "\0\1\0\0""7q\202\0\0@\377\13\0\0""9\377\0\0<\377\0\0<\263\0\0""4n\0\0" "@\377\0\0>\302\0\0.Y\0\0>\310\0\0@\377\0\0:\236\0\0\0\2\202\377\377\377" "\0\17\0\0\37-\0\0""4o\0\0""3i\0\0\77\323\0\0@\377\0\0@\354\0\0/X\0\0" "\34""2\0\0>\302\0\0@\377\0\0:\377\0\0>\355\0\0=\332\0\0$~\0\0=\265\204" "\0\0@\377\2\0\0\77\341\0\0\21\32\206\377\377\377\0\1\0\0""6\215\206\0" "\0@\377\2\0\0""9\371\0\0\77\362\207\0\0@\377\5\0\0@\373\0\0-p\0\0""5" "\202\0\0""7\250\0\0\0\6\202\377\377\377\0\4\0\0""0r\0\0@\371\0\0@\377" "\0\0@\370\202\0\0@\377\5\0\0@\376\0\0>\320\0\0@\377\0\0;\366\0\0""9\316" "\202\0\0@\377\3\0\0@\376\0\0>\314\0\0\77\342\204\0\0@\377\17\0\0@\373" "\0\0\16(\377\377\377\0\0\0\10\20\0\0>\306\0\0@\377\0\0=\270\0\0\20#\0" "\0=\301\0\0@\377\0\0.r\0\0\0\11\0\0""9\236\0\0\77\361\0\0""4\264\202" "\0\0@\377\11\0\0""4\177\0\0\0\1\0\0\37$\0\0@\352\0\0@\377\0\0@\367\0" "\0""9\226\0\0""2a\0\0\23\25\202\377\377\377\0\13\0\0\27\37\0\0""9\246" "\0\0\31\34\377\377\377\0\0\0<\264\0\0@\377\0\0""3j\377\377\377\0\0\0" "1\205\0\0=\342\0\0@\376\202\0\0@\377\7\0\0""4k\377\377\377\0\0\0\13\21" "\0\0\77\344\0\0@\377\0\0\77\334\0\0\0\10\210\377\377\377\0\6\0\0""8\251" "\0\0\77\327\0\0""0w\377\377\377\0\0\0:\226\0\0@\377\202\0\0@\375\4\0" "\0@\377\0\0@\350\0\0""9\224\0\0>\271\203\0\0@\377\3\0\0>\314\0\0""4g" "\0\0\0\11\206\377\377\377\0\2\0\0\0\3\0\0\0\10\202\377\377\377\0\4\0" "\0)D\0\0""7r\0\0\36""0\0\0""7\215\205\0\0@\377\5\0\0>\314\0\0\77\316" "\0\0@\377\0\0;\251\0\0\0\2\215\377\377\377\0\12\0\0""4\203\0\0@\377\0" "\0@\364\0\0@\353\0\0@\377\0\0\77\337\0\0\21\27\0\0\15\17\0\0""7\202\0" "\0!C\215\377\377\377\0\10\0\0\"0\0\0@\361\0\0@\377\0\0""7\177\0\0\3\26" "\0\0@\354\0\0@\376\0\0\";\220\377\377\377\0\10\0\0\31\"\0\0""9\235\0" "\0\77\346\0\0\23\32\377\377\377\0\0\0=\277\0\0@\377\0\0""5\212\222\377" "\377\377\0\1\0\0\14$\202\377\377\377\0\3\0\0'T\0\0&F\0\0\0\14\314\377" "\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (manual_24) #endif #ifdef __GNUC__ static const guint8 manual_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 manual_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1142) */ "\0\0\4\216" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\205\377\377\377\0\3PPg*1\5""6\3227\31F\207\222\377\377\377\0\6^[m0\245" "\245\245\13\377\377\377\0""7\32I\201\0\0@\377)\4""7\344\202\377\377\377" "\0\2__o8\232\232\232\3\215\377\377\377\0\13[KfG\33\0""5\375'\3""6\354" "-\12<\301\32\0""6\374\0\0@\377\22\0""8\377,\7""9\3361\11""8\317\34\0" "4\376<\22<\257\215\377\377\377\0\2YVi*\34\0""5\375\207\0\0@\377\2\4\0" ">\3777\30E\223\215\377\377\377\0\2\245\245\245\1#\2""6\360\203\0\0@\377" "\2\16\0:\377\7\0=\377\202\0\0@\377\2\30\0""7\374\227\227\227+\214\377" "\377\377\0\16\245\245\245\40rhto\12\0;\377\0\0@\377\10\0<\377,\24B\236" "{{{\37L)@]#\0""4\370\0\0@\377\3\0\77\377@+L\232|||#\223\223\223\6\212" "\377\377\377\0\2,\3""6\351\12\0;\377\202\0\0@\377\2\37\1""6\364\200\200" "\200\2\202\377\377\377\0\1(\15\77\255\202\0\0@\377\3\11\0<\377\37\0""2" "\376KF[Q\212\377\377\377\0\6""0\13=\310\"\1""4\371\1\0\77\377\0\0@\377" "\40\0""4\370\231\231\231\17\202\377\377\377\0\1+\12=\277\202\0\0@\377" "\3#\0""3\373.\3""4\352~~\2015\213\377\377\377\0\13\241\241\241\22\37" "\1""5\371\0\0@\377\4\0>\377.\4""4\345/\20D\251+\12<\303\10\0<\377\0\0" "@\377\20\0""9\377aXkO\216\377\377\377\0\1,\15\77\322\207\0\0@\377\2#" "\2""5\364\222\222\222\17\215\377\377\377\0\13I;XU\25\0""7\376\15\0:\377" "\35\0""5\374\3\0\77\377\0\0@\377\1\0\77\377\30\0""6\376\27\0""7\375\4" "\0>\3772\15<\256\204\377\377\377\0\3\243\243\243\24\177\177\177%@@@\5" "\206\377\377\377\0\13yy\200!-\3""3\353=\37K\234\223\223\223\25""5\37" "E\244\0\0@\377*\3""4\353{{~*VPe9-\4""5\343H2QY\204\377\377\377\0\3\25" "\11;\243\5\0""9\377&\34H\232\207\377\377\377\0\1\234\234\234\5\202\377" "\377\377\0\3""4)JT\1\0\77\3770\10:\323\204\377\377\377\0\13\205\205\216" "\36\24\7""9\316\77:YFhgv>\15\2""6\361\0\0@\377\23\7""8\343\177~\2033" "82WD\23\7""9\312\213\213\213!\206\377\377\377\0\3RM]\30;\30B\200UPc3" "\204\377\377\377\0\2\36\24C\244\0\0@\377\202\4\0;\377\203\0\0@\377\4" "\10\0""5\377\4\0:\377\1\0>\377\36\25B\210\215\377\377\377\0\2\225\225" "\225\25\11\0""6\375\207\0\0@\377\2\16\2""5\360\227\227\227\13\215\377" "\377\377\0\13ZWjF\5\0""9\377\0\0@\377\2\0=\377\16\2""5\356\22\6""8\321" "\15\2""5\361\1\0\77\377\0\0@\377\11\0""6\373\226\226\226\"\213\377\377" "\377\0\3\246\246\246\26\33\17=\273\16\2""5\363\202\0\0@\377\11\16\2""7" "\354\252\252\252\3\377\377\377\0\237\237\237\10\15\1""6\362\0\0@\377" "\1\0\77\377\20\4""6\350\30\14<\272\212\377\377\377\0\2\240\240\240\"" "\10\0""7\376\203\0\0@\377\1\24\7""9\315\203\377\377\377\0\1\20\5:\331" "\203\0\0@\377\1\13\0""4\373\212\377\377\377\0\16\244\244\244\2IIdM\34" "\23B\263\1\0\77\377\0\0@\377\13\0""2\374RK`A\377\377\377\0KAWR\12\0""3" "\375\0\0@\377\5\0""9\3772+Q\233ROc\\\214\377\377\377\0\2\240\240\240" "\21\13\1""5\370\202\0\0@\377\3\7\0""7\376\12\0""5\375\7\0""7\376\202" "\0\0@\377\1\21\5""8\344\216\377\377\377\0\2USl1\11\0""5\374\207\0\0@" "\377\2\16\0""3\364ffq\30\215\377\377\377\0\13\36\25C\240\4\0:\377\24" "\6""7\327\26\11<\274\13\0""4\373\0\0@\377\15\1""3\366\34\21>\244\20\4" "7\341\7\0""7\3770+Qg\215\377\377\377\0\13\235\235\235\11""50W{\232\232" "\232\20\377\377\377\0\30\14<\300\0\0@\377\37\24D\241\377\377\377\0\222" "\222\222\25IG`V\217\217\217\6\221\377\377\377\0\3\35\22B\210\16\1""4" "\362:6Xc\205\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (exif_24) #endif #ifdef __GNUC__ static const guint8 exif_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 exif_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1459) */ "\0\0\5\313" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\340\377\377\377\0\3\0\0\0\377\0\0\0\220\0\0\0`\202\0\0\0\200\16\0\0" "\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377\377\0\0\0\0\300\377\377\377" "\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0\310\0\0" "\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0\220\0\0" "\0`\202\0\0\0\200\16\0\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377\377" "\0\0\0\0\300\377\377\377\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0\0\377" "\0\0\0\30\0\0\0\310\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202\0\0" "\0\377\2\0\0\0\220\0\0\0`\202\0\0\0\200\16\0\0\0\377\0\0\0\320\0\0\0" "\40\0\0\0\377\377\377\377\0\0\0\0\300\377\377\377\0\0\0\0\377\0\0\0\350" "\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0\310\0\0\0o\202\0\0\0\377\2\0" "\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0\220\0\0\0`\202\0\0\0\200\16\0" "\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377\377\0\0\0\0\300\377\377" "\377\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0\310" "\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0\220" "\0\0\0`\202\0\0\0\200\16\0\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377" "\377\0\0\0\0\300\377\377\377\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0" "\0\377\0\0\0\30\0\0\0\310\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202" "\0\0\0\377\2\0\0\0\220\0\0\0`\202\0\0\0\200\16\0\0\0\377\0\0\0\320\0" "\0\0\40\0\0\0\377\377\377\377\0\0\0\0\300\377\377\377\0\0\0\0\377\0\0" "\0\350\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0\310\0\0\0o\202\0\0\0\377" "\2\0\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0\220\0\0\0`\202\0\0\0\200" "\16\0\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377\377\0\0\0\0\300\377" "\377\377\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0" "\310\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0" "\220\0\0\0`\202\0\0\0\200\16\0\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377" "\377\377\0\0\0\0\300\377\377\377\0\0\0\0\377\0\0\0\350\377\377\377\0" "\0\0\0\377\0\0\0\30\0\0\0\310\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0" "\40\202\0\0\0\377\2\0\0\0\220\0\0\0`\202\0\0\0\200\16\0\0\0\377\0\0\0" "\320\0\0\0\40\0\0\0\377\377\377\377\0\0\0\0\300\377\377\377\0\0\0\0\377" "\0\0\0\350\377\377\377\0\0\0\0\377\0\0\0\30\0\0\0\310\0\0\0o\202\0\0" "\0\377\2\0\0\0\300\0\0\0\40\202\0\0\0\377\2\0\0\0\220\0\0\0`\202\0\0" "\0\200\16\0\0\0\377\0\0\0\320\0\0\0\40\0\0\0\377\377\377\377\0\0\0\0" "\300\377\377\377\0\0\0\0\377\0\0\0\350\377\377\377\0\0\0\0\377\0\0\0" "\30\0\0\0\310\0\0\0o\202\0\0\0\377\2\0\0\0\300\0\0\0\40\202\0\0\0\377" "\1\0\0\0\220\224\377\377\377\0\1\0\0\0\40\202\0\0\0\377\2\0\0\0\220\0" "\0\0N\203\0\0\0\260\14\0\0\0|\0\0\0\23\0\0\0\250\0\0\0\\\377\377\377" "\0\0\0\0H\0\0\0\256\0\0\0!\0\0\0]\0\0\0\260\377\377\377\0\0\0\0V\203" "\0\0\0\260\2\0\0\0u\0\0\0\40\202\0\0\0\377\26\0\0\0\220\0\0\0r\0\0\0" "\377\0\0\0W\0\0\0H\0\0\0""3\377\377\377\0\0\0\0`\0\0\0\372\0\0\0f\0\0" "\0\361\0\0\0~\377\377\377\0\0\0\0\207\0\0\0\377\377\377\377\0\0\0\0}" "\0\0\0\377\0\0\0O\0\0\0H\0\0\0/\0\0\0\40\202\0\0\0\377\6\0\0\0\220\0" "\0\0r\0\0\0\377\0\0\0\324\0\0\0\320\0\0\0r\202\377\377\377\0\16\0\0\0" "\237\0\0\0\377\0\0\0\274\0\0\0\1\377\377\377\0\0\0\0\207\0\0\0\377\377" "\377\377\0\0\0\0}\0\0\0\377\0\0\0\321\0\0\0\320\0\0\0i\0\0\0\40\202\0" "\0\0\377\26\0\0\0\220\0\0\0r\0\0\0\377\0\0\0:\0\0\0(\0\0\0\26\377\377" "\377\0\0\0\0\34\0\0\0\347\0\0\0\327\0\0\0\364\0\0\0-\377\377\377\0\0" "\0\0\207\0\0\0\377\377\377\377\0\0\0\0}\0\0\0\377\0\0\0""0\0\0\0(\0\0" "\0\24\0\0\0\40\202\0\0\0\377\23\0\0\0\220\0\0\0r\0\0\0\377\0\0\0\276" "\0\0\0\270\0\0\0\223\0\0\0\10\0\0\0\313\0\0\0\304\0\0\0\7\0\0\0\250\0" "\0\0\336\0\0\0\23\0\0\0\207\0\0\0\377\377\377\377\0\0\0\0}\0\0\0\377" "\0\0\0\12\202\377\377\377\0\2\0\0\0\40\0\0\0\377\202\377\377\377\0\1" "\0\0\0\34\203\0\0\0@\16\0\0\0""3\0\0\0\25\0\0\0@\0\0\0\22\377\377\377" "\0\0\0\0\10\0\0\0@\0\0\0\35\0\0\0!\0\0\0@\377\377\377\0\0\0\0\37\0\0" "\0@\0\0\0\2\314\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (crop_24) #endif #ifdef __GNUC__ static const guint8 crop_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 crop_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1638) */ "\0\0\6~" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (104) */ "\0\0\0h" /* width (26) */ "\0\0\0\32" /* height (26) */ "\0\0\0\32" /* pixel_data: */ "\2\212v7\303\205q2(\230\377\377\377\0\3\210t5\370\214x9\346\205q2\37" "\227\377\377\377\0\4\235\214U\360\357\351\326\377\224\202G\344\205q2" "\30\226\377\377\377\0\5\242\222_\361\364\355\327\377\350\340\306\376" "\221~A\336\205q2\22\225\377\377\377\0\6\241\221]\361\354\342\276\377" "\344\324\237\377\340\326\266\376\217|=\327\205q2\14\214\377\377\377\0" "\5JJJ\30NNN\232;;;\335---\271\17\17\17!\203\377\377\377\0\7\232\212V" "\362\271\256\213\377\230\205E\377\344\324\237\377\327\314\245\373\215" "z;\316\205q2\10\212\377\377\377\0\21III\7TTT\327\242\242\242\376\311" "\311\311\377,,,\361\0\0\0.\377\377\377\0\0\0\0\3\377\377\377\0\236\216" "Y\361\341\326\257\377\320\274z\377\334\310\205\377\343\324\237\377\315" "\300\223\372\214y9\302\205q2\5\211\377\377\377\0\14[[[\232\235\235\235" "\367\331\331\331\377\237\237\237\377\27\27\27\272\377\377\377\0\0\0\0" "4\23\23\23\361\"\"\"_\236\215X\360\347\333\262\377\331\305\202\377\202" "\334\310\205\377\4\343\323\234\377\302\263\201\367\214x9\265\205q2\2" "\207\377\377\377\0\15UUU\6WWW\350\340\340\340\377\325\325\325\377..." "\354\0\0\0%\5\5\5F&&&\352\256\256\256\377777\341\227\206P\363\250\234" "u\377\220|<\377\203\334\310\205\377\3\342\321\231\377\267\246o\365\214" "x8\247\207\377\377\377\0\14OOOQ\206\206\206\361\335\335\335\377\231\231" "\231\376\26\26\26\253\13\13\13^...\354\303\303\303\377\304\304\304\377" "DDD\350\234\213T\360\350\333\257\377\205\334\310\205\377\3\340\317\224" "\377\254\232^\362\214x9\227\206\377\377\377\0\20SSS\301\306\306\306\377" "\331\331\331\377'''\354\13\13\13\207;;;\355\310\310\310\377\303\303\303" "\377\205\205\205\371SSS\257\231\207P\361\315\277\223\377\277\253i\377" "\334\310\205\377\242\216N\360\303\257m\375\202\334\310\205\377\3\335" "\313\214\377\242\216O\361\213w8\206\204\377\377\377\0\22KKK\21QQQ\352" "\342\342\342\377\221\221\221\374\23\23\23\325LLL\356\313\313\313\377" "\302\302\302\377\220\220\220\374SSS\332LLL\12\226\204L\362\267\252|\377" "\252\226U\377\334\310\205\377\215y:\357\213w8\345\307\263q\376\202\334" "\310\205\377\3\332\306\203\377\233\207G\360\213w8v\203\377\377\377\0" "\15GGGl\221\221\221\367\333\333\333\377\40\40\40\371YYY\362\316\316\316" "\377\267\267\267\377bbb\356TTT\267LLL\23\377\377\377\0\231\210O\360\345" "\327\246\377\202\334\310\205\377\4\215y:\357\205q2\"\214x8\351\313\267" "t\377\202\334\310\205\377\3\331\305\202\377\227\203C\357\212v7f\202\377" "\377\377\0\10III\322\320\320\320\377\206\206\206\376===\372\316\316\316" "\377\223\223\223\374III\347OOOT\203\377\377\377\0\11\223\201I\361\252" "\233j\377\241\216M\377\334\310\205\377\215y:\357\377\377\377\0\205q2" "+\214x9\354\316\272w\377\202\334\310\205\377\13\330\304\201\377\224\200" "@\357\210t5V6CO\23GHH\356\335\335\335\377%%%\376\266\266\266\377[[[\355" "HHH\265LLL\23\204\377\377\377\0\5\226\203J\360\317\277\213\377\307\264" "q\377\334\310\205\377\215y:\357\202\377\377\377\0\15\205q25\215y:\356" "\317\273{\377\306\272\205\377\326\304\205\377\326\302\177\377\220}\77" "\356:\\w\362gv\204\377}\177\200\377SSS\375>>>\346BBBR\206\377\377\377" "\0\2\226\204J\357\343\323\235\377\202\334\310\205\377\1\215y:\357\202" "\377\377\377\0\14""9_\201C>e\204\334:`\201\377>e\205\377El\210\377\224" "\233\206\377f}\204\377>>\22\207" "\377\377\377\0\22\216|B\362\212zF\377\215y9\377\334\310\205\377\215y" ":\357\377\377\377\0""9`\206P7_\202\3758`\204\366Af\200\320Ojt\373Ht\220" "\377Em\213\377@n\217\377F\201\246\377N\225\274\3778b\204\3768^\203,\210" "\377\377\377\0\2\224\202G\357\341\320\227\377\202\334\310\205\377\16" "\215y:\357hkN\204:c\204\372;b\203\363rkGz\205q2h\206r3\272@f\202\376" "P\231\300\377=k\217\377M\223\272\377Dt\226\377lpW\362\205q2)\210\377" "\377\377\0\23\222\177C\360\313\273\201\377\312\266t\377\334\310\205\377" "\304\260n\375w\201r\375Au\231\377ax{\376\265\241`\373\264\240a\373x\202" "s\375Dp\217\377Iw\225\377>i\212\377M\223\271\377\361\225\203J\377\236\213" "J\377\202\334\310\205\377\17\253\251\204\377Dp\217\377Hs\220\377Pr\207" "\377>d\204\3778`\203\377Gl\206\377\200\215\204\377J~\236\377K\215\263" "\377Cv\230\377Fq\217\377\223\225x\377\214x8\343\205q2\31\206\377\377" "\377\0\3\221~B\357\337\315\220\377\335\311\207\377\203\334\310\205\377" "\17\213\226\207\377Jn\207\377Dh\205\377^z\207\377\213\225\205\377\324" "\303\205\377i\201\207\377Dr\222\377_{\206\377\206\222\205\377Bj\211\377" "Xw\207\377\303\257m\376\213w8\337\205q2\23\205\377\377\377\0\3\211u6" "\365\245\221T\356\242\216O\355\211\241\215M\355\4@e\202\376Dh\200\375" "\240\214N\355\241\215M\355\202Dg\200\375\3\241\215M\355\217{<\367\213" "w8\276\205\377\377\377\0\1\205q2&\213\205q28\2""9a\203\365=e\203\331" "\202\205q28\2;c\204\352:b\204\360\202\205q28\1\205q2\"\221\377\377\377" "\0\6""9c\206\3439b\206\3567^\201$8_\202o7^\201\3779c\206\204\224\377" "\377\377\0\6""9d\207\245Au\231\373;h\214\354>m\221\3658a\205\3577^\201" "\11\224\377\377\377\0\5""7^\201\15""9c\207\2709d\207\3529d\207\3257^" "\2012\211\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (rectify_24) #endif #ifdef __GNUC__ static const guint8 rectify_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 rectify_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (790) */ "\0\0\3." /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\377\377\377\377\0\347\377\377\377\0\12\230::\1\253ZZV\277~~\234\276" "{{\260\275yy\264\277||\260\277~~\255\277\200\200\250\275{{\240\232<<" "\34\214\377\377\377\0\5\231\231\231\261\234\234\234\305\234\210\210\321" "\277zz\375\267^^\377\205\266\\\\\377\2\273ff\377\252XX\271\214\377\377" "\377\0\4\232\232\232\341\263\263\263\377\266\266\266\377\247ee\377\207" "\245KK\377\1\244LL\316\214\377\377\377\0\4\231\231\231\334\247\247\247" "\377\231\231\231\356\226BB\375\207\224::\377\1\227::\235\211\377\377" "\377\0\17\300\300\300\20\300\300\300)\300\300\300-\231\231\231\341\250" "\250\250\377\230\230\230\314\230::,\227::m\22599\250\22488\276\22488" "\275\22488\273\22488\271\22588\266\230::%\204\377\377\377\0\14\300\300" "\300\14\302\302\302]\304\304\304\265\306\306\306\311\310\310\310\330" "\314\314\314\343\321\321\321\352\323\323\323\354\241\241\241\374\250" "\250\250\377\242\242\242\370\303\303\303A\212\377\377\377\0\17\302\302" "\302;\305\305\305\304\312\312\312\337\327\327\327\371\344\344\344\377" "\347\347\347\377\352\352\352\377\354\354\354\377\357\357\357\377\362" "\362\362\377\304\304\304\377\315\315\315\377\317\317\317\377\322\322" "\322\345\306\306\306J\207\377\377\377\0\25\300\300\300\20\305\305\305" "\253\321\321\321\352\350\350\350\377\354\354\354\377\357\357\357\377" "\361\361\361\377\364\364\364\377\366\366\366\377\371\371\371\377\374" "\374\374\377\376\376\376\377\375\375\375\377\372\372\372\377\370\370" "\370\377\365\365\365\377\320\320\320\347\265\265\265[\0\0\0\10\0\0\0" "\4\0\0\0\1\203\377\377\377\0\27\303\303\3037\310\310\310\337\342\342" "\342\365\365\365\365\377\371\371\371\377\373\373\373\377\376\376\376" "\377\375\375\375\377\373\373\373\377\370\370\370\377\366\366\366\377" "\364\364\364\377\362\362\362\377\357\357\357\377\355\355\355\377\353" "\353\353\377\351\351\351\377\314\314\314\352\253\253\253j\0\0\0\20\0" "\0\0\13\0\0\0\7\0\0\0\1\202\377\377\377\0\26VVV\11\272\272\272i\310\310" "\310\325\322\322\322\344\335\335\335\361\350\350\350\377\357\357\357" "\377\360\360\360\377\356\356\356\377\353\353\353\377\351\351\351\377" "\347\347\347\377\345\345\345\377\342\342\342\377\337\337\337\377\331" "\331\331\377\325\325\325\376\303\303\303\364\236\236\236Q\0\0\0\17\0" "\0\0\12\0\0\0\3\202\377\377\377\0\26\0\0\0\0\0\0\0\3\0\0\0\12[[[\31\226" "\226\226D\257\257\257w\274\274\274\257\300\300\300\312\300\300\300\317" "\277\277\277\320\277\277\277\322\277\277\277\323\300\300\300\323\276" "\276\276\314\273\273\273\272\264\264\264\225\247\247\247i\227\227\227" "FJJJ\27\0\0\0\7\0\0\0\2\0\0\0\0\205\377\377\377\0\10\0\0\0\0\0\0\0\2" "\0\0\0\5\0\0\0\10\0\0\0\12\0\0\0\14\0\0\0\16\0\0\0\17\202\0\0\0\16\6" "\0\0\0\13\0\0\0\12\0\0\0\6\0\0\0\4\0\0\0\1\0\0\0\0\314\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (lens_24) #endif #ifdef __GNUC__ static const guint8 lens_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 lens_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1767) */ "\0\0\6\377" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\207\377\377\377\0\4\0\0\0\27\0\0\0L\0\0\0\200\0\0\0\264\202\0\0\0\351" "\4\0\0\0\264\0\0\0\200\0\0\0L\0\0\0\27\214\377\377\377\0\3\0\0\0\7\0" "\0\0\211\0\0\0\374\210\0\0\0\377\3\0\0\0\374\0\0\0\211\0\0\0\7\211\377" "\377\377\0\2\0\0\0""3\0\0\0\324\202\0\0\0\377\10\27\27\27\377GGG\377" "ttt\377\240\240\240\377\236\236\236\377ppp\377DDD\377\31\31\31\377\202" "\0\0\0\377\2\0\0\0\324\0\0\0""3\207\377\377\377\0\22\0\0\0m\0\0\0\373" "\0\0\0\377\14\14\14\377\206\206\206\377\334\334\334\377\331\331\331\377" "\325\325\325\377\321\321\321\377\315\315\315\377\311\311\311\377\304" "\304\304\377\300\300\300\377ttt\377\13\13\13\377\0\0\0\377\0\0\0\373" "\0\0\0m\205\377\377\377\0\24\0\0\0""2\0\0\0\373\0\0\0\377===\377\303" "\303\303\377\331\331\331\377\325\325\325\377\312\312\312\377\261\261" "\261\377\230\230\230\377\232\232\232\377\257\257\257\377\273\273\273" "\377\270\270\270\377\264\264\264\377\234\234\234\377///\377\0\0\0\377" "\0\0\0\373\0\0\0""2\203\377\377\377\0\12\0\0\0\6\0\0\0\321\0\0\0\377" "@@@\377\331\331\331\377\325\325\325\377\311\311\311\377\202\202\202\377" "WWW\377OOO\377\202BBB\377\12LLL\377VVV\377\204\204\204\377\253\253\253" "\377\247\247\247\377\243\243\243\377...\377\0\0\0\377\0\0\0\321\0\0\0" "\6\202\377\377\377\0\15\0\0\0\202\0\0\0\377\15\15\15\377\275\275\275" "\377\320\320\320\377\265\265\265\377___\377HHH\377\210\210\210\377\277" "\277\277\377\361\361\361\377\332\332\332\377HHH\377\202AAA\377\21bbb" "\377\234\234\234\377\232\232\232\377\206\206\206\377\11\11\11\377\0\0" "\0\377\0\0\0\202\377\377\377\0\0\0\0\32\0\0\0\373\0\0\0\377~~~\377\314" "\314\314\377\303\303\303\377___\377NNN\377\316\316\316\377\204\377\377" "\377\377\1QQQ\377\203AAA\377\17fff\377\222\222\222\377\216\216\216\377" "TTT\377\0\0\0\377\0\0\0\373\0\0\0\32\0\0\0P\0\0\0\377\31\31\31\377\310" "\310\310\377\303\303\303\377|||\377EEE\377\343\343\343\377\204\377\377" "\377\377\2\301\301\301\377888\377\203AAA\377\2BBB\377|||\377\202\205" "\205\205\377\12\20\20\20\377\0\0\0\377\0\0\0O\0\0\0\203\0\0\0\377@@@" "\377\277\277\277\377\272\272\272\377TTT\377bbb\377\204\377\377\377\377" "\10\230\230\230\377\4\4\4\377\0\0\0\377\10\10\10\377(((\377111\377::" ":\377ZZZ\377\202\205\205\205\377\16,,,\377\0\0\0\377\0\0\0\203\0\0\0" "\266\0\0\0\377ddd\377\266\266\266\377\243\243\243\377KKK\377QQQ\377\310" "\310\310\377\321\321\321\377\204\204\204\377:::\377\204\0\0\0\377\1""5" "55\377\202AAA\377\17EEE\377\216\216\216\377\205\205\205\377GGG\377\0" "\0\0\377\0\0\0\266\0\0\0\351\0\0\0\377\204\204\204\377\256\256\256\377" "\210\210\210\377AAA\377\77\77\77\377AAA\377(((\377\206\0\0\0\377\2\33" "\33\33\377RRR\377\202AAA\377\4\213\213\213\377\205\205\205\377ccc\377" "\0\0\0\377\202\0\0\0\351\10\0\0\0\377\177\177\177\377\246\246\246\377" "\213\213\213\377BBB\377777\377///\377)))\377\206\0\0\0\377\22\14\14\14" "\377^^^\377ccc\377GGG\377\220\220\220\377\205\205\205\377ccc\377\0\0" "\0\377\0\0\0\351\0\0\0\266\0\0\0\377XXX\377\235\235\235\377\226\226\226" "\377LLL\377AAA\377;;;\377\25\25\25\377\206\0\0\0\377\17www\377ccc\377" "\202\202\202\377ccc\377\225\225\225\377\205\205\205\377HHH\377\0\0\0" "\377\0\0\0\266\0\0\0\203\0\0\0\377555\377\224\224\224\377\220\220\220" "\377WWW\377\202AAA\377\2@@@\377\37\37\37\377\204\0\0\0\377\21\37\37\37" "\377\324\324\324\377\262\262\262\377\204\204\204\377\202\202\202\377" "\211\211\211\377\205\205\205\377...\377\0\0\0\377\0\0\0\203\0\0\0P\0" "\0\0\377\24\24\24\377\214\214\214\377\210\210\210\377www\377FFF\377\202" "AAA\377\12@@@\377\33\33\33\377\13\13\13\377444\377```\377\205\205\205" "\377\363\363\363\377\311\311\311\377\233\233\233\377\240\240\240\377" "\202\205\205\205\377\7\22\22\22\377\0\0\0\377\0\0\0O\0\0\0\32\0\0\0\373" "\0\0\0\377RRR\377\202\205\205\205\377\27hhh\377@@@\377777\377...\377" "888\377\\\\\\\377\204\204\204\377ttt\377\301\301\301\377\320\320\320" "\377\271\271\271\377\245\245\245\377\211\211\211\377\205\205\205\377" "RRR\377\0\0\0\377\0\0\0\373\0\0\0\32\377\377\377\0\0\0\0\203\0\0\0\377" "\10\10\10\377www\377\202\205\205\205\377\2sss\377FFF\377\202AAA\377\4" "LLL\377ooo\377rrr\377\242\242\242\377\202\247\247\247\377\6\223\223\223" "\377\205\205\205\377www\377\10\10\10\377\0\0\0\377\0\0\0\203\202\377" "\377\377\0\4\0\0\0\6\0\0\0\324\0\0\0\377(((\377\204\205\205\205\377\10" "iii\377SSS\377BBB\377RRR\377ppp\377\215\215\215\377\240\240\240\377\210" "\210\210\377\202\205\205\205\377\4(((\377\0\0\0\377\0\0\0\324\0\0\0\6" "\203\377\377\377\0\5\0\0\0""5\0\0\0\374\0\0\0\377$$$\377vvv\377\203\205" "\205\205\377\4\210\210\210\377\221\221\221\377\223\223\223\377\217\217" "\217\377\203\205\205\205\377\5vvv\377$$$\377\0\0\0\377\0\0\0\374\0\0" "\0""5\205\377\377\377\0\5\0\0\0o\0\0\0\373\0\0\0\377\10\10\10\377SSS" "\377\210\205\205\205\377\5SSS\377\10\10\10\377\0\0\0\377\0\0\0\373\0" "\0\0o\207\377\377\377\0\2\0\0\0""3\0\0\0\324\202\0\0\0\377\3\17\17\17" "\377+++\377GGG\377\202ccc\377\3GGG\377+++\377\17\17\17\377\202\0\0\0" "\377\2\0\0\0\324\0\0\0""3\211\377\377\377\0\3\0\0\0\7\0\0\0\211\0\0\0" "\374\210\0\0\0\377\3\0\0\0\374\0\0\0\211\0\0\0\7\214\377\377\377\0\4" "\0\0\0\34\0\0\0R\0\0\0\204\0\0\0\267\202\0\0\0\351\4\0\0\0\267\0\0\0" "\204\0\0\0R\0\0\0\34\207\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (flip_horiz_24) #endif #ifdef __GNUC__ static const guint8 flip_horiz_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 flip_horiz_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (841) */ "\0\0\3a" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\377\0\0\0\0\230\0\0\0\0\202\0\0\0\377\2\0\0\0\13\0\0\0\2\204\0\0\0\0" "\202\0\0\0\377\2\0\0\0\13\0\0\0\2\213\0\0\0\0\5\0\0\0\377\307\352\303" "\377\0\0\0\377\0\0\0""9\0\0\0\13\204\0\0\0\0\5\0\0\0\377\272\333\267" "\377\0\0\0\377\0\0\0\24\0\0\0\2\211\0\0\0\0\6\0\0\0\377\322\367\316\377" "\265\325\262\377\0\0\0\377\0\0\0D\0\0\0\16\204\0\0\0\0\6\0\0\0\377\267" "\330\264\377\231\264\226\377\0\0\0\377\0\0\0\24\0\0\0\2\207\0\0\0\0\4" "\0\0\0\377\322\367\316\377\272\333\267\377\252\310\247\377\203\0\0\0" "\377\202\5\6\5\377\203\0\0\0\377\6\257\316\254\377\246\304\243\377\227" "\262\224\377\0\0\0\377\0\0\0\24\0\0\0\2\205\0\0\0\0\4\0\0\0\377\322\367" "\316\377\272\333\267\377\252\310\247\377\202\250\306\245\377\2\253\311" "\247\377\262\322\257\377\202\266\327\263\377\12\267\330\264\377\266\326" "\262\377\257\316\254\377\251\307\246\377\247\305\244\377\245\303\242" "\377\222\254\217\377\0\0\0\377\0\0\0\24\0\0\0\2\203\0\0\0\0\4\0\0\0\377" "\301\343\275\377\271\332\266\377\253\311\247\377\202\250\306\245\377" "\202\247\305\244\377\207\250\306\245\377\7\247\305\244\377\245\302\242" "\377\216\250\214\377SbQ\377\0\0\0\377\0\0\0\24\0\0\0\2\202\0\0\0\0\15" "\0\0\0\11\0\0\0\377\233\267\230\377\246\304\243\377\247\305\244\377\246" "\304\243\377\237\274\235\377\230\263\225\377\224\256\221\377\223\255" "\220\377\224\256\221\377\231\264\226\377\242\277\237\377\202\247\305" "\244\377\7\245\303\242\377\222\254\217\377[lZ\377\0\0\0\377\0\0\0M\0" "\0\0""2\0\0\0\11\202\0\0\0\0\6\0\0\0\2\0\0\0\24\0\0\0\377\227\262\224" "\377\245\303\242\377\237\274\235\377\202\0\0\0\377\1\6\7\6\377\202\0" "\0\0\377\1\10\11\10\377\202\0\0\0\377\10\245\303\242\377\222\254\217" "\377\\m[\377\0\0\0\377\0\0\0O\0\0\0=\0\0\0\24\0\0\0\2\203\0\0\0\0\10" "\0\0\0\2\0\0\0\24\0\0\0\377\225\260\223\377\223\255\220\377\0\0\0\377" "\0\0\0O\0\0\0F\204\0\0\0D\10\0\0\0\377\225\260\223\377\\m[\377\0\0\0" "\377\0\0\0O\0\0\0=\0\0\0\24\0\0\0\2\205\0\0\0\0\7\0\0\0\2\0\0\0\24\0" "\0\0\377o\203m\377\0\0\0\377\0\0\0F\0\0\0\31\204\0\0\0\16\7\0\0\0\377" "bt`\377\0\0\0\377\0\0\0O\0\0\0=\0\0\0\24\0\0\0\2\207\0\0\0\0\2\0\0\0" "\2\0\0\0\24\202\0\0\0\377\2\0\0\0D\0\0\0\16\204\0\0\0\0\202\0\0\0\377" "\4\0\0\0O\0\0\0=\0\0\0\24\0\0\0\2\211\0\0\0\0\5\0\0\0\2\0\0\0\24\0\0" "\0;\0\0\0""9\0\0\0\13\204\0\0\0\0\5\0\0\0\13\0\0\0""9\0\0\0;\0\0\0\24" "\0\0\0\2\213\0\0\0\0\1\0\0\0\2\202\0\0\0\13\1\0\0\0\2\204\0\0\0\0\1\0" "\0\0\2\202\0\0\0\13\1\0\0\0\2\375\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (flip_vert_24) #endif #ifdef __GNUC__ static const guint8 flip_vert_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 flip_vert_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (887) */ "\0\0\3\217" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\273\0\0\0\0\3\0\0\0\377\0\0\0\10\0\0\0\2\224\0\0\0\0\5\0\0\0\377\260" "\317\255\377\0\0\0\377\0\0\0\22\0\0\0\2\222\0\0\0\0\7\0\0\0\377\300\342" "\275\377\263\323\260\377\233\266\230\377\0\0\0\377\0\0\0\22\0\0\0\2\220" "\0\0\0\0\11\0\0\0\377\300\342\275\377\264\324\261\377\252\310\247\377" "\246\304\243\377\230\263\225\377\0\0\0\377\0\0\0\22\0\0\0\2\216\0\0\0" "\0\4\0\0\0\377\300\342\275\377\264\324\261\377\252\310\247\377\202\250" "\306\245\377\5\246\304\243\377\226\261\223\377\0\0\0\377\0\0\0\22\0\0" "\0\2\214\0\0\0\0\4\0\0\0\377\270\331\265\377\260\317\255\377\251\307" "\246\377\202\250\306\245\377\7\247\305\244\377\242\277\237\377\230\264" "\226\377|\222z\377\0\0\0\377\0\0\0\22\0\0\0\2\213\0\0\0\0\204\0\0\0\377" "\202\250\306\245\377\1\243\300\240\377\204\0\0\0\377\2\0\0\0""4\0\0\0" "\12\213\0\0\0\0\15\0\0\0\12\0\0\0""2\0\0\0<\0\0\0\377\252\310\247\377" "\250\306\245\377\235\271\232\377\0\0\0\377\0\0\0F\0\0\0>\0\0\0<\0\0\0" "2\0\0\0\12\213\0\0\0\0\15\0\0\0\2\0\0\0\12\0\0\0\14\0\0\0\377\257\316" "\253\377\250\306\245\377\232\265\227\377\10\12\10\377\0\0\0>\0\0\0\26" "\0\0\0\14\0\0\0\12\0\0\0\2\216\0\0\0\0\7\4\5\4\377\262\321\256\377\250" "\306\245\377\231\264\226\377\0\0\0\377\0\0\0<\0\0\0\14\221\0\0\0\0\7" "\4\5\4\377\262\321\256\377\250\306\245\377\231\264\226\377\0\0\0\377" "\0\0\0<\0\0\0\14\221\0\0\0\0\7\0\0\0\377\262\322\257\377\250\306\245" "\377\236\272\233\377\11\13\11\377\0\0\0<\0\0\0\14\221\0\0\0\0\7\0\0\0" "\377\262\321\256\377\250\306\245\377\244\301\241\377\0\0\0\377\0\0\0" "<\0\0\0\14\216\0\0\0\0\204\0\0\0\377\1\255\314\252\377\202\250\306\245" "\377\204\0\0\0\377\2\0\0\0\12\0\0\0\2\213\0\0\0\0\5\0\0\0\377\257\316" "\253\377\262\322\257\377\255\314\252\377\251\307\246\377\202\250\306" "\245\377\6\246\304\243\377\232\265\227\377r\207p\377\0\0\0\377\0\0\0" "2\0\0\0\12\213\0\0\0\0\4\0\0\0\12\0\0\0\377\230\264\226\377\246\304\243" "\377\202\250\306\245\377\7\246\304\243\377\230\264\226\377o\202m\377" "\0\0\0\377\0\0\0F\0\0\0""4\0\0\0\12\213\0\0\0\0\4\0\0\0\2\0\0\0\22\0" "\0\0\377\227\262\224\377\202\246\304\243\377\7\230\264\226\377o\202m" "\377\0\0\0\377\0\0\0F\0\0\0""6\0\0\0\22\0\0\0\2\214\0\0\0\0\13\0\0\0" "\2\0\0\0\22\0\0\0\377\224\256\221\377\225\257\222\377n\201l\377\0\0\0" "\377\0\0\0F\0\0\0""6\0\0\0\22\0\0\0\2\216\0\0\0\0\11\0\0\0\2\0\0\0\22" "\0\0\0\377dvb\377\0\0\0\377\0\0\0F\0\0\0""6\0\0\0\22\0\0\0\2\220\0\0" "\0\0\7\0\0\0\2\0\0\0\22\0\0\0\377\0\0\0D\0\0\0""6\0\0\0\22\0\0\0\2\222" "\0\0\0\0\5\0\0\0\2\0\0\0\22\0\0\0,\0\0\0\22\0\0\0\2\224\0\0\0\0\3\0\0" "\0\2\0\0\0\10\0\0\0\2\212\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (rotate_90_24) #endif #ifdef __GNUC__ static const guint8 rotate_90_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 rotate_90_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1054) */ "\0\0\4""6" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\274\0\0\0\0\202\0\0\0\377\1\0\0\0\2\225\0\0\0\0\4\0\0\0\377\234\270" "\231\377\0\0\0\377\0\0\0\2\224\0\0\0\0\5\0\0\0\377\246\304\243\377\206" "\236\204\377\0\0\0\377\0\0\0\2\220\0\0\0\0\1\4\5\4\377\203\0\0\0\377" "\5\254\313\251\377\230\264\226\377\203\233\201\377\0\0\0\377\0\0\0\2" "\215\0\0\0\0\14\5\6\5\377\0\0\0\377\276\340\272\377\270\331\265\377\262" "\322\257\377\255\314\252\377\251\307\246\377\246\304\243\377\224\256" "\221\377w\214u\377\0\0\0\377\0\0\0\2\213\0\0\0\0\5\1\1\1\377\300\342" "\275\377\270\330\264\377\257\316\253\377\251\307\246\377\203\250\306" "\245\377\6\246\304\243\377\225\260\223\377dvb\377_p]\377\0\0\0\377\0" "\0\0\2\211\0\0\0\0\17\5\6\5\377\300\342\275\377\265\325\261\377\251\307" "\246\377\243\300\240\377\241\275\236\377\245\302\242\377\250\306\245" "\377\246\304\243\377\230\264\226\377n\201l\377IVH\377\0\0\0\377\0\0\0" "2\0\0\0\11\211\0\0\0\0\6\0\0\0\377\270\330\264\377\251\307\246\377\233" "\266\230\377|\222z\377\13\14\12\377\202\0\0\0\377\7\230\264\226\377o" "\202m\377IVG\377\0\0\0\377\0\0\0=\0\0\0\24\0\0\0\2\210\0\0\0\0\17\4\5" "\4\377\276\340\272\377\257\316\253\377\242\277\237\377z\220x\377\0\0" "\0\377\0\0\0N\0\0\0F\0\0\0\377p\204n\377IVH\377\0\0\0\377\0\0\0=\0\0" "\0\24\0\0\0\2\211\0\0\0\0\16\0\0\0\377\270\330\264\377\251\307\246\377" "\234\270\231\377\0\0\0\377\0\0\0N\0\0\0=\0\0\0\26\0\0\0\377TcR\377\0" "\0\0\377\0\0\0=\0\0\0\24\0\0\0\2\212\0\0\0\0\10\0\0\0\377\262\322\257" "\377\250\306\245\377\232\265\227\377\0\0\0\377\0\0\0F\0\0\0\26\0\0\0" "\2\202\0\0\0\377\3\0\0\0<\0\0\0\24\0\0\0\2\213\0\0\0\0\14\0\0\0\377\262" "\321\256\377\250\306\245\377\235\271\232\377\0\0\0\377\0\0\0C\0\0\0\15" "\0\0\0\0\0\0\0\13\0\0\0/\0\0\0\24\0\0\0\2\214\0\0\0\0\13\3\4\3\377\257" "\316\253\377\250\306\245\377\243\300\240\377\0\0\0\377\0\0\0C\0\0\0\15" "\0\0\0\0\0\0\0\2\0\0\0\11\0\0\0\2\215\0\0\0\0\10\4\5\4\377\245\303\242" "\377\250\306\245\377\247\305\244\377\230\264\226\377\0\0\0\377\0\0\0" "\26\0\0\0\2\202\0\0\0\0\3\0\0\0\377\0\0\0\11\0\0\0\2\213\0\0\0\0\2\0" "\0\0\13\0\0\0\377\202\250\306\245\377\2\247\305\244\377\240\275\235\377" "\204\0\0\0\377\4\253\311\250\377\0\0\0\377\0\0\0\24\0\0\0\2\212\0\0\0" "\0\4\0\0\0\2\4\4\3\377\233\266\230\377\246\304\243\377\202\250\306\245" "\377\2\253\311\250\377\257\316\254\377\202\262\321\256\377\5\253\312" "\250\377\226\261\223\377\0\0\0\377\0\0\0\24\0\0\0\2\212\0\0\0\0\5\0\0" "\0\13\0\0\0\377\220\252\216\377\241\275\236\377\247\305\244\377\203\250" "\306\245\377\7\247\305\244\377\241\275\236\377\216\247\213\377cua\377" "\0\0\0\377\0\0\0\24\0\0\0\2\211\0\0\0\0\2\0\0\0\2\0\0\0\24\202\0\0\0" "\377\6\213\243\210\377\226\261\223\377\230\264\226\377\230\263\225\377" "\216\247\213\377t\211r\377\202\0\0\0\377\3\0\0\0L\0\0\0""2\0\0\0\11\212" "\0\0\0\0\5\0\0\0\2\0\0\0\24\0\0\0:\0\0\0\377\2\2\2\377\202\0\0\0\377" "\7\1\2\1\377\0\0\0\377\0\0\0N\0\0\0F\0\0\0:\0\0\0\24\0\0\0\2\213\0\0" "\0\0\4\0\0\0\2\0\0\0\13\0\0\0\26\0\0\0:\204\0\0\0C\4\0\0\0:\0\0\0\26" "\0\0\0\13\0\0\0\2\216\0\0\0\0\2\0\0\0\2\0\0\0\13\204\0\0\0\15\2\0\0\0" "\13\0\0\0\2\237\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (rotate_270_24) #endif #ifdef __GNUC__ static const guint8 rotate_270_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 rotate_270_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1283) */ "\0\0\5\33" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\212\0\0\0\0\3\0\0\0\1\0\0\0\3\0\0\0\1\224\0\0\0\0\2\0\0\0\3\0\0\0\16" "\202\0\0\0\377\1\0\0\0\1\222\0\0\0\0\6\0\0\0\4\1\1\1\23\0\0\0\377\266" "\327\263\377\0\0\0\377\0\0\0\4\221\0\0\0\0\11\0\0\0\4\1\1\1\23\0\0\0" "\377\341\377\335\377\244\302\242\377\0\0\0\377\0\0\0\14\0\0\0\4\0\0\0" "\1\216\0\0\0\0\14\0\0\0\4\1\1\1\23\0\0\0\377\345\377\341\377\307\353" "\304\377\244\301\241\377\0\0\0\377\0\0\0""4\1\1\1%\0\0\0\22\0\0\0\6\0" "\0\0\1\213\0\0\0\0\7\0\0\0\4\1\1\1\23\0\0\0\377\345\377\341\377\310\354" "\305\377\260\317\255\377\250\306\245\377\203\0\0\0\377\4\3\3\3F\0\0\0" "(\0\0\0\20\0\0\0\3\211\0\0\0\0\6\0\0\0\1\0\0\0\17\0\0\0\377\344\377\340" "\377\310\354\305\377\260\317\255\377\202\250\306\245\377\3\251\307\246" "\377\254\313\251\377\255\314\252\377\202\0\0\0\377\3\4\4\4;\1\1\1\23" "\0\0\0\3\210\0\0\0\0\5\0\0\0\3\0\0\0\377\316\362\312\377\305\350\302" "\377\261\320\255\377\204\250\306\245\377\10\247\305\244\377\250\306\245" "\377\251\307\246\377\246\304\243\377\0\0\0\377\4\4\4;\0\0\0\20\0\0\0" "\1\207\0\0\0\0\5\0\0\0\1\0\0\0\17\0\0\0\377\235\271\232\377\245\303\242" "\377\202\247\305\244\377\3\245\303\242\377\244\301\241\377\245\303\242" "\377\203\247\305\244\377\4\237\273\234\377\0\0\0\377\5\5\5(\0\0\0\6\210" "\0\0\0\0\7\0\0\0\4\1\1\1\23\0\0\0\377\222\254\217\377\244\301\241\377" "\244\302\242\377\223\255\220\377\202\0\0\0\377\1\244\301\241\377\202" "\247\305\244\377\5\245\303\242\377\0\0\0\377\3\3\3F\0\0\0\22\0\0\0\1" "\210\0\0\0\0\11\0\0\0\4\1\1\1\23\0\0\0\377\220\251\215\377\231\264\226" "\377t\210r\377\0\0\0\377\3\3\3N\0\0\0\377\202\250\306\245\377\5\247\305" "\244\377\233\267\230\377\0\0\0\377\1\1\1%\0\0\0\4\211\0\0\0\0\17\0\0" "\0\4\1\1\1\23\0\0\0\377}\223{\377WfU\377\0\0\0\377\1\1\1\35\0\0\0I\0" "\0\0\377\251\307\246\377\247\305\244\377\240\274\235\377\0\0\0\377\4" "\4\4""0\0\0\0\6\212\0\0\0\0\16\0\0\0\4\1\1\1\23\0\0\0\377EQD\377\0\0" "\0\323\0\0\0\15\0\0\0""4\0\0\0\377\255\314\252\377\250\306\245\377\240" "\274\235\377\0\0\0\377\4\4\4""1\0\0\0\6\212\0\0\0\0\3\0\0\0\1\0\0\0\6" "\0\0\0\20\202\0\0\0\377\11\0\0\0\12\0\0\0""4\0\0\0\377\257\316\254\377" "\250\306\245\377\237\273\234\377\0\0\0\377\0\0\0""1\0\0\0\6\211\0\0\0" "\0\17\0\0\0\3\0\0\0\17\0\0\0\31\0\0\0\22\0\0\0\13\0\0\0\12\0\0\0\27\0" "\0\0I\0\0\0\377\256\315\253\377\247\305\244\377\231\264\226\377\0\0\0" "\377\4\4\4""0\0\0\0\6\210\0\0\0\0\5\0\0\0\4\1\1\1\23\4\4\4""8\0\0\0\377" "\1\1\1D\202\0\0\0""4\11\0\0\0I\0\0\0\377\302\344\276\377\253\311\250" "\377\244\301\241\377\205\234\202\377\0\0\0\377\1\1\1%\0\0\0\4\207\0\0" "\0\0\5\0\0\0\4\1\1\1\23\0\0\0=\0\0\0\377\312\356\306\377\204\0\0\0\377" "\10\302\344\276\377\257\316\254\377\247\305\244\377\232\266\227\377\0" "\0\0\377\3\3\3F\0\0\0\22\0\0\0\1\206\0\0\0\0\21\0\0\0\1\0\0\0\17\4\4" "\4""8\0\0\0\377\310\354\305\377\261\320\255\377\254\313\251\377\255\314" "\252\377\257\316\254\377\256\315\253\377\253\311\250\377\247\305\244" "\377\237\273\234\377{\221y\377\0\0\0\377\5\5\5(\0\0\0\6\207\0\0\0\0\7" "\0\0\0\3\0\0\0\31\0\0\0\377\302\345\277\377\256\315\253\377\250\306\245" "\377\247\305\244\377\202\250\306\245\377\10\247\305\244\377\244\301\241" "\377\232\266\227\377{\221y\377\0\0\0\377\4\4\4;\0\0\0\20\0\0\0\1\207" "\0\0\0\0\3\0\0\0\1\0\0\0\17\4\4\4""7\202\0\0\0\377\1\234\270\231\377" "\202\240\274\235\377\3\237\273\234\377\231\264\226\377\205\234\202\377" "\202\0\0\0\377\3\4\4\4;\1\1\1\23\0\0\0\3\211\0\0\0\0\4\0\0\0\3\0\0\0" "\20\0\0\0(\0\0\0F\206\0\0\0\377\4\3\3\3F\0\0\0(\0\0\0\20\0\0\0\3\213" "\0\0\0\0\5\0\0\0\1\0\0\0\6\0\0\0\22\1\1\1%\0\0\0/\202\0\0\0""1\5\0\0" "\0/\1\1\1%\0\0\0\22\0\0\0\6\0\0\0\1\216\0\0\0\0\2\0\0\0\1\0\0\0\4\204" "\0\0\0\6\2\0\0\0\4\0\0\0\1\240\0\0\0\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (gimp_24) #endif #ifdef __GNUC__ static const guint8 gimp_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 gimp_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (993) */ "\0\0\3\371" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\344\212\202l\0\1\352\352\352\377\216\212\202l\0\1\206~i\377\211\212" "\202l\0\1\206~i\377\215\212\202l\0\1RN>\377\211\212\202l\0\2\206~i\377" "~vb\377\213\212\202l\0\2hbQ\377RN>\377\212\212\202l\0\3\200r\\\377yr" "^\377\346\346\346\377\207\212\202l\0\4hbQ\377ZVF\377RN>\377JE6\377\212" "\212\202l\0\5yr^\377vn]\377qjY\377nfV\377hbQ\377\202\212\202l\0\7\356" "\356\356\377nfR\377`ZJ\377RN>\377B>2\377NI;\377JE6\377\211\212\202l\0" "\4\346\346\346\377\352\352\352\377rnZ\377yr^\377\202\346\346\346\377" "\10f^N\377`ZJ\377ZVF\377ZRD\377RN>\377NI;\377JF:\377FB6\377\205\212\202" "l\0\17\40\40\40\377\202\202\202\377\20\20\20\377\2\2\2\377\342\342\342" "\377\366\366\366\377~~~\377\346\346\346\377\352\352\352\377\366\366\366" "\377\362\362\362\377\346\346\346\377ZVF\377ZRD\377RN>\377\202NI;\377" "\1JE6\377\206\212\202l\0\2\2\2\2\377HHH\377\202\2\2\2\377\16vn]\377\352" "\352\352\377\2\2\2\377vn]\377\352\352\352\377\236\236\236\377\216\216" "\216\377\346\346\346\377ZRD\377UNB\377RN>\377NI;\377JE6\377FB6\377\206" "\212\202l\0\203\2\2\2\377\13\26\26\26\377HHH\377vn]\377xrb\377vn]\377" "\342\342\342\377\352\352\352\377\2\2\2\377VRB\377UNB\377RN>\377\202N" "I;\377\2F>4\377\324\324\324\377\207\212\202l\0\11\2\2\2\377\40\40\40" "\377RRR\377~~~\377jfW\377qjY\377rn^\377ie^\377jfW\377\202ZRD\377\7RN" ">\377NI;\377JF:\377FB6\377F>4\377\250\250\250\377\316\316\316\377\206" "\212\202l\0\6NNN\377ZZZ\377~~~\377jfR\377nfR\377b^J\377\202`ZJ\377\13" "ZVF\377VRB\377NI;\377`ZJ\377JE6\377FB6\377B>2\377jjj\377\216\216\216" "\377\266\266\266\377\332\332\332\377\205\212\202l\0\3\346\346\346\377" "\302\302\302\377nfV\377\202hbQ\377\202`ZJ\377\16ZVF\377NI;\377b^N\377" "vn]\377NI;\377\211nM\377\242\202^\377\276\232r\377\250\250\250\377\262" "\262\262\377\274\274\274\377\26\26\26\377BBB\377~~~\377\204\212\202l" "\0\13\312\312\312\377\250\250\250\377~~~\377ZZZ\377B>2\377UNB\377hbQ" "\377zvb\377\216\205n\377\223\212v\377FB6\377\202B>2\377\10:::\377```" "\377\212\212\212\377\266\266\266\377\40\40\40\377NNN\377rrr\377\262\262" "\262\377\203\212\202l\0\23\342\342\342\377\302\302\302\377\236\236\236" "\377~~~\377```\377BBB\377:::\377972\377JJ>\377>:4\377666\377>>>\377H" "HH\377VVV\377ZZZ\377```\377~~~\377\262\262\262\377\336\336\336\377\206" "\212\202l\0\20\352\352\352\377\316\316\316\377\262\262\262\377\232\232" "\232\377\206\206\206\377rrr\377fff\377```\377fff\377jjj\377xxx\377\216" "\216\216\377\242\242\242\377\274\274\274\377\324\324\324\377\332\332" "\332\377\202\316\316\316\377\2\332\332\332\377\352\352\352\377\206\212" "\202l\0\4\352\352\352\377\332\332\332\377\306\306\306\377\266\266\266" "\377\203\256\256\256\377\4\262\262\262\377\274\274\274\377\312\312\312" "\377\336\336\336\377\350\212\202l\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (grayscale_24) #endif #ifdef __GNUC__ static const guint8 grayscale_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 grayscale_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (2073) */ "\0\0\10""1" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\231@@@\377\26PPP\377ccc\377fff\377iii\377lll\377ooo\377rrr\377uuu\377" "xxx\377{{{\377~~~\377\201\201\201\377\204\204\204\377\207\207\207\377" "\212\212\212\377\215\215\215\377\220\220\220\377\223\223\223\377\226" "\226\226\377\231\231\231\377\235\235\235\377ppp\377\202@@@\377\26```" "\377\205\205\205\377\214\214\214\377\222\222\222\377\230\230\230\377" "\236\236\236\377\244\244\244\377\252\252\252\377\260\260\260\377\266" "\266\266\377\274\274\274\377\302\302\302\377\310\310\310\377\316\316" "\316\377\324\324\324\377\332\332\332\377\340\340\340\377\346\346\346" "\377\354\354\354\377\362\362\362\377\371\371\371\377\237\237\237\377" "\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36" "\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200" "\377\215\215\215\377\231\231\231\377\245\245\245\377\261\261\261\377" "\276\276\276\377\312\312\312\377\326\326\326\377\371\371\371\377\237" "\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22" "\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377" "\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377\261" "\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371\371" "\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377" "\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377" "ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377" "\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371" "\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6" "\6\377\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377" "hhh\377ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245" "\245\377\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326" "\377\371\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205" "\377\6\6\6\377\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377" "\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215\215\377\231\231\231" "\377\245\245\245\377\261\261\261\377\276\276\276\377\312\312\312\377" "\326\326\326\377\371\371\371\377\237\237\237\377\202@@@\377\26```\377" "\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36\377***\377777\377CC" "C\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215\215\377" "\231\231\231\377\245\245\245\377\261\261\261\377\276\276\276\377\312" "\312\312\377\326\326\326\377\371\371\371\377\237\237\237\377\202@@@\377" "\26```\377\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36\377***\377" "777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215" "\215\377\231\231\231\377\245\245\245\377\261\261\261\377\276\276\276" "\377\312\312\312\377\326\326\326\377\371\371\371\377\237\237\237\377" "\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36" "\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200" "\377\215\215\215\377\231\231\231\377\245\245\245\377\261\261\261\377" "\276\276\276\377\312\312\312\377\326\326\326\377\371\371\371\377\237" "\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22" "\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377" "\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377\261" "\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371\371" "\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377" "\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377" "ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377" "\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371" "\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6" "\6\377\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377" "hhh\377ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245" "\245\377\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326" "\377\371\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205" "\377\6\6\6\377\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377" "\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215\215\377\231\231\231" "\377\245\245\245\377\261\261\261\377\276\276\276\377\312\312\312\377" "\326\326\326\377\371\371\371\377\237\237\237\377\202@@@\377\26```\377" "\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36\377***\377777\377CC" "C\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215\215\377" "\231\231\231\377\245\245\245\377\261\261\261\377\276\276\276\377\312" "\312\312\377\326\326\326\377\371\371\371\377\237\237\237\377\202@@@\377" "\26```\377\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36\377***\377" "777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200\377\215\215" "\215\377\231\231\231\377\245\245\245\377\261\261\261\377\276\276\276" "\377\312\312\312\377\326\326\326\377\371\371\371\377\237\237\237\377" "\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22\377\36\36\36" "\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377\200\200\200" "\377\215\215\215\377\231\231\231\377\245\245\245\377\261\261\261\377" "\276\276\276\377\312\312\312\377\326\326\326\377\371\371\371\377\237" "\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377\22\22\22" "\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377ttt\377" "\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377\261" "\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371\371" "\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6\6\377" "\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377hhh\377" "ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245\245\377" "\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326\377\371" "\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205\377\6\6" "\6\377\22\22\22\377\36\36\36\377***\377777\377CCC\377OOO\377\\\\\\\377" "hhh\377ttt\377\200\200\200\377\215\215\215\377\231\231\231\377\245\245" "\245\377\261\261\261\377\276\276\276\377\312\312\312\377\326\326\326" "\377\371\371\371\377\237\237\237\377\202@@@\377\26```\377\205\205\205" "\377\214\214\214\377\222\222\222\377\230\230\230\377\236\236\236\377" "\244\244\244\377\252\252\252\377\260\260\260\377\266\266\266\377\274" "\274\274\377\302\302\302\377\310\310\310\377\316\316\316\377\324\324" "\324\377\332\332\332\377\340\340\340\377\346\346\346\377\354\354\354" "\377\362\362\362\377\371\371\371\377\237\237\237\377\202@@@\377\26PP" "P\377ccc\377fff\377iii\377lll\377ooo\377rrr\377uuu\377xxx\377{{{\377" "~~~\377\201\201\201\377\204\204\204\377\207\207\207\377\212\212\212\377" "\215\215\215\377\220\220\220\377\223\223\223\377\226\226\226\377\231" "\231\231\377\235\235\235\377ppp\377\231@@@\377"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (channel_blue_24) #endif #ifdef __GNUC__ static const guint8 channel_blue_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 channel_blue_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1319) */ "\0\0\5\77" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\237\377\377\377\0\4\37K\211)\36K\210|$O\213\266%O\213\341\202\"K\211" "\371\4%O\213\343$O\212\272\37J\210\202\37K\211)\215\377\377\377\0\5\"" "K\211\207$O\212\374Eq\247\377U\201\266\377a\216\301\377\202o\233\313" "\377\5a\216\301\377U\201\266\377Eq\247\377$O\212\375!K\211\222\213\377" "\377\377\0\6\0\200\200\2%N\211\375i\223\303\377v\242\320\377u\241\320" "\377t\240\317\377\202r\237\317\377\6t\240\317\377v\242\320\377{\245\322" "\377u\233\310\377*S\214\376\0\177\177\4\213\377\377\377\0\5St\243\375" "\321\332\347\377\226\257\315\377\202\242\311\377y\237\312\377\202u\237" "\315\377\6z\240\312\377\205\244\312\377\234\263\320\377\341\347\357\377" "Yx\246\375\40P\200\20\213\377\377\377\0\5!J\207\373a\207\272\377\326" "\340\354\377\327\337\353\377\335\344\356\377\202\362\365\370\377\6\327" "\337\352\377\274\312\334\377\236\262\316\377Vz\252\377!K\210\370\40P" "\200\20\213\377\377\377\0\15!J\207\373Hv\263\377\357\363\371\377\360" "\365\372\377\322\337\357\377^\212\303\377V\202\273\377O{\264\377Gs\254" "\377@l\245\3778d\235\377!K\210\370\40P\200\20\213\377\377\377\0\15!J" "\207\373Hv\263\377\333\345\362\377\337\350\364\377\304\325\352\377^\212" "\303\377V\202\273\377O{\264\377Gs\254\377@l\245\3778d\235\377!K\210\370" "\40P\200\20\213\377\377\377\0\15!J\207\373Hv\263\377\310\327\352\377" "\315\334\356\377\265\312\345\377^\212\303\377V\202\273\377O{\264\377" "Gs\254\377@l\245\3778d\235\377!K\210\370\40P\200\20\211\377\377\377\0" "\17\213\215\211{\210\212\205\377\"K\207\377Hv\263\377\264\311\343\377" "\273\317\351\377\250\300\341\377^\212\303\377V\202\273\377O{\264\377" "Gs\254\377@l\245\3778d\235\377#L\207\377\201\206\204\377\204\210\212" "\205\377\1\216\220\213\243\203\377\377\377\0\20\210\212\205\5\213\215" "\210\360\361\361\360\377$M\211\377Hv\263\377\241\273\334\377\252\303" "\343\377\231\266\334\377^\212\303\377V\202\273\377O{\264\377Gs\254\377" "@l\245\3778d\235\377'P\213\377\361\364\367\377\203\377\377\377\377\2" "\323\323\322\372\211\213\206t\203\377\377\377\0\25\210\212\205V\243\244" "\240\363\374\374\374\377,T\214\377@n\253\377s\231\313\377\214\255\331" "\377\211\253\326\377^\212\303\377V\202\273\377O{\264\377Gs\254\377@l" "\245\3774`\232\377'O\211\377\306\310\312\377\340\340\340\377\345\345" "\345\377\373\373\373\377\224\226\221\370\210\212\205\21\203\377\377\377" "\0\24\216\220\213\315\342\342\341\377\364\364\364\377\227\245\271\377" "(P\213\3778a\234\377Ht\257\377S~\270\377X\204\276\377R~\267\377Co\251" "\3777b\234\377.X\222\377&N\211\377}\217\247\377\321\321\321\377\340\340" "\340\377\354\354\354\377\343\344\343\376\214\216\211\250\203\377\377" "\377\0\25\210\212\205*\217\220\214\366\374\374\374\377\357\357\357\377" "\352\352\352\377\315\322\330\377\211\233\265\377c~\242\377@c\224\377" "(P\212\377&O\212\377<^\221\377Yu\234\377~\221\253\377\272\300\310\377" "\332\332\332\377\335\335\335\377\333\333\333\377\371\371\371\377\246" "\247\244\366\210\212\2055\203\377\377\377\0\3\214\216\211\232\316\317" "\315\374\372\372\372\377\203\354\354\354\377\4\353\353\353\377\351\351" "\351\377\347\347\347\377\343\343\343\377\202\341\341\341\377\10\337\337" "\337\377\335\335\335\377\333\333\333\377\331\331\331\377\327\327\327" "\377\341\341\341\377\360\360\360\377\214\216\211\331\203\377\377\377" "\0\25\210\212\205\13\213\215\210\365\367\367\367\377\362\362\362\377" "\354\354\354\377\352\352\352\377\350\350\350\377\346\346\346\377\344" "\344\344\377\342\342\342\377\340\340\340\377\335\335\335\377\333\333" "\333\377\331\331\331\377\327\327\327\377\325\325\325\377\323\323\323" "\377\321\321\321\377\362\362\362\377\277\277\275\367\210\212\205c\203" "\377\377\377\0\25\210\212\205f\265\265\263\365\374\374\374\377\350\350" "\350\377\346\346\346\377\344\344\344\377\342\342\342\377\340\340\340" "\377\336\336\336\377\334\334\334\377\332\332\332\377\330\330\330\377" "\326\326\326\377\324\324\324\377\322\322\322\377\320\320\320\377\316" "\316\316\377\326\326\326\377\371\371\371\377\214\216\211\365\210\212" "\205\12\203\377\377\377\0\15\215\217\212\334\353\353\352\377\360\360" "\360\377\342\342\342\377\340\340\340\377\336\336\336\377\334\334\334" "\377\332\332\332\377\330\330\330\377\326\326\326\377\324\324\324\377" "\322\322\322\377\320\320\320\377\204\316\316\316\377\3\353\353\353\377" "\324\324\323\375\213\214\210\227\203\377\377\377\0\3\210\212\2058\230" "\232\226\365\375\375\375\377\217\377\377\377\377\3\376\376\376\377\226" "\230\224\367\210\212\205'\203\377\377\377\0\10\214\216\211\253\266\266" "\264\375\333\333\333\377\331\331\331\377\327\327\327\377\325\325\325" "\377\323\323\323\377\321\321\321\377\212\316\316\316\377\2\265\265\263" "\377\214\216\211\312\204\377\377\377\0\1\214\215\211\324\221\210\212" "\205\377\2\210\212\205\375\210\212\205J\314\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (channel_green_24) #endif #ifdef __GNUC__ static const guint8 channel_green_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 channel_green_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1319) */ "\0\0\5\77" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\237\377\377\377\0\4Q\233\6)O\233\6|Q\236\10\266Q\236\11\341\202P\234" "\7\371\4Q\236\11\343Q\236\10\272N\233\5\202Q\233\6)\215\377\377\377\0" "\5P\235\10\207R\236\10\374i\273\33\377u\310$\377~\324+\377\202\210\336" "2\377\5~\324+\377u\310$\377i\273\33\377R\236\10\375P\235\7\222\213\377" "\377\377\0\6\200\200\0\2Q\235\12\375\204\3255\377\215\342:\377\214\342" "8\377\213\3427\377\202\212\3424\377\6\214\3427\377\216\343;\377\221\343" "A\377\215\330E\377U\237\20\376\177\177\0\4\213\377\377\377\0\5w\262\77" "\375\333\353\313\377\252\331~\377\231\326^\377\222\332L\377\202\215\337" ";\377\6\222\332M\377\233\327a\377\257\332\205\377\347\362\336\377{\265" "E\375P\237\0\20\213\377\377\377\0\5O\233\6\373\222\330M\377\342\362\322" "\377\340\357\321\377\344\361\331\377\202\365\371\361\377\6\337\355\321" "\377\312\342\263\377\262\325\221\377y\265>\377N\232\7\370P\237\0\20\213" "\377\377\377\0\15O\233\6\373\205\334/\377\365\374\355\377\365\374\356" "\377\337\365\311\377\212\326>\377\201\3157\377y\304/\377q\273(\377i\262" "!\377a\251\32\377N\232\7\370P\237\0\20\213\377\377\377\0\15O\233\6\373" "\205\334/\377\350\372\327\377\351\372\331\377\325\362\270\377\212\326" ">\377\201\3157\377y\304/\377q\273(\377i\262!\377a\251\32\377N\232\7\370" "P\237\0\20\213\377\377\377\0\15O\233\6\373\205\334/\377\334\367\301\377" "\335\367\304\377\313\357\246\377\212\326>\377\201\3157\377y\304/\377" "q\273(\377i\262!\377a\251\32\377N\232\7\370P\237\0\20\211\377\377\377" "\0\17\213\215\211{\210\212\205\377P\233\10\377\205\334/\377\320\364\253" "\377\321\364\256\377\301\354\225\377\212\326>\377\201\3157\377y\304/" "\377q\273(\377i\262!\377a\251\32\377O\231\12\377\204\213|\377\204\210" "\212\205\377\1\216\220\213\243\203\377\377\377\0\20\210\212\205\5\213" "\215\210\360\361\361\360\377R\235\12\377\205\334/\377\303\362\225\377" "\305\362\231\377\267\351\204\377\212\326>\377\201\3157\377y\304/\377" "q\273(\377i\262!\377a\251\32\377S\235\16\377\364\371\357\377\203\377" "\377\377\377\2\323\323\322\372\211\213\206t\203\377\377\377\0\25\210" "\212\205V\243\244\240\363\374\374\374\377X\237\24\377{\317'\377\246\353" "b\377\261\355v\377\254\346q\377\212\326>\377\201\3157\377y\304/\377q" "\273(\377i\262!\377_\247\27\377R\233\16\377\310\312\305\377\340\340\340" "\377\345\345\345\377\373\373\373\377\224\226\221\370\210\212\205\21\203" "\377\377\377\0\24\216\220\213\315\342\342\341\377\364\364\364\377\246" "\300\216\377U\236\20\377j\265!\377y\305-\377\177\3154\377\204\3209\377" "}\3113\377o\272%\377b\255\32\377Y\243\24\377R\234\15\377\217\257r\377" "\321\321\321\377\340\340\340\377\354\354\354\377\343\344\343\376\214" "\216\211\250\203\377\377\377\0\25\210\212\205*\217\220\214\366\374\374" "\374\377\357\357\357\377\352\352\352\377\322\332\313\377\235\275\177" "\377\200\257S\377f\244+\377T\235\20\377R\234\16\377a\241&\377w\250J\377" "\222\264s\377\300\313\267\377\332\332\332\377\335\335\335\377\333\333" "\333\377\371\371\371\377\246\247\244\366\210\212\2055\203\377\377\377" "\0\3\214\216\211\232\316\317\315\374\372\372\372\377\203\354\354\354" "\377\4\353\353\353\377\351\351\351\377\347\347\347\377\343\343\343\377" "\202\341\341\341\377\10\337\337\337\377\335\335\335\377\333\333\333\377" "\331\331\331\377\327\327\327\377\341\341\341\377\360\360\360\377\214" "\216\211\331\203\377\377\377\0\25\210\212\205\13\213\215\210\365\367" "\367\367\377\362\362\362\377\354\354\354\377\352\352\352\377\350\350" "\350\377\346\346\346\377\344\344\344\377\342\342\342\377\340\340\340" "\377\335\335\335\377\333\333\333\377\331\331\331\377\327\327\327\377" "\325\325\325\377\323\323\323\377\321\321\321\377\362\362\362\377\277" "\277\275\367\210\212\205c\203\377\377\377\0\25\210\212\205f\265\265\263" "\365\374\374\374\377\350\350\350\377\346\346\346\377\344\344\344\377" "\342\342\342\377\340\340\340\377\336\336\336\377\334\334\334\377\332" "\332\332\377\330\330\330\377\326\326\326\377\324\324\324\377\322\322" "\322\377\320\320\320\377\316\316\316\377\326\326\326\377\371\371\371" "\377\214\216\211\365\210\212\205\12\203\377\377\377\0\15\215\217\212" "\334\353\353\352\377\360\360\360\377\342\342\342\377\340\340\340\377" "\336\336\336\377\334\334\334\377\332\332\332\377\330\330\330\377\326" "\326\326\377\324\324\324\377\322\322\322\377\320\320\320\377\204\316" "\316\316\377\3\353\353\353\377\324\324\323\375\213\214\210\227\203\377" "\377\377\0\3\210\212\2058\230\232\226\365\375\375\375\377\217\377\377" "\377\377\3\376\376\376\377\226\230\224\367\210\212\205'\203\377\377\377" "\0\10\214\216\211\253\266\266\264\375\333\333\333\377\331\331\331\377" "\327\327\327\377\325\325\325\377\323\323\323\377\321\321\321\377\212" "\316\316\316\377\2\265\265\263\377\214\216\211\312\204\377\377\377\0" "\1\214\215\211\324\221\210\212\205\377\2\210\212\205\375\210\212\205" "J\314\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (channel_red_24) #endif #ifdef __GNUC__ static const guint8 channel_red_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 channel_red_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1319) */ "\0\0\5\77" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\237\377\377\377\0\4\242\0\0)\243\2\2|\252\10\10\266\251\11\11\341\202" "\246\4\4\371\4\251\10\10\343\251\10\10\272\243\1\1\202\242\0\0)\215\377" "\377\377\0\5\247\5\5\207\251\10\10\374\311@@\377\332ZZ\377\347oo\377" "\202\363\204\204\377\5\347oo\377\332ZZ\377\311@@\377\251\10\10\375\247" "\5\5\222\213\377\377\377\0\6\200\0\0\2\246\7\7\375\347uu\377\367\216" "\216\377\367\215\215\377\367\214\214\377\202\367\213\213\377\6\367\215" "\215\377\367\217\217\377\367\222\222\377\351\200\200\377\250\15\15\376" "\177\0\0\4\213\377\377\377\0\5\272<<\375\355\314\314\377\341\224\224" "\377\343\206\206\377\352\205\205\377\202\363\211\211\377\6\352\206\206" "\377\344\210\210\377\342\231\231\377\363\336\336\377\274BB\375\237\0" "\0\20\213\377\377\377\0\5\245\1\1\373\345__\377\364\325\325\377\362\324" "\324\377\362\333\333\377\202\372\361\361\377\6\360\323\323\377\350\266" "\266\377\337\226\226\377\317GG\377\246\1\1\370\237\0\0\20\213\377\377" "\377\0\15\245\1\1\373\355KK\377\375\360\360\377\375\363\363\377\372\340" "\340\377\353\203\203\377\345qq\377\340__\377\332MM\377\324::\377\316" "((\377\246\1\1\370\237\0\0\20\213\377\377\377\0\15\245\1\1\373\355KK" "\377\374\337\337\377\374\344\344\377\371\327\327\377\353\203\203\377" "\345qq\377\340__\377\332MM\377\324::\377\316((\377\246\1\1\370\237\0" "\0\20\213\377\377\377\0\15\245\1\1\373\355KK\377\372\315\315\377\372" "\326\326\377\370\315\315\377\353\203\203\377\345qq\377\340__\377\332" "MM\377\324::\377\316((\377\246\1\1\370\237\0\0\20\211\377\377\377\0\17" "\213\215\211{\210\212\205\377\244\3\3\377\355KK\377\370\273\273\377\371" "\310\310\377\367\303\303\377\353\203\203\377\345qq\377\340__\377\332" "MM\377\324::\377\316((\377\244\4\4\377\211\201|\377\204\210\212\205\377" "\1\216\220\213\243\203\377\377\377\0\20\210\212\205\5\213\215\210\360" "\361\361\360\377\246\5\5\377\355KK\377\367\251\251\377\367\271\271\377" "\365\271\271\377\353\203\203\377\345qq\377\340__\377\332MM\377\324::" "\377\316((\377\250\10\10\377\371\357\357\377\203\377\377\377\377\2\323" "\323\322\372\211\213\206t\203\377\377\377\0\25\210\212\205V\243\244\240" "\363\374\374\374\377\251\20\20\377\337<<\377\363\177\177\377\365\240" "\240\377\364\257\257\377\353\203\203\377\345qq\377\340__\377\332MM\377" "\324::\377\311##\377\245\10\10\377\313\305\305\377\340\340\340\377\345" "\345\345\377\373\373\373\377\224\226\221\370\210\212\205\21\203\377\377" "\377\0\24\216\220\213\315\342\342\341\377\364\364\364\377\303\215\215" "\377\250\13\13\377\276((\377\320JJ\377\334mm\377\344ww\377\340ii\377" "\321GG\377\303,,\377\265\31\31\377\246\10\10\377\264pp\377\321\321\321" "\377\340\340\340\377\354\354\354\377\343\344\343\376\214\216\211\250" "\203\377\377\377\0\25\210\212\205*\217\220\214\366\374\374\374\377\357" "\357\357\377\352\352\352\377\333\312\312\377\301||\377\264QQ\377\254" "++\377\246\14\14\377\246\11\11\377\252$$\377\257GG\377\270pp\377\314" "\266\266\377\332\332\332\377\335\335\335\377\333\333\333\377\371\371" "\371\377\246\247\244\366\210\212\2055\203\377\377\377\0\3\214\216\211" "\232\316\317\315\374\372\372\372\377\203\354\354\354\377\4\353\353\353" "\377\351\351\351\377\347\347\347\377\343\343\343\377\202\341\341\341" "\377\10\337\337\337\377\335\335\335\377\333\333\333\377\331\331\331\377" "\327\327\327\377\341\341\341\377\360\360\360\377\214\216\211\331\203" "\377\377\377\0\25\210\212\205\13\213\215\210\365\367\367\367\377\362" "\362\362\377\354\354\354\377\352\352\352\377\350\350\350\377\346\346" "\346\377\344\344\344\377\342\342\342\377\340\340\340\377\335\335\335" "\377\333\333\333\377\331\331\331\377\327\327\327\377\325\325\325\377" "\323\323\323\377\321\321\321\377\362\362\362\377\277\277\275\367\210" "\212\205c\203\377\377\377\0\25\210\212\205f\265\265\263\365\374\374\374" "\377\350\350\350\377\346\346\346\377\344\344\344\377\342\342\342\377" "\340\340\340\377\336\336\336\377\334\334\334\377\332\332\332\377\330" "\330\330\377\326\326\326\377\324\324\324\377\322\322\322\377\320\320" "\320\377\316\316\316\377\326\326\326\377\371\371\371\377\214\216\211" "\365\210\212\205\12\203\377\377\377\0\15\215\217\212\334\353\353\352" "\377\360\360\360\377\342\342\342\377\340\340\340\377\336\336\336\377" "\334\334\334\377\332\332\332\377\330\330\330\377\326\326\326\377\324" "\324\324\377\322\322\322\377\320\320\320\377\204\316\316\316\377\3\353" "\353\353\377\324\324\323\375\213\214\210\227\203\377\377\377\0\3\210" "\212\2058\230\232\226\365\375\375\375\377\217\377\377\377\377\3\376\376" "\376\377\226\230\224\367\210\212\205'\203\377\377\377\0\10\214\216\211" "\253\266\266\264\375\333\333\333\377\331\331\331\377\327\327\327\377" "\325\325\325\377\323\323\323\377\321\321\321\377\212\316\316\316\377" "\2\265\265\263\377\214\216\211\312\204\377\377\377\0\1\214\215\211\324" "\221\210\212\205\377\2\210\212\205\375\210\212\205J\314\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (tca_24) #endif #ifdef __GNUC__ static const guint8 tca_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 tca_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1446) */ "\0\0\5\276" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\207\377\377\377\0\2\377\0\0\1\377\0\0j\204\377\0\0p\2\377\0\0l\377\0" "\0\3\220\377\377\377\0\3\377\0\0W\377\0\0\377\346\0Z\377\204\340\0w\377" "\2\303\0\234\235\0\0\377\5\216\377\377\377\0\5\377\0\0\4\377\0\0\332" "\357\0""2\377\372\0\377\377\377\30\377\377\203\3770\377\377\3\3642\377" "\3774e\335\253\0\377\0\16\215\377\377\377\0\5\377\0\0g\377\0\0\377\316" "\0\330\377\377\3\377\377\377\324\377\377\204\377\377\377\377\2\313\305" "\377\377\0\355E\261\214\377\377\377\0\5\377\0\0\11\377\0\0\345\350\0" "J\377\376\0\377\377\377c\377\377\205\377\377\377\377\3\377\366\377\377" "*\301\331\377\0\377\0-\213\377\377\377\0\5\377\0\0d\377\0\0\377\326\0" "\345\377\377\11\377\377\377\344\377\377\206\377\377\377\377\2\306\273" "\377\377\0\343L\307\213\377\377\377\0\4\377\0\0\311\346\0F\377\377\0" "\377\377\377x\377\377\207\377\377\377\377\3\376\357\377\377\40\272\337" "\377\0\377\0@\211\377\377\377\0\10\377\0\0-\377\0\0\377\311\0\311\377" "\377\4\377\377\377\344\377\377\377\377\377\377\376\360\377\377\367\333" "\377\377\205\377\377\377\377\2\256\301\377\377\0\350D\325\211\377\377" "\377\0\4\377\0\0\221\375\0\13\377\361\0\375\377\377R\377\377\202\377" "\377\377\377\3\323\301\377\377\222\305\377\377\371\333\377\377\204\377" "\377\377\377\3\366\332\377\377\0\311\302\377\0\377\0B\207\377\377\377" "\0\5\377\0\0\10\377\0\0\356\322\0\214\377\377\0\377\377\377\274\377\377" "\202\377\377\377\377\4Y\330\377\377\3\330\372\377\267]\302\377\377\353" "\377\377\204\377\377\377\377\2T\314\375\377\0\377\6\250\207\377\377\377" "\0\13\377\0\0S\377\0\0\377\330\0\354\377\377&\377\377\377\376\377\377" "\377\377\377\377\366\331\377\377\0\377\377\377\0\270\271\377\255F\21" "\376\360@\376\377\204\377\377\377\377\3\313\275\377\377\0\322z\373\0" "\377\0\23\206\377\377\377\0\4\377\0\0\232\356\0)\377\376\0\377\377\377" "\207\377\377\202\377\377\377\377\6\252\302\377\377\0\372\377\377\0\342" "2\377e\232\0\311\271\0\322\377\377\317\377\377\203\377\377\377\377\3" "\375\345\377\377\5\307\342\377\0\377\0p\206\377\377\377\0\14\377\0\0" "\337\310\0\226\377\377\0\377\377\377\324\377\377\377\377\377\377\377" "\370\377\377\"\357\377\377\0\303\351\377\0\377\0\377\14\363\0R\315\0" "]\360\377l\377\377\204\377\377\377\377\2`\324\377\377\0\363!\331\205" "\377\377\377\0\4\377\0\0%\377\0\0\377\311\0\336\377\377!\377\377\202" "\377\377\377\377\10\341\307\377\377]\326\377\377_~\233\377\226i\0\365" "\374\3\0\222\377\0\0\330\322\25\367\377\377\367\377\377\203\377\377\377" "\377\3\262\304\377\377\0\322\203\377\0\377\0""2\204\377\377\377\0\4\377" "\0\0j\377\0\3\377\360\0\375\377\377m\377\377\202\377\377\377\377\4\222" "\306\377\377\253\271\376\377\343\36""9\377\317:\275\377\202\325\0\242" "\377\2\321\0\347\377\377\245\377\377\203\377\377\377\377\3\347\314\377" "\377\0\310\313\377\0\377\0t\204\377\377\377\0\4\377\0\0\260\337\0Z\377" "\377\0\377\377\377\271\377\377\202\377\377\377\377\5""2\350\377\377\254" "\236\360\377\304s\301\377\377\34\377\377\377I\377\377\202\377P\377\377" "\1\377\210\377\377\203\377\377\377\377\3\376\360\377\377\1\334\364\377" "\0\377\0\263\203\377\377\377\0\13\377\0\0\4\377\0\0\361\312\0\270\377" "\377\14\377\377\377\370\377\377\377\377\377\377\373\342\377\377\33\362" "\377\377\265w\312\377\317y\352\377\377\30\377\377\210\377\377\377\377" "\3N\335\377\377\0\367\32\361\0\377\0\2\202\377\377\377\0\4\377\0\0;\377" "\0\0\377\333\0\360\377\377Q\377\377\202\377\377\377\377\5\333\304\377" "\377P\333\377\377\246II\377\260Z\363\376\301L\377\377\202\347\310\377" "\377\1\364\326\377\377\205\377\377\377\377\3\246\303\377\377\0\323y\377" "\0\377\0""0\202\377\377\377\0\4\377\0\0\200\372\0\34\377\376\0\377\377" "\377\235\377\377\202\377\377\377\377\5\237\303\377\377\0\337\373\377" "\0\364\23\377\0:\375\375\0}\377\377\202\0\330\377\377\2T\277\377\377" "\373\342\377\377\204\377\377\377\377\3\340\306\377\377\0\306\303\377" "\0\377\0o\202\377\377\377\0\4\377\0\0\306\327\0\207\377\377\1\377\377" "\377\350\377\377\202\377\377\377\377\5E\337\377\377\0\277\336\377\0\376" "\1\377\0\267H\34\0\365\12\326\202\0\367\10\377\3\14\353\10\377\330\32" "B\377\377\375\377\377\203\377\377\377\377\10\374\346\377\377\0\326\361" "\377\0\377\0\255\377\377\377\0\377\0\0\17\377\0\0\374\322\0\325\377\377" "6\377\377\202\377\377\377\377\6\375\351\377\377\0\377\377\377\0\275\242" "\377\0\377\0\327\377\377\377\0\0\377\0\7\203\0\377\0\10\3\376\1\0\333" "\342\1\374\377\377\344\377\377\203\377\377\377\377\7;\340\377\377\0\372" "\21\354\0\377\0\1\377\0\0\15\377\0\0@3\0\361\3345]\377\377\202J\335\377" "\377\4""8\345\377\377\0\377\377\377\0\330J\377\0\377\0\232\205\377\377" "\377\0\3\377\0\0/9\0\353\316A\246\377\377\203J\335\377\377\7\24\365\377" "\377\0\325m\377\0\377\0*\377\377\377\0\0\0\377\1\0\0\377}\0\205\265\327" "\203\0\253\254\377\3\0\254\250\377\0\376\1\377\0\377\0]\206\377\377\377" "\0\2\0\0\377I\0\201\276\317\204\0\253\254\377\2\0\323Q\377\0\377\0i\203" "\377\377\377\0\1\0\377\0g\205\0\377\0\200\1\0\377\0\27\207\377\377\377" "\0\1\0\377\0""1\205\0\377\0\200\1\0\377\0L"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (distortion_24) #endif #ifdef __GNUC__ static const guint8 distortion_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 distortion_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1373) */ "\0\0\5u" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\2\31#!\377_\202\206\377\211\205\264\277\377\202s\234\245\377\211\205" "\264\277\377\6_\202\206\377\31#!\377_\202\206\377EbT\377Rpn\377\246\340" "\356\377\206\262\360\377\377\1\261\356\375\377\202\40+-\377\1\261\356" "\375\377\206\262\360\377\377\11\246\340\356\377Rpn\377EbT\377_\202\206" "\377\205\264\277\377Rpn\377\226\326\260\377Qqf\377{\246\255\377\205\262" "\360\377\377\1a\203\213\377\202\10\12\13\377\1a\203\213\377\205\262\360" "\377\377\4{\246\255\377Qqf\377\226\326\260\377Rpn\377\202\205\264\277" "\377\6\246\340\356\377Qqf\377\256\370\314\377~\263\226\377Mje\377\210" "\270\301\377\203\262\360\377\377\1'48\377\202\30\40\"\377\1'48\377\203" "\262\360\377\377\6\210\270\301\377Mje\377~\263\226\377\256\370\314\377" "Qqf\377\246\340\356\377\202\205\264\277\377\12\262\360\377\377{\246\255" "\377~\263\226\377\256\370\314\377\255\367\313\377u\246\214\377Omh\377" "\214\275\310\377\261\357\376\377\262\360\377\377\202u\235\247\377\12" "\262\360\377\377\261\357\376\377\214\275\310\377Omh\377u\246\214\377" "\255\367\313\377\256\370\314\377~\263\226\377{\246\255\377\262\360\377" "\377\202\205\264\277\377\202\262\360\377\377\2Mje\377\255\367\313\377" "\202\256\370\314\377\4\254\365\312\377u\247\214\377Tuj\377Rqn\377\202" "d\210\214\377\4Rqn\377Tuj\377u\247\214\377\254\365\312\377\202\256\370" "\314\377\2\255\367\313\377Mje\377\202\262\360\377\377\202\205\264\277" "\377\202\262\360\377\377\2\210\270\301\377u\246\214\377\206\256\370\314" "\377\202\227\327\261\377\206\256\370\314\377\2u\246\214\377\210\270\301" "\377\202\262\360\377\377\202\205\264\277\377\203\262\360\377\377\2Om" "h\377\254\365\312\377\214\256\370\314\377\2\254\365\312\377Omh\377\203" "\262\360\377\377\202\205\264\277\377\203\262\360\377\377\2\214\275\310" "\377u\247\214\377\214\256\370\314\377\2u\247\214\377\214\275\310\377" "\203\262\360\377\377\202\205\264\277\377\203\262\360\377\377\2\261\357" "\376\377Tuj\377\214\256\370\314\377\2Tuj\377\261\357\376\377\203\262" "\360\377\377\202\205\264\277\377\5\261\356\375\377a\203\213\377'48\377" "\262\360\377\377Rqn\377\214\256\370\314\377\15Rqn\377\262\360\377\377" "!,/\377o\226\237\377\262\360\377\377\205\264\277\377s\234\245\377\40" "+-\377\10\12\13\377\30\40\"\377u\235\247\377b\206\212\377\227\327\261" "\377\212\256\370\314\377\16\227\327\261\377d\210\214\377z\245\257\377" "\25\34\36\377\12\15\17\377*9<\377~\253\265\377s\234\245\377\40+-\377" "\10\12\13\377\30\40\"\377u\235\247\377b\206\212\377\227\327\261\377\212" "\256\370\314\377\15\227\327\261\377d\210\214\377u\235\247\377\25\34\36" "\377\12\16\17\377*9<\377~\253\265\377\205\264\277\377\261\356\375\377" "a\203\213\377'48\377\262\360\377\377Rqn\377\214\256\370\314\377\5Rqn" "\377\262\360\377\377!-0\377o\226\237\377\262\360\377\377\202\205\264" "\277\377\203\262\360\377\377\2\261\357\376\377Tuj\377\214\256\370\314" "\377\2Tuj\377\261\357\376\377\203\262\360\377\377\202\205\264\277\377" "\203\262\360\377\377\2\214\275\310\377u\247\214\377\214\256\370\314\377" "\2u\247\214\377\214\275\310\377\203\262\360\377\377\202\205\264\277\377" "\203\262\360\377\377\2Omh\377\254\365\312\377\214\256\370\314\377\2\254" "\365\312\377Omh\377\203\262\360\377\377\202\205\264\277\377\202\262\360" "\377\377\2\210\270\301\377u\246\214\377\206\256\370\314\377\202\227\327" "\261\377\206\256\370\314\377\2u\246\214\377\210\270\301\377\202\262\360" "\377\377\202\205\264\277\377\202\262\360\377\377\2Mje\377\255\367\313" "\377\202\256\370\314\377\4\254\365\312\377u\247\214\377Tuj\377Rqn\377" "\202d\210\214\377\4Rqn\377Tuj\377u\247\214\377\254\365\312\377\202\256" "\370\314\377\2\255\367\313\377Mje\377\202\262\360\377\377\202\205\264" "\277\377\12\262\360\377\377{\246\255\377~\263\226\377\256\370\314\377" "\255\367\313\377u\246\214\377Omh\377\214\275\310\377\261\357\376\377" "\262\360\377\377\202u\235\247\377\12\262\360\377\377\261\357\376\377" "\214\275\310\377Omh\377u\246\214\377\255\367\313\377\256\370\314\377" "~\263\226\377{\246\255\377\262\360\377\377\202\205\264\277\377\6\246" "\340\356\377Qqf\377\256\370\314\377~\263\226\377Mje\377\210\270\301\377" "\203\262\360\377\377\1'48\377\202\30\40\"\377\1'48\377\203\262\360\377" "\377\6\210\270\301\377Mje\377~\263\226\377\256\370\314\377Qqf\377\246" "\340\356\377\202\205\264\277\377\4Rpn\377\226\326\260\377Qqf\377{\246" "\255\377\205\262\360\377\377\1a\203\213\377\202\10\12\13\377\1a\203\213" "\377\205\262\360\377\377\11{\246\255\377Qqf\377\226\326\260\377Rpn\377" "\205\264\277\377_\202\206\377EbT\377Rpn\377\246\340\356\377\206\262\360" "\377\377\1\261\356\375\377\202\40+-\377\1\261\356\375\377\206\262\360" "\377\377\6\246\340\356\377Rpn\377EbT\377_\202\206\377\31#!\377_\202\206" "\377\211\205\264\277\377\202s\234\245\377\211\205\264\277\377\2_\202" "\206\377\31#!\377"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (vignetting_24) #endif #ifdef __GNUC__ static const guint8 vignetting_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 vignetting_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (1726) */ "\0\0\6\326" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\310\377\377\377\0\13\0\0\0\10\40\0\0\271#\0\0\314&\0\0\323)\0\0\331" "*\0\0\336,\0\0\343-\0\0\350\2\25\0\366\0""3\0\351\0""5\0\352\202\0""6" "\0\353F\0""6\0\351\0""4\0\350\0\26\2\366\0\0.\347\0\0.\341\0\0,\334\0" "\0)\325\0\0&\317\0\0#\310\0\0\36\266\0\0\0\13\0\0\0!#\0\0\3717\0\0\377" "F\0\0\377T\0\0\377a\0\0\377l\0\0\377s\0\0\377\2.\0\372\0\207\0\377\0" "\215\0\377\0\220\0\377\0\222\0\377\0\220\0\377\0\215\0\377\0""1\2\372" "\0\0|\377\0\0x\377\0\0m\377\0\0a\377\0\0T\377\0\0F\377\0\0*\371\0\0\0" ")\0\0\0.)\0\0\373F\0\0\377V\0\0\377e\0\0\377s\0\0\377\200\0\0\377\210" "\0\0\377\2""6\0\372\0\236\0\377\0\244\0\377\0\250\0\377\0\251\0\377\0" "\250\0\377\0\244\0\377\0""9\2\371\0\0\221\377\0\0\214\377\0\0\201\377" "\0\0t\377\0\0f\377\0\0W\377\0\0""2\373\0\0\0""4\0\0\0;1\0\0\375U\0\0" "\377f\0\0\377v\0\0\377\205\0\0\377\223\0\0\377\233\0\0\377\3=\0\371\0" "\257\0\377\0\262\0\377\203\0\265\0\377\32\0\262\0\377\0\77\3\371\0\0" "\245\377\0\0\240\377\0\0\223\377\0\0\205\377\0\0v\377\0\0f\377\0\0<\375" "\0\0\0@\3\0\0I9\0\0\377b\0\0\377s\0\0\377\204\0\0\377\225\0\0\377\244" "\0\0\377\251\0\0\377\3A\0\371\0\272\0\377\0\276\0\377\0\301\0\377\0\302" "\0\377\0\301\0\377\0\276\0\377\0C\3\370\202\0\0\256\377\177\0\0\245\377" "\0\0\225\377\0\0\205\377\0\0t\377\0\0G\377\0\0\7N\24\0\0bD\0\0\377m\0" "\0\377\177\0\0\377\221\0\0\377\243\0\0\377\256\0\0\377\260\0\0\377\3" "E\0\370\0\304\0\377\0\312\0\377\0\315\0\377\0\316\0\377\0\315\0\377\0" "\312\0\377\0G\3\370\0\0\270\377\0\0\267\377\0\0\257\377\0\0\244\377\0" "\0\222\377\0\0\200\377\0\0U\377\0\0\30g\35\0\0xP\0\0\377v\0\0\377\211" "\0\0\377\234\0\0\377\254\0\0\377\265\0\0\377\270\0\0\377\3H\0\370\0\316" "\0\377\0\325\0\377\0\331\0\377\0\332\0\377\0\331\0\377\0\325\0\377\0" "K\3\370\0\0\301\377\0\0\277\377\0\0\266\377\0\0\254\377\0\0\235\377\0" "\0\212\377\0\0a\377\0\0\37}\"\0\0\216Z\0\0\377|\0\0\377\220\0\0\377\244" "\0\0\377\261\0\0\377\273\0\0\377\276\0\0\377\3K\0\370\0\327\0\377\0\337" "\0\377\0\345\0\377\0\347\0\377\0\345\0\377\0\337\0\377\0N\3\367\0\0\310" "\377\0\0\305\377\0\0\273\377\0\0\261\377\0\0\245\377\0\0\221\377\0\0" "m\377\0\0#\217$\0\0\242c\0\0\377\200\0\0\377\225\0\0\377\251\0\0\377" "\263\0\0\377\276\0\0\377\303\0\0\377\3L\0\370\0\335\0\377\0\347\0\377" "\0\357\0\377\0\363\0\377\0\357\0\377\0\347\0\377\0P\3\367\0\0\314\377" "\0\0\311\377\0\0\276\377\0\0\264\377\0\0\251\377\0\0\225\377\0\0v\377" "\0\0%\240$\0\0\241d\0\0\377\201\0\0\377\226\0\0\377\252\0\0\377\264\0" "\0\377\277\0\0\377\304\0\0\377\3M\0\367\0\337\0\377\0\352\0\377\0\365" "\0\377\0\377\0\377\0\365\0\377\0\352\0\377\0Q\3\367\0\0\316\377\0\0\312" "\377\0\0\277\377\0\0\265\377\0\0\252\377\0\0\227\377\0\0w\377\0\0$\240" "\"\0\0\216o]\0\0\377\200\0\0\377\225\0\0\377\251\0\0\377\263\0\0\377" "\276\0\0\377\303\0\0\377\3L\0\370\0\335\0\377\0\347\0\377\0\357\0\377" "\0\363\0\377\0\357\0\377\0\347\0\377\0P\3\367\0\0\314\377\0\0\311\377" "\0\0\276\377\0\0\264\377\0\0\251\377\0\0\225\377\0\0p\377\0\0$\217\35" "\0\0xT\0\0\377|\0\0\377\220\0\0\377\244\0\0\377\261\0\0\377\273\0\0\377" "\276\0\0\377\3K\0\370\0\327\0\377\0\337\0\377\0\344\0\377\0\347\0\377" "\0\345\0\377\0\337\0\377\0N\3\367\0\0\310\377\0\0\305\377\0\0\273\377" "\0\0\261\377\0\0\245\377\0\0\221\377\0\0g\377\0\0\37{\24\0\0aK\0\0\377" "v\0\0\377\211\0\0\377\234\0\0\377\254\0\0\377\265\0\0\377\270\0\0\377" "\3H\0\370\0\316\0\377\0\325\0\377\0\331\0\377\0\332\0\377\0\331\0\377" "\0\325\0\377\0K\3\370\0\0\301\377\0\0\277\377\0\0\266\377\0\0\254\377" "\0\0\235\377\0\0\212\377\0\0\\\377\0\0\30g\3\0\0I@\0\0\377l\0\0\377\177" "\0\0\377\221\0\0\377\243\0\0\377\256\0\0\377\260\0\0\377\3E\0\370\0\304" "\0\377\0\312\0\377\0\315\0\377\0\316\0\377\0\315\0\377\0\312\0\377\0" "G\3\370\0\0\270\377\0\0\267\377\0\0\257\377\0\0\244\377\0\0\222\377\0" "\0\200\377\0\0P\377\0\0\11Q\0\0\0;8\0\0\374b\0\0\377s\0\0\377\204\0\0" "\377\224\0\0\377\244\0\0\377\251\0\0\377\3A\0\371\0\272\0\377\0\276\0" "\377\0\301\0\377\0\302\0\377\0\301\0\377\0\276\0\377\0C\3\370\202\0\0" "\256\377B\0\0\245\377\0\0\225\377\0\0\205\377\0\0t\377\0\0D\375\0\0\0" "@\0\0\0.0\0\0\372U\0\0\377f\0\0\377u\0\0\377\205\0\0\377\223\0\0\377" "\233\0\0\377\3=\0\371\0\256\0\377\0\262\0\377\0\264\0\377\0\265\0\377" "\0\264\0\377\0\262\0\377\0\77\3\371\0\0\245\377\0\0\240\377\0\0\223\377" "\0\0\205\377\0\0v\377\0\0f\377\0\0:\373\0\0\0""5\0\0\0\")\0\0\370F\0" "\0\377V\0\0\377e\0\0\377s\0\0\377\200\0\0\377\210\0\0\377\2""6\0\372" "\0\236\0\377\0\244\0\377\0\250\0\377\0\251\0\377\0\250\0\377\0\244\0" "\377\0""9\2\371\0\0\221\377\0\0\214\377\0\0\200\377\0\0t\377\0\0f\377" "\0\0W\377\0\0""1\370\0\0\0)\0\0\0\12\36\0\0\310%\0\0\323'\0\0\327+\0" "\0\333.\0\0\3371\0\0\3424\0\0\346\2\26\0\366\0""9\0\347\0:\0\346\0;\0" "\346\202\0;\0\345\12\0:\0\345\0\30\2\365\0\0""7\345\0\0""5\340\0\0""1" "\335\0\0.\331\0\0)\325\0\0&\321\0\0\37\310\0\0\0\15\310\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (geometry_24) #endif #ifdef __GNUC__ static const guint8 geometry_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 geometry_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (2081) */ "\0\0\10""9" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\202\377\377\377\0\24(=S\7(=Ss(=S\306(=S\332(=S\353(=S\342(=S\320(=S" "\277(=S\255(=S\235(=S\244(=S\271(=S\315(=S\342(=S\366(=S\370(=S\344(" "=S\315(=Sd(=S\4\203\377\377\377\0\17(=S7(=S\341(=S\377(\77V\334)D]\277" ")Ic\255)Ga\264)D^\302(BZ\321(@W\340(\77U\355(\77V\350(AY\330(D]\311)" "Ga\272\202)Kf\253#)F`\274(@W\340(=S\377(=S\331(=S\30\377\377\377\0(=" "S\2(=S\317(>U\354,e\213mB\275\3775\242\336\377Y\321\357\377\204\336\364" "\377\232\331\362\377\220\320\357\377\203\304\352\377u\302\352\377r\301" "\351\377r\277\351\377p\273\347\377l\261\344\377c\204\324\377I7\271\377" "33\270\37723\263\3704*[}\177(=S\375#6J\267\377\377\377\0(=S^(=S\377*" "Xy\206\207\325\377K\356\371\377\276\202\361\372\377\310\25\360\372\377" "\304\354\370\377\271\347\366\376\257\325\347\360\255\335\363\377\227" "\326\361\377\214\316\356\377\201\305\353\377v\271\347\377j\252\341\377" "^q\315\377B3\270\3772\30Vrq\20""19\346\34""5F\374(=S\377(=S3(=S\243(" ">T\362N\272\364;\350\367\377\257\202\361\372\377\310\"\353\366\373\302" "\276\313\317\335\240\260\263\361\220\242\244\366\203\232\231\366v\212" "\216\363w\220\226\321\217\257\300\224\260\343\375e\230\333\377Su\317" "\377DF\277\3776\35j\223W\21""79\356.q>\377\23""3=\343(=S\377(=Sx(=S\315" "(C[\316\307\354\377x\361\372\377\310\360\372\377\304\334\350\356\306" "\245\263\265\365\227\265\252\376\215\254\242\377w\224\220\377K~k\377" "9\200[\377+iM\377\35IA\367\22""5\77\325)\222\313\77\2023\270\3772&\17" "5=\334,{E\377&_;\377\23@O\244(\77V\351(=S\257(=S\355)Jd\260\337\364\377" "\233\356\371\377\276\324\341\347\305\234\256\256\371\224\265\251\377" "\207\233\240\377\247\277\314\377\270\322\340\377\207\242\257\377\"CJ" "\377\35dC\377\"iD\377\34R=\376\17""08\353\35i\221X#}\256I\23A=\3550\204" "G\377!S:\371\26Omu)E^\304(=S\334(=S\360)Kg\255\350\367\377\256\346\365" "\376\255\230\250\253\362\215\272\244\377\223\246\252\377\331\360\375" "\377\203\327\361\377\377\24\302\334\352\377#DK\377!hC\377!a@\377\37S" ";\377\20""16\362\21:I\261!jE\3751\204F\377\36P:\365\30Uvl)Hb\271(=S\346" "(=S\360*Lg\256\344\366\377\245\254\276\304\312\206\254\234\373}\227\225" "\377\315\342\355\377\202\327\361\377\377E\322\354\372\377\263\315\333" "\377\327\361\377\377~\231\246\377\35RB\377!a@\377!Y<\377\36O9\377\16" "-4\374)\200J\3771\202E\377\35K:\362\32\\\200d)Ic\264(=S\354(=S\360)J" "e\256\327\361\377\216}\221\225\356z\273\222\377m\205\211\377\326\357" "\375\377\325\357\375\377\313\345\363\377\36""8F\377,FT\377Ys\201\377" "\265\317\335\377#JI\377!a@\377!Y<\377\40Q9\377\33G8\377\22""97\3770\177" "D\377\26=9\354\"{\252K)Je\256(=S\363(=S\360)Id\257\305\350\374yh\201" "\202\361g\253\201\377Xuz\377\307\341\357\377\306\340\356\377\232\264" "\302\377\12$2\377\34""6D\377%\77M\377\276\330\346\377!CH\377\"_\77\377" "!W<\377\40Q9\377\36O8\377\25<6\377!W<\377\20""2:\3433\270\3772)Kf\251" "(=S\371(=S\356)Hb\263\207\263\312wWzs\361X\243q\3771RX\377\202\270\322" "\340\377\30\266\320\336\377A[i\377\24.<\377g\201\217\377\235\267\305" "\377!GF\377\"]=\377!V:\377\40Q9\377\36O8\377\34I8\377\20""24\377\23\77" "N\2473\270\3772)Kf\251(=S\373(=S\313(BY\323U\217\256gCka\360E\224]\377" "!IH\377\232\264\302\377\251\303\321\377\202\250\302\320\377\25\244\276" "\314\377\245\277\315\377b}\212\377\34K>\377\"[<\377!T9\377\40Q9\377\36" "O8\377\35K8\377\17/4\377\24CU\2273\270\3772(C\\\312(=S\324(=S\230(=T" "\371B\261\355;(IL\3533\202H\377'oC\3773QZ\377\202\232\264\302\377[\231" "\263\301\377\230\262\300\377\210\242\260\377\34;B\377#]<\377#W:\377!" "T9\377\40Q9\377\36O8\377\31D7\377\30C8\377\21""6\77\3203\266\3743(>T" "\362(=S\243(=Sd(=S\377-w\244W\22""7@\320,p@\377.zD\377#ZB\377)GO\377" "i\203\221\377w\221\237\377Ys\200\377\32""8@\377!U;\377%Z:\377#W:\377" "!T9\377\40Q9\377\36O8\377\21""35\376)h>\377\20""39\350+w\245T(=S\377" "(=Sq(=S1(=S\377+Z|\201\33a\207^\27A9\3600t\77\377.s@\377&d=\377\37L=" "\377\35C@\377\35L:\377%\\;\377&];\377%Z:\377#W:\377!T9\377\40Q9\377\27" "\77""7\374\17""1:\343\26=9\360\40P:\375\31""7E\344(=S\377(=S@(=S\5(=" "S\350(@X\3371\247\3478\21""8B\305\21""39\347\21""29\346\20""29\346\20" "29\347\20""18\352\17""05\367$Y:\377&];\377%Z:\377#W:\377!T9\377\34G8" "\377\17""0:\3370\255\3605\32_\202b\22:E\275$;N\366';P\370%9M\16\377\377" "\377\0(=SS(=S\377)Ol\237\2043\270\3772\12""0\255\3605\17""0>\317\37P" ";\361'`<\377&];\377%Z:\377#W:\377\33G8\375\16/8\350%\206\272D\2023\270" "\3772\3*Ts\221(=S\377(=Sc\203\377\377\377\0\3(=S\254(=S\373-t\240Z\202" "3\270\3772\12""2\265\3733\20""6C\302\36O:\366)c<\377'`<\377&];\377$Y" ":\377\26;7\366\20""5A\306+\232\326<\2023\270\3772\3.~\256Q(=T\370(=S" "\273\204\377\377\377\0\15(=S\27(=S\355(@X\340-x\245V3\270\3772\24Ie~" "\15+4\371\35K8\377$X:\377\35K9\376\24;8\362\17""08\354\25Ib\204\2033" "\270\3772\4.~\256Q(AY\331(=S\364(=S\40\205\377\377\377\0\12(=SH(=S\356" "(=T\371*Tt\2173\266\3743&\210\274D\30KW\230\21""8A\310\24DY\221\37p\233" "R\2043\270\3772\4*Xy\206(>T\366(=S\362(=SS\207\377\377\377\0\6(=S\33" "(=S\273(=S\377)D\\\312+c\211p/\217\305D\2043\270\3772\6""0\223\313B," "e\213m)F_\302(=S\377(=S\302(=S\40\211\377\377\377\0\3(=S\1(=So(=S\367" "\202(=S\377\4(\77V\346)G`\273)Ga\270(@V\343\202(=S\377\3(=S\371(=Sv(" "=S\2\214\377\377\377\0\12(=S\20(=SE(=Sz(=S\257(=S\344(=S\347(=S\261(" "=S|(=SG(=S\22\207\377\377\377\0"}; /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ #ifdef __SUNPRO_C #pragma align 4 (hueadjust_24) #endif #ifdef __GNUC__ static const guint8 hueadjust_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 hueadjust_24[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (2309) */ "\0\0\11\35" /* pixdata_type (0x2010002) */ "\2\1\0\2" /* rowstride (96) */ "\0\0\0`" /* width (24) */ "\0\0\0\30" /* height (24) */ "\0\0\0\30" /* pixel_data: */ "\177\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221" "\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377" "\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0" "\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203" "\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377" "\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377" "\377\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10" "\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377" "\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377" "A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\377\310\0" "\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377" ",\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377" "\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15" "\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377" "\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225" "\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0" "Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377" "\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0" "\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377" "\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377" "\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377" "[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A" "\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\177\377\310" "\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0" "\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332" "\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377" "\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377" "\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377" "\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377" "\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377" "\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0" "\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377" "\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377" "\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377" "[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A" "\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377" "\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377," "\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13" "\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0" "\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255" "\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377" "\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245" "\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253" "\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377" "\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377" "\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\177\0\366\10\377\0" "\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0" "\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377" "\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377\377" "\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377" "\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0" "\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377" "\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0" "\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377" "\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245" "\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253" "\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377" "\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377" "\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301" "=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377" "\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377" "\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343" "\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377" "\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\377" "3\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'" "\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377" "\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377" "`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377" "\0$\332\377\13\0\377\3773\0\377\377\177[\0\377\377\203\0\377\377\253" "\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377" "\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377" "\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301" "=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377" "\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377" "\\\0\377\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343" "\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377" "\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\377" "3\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'" "\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377\255\0\377" "\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377" "`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377" "\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377" "\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221" "\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377" "\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0" "\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203" "\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377" "\377v\0\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377" "\377\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10" "\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377" "\377[\0\377\377\203\0\377\377\253\0\377\377\377\15\0\377\377'\0\377\377" "A\0\377\377\\\0\377D\377v\0\377\377\221\0\377\377\255\0\377\377\310\0" "\377\377\343\0\377\377\377\0\377\313\377\0\377\225\377\0\377`\377\0\377" ",\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0Y\245\377\0$\332\377" "\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377\253\0\377\377\377\15" "\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0\377\377\221\0\377\377" "\255\0\377\377\310\0\377\377\343\0\377\377\377\0\377\313\377\0\377\225" "\377\0\377`\377\0\377,\377\0\377\0\366\10\377\0\301=\377\0\216p\377\0" "Y\245\377\0$\332\377\13\0\377\3773\0\377\377[\0\377\377\203\0\377\377" "\253\0\377\377\377\15\0\377\377'\0\377\377A\0\377\377\\\0\377\377v\0" "\377\377\221\0\377\377\255\0\377\377\310\0\377\377\343\0\377\377\377" "\0\377\313\377\0\377\225\377\0\377`\377\0\377,\377\0\377\0\366\10\377" "\0\301=\377\0\216p\377\0Y\245\377\0$\332\377\13\0\377\3773\0\377\377" "[\0\377\377\203\0\377\377\253\0\377\377"}; ufraw-0.19.2/icons/color-corrections-24.png0000644000175000017500000000142211335734227015370 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<IDATH‰µ•OH”A‡ŸÏ]Í º¤H uˆ"L êRÐ¥[—ìTÅK‡Àºµ‡"J #,¢NÅæ¥“A÷ÂZ “ ²èIšÊÓáûÖÝÖv#šeà›yçý=3ó¾ïl¤ò?[MõK£ D&=ó€è8DéêÁE¾ Qp¸ÿ÷h0 QgÑ´št-}Æ}HI+;•KÊëÀ6©\P6%¾”ï‰mQéÈ/,RTú‚áe@™ŸŸÇ/ðÎÔ.µU]a"zFùø}Pv,X‚|QƇ†°¡÷­FŸ·iui£O”ŸÊeK¨W ÉÎíÏB¼´·×B»‘w»®4—j•oW<(ˆŽ…€–‹[‡Ê·jWææ°±±p*\½Z˜ÎÇäd©^WrQᜣ¹µõ÷Dl©‡±Ñç°­­Lš¶£/‡AŽfò».»ß‚¬Œ¿ëëQgTýñC'&ÂSt• §žŠ[ÀðØß,2>MM°u+tvþQ!2AŸÈå5È.ý.c]ê´==…p¤R:3£ºKåY±Vù Ÿ›Åµk‘gà ¦Ó¨.ÚÛU?©u*ǪɢõÊt6›œ¢ ÙÇ •B}¯êȈæwX啲ª@¤ô—`M êÛ’½¡² \TÒÔ(·“ᨲ˜Í&×Fê›Dø³zDeNyšød•Ô2j“¡ý¼29;‹¹\œ¾zÔø±«UÉ)§K|î…°Qy,¼™œ¨^Ù¯<l”½…+áZ`›R𖻢íÆ/i¾Ê[&fÊÄn ß\)ÈÊ”d5€HYW:_æoÑ© µ¹lÉKg“Çîÿµ_w2SHÄI0IEND®B`‚ufraw-0.19.2/icons/hueadjust-24.png0000644000175000017500000000033011335734227013713 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<UIDATH‰íÍ!€0ƒáŸ)Âv žìþ~o8$÷˜bàÁµIÓºo¨3x`yìÚ·ÿ $Àhÿ,#X„cok‘é lðªãç @€|“r Ùƒ©·ÕªrÎ>çUVôÿ‚ Âü~mø²aÖ0­˜ÔL*&o_[öoܪU*UÔõzÙûzéòÛlé[º ÝvÛ¿xÿcÂEÃwgL_a‰c,0ÃÛ ­œ›¢‰5÷èð³Öå÷_³ÃV¸Å'|ØâMÂñ”úNP’ÌÅí+L‘bÍÙ€9—y!iJ®j,ŽçAI2G5“FMS˜ÛÌt³P0¶õ°ÆQjXΩCõ² ™ˆšEŒM±‚I”DöÞcQ3[¦S.qTŽéIv='ˆÌüd¢ ”Ó‹tÀùQh8 ¢ÑÍFÜ Ê$‘Ýà <„ÜÙyšp> œ…ï“B°&0æñpÜE[4òPÕã$gA¾H5g!fR8ÙŒ=¨x‘«~ôpHwAŠ8@}Z#W‘òR¨ä=ã4„•ýP¿P5>ËRÏÇM8øRȪý‹µ {vñ?+ü/£Ç®SËå:jÚˆÈ߆¨.”÷ÙžmŒ]ÄíUZóç:ò7Ñÿù¾‡Q³°§»¨S U}!ï!î°¹J×üq‡{›eVö°‹ÉçïÁN°çBÞˆ¶ÂÍeêøô@wOSž$Uü¶S¹/–ôŒà>¼\ãÆpØ­°êY_'Ü>ÐßÒŒ'Ɉ1-^yȯ=ž¢71Þ÷¸KXmèožÔ¶A7*{ù4Ýf\Eö*b$YwX%C~{7œN)‘š!š†äw'~òQ%Çç&ïïïœðËÕð±Ùut;ÚÝ0nÖøPýÿÑÿ·ë¤¹ý¤8ãV„IEND®B`‚ufraw-0.19.2/icons/interpolation-24.png0000644000175000017500000000066511335734227014621 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<2IDATH‰Ý–1nƒ@DßDQ"åL––*ÇAò¹ÜX 7ÈÜPq‚¤`Rd-0»°ëÂE²ˆnøƒþÌCÈ6ÇÆQ*I2I*œž¹sÍ#êÅÇþÍÁ‹Îë†÷ÅŸ¡ŸÏáÇ3ð“ØX…Á)è? îr ˜–a0]b€=líÚ­žò¾6M¿ÚôÅ<5>Ç ¹ 蛂Ö2d§W€®ne°e—z¥ÿ5&€w¾åzZ¼kE~ŸAäC%2{Ôâ[äIÙmú¿íFs.>îæž/j¼{U–®¾- ò×¾½êu·/ÓOàùÒ=¶Sú/‡Ö¼‹f-…IEND®B`‚ufraw-0.19.2/icons/exif.svg0000644000175000017500000001657711335734227012466 00000000000000 image/svg+xml EXIF ufraw-0.19.2/icons/channel-green-24.png0000644000175000017500000000174611335734227014441 00000000000000‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<xIDATH‰Õ•]h[eÇç=_iš~¬iLlqeMEÝÂ,ƒ^§‚óB†CDƒ UX7\¥«ŠõB„!~Ì‹¡C/†ìbÓZF¶è¦Õ2VúÝjIzÎIrÎûz±š’deÌ ÿððÂóþ¿÷yžóòjJ)þKÍ6ŸüÀî—ð”ÐÅc  ()šyP—ƒ 8¯£øòùÒåFZ£ vÔò†ÐÈt÷tê‘h -›pØÀqJ¸ÅÅ‚ËÒìu)•:~r¯·ÀÇ5‘í WÞ> Z¢& ‰B¡èÍ@ÇÂ_58nR¥¯þmŽ*½—¨G=tHɾ®­<wˆh±ÛëBlôÀÆòâD‹}ôºC<“|Ÿ¾øV•½H=¯†3¸²tN~sýˆx"y( ¢=” _¼ÊŸ«×X,ÌðîÙçøy0ëû4rÁ¸Fg8häKÓÿc®[Âs=<·Tfj (È<'X¾Ý§w(y4tœàÆÝ¼ùö±WƒÀ]kë+Дn?ò×kËãc5y˲>©ŒOŒ™º®g^|á%~üü(p³E£)À0 ì?H«ÕVÍår—*_Ÿ>•]_ÁîDwBom`‰0NÁc66E«ØD%¨Ô5—2@IÈe!Oaš&ñxœïÏž‘J©k–e >¾3ây»6pò–çÏk‹`…lLÝÄ÷}Ç¡PXÅuÊ”J%vlÚG‹}óضÍâÒ¢ò<ï«áÌÈr0>1–¶-»?™LQ(J?ËÉLΞb6Ÿc~õ 7J¿#•$f&ˆÛ‘jïçÁî!’±ûÑuJ¥B4åÛïN{¾ï¿k†lÆÁÁ–”’ BìØÌ®ö—‘R"¥Ä÷}¤”·Z#k¢\.‡q]—ù…¹ÙáÌÈd0>1Öªëúžþ-iÝó¼ºÿF ÷R©SS“žïûǪ¿µîIoÀ4MVVV4‹P(„mÛL]øI'j¦i¾²mÛ£áb±H¹\Þ°éZuuu1=ý›TR}<œqª€ñ‰±ímmí÷ttt"„ ‹Õýo'¥Ÿ}ñi9Á;kó†a{ïí ÍÌÌ4ìùF´°0‡ã¬^ÎŒüZ@Ñ1—sÙ;:ùI`t}²á“y·T÷Eû_þ@Íúbt¶®IEND®B`‚ufraw-0.19.2/icons/white-balance.svg0000644000175000017500000001150611335734227014221 00000000000000 image/svg+xml ufraw-0.19.2/icons/film.svg0000644000175000017500000001554111335734227012450 00000000000000 image/svg+xml UFRaw Film Udi Fuchs UFRaw ufraw-0.19.2/icons/exif-24.png0000644000175000017500000000072711335734227012664 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs|4k¡tEXtSoftwarewww.inkscape.org›î<TIDATH‰íÕ1k”A‡ñßH ‘| !  m !…MªDl‹k-ÄRµ ‚HQ±³AÐF8ÁBA´%6 ¨ ño³ox›³òŠ“ ;»ÌÌ3;˰•Ä8eÇX³ÿ®ã .5 ^c/ÒÞiØÖ`­gïÆ œkû`ØÅN~‹¶Û€ Ð&9‰©Ú$Ou”ªZÀÙø%nâ%¹WUóà<Žàx’Ū:S½Øç¸S½ÃYÃIlàs’¯Uõ·ªj–p-ÉǪ4ØßìEüÀj—´èä"~á.^%¹]UsXÆS\ùK»/·–/ãñ(ÀëMUÕÌãã ÞŽœÆw|Áô(ÀUüćªº€XÁQÜÁê:4ð>Éf+lªû“[¥³=çoø„x“d½ªv¶[¬´âf’ «jûð,Éï>q 0.™üIþk$¬-[%_†IEND®B`‚ufraw-0.19.2/icons/unlock.svg0000644000175000017500000003300011341013025012761 00000000000000 image/svg+xml ufraw-0.19.2/icons/rectify.svg0000644000175000017500000002324711335734227013170 00000000000000 image/svg+xml ufraw-0.19.2/icons/ufraw.png0000644000175000017500000000356311335734227012633 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ ¢´vsIDAThÞí—[l\GÆ¿¹œËnìÝ=»Ùõ®ëÄ©;®‘b{‰ZSLHhlBT N#¡¸¥ ¡V¨¡m¨*^€¨TñÐñPAó’ÐR HijÒ¸4$M“4q.ª]'¾­ìÅ>×™áaw]ƒJšTiÒhçhÏåÿÍ7ó9@5jÔ¨Q£Fÿ[ÈÇuãƒÿÊ_+õ˜¡ðÊÑ‘¹>RÊD{¶ÕïìÎÞ½pË øÆƒ÷÷^™˜î1CæÚtCzg,¯OÄãH¥’H§ÓH.OLiœ?ãîϺ³w•nï^:C·nÛþç©™¹{¬X RJ¬ln¡!ÃDC: Ã4D°¢© ©dâx¬>¼½ë½ïÞè³ÙÍ0zñ⺷όü´T*!ãÊä$2™ NŸ>…Üì,V4݆}û÷Á0 ø~€‘‘󙹫…‡6oþ\|÷#}áw/º7ÝWöý¶nz&wç¼í­QжPÎV+ Ž€„)c:%DišFc~©T¬;uúl÷ÂÂgð=Œ1 yPJ‰Fðæ±c¸£ýLNNaäü9<øÀ×®k}º'»qûŽAqÃþúÊÞÐëoœ°ý`„öBCœs0ÆÀ9¥š¦MÓ@)¥tñ?Î9! ”‚±²¹„8ŽÛ¶aÛ6òù<ÆÇÇ‘J¥ ”‚ï{hlXÞñýÝO¼sCþî·îs<ñ‹@"Ãy¹àj‘º®/þV‹/M ë!‹çWû”’ʹúQ@¹oÛ6J¥"r¹Y¬Ïve7÷o9þ‘üò'Oj:4üÜäÌÜ ãúŠ…"‚ ¡€¦k`”€kº¦## aY]b‘("‘âñ8b±4Mƒa‹îTEW¬ö !‹Ç„(PJߨï#/ÅãÖðúõwÊëвjåsT3¿¾¢é6ÄãqŒ½‡?Ó4‹F@)Á‚íÂ^(Ç·Zb›‚„‚‚RåF@P©G"‘@"ž@*™D&“A:“F:±ÄÉꔫŠ`ŒRRqˆœ¥”üZãäÙ›úç>T@G{ûÞÕ­­;8çàœCJ…׆†°°`ò,0J`;Š¥yëÈ]¹dvJH ()AECC h^ÙŒU«V¡¹¹Ñh´²¶8£ ”/ºG)NÉË!Nü©}o} €Á/Õåmñ+ÂùWã„sޱ±÷pöÜ\×…a™!!à8Nå*²(„üKñÕNÙ€ ¥¤RPRǤ, M7¤±fM Z[[ÑÞ¾`¬<˜Õp „(ư—2ý‘M›6M~à"þöý;zŠŽ|ÜöåV©  yxžÛq091‰kùk`ŒWæly!J)á¹îb1ÕÔ©6!”R0M†¡ƒq)%Ç…PeÉ–e•ÓÊu‡Ð¶f5:::ÐÙ٠˲À9­<›ÎšÛµñž¾ÿñ=°û{5OÌÌ> ¤Üå ÕJ+jÛ6¦¦¦1=3ƒË—¯@ Ó„ã8åÿï.Tœt]G8¼ †i@×u0J‘Ï +Î@)Ä- ºa@)%|σçyhZÑ„lw7zzîB2™çÜ5túÍ}_xþC_dÇ$¿yáÅl®XºWHµEJ™%”2Î9ÆÇ/ãðá׳,d°0octt¬¹®s݆¼™{ü±Ç¬é™é»uÝø¤cÛÙ ²Rʶëbÿþ—@Èû·æŒAÓ4DcQDê#¨«¯C©XÂÜÜb±t]/Cå!<σçºpžïò,´··#‘°ày.\¼„†TêäÜ[oòµëƒ›±©{jÏkøØß?ÿê«û¹çûéª ÐÒr;~¸ç âèÑ#xúég0<üºº:>lÇE.7 ¥–'0Lš¦#2a˜&¤TBB !ü@à䉇ȥ3'iKÇ:y3¿ vízý>Ûv{…IÃЯ65f¯Ïv_ý̆ -SSŸ8pà/u‰d¢aY(|; ’B3’(ÐJÔ¾¤!D‚))å©B¡ør,}þcû"ûo:tмpábøòøxd&wÕ#†ïû’R Ó0üeáe.×xîɧ~TB5jÔ¨ñ¿ W(Ò™|ÔF¢F5nþ ñß/¥ÞYIEND®B`‚ufraw-0.19.2/icons/distortion-24.png0000644000175000017500000000205311335734227014121 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<¨IDATH‰µ–]H[gÆï1llø½Î¸cqš‚l̪IgÒ"ZÐ ë×ÀB¥Þ$ì¦(³õ* ¦ÂV1ŒÞ$02,c Æ¹æÊºdm7¢cà 3Jã6ëæ. KÎÙE¶”x✌>Wç<ÿç=ïûçyxéU½rኃÉÂqØÛÙ ¸TwlîZ4Ä{WÞV¶Š’—¯£³ÏInaQÖE–éµVà ® $)kÞû˜wrðû6ºWLH“…¼| Žz&]Dü¾¬…³7ÇØ‰m²ÛdöæXÖœˆßǤk€G=yù: & @gŸ“EŸî9yqð 9è¹á@€œ”‰ÌˆE7‘е/°€¤I 7•SÛbCÊI‡¢(xûÝØ‡ÝjÕp€_÷¾ÅÒ~>ëÇc[hõeYã!ß]^(>C•Ù–È…*³µÐrRÎÚ@«/;²¹œ”Y m¤›ÿÕ¬Y[{ˆÌÓÇ"2ÀÚÚ£âU•¦bÑÍ Ä¢›Tšj² (²Ì̇p½Á‚9¡9±€œÐ „ ·®š;ŸxÓ|ޱþ‚sÌq™ðg3!(|Q‹¢@Aé3äåÿ§æñØû“<Šï^˜!¼0Çw‹ŸsúŒY½Eÿ>~œzO8©¸T‡+¸Â¥A'§J°vt±ÿóÃ#§%´ú2öâ°vt‘[TŒ}tœÑÛAž}îy4B’h»z¶«×PI“8ñê%MEQp—3ùÉëÑ%ô¦ò èMå¬G—Ô‡‰à¬—Ú›*ñ8Ô¶ØÎzÿ]`5À`©H{ËaÄc[i»P5Ê‘0X*T.œ1ð÷æoÑsÑ~?Úìîd5;sÛ9¼ýî »H Dü>ŒMF„*»®z'î[ÞîOÛõÄÀGvml2ñû¨mnþ¾ô¯½Á¤k€î+‹K,ß^æÍ–Ë+¹Þ`á·_v(8UÂû_†2¶öÞü-ŒMFªk˜tóVï(±¿OÁÔ¸“F{3ƒn’ZìÃn•+ž½ØÁþnœýÝ8g/vdĪÌ6ìéډA7öf¦Æ©/xÚ—¾xÚ¿-¾p—…&FIEND®B`‚ufraw-0.19.2/icons/flip-horiz-24.png0000644000175000017500000000111511335734227014004 00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ*”¥yÊÚIDATxœí”ÍjA…¿î™îLÓΠb>;ßÀ]p³ðüYÔ ø>BF£.Äq'J BB•,² !˨8z2£&ý“t]ÓÕ¶Cµ¢àÊ9p¡«î¹çTÝ®*a„ ÉÂì¿È›'uñ›½Uý}ðL¤Å€oÀi“^™l†t;ûzì1MS¾ºÐ1™·½nðùC›ƒ¯zn è;®#Žëè¶@tQ?Ygn¾i4±ÊÄ{A¥•ŠÍ˜W£êTE–…(E%$q‚R ¥A;àÖåÛã@PEYÙ}MÆ|ÙqÉEË "¨TÑþ´ÇÚâÏ¿ÈMŠUpøhá~ݬR„8JˆÃˆã£cD˲p\Ï÷p\ _ýúò;ZÍg“ÀG`«h`gýëÌÍ7iœjÄG\¸€;æ’Ä 5¯FF´VŸ´Þ®¼çél `*kÏЭ T–Ÿž¼Ñ¹÷r•¦:7•ÄI˜qrq`©ôKÅ56p™»7õi¹œC!×î\ÑœKÀ…¬öW÷ëg“,&2ÁaüV¼j(‚B»€sÙ85ðN0¸å6°¡-ågïÇNô‘ÿƒ?Èð?à;`ÂØ8àÒìIEND®B`‚ufraw-0.19.2/icons/channel-red-24.png0000644000175000017500000000175011335734227014106 00000000000000‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<zIDATH‰Õ•_H[WÇ?¹÷æÞ“mãÔ”R´´Õ>ÛÉ ¡ô}졃b_WØB‰‹ƒ‘ac´ìq/Û c0Ê6Ê•1 ŽN†Ö*[‡hÑsCŒ57÷Ï9{pf*I*¥{Ø~\øÃ÷ó;ç÷»Ÿ”’ÿRZ¥ÅO}¾VŸ¢¼fèúËÒç;é9N€ªi«À¬](ŒK)ouK9[ÎÃWîŸëú{ŠªÆtt¨µMM„£QBÑ(©¹TŠL2Éüø¸ž÷Ñë¶Ý»oÀ;>ŸrÌ0œ®Þ^%ÒØRþвªÊºi26:*gs9}HJw¯—RŠú¶”â`{;ú¹s¬ê:k…¹BW\!È ¤ R†Að¶·Ë#*åU¶©{÷„uó¦r ¯!%F}=ÞãLjÅEòóóüÑÓÃêØ˜SΧb“kkTÅb ªxé4Ù7°MÇ4±M;Fšf%‹Ê™É€ßÌ矶õÙÂ4¡ªêùÞÿàúUÏsß=¤(E€/F:e¯¡ªÆêà[™á‘Ä®¼®ëŸí $üªªÆ{Þx“o¯ M)¢R•šÆåÞ+è‘H17=ýÀùîÎ7“{ÇôÕ†Ôêêju5ëÙ,îÌ by¹¹YÒÜq<`jf†……’É$®ëòãOcBJùñ®èºÞßùJWȲ,šùùÚ5ê×Ö¨kn&ÔÒB ĵ,²++¬/-±žN“Íd¨¹x=´õ†ÁÊ_+Ò²¬¯ûã™"`x$ÑfèFkSSŒ\.ÇñînNŸ&yû6>|ˆu÷.öÂxZ,†¿¥…ª3g8vö,/=Šªª8ŽC8æûîX®ëŽÂŽ&kšv¹³³KBàyŠ¢PÛÜLäÒ%„!p]!¶º±ÛÛ¶ ƒäóy’ËK‹ýñûEÀðH¢ZUÕó­'ÚT˲Jl‡çye×b±÷-×u¯ ÿç{¾íÄIü~?Ùl¶¬A¥†Áį¿àÖ.€ßïï;uê¥àÆÆ¶mïÛt§¢Ñ(ý.¤ŸôÇŠ#§ $:"‘ÚÆºº(ŠBMMMÉq|š¤”|ùÕ¶'¼wæ5MÓ®>t8077WöÎ÷£åå%67Ÿ<èü¶ €¤ujzR™šž|¦ÊwHC{“eŸÌ祒/Úÿ ð7˜[%ùÖÚdIEND®B`‚ufraw-0.19.2/icons/geometry.svg0000644000175000017500000013536511335734227013363 00000000000000 image/svg+xml ufraw-0.19.2/icons/color-corrections.svg0000644000175000017500000002001211335734227015154 00000000000000 image/svg+xml ufraw-0.19.2/icons/restore-hsv-24.png0000644000175000017500000000163011335734227014204 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<IDATH‰Ý•ÏkTWÇ?÷½7“I3“‰$gâD˜01VtŠÐ,BHQ)† b©¸É¦‹Ê˜M»ÔM¡è? HéBº0Ђ¸+ÕMiCh¤”Ú M‰IÆ4“Í F潯‹Ì›Ž5©â¢¸‹wÏ÷}¿‡ï=ç^#‰WÖ+e-œýÑÓÕÙÉ;­­ìîßg¢TbR’û PÒZñ8CƒƒÜ¸p¹\-/£ÕUtý:k‡“ko'S‹¯›Ø60À‰ V\ws˜ë¢ñq¦‰Dê"ïéáÝ'øeyùß©„¤O$}*éíªÈ¡C|8’0µs‹ÅÞ+—Ë À²,úú ÇkäôiÚj­ÍçáÞ½š›GÙ¹³x¼ø¸ÈíÛ¬ŽrdeEß85ägâñø™r¹öÏ&ylΞ]ÒÁƒ2ärpó&¬®Âöípòä[´µ}ü¸@ ÐJqØ0Æ„»»»ß·,+ °m›t:O±è™óç7ŠÈd ›…pØ/kø ˆaü®ol„D‚Ç~ …B)c žç!‰µµ¿éê‚£G·jVhŠ@¹"æ;B’Šdhojj²mÛÆ¶m<ÏÃq ããe2™­ÈÖ|…¼ èªf¢Qš1AKÒïÀÕB¡PôÛ#°¾^æÜ9‡+WàáíB@œ ÿg€¹j&Ÿç‘¤'€¤l2™ì†ý®r]—;¢ô÷/ríÌÌ€mÃþý04--Tˆ*E€hU`~žYßD?t]÷kÏóÒ€-É”Jƾs“ÍboˆÂÝ»pù2,-A:ý3ÇŽ-°,ð|rø‰JõµÓÞ¨”b©cccüV,>?ƒ¥R‡fg¿ÔÜÜUIŸK”„.]¢à8ì­{’޾Íåxü|ºAÒ›ÕïBõ÷óÕ‹ÜEfÏ>;uŠ_<ÀÝ 6=;<Ìw@Ôß|檨'Œ1‘]»ø¸·—‘Ý»‰¥ÓDëÖ-þœšâ‡ÉI>’ô¤Š™7Ù: 0¥MÈ^J žøÿ¿ÉOy©:°nx¸IEND®B`‚ufraw-0.19.2/icons/unlock-24.png0000644000175000017500000000167311341013025013204 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs˜˜6ÓGßtEXtSoftwarewww.inkscape.org›î<8IDATH‰µ–OHwÇ¿¿ÙÙº*5Q6ºhÝ&‡Ð*šl‰T/Ú‚ô¤ôØ[…ÒÞ% ¥ÉÍ\Ú@ KrXrJÌARéaýS×à®™UÆíê⮘]Ýç÷^1Fº»F—f`†ßû½7ï3ß7¼ÇO03>䥞4„žþþþ[ZZkjj.ìîîft]O-,,ÜÓ4m­,3ƒ™ÑÛÛûõÄÄÄ’®ë¬i¯®®r,c]×9 þ;44t€ímüYo<Ïű±±±ÁÁÁ«Ñh”‚Áàr6›Ýt¹\µþžžžú@ ð=7€ás+~Ç9 mmm·(o¿ ¹¹ùÆÈÈÈß‘H„Íîîî[çQ€@ 00;;»‡¹¯¯ïY± ÖÖÖÎñññmMÓxttô¯ó¿ß³¡¡Á===™ŸŸÿ©˜Êh4: …g2ø|>¿ÂsÖ )^¯·5›ÍbiiIK$áRñxüI,C{{{ƒßïï:+@­®®nÊçóH§ÓÚIÇÓûŸ\q8Ĥ꨹0þü­Î–Ïß•œ®µýúsÅýç¯m33 0ó›~b0ÓQy¤Å„ßÕ™™3™Lþ³±±±|`·Óö®ïº‘³&`ÌH~ZGdÔIi@Z&¤ÌÃ:4`IòЀe™°,;[Î_Ô©©©¶êjm6 ¹Ôdƒ bH¤ image/svg+xml ufraw-0.19.2/icons/Makefile.in0000664000175000017500000004455012123734473013050 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # $Id: Makefile.am,v 1.16 2010/02/11 07:11:06 udifuchs Exp $ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CARBON_LIBS = @CARBON_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFITSIO_CFLAGS = @CFITSIO_CFLAGS@ CFITSIO_LIBS = @CFITSIO_LIBS@ CFLAGS = @CFLAGS@ CINEPAINT_CFLAGS = @CINEPAINT_CFLAGS@ CINEPAINT_LIBS = @CINEPAINT_LIBS@ CINEPAINT_PROGRAMPLUGINDIR = @CINEPAINT_PROGRAMPLUGINDIR@ COMMENT_ICON = @COMMENT_ICON@ CONSOLE = @CONSOLE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOSPREFIX = @DOSPREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXIV2_CFLAGS = @EXIV2_CFLAGS@ EXIV2_LIBS = @EXIV2_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIMP_2_4_CFLAGS = @GIMP_2_4_CFLAGS@ GIMP_2_4_LIBS = @GIMP_2_4_LIBS@ GIMP_2_9_CFLAGS = @GIMP_2_9_CFLAGS@ GIMP_2_9_LIBS = @GIMP_2_9_LIBS@ GIMP_CFLAGS = @GIMP_CFLAGS@ GIMP_LIBDIR = @GIMP_LIBDIR@ GIMP_LIBS = @GIMP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKBASE_CFLAGS = @GTKBASE_CFLAGS@ GTKBASE_LIBS = @GTKBASE_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ ISCC = @ISCC@ LCMS_CFLAGS = @LCMS_CFLAGS@ LCMS_LIBS = @LCMS_LIBS@ LDFLAGS = @LDFLAGS@ LENSFUN_CFLAGS = @LENSFUN_CFLAGS@ LENSFUN_LIBS = @LENSFUN_LIBS@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBTIFF_CFLAGS = @LIBTIFF_CFLAGS@ LIBTIFF_LIBS = @LIBTIFF_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POD2MAN = @POD2MAN@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PREFIX = @PREFIX@ PROGRAMFILES = @PROGRAMFILES@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UFRAW_CPPFLAGS = @UFRAW_CPPFLAGS@ UFRAW_LDADD = @UFRAW_LDADD@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ WINE = @WINE@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_HEADERS = ufraw_icons.h icon_DATA = ufraw.png icondir = $(datadir)/pixmaps MAINTAINERCLEANFILES = ufraw_icons.h UFRAW_ICONS = ufraw.png exposure-24.png film-24.png digital-24.png \ restore-lch-24.png restore-hsv-24.png interpolation-24.png \ white-balance-24.png color-management-24.png color-corrections-24.png \ icc-profile-camera-24.png icc-profile-output-24.png \ icc-profile-display-24.png curve-24.png grayscale-24.png \ flip-horiz-24.png flip-vert-24.png rotate-90-24.png rotate-270-24.png \ lock-24.png unlock-24.png exif-24.png crop-24.png rectify-24.png \ gimp-24.png channel-blue-24.png channel-green-24.png channel-red-24.png \ lens-24.png tca-24.png vignetting-24.png distortion-24.png \ automatic-24.png manual-24.png \ geometry-24.png hueadjust-24.png EXTRA_DIST = $(UFRAW_ICONS) ufraw_icons.h exposure.svg film.svg digital.svg \ restore-lch.svg restore-hsv.svg interpolation.svg \ white-balance.svg color-corrections.svg \ icc-profile-output.svg icc-profile-display.svg curve.svg \ lock.svg unlock.svg exif.svg crop.svg rectify.svg grayscale.svg \ automatic.svg manual.svg \ lens.svg tca.svg vignetting.svg distortion.svg geometry.svg hueadjust.svg all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ ctags distclean distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iconDATA install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-iconDATA ufraw_icons.h: $(UFRAW_ICONS) Makefile.am gdk-pixbuf-csource --build-list ufraw_icon $(srcdir)/ufraw.png \ exposure_24 $(srcdir)/exposure-24.png \ film_24 $(srcdir)/film-24.png \ digital_24 $(srcdir)/digital-24.png \ restore_lch_24 $(srcdir)/restore-lch-24.png \ restore_hsv_24 $(srcdir)/restore-hsv-24.png \ interpolation_24 $(srcdir)/interpolation-24.png \ white_balance_24 $(srcdir)/white-balance-24.png \ color_management_24 $(srcdir)/color-management-24.png \ color_corrections_24 $(srcdir)/color-corrections-24.png \ icc_profile_camera_24 $(srcdir)/icc-profile-camera-24.png \ icc_profile_output_24 $(srcdir)/icc-profile-output-24.png \ icc_profile_display_24 $(srcdir)/icc-profile-display-24.png \ curve_24 $(srcdir)/curve-24.png \ lock_24 $(srcdir)/lock-24.png \ unlock_24 $(srcdir)/unlock-24.png \ automatic_24 $(srcdir)/automatic-24.png \ manual_24 $(srcdir)/manual-24.png \ exif_24 $(srcdir)/exif-24.png \ crop_24 $(srcdir)/crop-24.png \ rectify_24 $(srcdir)/rectify-24.png \ lens_24 $(srcdir)/lens-24.png \ flip_horiz_24 $(srcdir)/flip-horiz-24.png \ flip_vert_24 $(srcdir)/flip-vert-24.png \ rotate_90_24 $(srcdir)/rotate-90-24.png \ rotate_270_24 $(srcdir)/rotate-270-24.png \ gimp_24 $(srcdir)/gimp-24.png \ grayscale_24 $(srcdir)/grayscale-24.png \ channel_blue_24 $(srcdir)/channel-blue-24.png \ channel_green_24 $(srcdir)/channel-green-24.png \ channel_red_24 $(srcdir)/channel-red-24.png \ tca_24 $(srcdir)/tca-24.png \ distortion_24 $(srcdir)/distortion-24.png \ vignetting_24 $(srcdir)/vignetting-24.png \ geometry_24 $(srcdir)/geometry-24.png \ hueadjust_24 $(srcdir)/hueadjust-24.png \ > $@ || { rm -f $@; exit 1; } # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ufraw-0.19.2/icons/distortion.svg0000644000175000017500000007757211335734227013733 00000000000000 image/svg+xml ufraw-0.19.2/icons/Makefile.am0000644000175000017500000000570711341013025013016 00000000000000# $Id: Makefile.am,v 1.16 2010/02/11 07:11:06 udifuchs Exp $ noinst_HEADERS = ufraw_icons.h icon_DATA = ufraw.png icondir = $(datadir)/pixmaps MAINTAINERCLEANFILES = ufraw_icons.h UFRAW_ICONS = ufraw.png exposure-24.png film-24.png digital-24.png \ restore-lch-24.png restore-hsv-24.png interpolation-24.png \ white-balance-24.png color-management-24.png color-corrections-24.png \ icc-profile-camera-24.png icc-profile-output-24.png \ icc-profile-display-24.png curve-24.png grayscale-24.png \ flip-horiz-24.png flip-vert-24.png rotate-90-24.png rotate-270-24.png \ lock-24.png unlock-24.png exif-24.png crop-24.png rectify-24.png \ gimp-24.png channel-blue-24.png channel-green-24.png channel-red-24.png \ lens-24.png tca-24.png vignetting-24.png distortion-24.png \ automatic-24.png manual-24.png \ geometry-24.png hueadjust-24.png EXTRA_DIST = $(UFRAW_ICONS) ufraw_icons.h exposure.svg film.svg digital.svg \ restore-lch.svg restore-hsv.svg interpolation.svg \ white-balance.svg color-corrections.svg \ icc-profile-output.svg icc-profile-display.svg curve.svg \ lock.svg unlock.svg exif.svg crop.svg rectify.svg grayscale.svg \ automatic.svg manual.svg \ lens.svg tca.svg vignetting.svg distortion.svg geometry.svg hueadjust.svg ufraw_icons.h: $(UFRAW_ICONS) Makefile.am gdk-pixbuf-csource --build-list ufraw_icon $(srcdir)/ufraw.png \ exposure_24 $(srcdir)/exposure-24.png \ film_24 $(srcdir)/film-24.png \ digital_24 $(srcdir)/digital-24.png \ restore_lch_24 $(srcdir)/restore-lch-24.png \ restore_hsv_24 $(srcdir)/restore-hsv-24.png \ interpolation_24 $(srcdir)/interpolation-24.png \ white_balance_24 $(srcdir)/white-balance-24.png \ color_management_24 $(srcdir)/color-management-24.png \ color_corrections_24 $(srcdir)/color-corrections-24.png \ icc_profile_camera_24 $(srcdir)/icc-profile-camera-24.png \ icc_profile_output_24 $(srcdir)/icc-profile-output-24.png \ icc_profile_display_24 $(srcdir)/icc-profile-display-24.png \ curve_24 $(srcdir)/curve-24.png \ lock_24 $(srcdir)/lock-24.png \ unlock_24 $(srcdir)/unlock-24.png \ automatic_24 $(srcdir)/automatic-24.png \ manual_24 $(srcdir)/manual-24.png \ exif_24 $(srcdir)/exif-24.png \ crop_24 $(srcdir)/crop-24.png \ rectify_24 $(srcdir)/rectify-24.png \ lens_24 $(srcdir)/lens-24.png \ flip_horiz_24 $(srcdir)/flip-horiz-24.png \ flip_vert_24 $(srcdir)/flip-vert-24.png \ rotate_90_24 $(srcdir)/rotate-90-24.png \ rotate_270_24 $(srcdir)/rotate-270-24.png \ gimp_24 $(srcdir)/gimp-24.png \ grayscale_24 $(srcdir)/grayscale-24.png \ channel_blue_24 $(srcdir)/channel-blue-24.png \ channel_green_24 $(srcdir)/channel-green-24.png \ channel_red_24 $(srcdir)/channel-red-24.png \ tca_24 $(srcdir)/tca-24.png \ distortion_24 $(srcdir)/distortion-24.png \ vignetting_24 $(srcdir)/vignetting-24.png \ geometry_24 $(srcdir)/geometry-24.png \ hueadjust_24 $(srcdir)/hueadjust-24.png \ > $@ || { rm -f $@; exit 1; } ufraw-0.19.2/icons/digital.svg0000644000175000017500000002304011335734227013127 00000000000000 image/svg+xml UFRaw Digital Udi Fuchs ufraw-0.19.2/icons/tca-24.png0000644000175000017500000000206011335734227012470 00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<­IDATH‰•–[lTU†¿ÝezI/A“‚5 Ðb0tB$ÚÚ0¤TRj#‚‚ML|1ã›øà‹!!o/(Bjņ´\ê–X í´HKKËLZÚi migÎïÙöt˜™BW²öZ{ÿßÞkŸ½fŒ$’š1xH»+ö"E’/¶ÍuüVà›T1ÎÃ1‰n—Ï •Yq€sµMM æÍØ7@±ýiîvÿR/1.ÑåÑÎ}øjh’.Ä"=Òœ†.!ÞŸ Ðñ{ìÑäÓ”8BYÃTþöÞ/ÓŽKà ýÓ5S¦5¶Å@¡¡Ùá® °öl?qŒ=ï0Ê¥ÌÃO‹?ÁXlÛ© ¯/1O¢fç…T–òlt‚GÏw‹5ßï§¿ 6Ãéy@}!8œUÎÜUn`¤ø¤hŒmvp¤ƒ*{TãÛ~ÝÒéê¤IÏJÚõÏcKd…$så–¿M꺢åqÏôñ*…Y@©½£p7s!ÝßFfZ±ý+påÚµtÕ¯„€ÏöÛ-‰!/õW¶gS—ì €EäÄÔÿ´àˆ+LÕÁ¿ÙÔ™¡Ò˜ŸkûŽ }»íÉT`xSuˆÖÿl »%#)àÔÔÛ!qòª°Œ¨®(àvF3£n1êVVŸ[­ Ê¥Hì=„{%š‡„8d¿È„›¸,=1í᣷Tû£-ÑÉsîI· í]&×Î×vJŒçõ#Œ °€u¯QðmÊR=xÕ>ê€;z懜ºS™-/2ø»þ’ôÕNØŸ´¿2e_»†¡ø¢ãU4Ž9ŸE*«§q&ýÛ`ø˜ö“Ÿ1g`EL®è:@©‘œ¿-³ ˜Ÿ@j¯P0!Ä^W¼ uþotƒ¢“é•IEND®B`‚ufraw-0.19.2/ufraw.desktop0000644000175000017500000000464711472104551012402 00000000000000[Desktop Entry] Name=UFRaw GenericName=Raw image converter GenericName[ca]=Convertidor d'imatges Raw GenericName[cs]=Konvertor raw snímků GenericName[da]=RÃ¥billedbehandler GenericName[de]=Konverter für Raw-Bilder GenericName[es]=Conversor de imágenes raw GenericName[fr]=Convertisseur d'image RAW GenericName[it]=Convertitore per immagini Raw GenericName[ko]=Raw ì´ë¯¸ì§€ 변환기 GenericName[nb]=Raw-bildebehandler GenericName[nl]=Camera Raw Conversie GenericName[pl]=Konwerter zdjęć RAW GenericName[pt]=Conversor de imagens cruas GenericName[ru]=ПроÑвитель цифровых негативов GenericName[sr]=Преводилац Raw Ñлика GenericName[sr@latin]=Prevodilac Raw slika GenericName[zh_CN]=Raw 图åƒè½¬æ¢å™¨ GenericName[zh_TW]=Raw å½±åƒè½‰æ›å™¨ Comment=A utility to read and manipulate raw images from digital cameras Comment[ca]=Una eina per llegir i manipular les imatges Raw d'una càmera digital Comment[cs]=Program ke Ätení a manipulaci raw snímků z digitálních fotoaparátů Comment[da]=Et program til at læse og behandle rÃ¥billeder fra digitalkameraer Comment[de]=Ein Werkzeug, um Raw-Bilder von Digitalkameras zu lesen und zu manipulieren Comment[es]=Programa para leer y manipular imágenes raw de cámaras digitales Comment[fr]=Un utilitaire pour lire et manipuler les images RAW des appareils photos numériques Comment[it]=Gestione immagini Raw realizzate con fotocamere digitali Comment[ko]=디지털 ì¹´ë©”ë¼ì˜ Raw ì´ë¯¸ì§€ë¥¼ ì½ê³ , 처리하는 프로그램 Comment[nb]=Et program for Ã¥ lese og behandle raw-bilder fra digitale kameraer Comment[nl]=Programma om digitale camera RAW bestanden te bewerken en converteren Comment[pl]=Program do odczytu i korekty zdjęć w formacie RAW z aparatów cyfrowych Comment[pt]=Programa para ler e manipular imagens de câmeras digitais Comment[ru]=ПроÑвка цифровых негативов и Ñохранение в TIFF/JPEG Comment[sr]=Ðлат за читање и обраду raw Ñлика из дигиталних камера Comment[sr@latin]=Alat za Äitanje i obradu raw slika iz digitalnih kamera Comment[zh_CN]=一个从数ç ç›¸æœºä¸­è¯»å–并处ç†åŽŸå§‹å›¾åƒçš„工具 Comment[zh_TW]=用來讀å–å’Œæ“作數ä½ç›¸æ©Ÿ raw å½±åƒçš„å·¥å…·ç¨‹å¼ Version=1.0 Type=Application Categories=Graphics;Photography;GTK; Exec=ufraw %U TryExec=ufraw Terminal=false StartupNotify=true MimeType=application/x-ufraw;image/x-dcraw; Icon=ufraw ufraw-0.19.2/ufraw_delete.c0000664000175000017500000001107212115264507012470 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_delete.c - The GUI for choosing what files to delete. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include #include #include // Response can be any unique positive integer #define UFRAW_RESPONSE_DELETE_SELECTED 1 #define UFRAW_RESPONSE_DELETE_ALL 2 long ufraw_delete(void *widget, ufraw_data *uf) { if (!g_file_test(uf->filename, G_FILE_TEST_EXISTS)) { char *ufile = g_filename_display_name(uf->filename); ufraw_message(UFRAW_ERROR, _("Raw file '%s' missing."), ufile); g_free(ufile); return UFRAW_ERROR; } GtkDialog *dialog = GTK_DIALOG(gtk_dialog_new_with_buttons( _("Delete raw file"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, _("_Delete selected"), UFRAW_RESPONSE_DELETE_SELECTED, _("Delete _All"), UFRAW_RESPONSE_DELETE_ALL, NULL)); gtk_dialog_set_default_response(dialog, GTK_RESPONSE_CANCEL); GtkBox *box = GTK_BOX(dialog->vbox); GtkWidget *label = gtk_label_new(_("Select files to delete")); gtk_box_pack_start(box, label, FALSE, FALSE, 0); char *path = g_path_get_dirname(uf->filename); GDir *dir = g_dir_open(path, 0, NULL); if (dir == NULL) { char *upath = g_filename_display_name(path); ufraw_message(UFRAW_ERROR, _("Error reading directory '%s'."), upath); g_free(upath); g_free(path); return UFRAW_ERROR; } g_free(path); char *dirname = g_path_get_dirname(uf->filename); char *base = g_path_get_basename(uf->filename); if (strcmp(base, uf->filename) == 0) { // Handle empty dirname g_free(dirname); dirname = g_strdup(""); } char *rawBase = uf_file_set_type(base, "."); int rawBaseLen = strlen(rawBase); GList *buttonList = NULL; GList *fileList = NULL; // Check button for raw file char *ufile = g_filename_display_name(uf->filename); GtkWidget *button = gtk_check_button_new_with_label(ufile); buttonList = g_list_append(buttonList, button); g_free(ufile); gtk_box_pack_start(box, button, FALSE, FALSE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); fileList = g_list_append(fileList, g_strdup(uf->filename)); // Check buttons for associated files const char *file; while ((file = g_dir_read_name(dir)) != NULL) { if (strncmp(file, rawBase, rawBaseLen) == 0 && strcmp(file, base) != 0) { char *filename = g_build_filename(dirname, file, NULL); char *ufile = g_filename_display_name(filename); button = gtk_check_button_new_with_label(ufile); buttonList = g_list_append(buttonList, button); g_free(ufile); gtk_box_pack_start(box, button, FALSE, FALSE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); fileList = g_list_append(fileList, filename); } } g_dir_close(dir); gtk_widget_show_all(GTK_WIDGET(dialog)); long response = gtk_dialog_run(dialog); long status = UFRAW_CANCEL; /* Delete files as needed */ while (fileList != NULL) { if (response == UFRAW_RESPONSE_DELETE_ALL || (response == UFRAW_RESPONSE_DELETE_SELECTED && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(buttonList->data)))) { if (g_unlink(fileList->data) != 0) { char *ufile = g_filename_display_name(fileList->data); ufraw_message(UFRAW_ERROR, _("Error deleting '%s'"), ufile); g_free(ufile); } else if (strcmp(fileList->data, uf->filename) == 0) { /* Success means deleting the raw file */ status = UFRAW_SUCCESS; } } g_free(fileList->data); fileList = g_list_next(fileList); buttonList = g_list_next(buttonList); } g_list_free(fileList); g_list_free(buttonList); g_free(base); g_free(dirname); gtk_widget_destroy(GTK_WIDGET(dialog)); return status; } ufraw-0.19.2/iccjpeg.h0000664000175000017500000000547712115264507011447 00000000000000/* * iccprofile.h * * This file provides code to read and write International Color Consortium * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has * defined a standard format for including such data in JPEG "APP2" markers. * The code given here does not know anything about the internal structure * of the ICC profile data; it just knows how to put the profile data into * a JPEG file being written, or get it back out when reading. * * This code depends on new features added to the IJG JPEG library as of * IJG release 6b; it will not compile or work with older IJG versions. * * NOTE: this code would need surgery to work on 16-bit-int machines * with ICC profiles exceeding 64K bytes in size. See iccprofile.c * for details. * * UFRaw: Copied from lcms-2.4 January 2013. */ #include /* needed to define "FILE", "NULL" */ #include /* * This routine writes the given ICC profile data into a JPEG file. * It *must* be called AFTER calling jpeg_start_compress() and BEFORE * the first call to jpeg_write_scanlines(). * (This ordering ensures that the APP2 marker(s) will appear after the * SOI and JFIF or Adobe markers, but before all else.) */ extern void write_icc_profile JPP((j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len)); /* * Reading a JPEG file that may contain an ICC profile requires two steps: * * 1. After jpeg_create_decompress() but before jpeg_read_header(), * call setup_read_icc_profile(). This routine tells the IJG library * to save in memory any APP2 markers it may find in the file. * * 2. After jpeg_read_header(), call read_icc_profile() to find out * whether there was a profile and obtain it if so. */ /* * Prepare for reading an ICC profile */ extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); /* * See if there was an ICC profile in the JPEG file being read; * if so, reassemble and return the profile data. * * TRUE is returned if an ICC profile was found, FALSE if not. * If TRUE is returned, *icc_data_ptr is set to point to the * returned data, and *icc_data_len is set to its length. * * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() * and must be freed by the caller with free() when the caller no longer * needs it. (Alternatively, we could write this routine to use the * IJG library's memory allocator, so that the data would be freed implicitly * at jpeg_finish_decompress() time. But it seems likely that many apps * will prefer to have the data stick around after decompression finishes.) */ extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len)); ufraw-0.19.2/po/0000775000175000017500000000000012124444444010353 500000000000000ufraw-0.19.2/po/ja.po0000664000175000017500000013101112123734456011226 00000000000000# Japanese translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-10-10 01:38+0900\n" "Last-Translator: Yot \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Japanese\n" "X-Poedit-Country: JAPAN\n" "X-Poedit-SourceCharset: utf-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "ナビゲータウインドウを開ã" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "" msgid "No input file, nothing to do." msgstr "入力ファイルãŒç„¡ã„ã®ã§ã€ä½•ã‚‚ã—ã¾ã›ã‚“" #, c-format msgid "Loaded %s %s" msgstr "読ã¿è¾¼ã¿ã¾ã—㟠%s%s" #, c-format msgid "Saved %s %s" msgstr "ä¿å­˜ã—ã¾ã—㟠%s%s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "y" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: 上書ãã—ã¾ã™ã‹ '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent オプションã¯ãƒãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã®ã¿ã§æœ‰åйã§ã™" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent オプションã¯ãƒãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã®ã¿ã§æœ‰åйã§ã™" msgid "Raw images" msgstr "Rawç”»åƒ" msgid "UFRaw ID files" msgstr "UFRaw IDファイル" msgid "Raw jpeg's" msgstr "Rawå½¢å¼ã®jpeg" msgid "Raw tiff's" msgstr "Rawå½¢å¼ã®tiff" msgid "All files" msgstr "å…¨ã¦ã®ãƒ•ァイル" msgid "Show hidden files" msgstr "éš ã—ファイルを表示ã™ã‚‹" msgid "Manual curve" msgstr "マニュアルカーブ" msgid "Linear curve" msgstr "リニアカーブ" msgid "Custom curve" msgstr "カスタムカーブ" msgid "Camera curve" msgstr "カメラカーブ" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "プロファイル無ã—" msgid "Color matrix" msgstr "カラーマトリックス" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (埋込ã¿)" msgid "System default" msgstr "システムデフォルト" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "UFRaw-0.4以å‰ã®.ufrawrcã®å¤‰æ›ã‚’試ã¿ã¾ã™" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "UFRaw-0.6以å‰ã®.ufrawrcã®å¤‰æ›ã‚’試ã¿ã¾ã™" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "ç¾åœ¨ã®UFRawã¯.ufrawrcã®UFRawãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã¾ã›ã‚“" #, c-format msgid "Too many anchors for curve '%s'" msgstr "カーブã«ã‚¢ãƒ³ã‚«ãƒ¼ãŒå¤šã™ãŽã¾ã™ '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "IDãƒ•ã‚¡ã‚¤ãƒ«ã®æ˜Žåº¦èª¿æ•´ãŒå¤šã™ãŽã‚‹ã®ã§ç„¡è¦–ã—ã¾ã™ã€‚\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "IDファイル %s ã¯æ­£ã—ã„ファイルã¨ã—ã¦èªè­˜ã§ãã¾ã›ã‚“\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "%sã®IDファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "ファイル作æˆã‚¨ãƒ©ãƒ¼ '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "パースエラー '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "%sを書ãè¾¼ã‚ã¾ã›ã‚“\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "--create-idã§stdoutã¯ã§ãã¾ã›ã‚“" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - デジカメ画åƒã®ãŸã‚ã® Unidentified Flying Raw コンãƒãƒ¼ã‚¿ãƒ¼ã€‚\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "使ã„ã‹ãŸ: ufraw [ オプション ... ] [ rawç”»åƒãƒ•ァイル ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ オプション ... ] [ rawç”»åƒãƒ•ァイル ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ オプション ... ] [ デフォルトディレクトリ ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "'ufraw' ã¯ãƒ‡ãƒ•ォルトã§ãƒ¦ãƒ¼ã‚¶ãŒç”»åƒã‚’ä¿å­˜å‰ã«å¾®èª¿æ•´ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã«\n" "rawç”»åƒã‚’プレビューã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚‚ã—ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰\n" "rawç”»åƒã‚’指定ã•れãªã‹ã£ãŸå ´åˆUFRawã¯ãƒ•ã‚¡ã‚¤ãƒ«é¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’è¡¨ç¤ºã—ã¾ã™ã€‚\n" "ç”»åƒã‚’é–‹ã‹ãšã«å‡¦ç†ã™ã‚‹å ´åˆã¯'ufraw-batch'を使用ã—ã¦ãã ã•ã„。\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "入力ファイルã¯rawç”»åƒã¨ufrawã®IDファイルを読ã¿è¾¼ã‚ã¾ã™ã€‚IDファイルã«ã¯\n" "ç”»åƒã‚’æ“作ã™ã‚‹ãŸã‚ã®rawç”»åƒã®ãƒ•ァイルåã¨ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãŒæ›¸ãè¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚\n" "指定ã™ã‚‹IDファイルãŒã²ã¨ã¤ã®å ´åˆã«ã¯IDファイルã¨ä¸€ç·’ã«ã‚ªãƒ—ションを使用ã™ã‚‹\n" "ã“ã¨ãŒã§ãã¾ã™ã€‚\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "--conf=IDファイル IDファイルã®ãƒ‘ラメータを他ã®rawç”»åƒã«é©ç”¨\n" msgid "The rest of the options are separated into two groups.\n" msgstr "オプションã¯äºŒã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«åˆ†ã‘られã¦ã„ã¾ã™ã€‚\n" msgid "The options which are related to the image manipulation are:\n" msgstr "ç”»åƒèª¿æ•´ã«é–¢é€£ã™ã‚‹ã‚ªãƒ—ション:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto ホワイトãƒãƒ©ãƒ³ã‚¹ã®è¨­å®šã€‚\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP ケルビンã§è‰²æ¸©åº¦æŒ‡å®šã€‚\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN ç·‘è‰²ã®æ¨™æº–化。\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " 使用ã™ã‚‹åŸºæœ¬ãƒˆãƒ¼ãƒ³ã‚«ãƒ¼ãƒ–ã®ç¨®é¡žã‚’指定ã™ã‚‹ã€‚CURVEã¯\n" " GUIã§ä»¥å‰ã«èª­ã¿è¾¼ã‚“ã ã“ã¨ã®ã‚ã‚‹ã‚‚ã®ãŒä½¿ãˆã¾ã™ã€‚\n" " (デフォルトã§ã¯ã‚«ãƒ¡ãƒ©ã‚«ãƒ¼ãƒ–ãŒã‚れã°ãれを使用。\n" " ç„¡ã„å ´åˆã¯ç›´ç·šã‚’使用)。\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " 指定ã—ãŸãƒ•ァイルã«å«ã¾ã‚Œã‚‹åŸºæœ¬ãƒˆãƒ¼ãƒ³ã‚«ãƒ¼ãƒ–を使ã†ã€‚\n" " --base-curveオプションを上書ãã—ã¾ã™ã€‚\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE \n" " 使用ã™ã‚‹è¼åº¦ã‚«ãƒ¼ãƒ–ã®ç¨®é¡žã‚’指定ã™ã‚‹ã‚ªãƒ—ション。\n" " CURVEã¯ä»¥å‰GUIã§ä½¿ç”¨ã—ãŸç‰©ãªã‚‰ãªã‚“ã§ã‚‚使ãˆã¾ã™ã€‚\n" " (デフォルトã¯linear)。\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file 指定ã—ãŸãƒ•ァイルã«å«ã¾ã‚Œã‚‹è¼åº¦ã‚«ãƒ¼ãƒ–を使ã†ã€‚\n" " --curveオプションを上書ãã—ã¾ã™ã€‚\n" #, fuzzy msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " ãƒã‚¬ãƒ†ã‚£ãƒ–EVã®ãƒ‡ã‚£ãƒ†ãƒ¼ãƒ«ã‚’復元ã—ã¾ã™ã€‚\n" " 'clip' 何もã—ã¾ã›ã‚“ - safe from artifacts.\n" " 'lch' LCH空間ã§å¾©å…ƒã—ã¾ã™ - giving soft details.\n" " 'hsv' HSV空間ã§å¾©å…ƒã—ã¾ã™ - giving sharp details.\n" " (デフォルトã¯lchã§ã™)。\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMMA 基本カーブã®ã‚¬ãƒ³ãƒžèª¿æ•´ (デフォルト 0.45)。\n" #, fuzzy msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY 基本カーブã®ãƒªãƒ‹ã‚¢ãƒªãƒ†ã‚£ãƒ¼ (デフォルト 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT コントラスト調整 (default 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT 彩度調整 (デフォルトã¯1.0ã€0ã«ã™ã‚‹ã¨ç™½é»’出力)。\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=ã—ãã„値\n" " Waveletノイズ除去ã®ã—ãã„値 (デフォルト 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " ãƒ›ãƒƒãƒˆãƒ”ã‚¯ã‚»ãƒ«ã®æ¤œå‡ºã¨è»½æ¸›ã®æ„Ÿåº¦è¨­å®š (åˆæœŸå€¤ 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " 自動露出ã‹EVã«ã‚ˆã‚‹éœ²å‡ºèª¿æ•´ (デフォルトã¯0)。\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" "\t\t 自動ブラックãƒã‚¤ãƒ³ãƒˆã‹ãƒ–ラックãƒã‚¤ãƒ³ãƒˆå€¤ (デフォルトã¯0)。\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|bilinear\n" " 使用ã™ã‚‹è£œé–“æ–¹å¼ (デフォルトahd)。\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " グレースケールã®å¤‰æ›æ–¹å¼ (デフォルトnone).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " グレースケールã®å¤‰æ›æ–¹å¼ (デフォルトnone).\n" msgid "The options which are related to the final output are:\n" msgstr "最終出力ã«é–¢é€£ã™ã‚‹ã‚ªãƒ—ション:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FACTOR ç”»åƒã‚’-FACTORå€ã«ç¸®å°(デフォルト 1)。\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=SIZE ç”»åƒã‚’縮å°(高ã•・幅ã®é•·è¾ºå´ã‚’SIZEã«)。\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ (デフォルト ppm)。\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 出力画åƒã®ãƒãƒ£ãƒ³ãƒãƒ«ã‚ãŸã‚Šã®è‰²æ·±åº¦ (åˆæœŸå€¤ 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " IDãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆ ã—ãªã„|ã™ã‚‹|IDã®ã¿(デフォルトno)\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE JPEG圧縮 (0-100, デフォルト85)。\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif EXIF情報を出力ã«åŸ‹è¾¼(デフォルト EXIFを埋込む)\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "--[no]zip TIFFã®zipåœ§ç¸®ã®æœ‰åй[無効](デフォルト nozip)。\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Rawç”»åƒã‚’変æ›ã™ã‚‹ã®ã§ã¯ç„¡ãã€\n" " rawファイルã«åŸ‹è¾¼ã¾ã‚Œã¦ã„るプレビュー画åƒã‚’抽出\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " カメラã®è¨­å®šã«å¿œã˜ç”»åƒã‚’回転(camera), 時計回り\n" " 角度(ANGLE), åˆã¯å›žè»¢ã—ãªã„(no) (åˆæœŸå€¤ camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " å›žè»¢å¾Œã§æ‹¡å¤§ç¸®å°å‰ã®Rawç”»åƒã‹ã‚‰ãƒ”クセルå˜ä½ã§\n" " 指定ã—ãŸç¯„囲を切り出ã™ã€‚\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PATH 出力ファイルをPATHã«ã™ã‚‹\n" " (デフォルトã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¨åŒã˜)。\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "--output=FILE 出力ファイルåã€'-'を使ã†ã¨æ¨™æº–出力。\n" #, fuzzy msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=FILE rawダークフレーム減法ã«FILEを使ã†\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite ファイルãŒå­˜åœ¨ã™ã‚‹å ´åˆå¼·åˆ¶ä¸Šæ›¸ã(デフォルト no)。\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent ãƒãƒƒãƒå‡¦ç†ã®é–“ãªã«ã‚‚メッセージを表示ã—ã¾ã›ã‚“。\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRawã¯ã¯ã˜ã‚ã«ãƒªã‚½ãƒ¼ã‚¹ãƒ•ァイル$HOME/.ufrawrcã‹ã‚‰è¨­å®šã‚’読ã¿è¾¼ã¿ã¾ã™ã€‚\n" "ãã®æ™‚ã€ã‚‚ã—IDãƒ•ã‚¡ã‚¤ãƒ«ãŒæŒ‡å®šã•れãŸã‚‰ã€ãã®è¨­å®šã‚’読ã¿ã¾ã™ã€‚\n" "次ã«ã€--confオプションã‹ã‚‰è¨­å®šã‚’ã¨ã‚Šã€IDファイル内ã®å…¥å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åã‚’\n" "無視ã—ã¾ã™ã€‚最後ã«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã•れãŸã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚\n" "ãƒãƒƒãƒãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ•ァイルã‹ã‚‰äºŒç•ªç›®ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ—ションを\n" "読ã¿ã¾ã›ã‚“。\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "最後ã§ã™ãŒç‰¹ã«ã€--versionã¯UFRawã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã‚³ãƒ³ãƒ‘イルオプションを\n" "表示ã—ã€--helpã¯ã“ã®ãƒ˜ãƒ«ãƒ—ç”»é¢ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' ã¯--%sオプションã«å¯¾ã—ã¦æ­£ã—ãã‚りã¾ã›ã‚“" msgid "ufraw was build without ZIP support." msgstr "ufrawã¯ZIPサãƒãƒ¼ãƒˆç„¡ã—ã§ãƒ“ルドã•れã¾ã—ãŸã€‚" #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batchオプションã§ã¯ç„¡ãufraw-batchプログラムを使ã£ã¦ãã ã•ã„。" #, c-format msgid "getopt returned character code 0%o ??" msgstr "getoptãŒæ–‡å­—コード 0%o ã‚’è¿”ã—ã¾ã—ãŸã€‚" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "%sã‹ã‚‰ã‚«ãƒ¼ãƒ–を読ã¿è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸã€åŸºæœ¬ã‚«ãƒ¼ãƒ–ã®æ§‹æˆãŒå¤šã™ãŽã¾ã™" #, c-format msgid "failed to load curve from %s" msgstr "%sã‹ã‚‰ã‚«ãƒ¼ãƒ–を読ã¿è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸ" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' ã¯åŸºæœ¬ã‚«ãƒ¼ãƒ–åã¨ã—ã¦æ­£ã—ãã‚りã¾ã›ã‚“。" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "%sã‹ã‚‰ã‚«ãƒ¼ãƒ–を読ã¿è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚«ãƒ¼ãƒ–ã®æ§‹æˆãŒå¤šã™ãŽã¾ã™" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' ã¯ã‚«ãƒ¼ãƒ–åã¨ã—ã¦æ­£ã—ãã‚りã¾ã›ã‚“。" #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' ã¯æ­£ã—ã„補間オプションã§ã¯ã‚りã¾ã›ã‚“" #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' ã¯æ­£ã—ã„グレースケールオプションã§ã¯ã‚りã¾ã›ã‚“。" #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' ã¯æ­£ã—ã„グレースケールオプションã§ã¯ã‚りã¾ã›ã‚“。" #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' ã¯æ­£ã—ã„restoreオプションã§ã¯ã‚りã¾ã›ã‚“。" #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' ã¯æ­£ã—ã„clipオプションã§ã¯ã‚りã¾ã›ã‚“。" msgid "you can not specify both --shrink and --size" msgstr "--shrink 㨠--sizeã¯åŒæ™‚ã«æŒ‡å®šã§ãã¾ã›ã‚“" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' ã¯æ­£ã—ã„色数(bit depth)ã§ã¯ã‚りã¾ã›ã‚“。" #, c-format msgid "Output type '%s' is deprecated" msgstr "å‡ºåŠ›å½¢å¼ '%s' ã¯å»ƒæ­¢ã•れã¾ã™ã€‚" msgid "ufraw was build without TIFF support." msgstr "ufrawã¯TIFFサãƒãƒ¼ãƒˆç„¡ã—ã§ãƒ“ルドã•れã¾ã—ãŸã€‚" msgid "ufraw was build without JPEG support." msgstr "ufrawã¯JPEGサãƒãƒ¼ãƒˆç„¡ã—ã§ãƒ“ルドã•れã¾ã—ãŸã€‚" msgid "ufraw was build without PNG support." msgstr "ufrawã¯PNGサãƒãƒ¼ãƒˆç„¡ã—ã§ãƒ“ルドã•れã¾ã—ãŸã€‚" #, c-format msgid "'%s' is not a valid output type." msgstr "'%s'ã¯æ­£ã—ã„出力形å¼ã§ã¯ã‚りã¾ã›ã‚“" #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' ã¯åŸ‹ã‚è¾¼ã¿ç”»åƒã¨ã—ã¦æ­£ã—ã„出力形å¼ã§ã¯ã‚りã¾ã›ã‚“" #, fuzzy, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%s' ã¯åŸ‹ã‚è¾¼ã¿ç”»åƒã¨ã—ã¦æ­£ã—ã„出力形å¼ã§ã¯ã‚りã¾ã›ã‚“" #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' ã¯æ­£ã—ã„回転オプションã§ã¯ã‚りã¾ã›ã‚“。" #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' ã¯æ­£ã—ã„create-idã®ã‚ªãƒ—ションã§ã¯ã‚りã¾ã›ã‚“" #, c-format msgid "'%s' is not a valid path." msgstr "'%s' ã¯æ­£ã—ã„パスã§ã¯ã‚りã¾ã›ã‚“" msgid "cannot output more than one file to the same output" msgstr "一ã¤ä»¥ä¸Šã®ãƒ•ァイルをåŒã˜å‡ºåŠ›ã«å‡ºåŠ›ã§ãã¾ã›ã‚“" #, c-format msgid "Raw file '%s' missing." msgstr "Rawファイル '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Delete raw file" msgstr "Rawファイルを削除" msgid "_Delete selected" msgstr "" msgid "Delete _All" msgstr "ã™ã¹ã¦å‰Šé™¤" msgid "Select files to delete" msgstr "削除ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #, c-format msgid "Error reading directory '%s'." msgstr "ディレクトリ '%s' ã®èª­ã¿è¾¼ã¿å¤±æ•—" #, c-format msgid "Error deleting '%s'" msgstr "削除失敗 '%s'" msgid "Reading embedded image requires libjpeg." msgstr "埋ã‚è¾¼ã¾ã‚ŒãŸç”»åƒã‚’読ã¿è¾¼ã‚€ã«ã¯libjpegãŒå¿…è¦ã§ã™ã€‚" msgid "No embedded image found" msgstr "埋ã‚è¾¼ã¿ç”»åƒãŒã‚りã¾ã›ã‚“" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "å…ƒã®ã‚µã‚¤ã‚º (%d) よりもリクエストã•れãŸã‚µã‚¤ã‚º (%d) ã®æ–¹ãŒå¤§ãã„ã§ã™" #, fuzzy, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppmã®ã‚µãƒ ãƒã‚¤ãƒ«ãŒãƒŸã‚¹ãƒžãƒƒãƒã§ã™ã€‚高㕠%dã€å¹… %dã€ãƒãƒƒãƒ•ã‚¡é–“ %d" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "JPEGサムãƒã‚¤ãƒ«ã®é«˜ã• %d ã¯æŽ¨å®šã® %dã¨é•ã£ã¦ã„ã¾ã™" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "JPEGサムãƒã‚¤ãƒ«ã®å¹… %d ã¯æŽ¨å®šã® %dã¨é•ã£ã¦ã„ã¾ã™" #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "ファイル作æˆã‚¨ãƒ©ãƒ¼ '%s'.\n" "%s" msgid "No embedded image read" msgstr "埋ã‚è¾¼ã¿ç”»åƒã‚’読ã¿è¾¼ã‚ã¾ã›ã‚“" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "ファイル作æˆã‚¨ãƒ©ãƒ¼ '%s'. %dã®ãƒ•ァイルタイプãŒä¸æ˜Žã§ã™ã€‚" #, c-format msgid "Error creating file '%s': %s" msgstr "ファイル作æˆã‚¨ãƒ©ãƒ¼ '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "書ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼ '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "'%d'ã¯åŸ‹ã‚è¾¼ã¿ç”»åƒã¨ã—ã¦ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„出力形å¼ã§ã™" #, c-format msgid "Loading raw file '%s'" msgstr "Rawファイル '%s' を読ã¿è¾¼ã‚“ã§ã„ã¾ã™" msgid "Can't allocate new image." msgstr "æ–°ã—ã„ç”»åƒã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“。" #. Create the "background" layer to hold the image... msgid "Background" msgstr "背景" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "出力プロファイル'%s'ã‚’ç”»åƒã«åŸ‹ã‚込むã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIFãƒãƒƒãƒ•ã‚¡é•· %d, ãŒé•·ã™ãŽã‚‹ã®ã§ç„¡è¦–ã—ã¾ã™" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" msgid "Focal" msgstr "" msgid "Focal length" msgstr "焦点è·é›¢" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-値(絞り値)" msgid "Distance" msgstr "è·é›¢" msgid "Distance to subject in meters" msgstr "" #. Add the model combobox msgid "Model:" msgstr "モデル:" msgid "Chromatic Aberrations mathematical model" msgstr "" msgid "Parameters" msgstr "パラメータ" msgid "Optical vignetting mathematical model" msgstr "" msgid "Lens distortion mathematical model" msgstr "" #. Lens geometry combobox msgid "Lens geometry:" msgstr "" msgid "The geometry of the lens used to make the shot" msgstr "" #. Target lens geometry combobox msgid "Target geometry:" msgstr "" msgid "The target geometry for output image" msgstr "" msgid "Camera" msgstr "カメラ" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose camera from complete list" msgstr "完æˆã—ãŸãƒªã‚¹ãƒˆã‹ã‚‰ã‚«ãƒ¡ãƒ©ã‚’é¸ã¶" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "レンズ" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose lens from list of possible variants" msgstr "" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "" msgid "Optical vignetting" msgstr "" msgid "Lens distortion" msgstr "ãƒ¬ãƒ³ã‚ºã®æ­ªæ›²åŽå·®" msgid "Lens geometry" msgstr "" msgid "Raw histogram with conversion curves" msgstr "" msgid "Live histogram" msgstr "動的ヒストグラム" #. No darkframe file msgid "None" msgstr "ç„¡ã—" msgid "Lightness" msgstr "明度" msgid "Luminance" msgstr "è¼åº¦" # 値? msgid "Value" msgstr "値" msgid "Channel Mixer" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ãƒŸã‚­ã‚µãƒ¼" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " #, fuzzy msgid "No more room for new curves." msgstr "æ–°ã—ã„カーブã«å¯¾ã™ã‚‹ä½™åœ°ãŒã‚りã¾ã›ã‚“" msgid "Load curve" msgstr "カーブã®èª­è¾¼" msgid "All curve formats" msgstr "全カーブ形å¼" msgid "UFRaw curve format" msgstr "UFRawカーブ形å¼" msgid "Nikon curve format" msgstr "ニコンカーブ形å¼" msgid "Save curve" msgstr "カーブをä¿å­˜" #, fuzzy msgid "No more room for new profiles." msgstr "æ–°ã—ã„プロファイルã®ãŸã‚ã®ä½™åœ°ãŒã‚りã¾ã›ã‚“" msgid "Load color profile" msgstr "カラープロファイルã®èª­è¾¼" msgid "Color Profiles" msgstr "カラープロファイル" #, fuzzy msgid "Luminosity (Y value)" msgstr "è¼åº¦ã‚«ãƒ¼ãƒ–" msgid "Adams' zone" msgstr "" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "ç”»åƒã‚µã‚¤ã‚º %dx%d, ズーム %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "ç”»åƒã‚µã‚¤ã‚º %dx%d, スケール 1/%d" #, fuzzy msgid "Wavelet denoising" msgstr "waveletノイズ除去ã®ã—ãã„値" msgid "Despeckling" msgstr "" #, fuzzy msgid "Interpolating" msgstr "補間無ã—" msgid "Rendering" msgstr "" msgid "Loading preview" msgstr "プレビュー画åƒã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™" msgid "Saving image" msgstr "ç”»åƒã‚’ä¿å­˜ã—ã¦ã„ã¾ã™" #, c-format msgid "Black point: %0.3lf" msgstr "ブラックãƒã‚¤ãƒ³ãƒˆ: %0.3lf" #, fuzzy msgid "No more room for new lightness adjustments." msgstr "æ–°ã—ã„カーブã«å¯¾ã™ã‚‹ä½™åœ°ãŒã‚りã¾ã›ã‚“" msgid "Aspect ratio locked, click to unlock" msgstr "" msgid "Aspect ratio unlocked, click to lock" msgstr "" msgid "Load dark frame" msgstr "ダークフレームを読ã¿è¾¼ã‚€" msgid "clip" msgstr "切りå–ã‚‹" msgid "restore in LCH space for soft details" msgstr "ソフトã®ãƒ‡ã‚£ãƒ†ãƒ¼ãƒ«ã‚’LCH空間ã§å¾©å…ƒã™ã‚‹" msgid "restore in HSV space for sharp details" msgstr "シャープã®ãƒ‡ã‚£ãƒ†ãƒ¼ãƒ«ã‚’HSV空間ã§å¾©å…ƒã™ã‚‹" #, fuzzy, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "ãƒã‚¬ãƒ†ã‚£ãƒ–EVã®è©³ç´°ã‚’å…ƒã«æˆ»ã™\n" "ç¾åœ¨ã®çŠ¶æ…‹: %s" msgid "digital linear" msgstr "デジタル直線" msgid "soft film like" msgstr "フィルムã®ã‚ˆã†ã«ã‚½ãƒ•トã«" #, fuzzy, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "ãƒã‚¤ãƒ©ã‚¤ãƒˆåˆ‡ã‚Šå‡ºã—\n" "ç¾åœ¨ã®çŠ¶æ…‹: %s" #, c-format msgid "Filename: %s%s" msgstr "ファイルå: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "IDファイルも作æˆã—ã¾ã™" msgid "" "\n" "Create only ID file" msgstr "" "\n" "IDファイルã ã‘作æˆã—ã¾ã™" msgid "UFRaw options" msgstr "UFRawオプション" msgid "Settings" msgstr "設定" msgid "Input color profiles" msgstr "入力カラープロファイル" msgid "Output color profiles" msgstr "出力カラープロファイル" msgid "Display color profiles" msgstr "カラープロファイル表示" msgid "Base Curves" msgstr "基本カーブ" msgid "Luminosity Curves" msgstr "è¼åº¦ã‚«ãƒ¼ãƒ–" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "リモートã®Gimpコマンド" msgid "Reset command to default" msgstr "ã‚³ãƒžãƒ³ãƒ‰ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Blink Over/Underexposure Indicators" msgstr "白飛ã³ãƒ»é»’ã¤ã¶ã‚Œè¡¨ç¤ºã‚’点滅" msgid "Configuration" msgstr "æ§‹æˆ" msgid "Save configuration" msgstr "設定をä¿å­˜" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "リソースファイルã«è¨­å®šã‚’ä¿å­˜ ($HOME/.ufrawrc)" msgid "Log" msgstr "ログ" msgid "About" msgstr "UFRawã«ã¤ã„ã¦" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "The Unidentified Flying Raw (UFRaw) ã¯\n" "デジカメrawç”»åƒã®èª­ã¿å‡ºã—ã¨èª¿æ•´ã®ãŸã‚ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ã§ã™ã€‚\n" "UFRawã¯å®Ÿéš›ã®rawç”»åƒã®ç¬¦å·åŒ–ã¯\n" "Digital Camera Raw (DCRaw)ã«é ¼ã£ã¦ã„ã¾ã™ã€‚\n" "著作: Udi Fuchs\n" "ホームページ: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" #, fuzzy msgid "Linear" msgstr "ç·šå½¢" msgid "Logarithmic" msgstr "対数" msgid "Hot pixels: " msgstr "ホットピクセル:" msgid "mark" msgstr "" msgid "Hot pixel sensitivity" msgstr "ホットピクセル感度" msgid "Reset hot pixel sensitivity" msgstr "ホットピクセル感度をリセット" msgid "RGB histogram" msgstr "RGBヒストグラム" msgid "R+G+B histogram" msgstr "R+G+Bヒストグラム" msgid "Luminosity histogram" msgstr "è¼åº¦ãƒ’ストグラム" #, fuzzy msgid "Value (maximum) histogram" msgstr "明暗(最大)ヒストグラム" msgid "Saturation histogram" msgstr "彩度ヒストグラム" msgid "Average:" msgstr "å¹³å‡:" msgid "Std. deviation:" msgstr "標準åå·®:" msgid "Overexposed:" msgstr "露出éŽå¤š:" msgid "Indicate" msgstr "表示" msgid "Underexposed:" msgstr "露出ä¸è¶³:" msgid "White Balance" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹" #, fuzzy msgid "Cannot use camera white balance." msgstr "カメラã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ãŒä½¿ãˆãªã„ã®ã§è‡ªå‹•ホワイトãƒãƒ©ãƒ³ã‚¹ã«æˆ»ã‚Šã¾ã™ã€‚" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "ã‚ãªãŸã®ã‚«ãƒ¡ãƒ©ãƒ¢ãƒ‡ãƒ«ã«ã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ã®ãƒ—リセットãŒã‚りã¾ã›ã‚“。\n" "UFRawã®ã‚¦ã‚§ãƒ–ページã«ã¦ã©ã†ã—ãŸã‚‰ã‚ãªãŸã®ã‚«ãƒ¡ãƒ©ã‚’サãƒãƒ¼ãƒˆ\n" "ã—ã¦ã‚‚らãˆã‚‹ã‹ã®æƒ…報を確èªã—ã¦ãã ã•ã„。" msgid "Reset white balance to initial value" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹ã‚’åˆæœŸå€¤ã«æˆ»ã™" msgid "Temperature" msgstr "色温度" msgid "White balance color temperature (K)" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹ã®è‰²æ¸©åº¦ (K)" msgid "Green" msgstr "緑色" msgid "Green component" msgstr "緑色è¦ç´ " msgid "Select a spot on the preview image to apply spot white balance" msgstr "é¸æŠžã—ãŸç®‡æ‰€ã‚’基本値ã¨ã—ã¦å…¨ä½“ã«ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ã‚’é©ç”¨ã—ã¾ã™" msgid "Chan. multipliers:" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ä¹—æ•°:" msgid "Bayer pattern interpolation" msgstr "Bayerパターン補間" msgid "VNG four color interpolation" msgstr "VNG4色補間" msgid "Bilinear interpolation" msgstr "ãƒã‚¤ãƒªãƒ‹ã‚¢è£œé–“" msgid "AHD interpolation" msgstr "AHD補間" msgid "VNG interpolation" msgstr "VNG補間" msgid "PPG interpolation" msgstr "PPG補間" msgid "No interpolation" msgstr "補間無ã—" msgid "No Bayer pattern" msgstr "Bayerパターン無ã—" msgid "Apply color smoothing" msgstr "" msgid "Denoise" msgstr "ノイズ除去" msgid "Threshold for wavelet denoising" msgstr "waveletノイズ除去ã®ã—ãã„値" msgid "Reset denoise threshold to default" msgstr "ノイズ除去ã®ã—ãã„å€¤ã‚’åˆæœŸåŒ–" msgid "Dark Frame:" msgstr "ダークフレーム:" msgid "Reset dark frame" msgstr "ダークフレームをリセット" msgid "Reset adjustment" msgstr "調整をリセット" #, fuzzy msgid "Select a spot on the preview image to choose hue" msgstr "é¸æŠžã—ãŸç®‡æ‰€ã‚’基本値ã¨ã—ã¦å…¨ä½“ã«ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ã‚’é©ç”¨ã—ã¾ã™" msgid "Remove adjustment" msgstr "" msgid "Grayscale Mode:" msgstr "グレースケールモード:" msgid "Reset channel mixer" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ãƒŸã‚­ã‚µãƒ¼ã‚’リセット" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" msgid "Update channel parameters together" msgstr "" #, fuzzy msgid "Reset despeckle parameters" msgstr "ダークフレームをリセット" #. channel to view msgid "View channel:" msgstr "" #. Parameters msgid "Window size:" msgstr "" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "" msgid "Load base curve" msgstr "基本カーブを読ã¿è¾¼ã‚€" msgid "Save base curve" msgstr "基本カーブをä¿å­˜" msgid "Reset base curve to default" msgstr "åŸºæœ¬ã‚«ãƒ¼ãƒ–ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Input ICC profile" msgstr "入力ã®ICCプロファイル" msgid "Output ICC profile" msgstr "出力ã™ã‚‹ICCプロファイル" msgid "Display ICC profile" msgstr "表示ã®ICCプロファイル" msgid "Gamma" msgstr "ガンマ" msgid "Gamma correction for the input profile" msgstr "入力プロファイルã«ã‚¬ãƒ³ãƒžä¿®æ­£" msgid "Reset gamma to default" msgstr "ã‚¬ãƒ³ãƒžã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Linearity" msgstr "リニアリティー" msgid "Linear part of the gamma correction" msgstr "ガンマ修正ã®ç›´ç·šéƒ¨åˆ†" #, fuzzy msgid "Reset linearity to default" msgstr "ãƒªãƒ‹ã‚¢ãƒªãƒ†ã‚£ãƒ¼ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Output intent" msgstr "出力æ„図" msgid "Perceptual" msgstr "知覚的" msgid "Relative colorimetric" msgstr "相対比色" msgid "Saturation" msgstr "彩度" msgid "Absolute colorimetric" msgstr "絶対比色" msgid "Output bit depth" msgstr "出力色数" msgid "Display intent" msgstr "表示æ„図" msgid "Disable soft proofing" msgstr "ソフト校正無効" msgid "Contrast" msgstr "コントラスト" msgid "Global contrast adjustment" msgstr "" msgid "Reset global contrast to default" msgstr "" msgid "Reset saturation to default" msgstr "å½©åº¦ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "カーブã®è‡ªå‹•調整\n" "(ヒストグラムを平らã«ã—ã¾ã™)" msgid "Reset curve to default" msgstr "ã‚«ãƒ¼ãƒ–ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Reset black-point to default" msgstr "ブラックãƒã‚¤ãƒ³ãƒˆã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Auto adjust black-point" msgstr "ブラックãƒã‚¤ãƒ³ãƒˆã‚’自動調整" #. Start of Crop controls msgid "Left:" msgstr "å·¦:" msgid "Top:" msgstr "上:" msgid "Right:" msgstr "å³:" msgid "Bottom:" msgstr "下:" msgid "Auto fit crop area" msgstr "" #, fuzzy msgid "Reset the crop area" msgstr "åŸºæœ¬ã‚«ãƒ¼ãƒ–ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Aspect ratio:" msgstr "アスペクト比:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "切り抜ã範囲ã®ç¸¦æ¨ªæ¯”ã¯ã€\n" "10進数ã®å°æ•°ç‚¹è¡¨è¨˜(1.273)\n" "åˆã¯2値ã«ã‚ˆã‚‹è¡¨è¨˜(14:11)" msgid "Shrink factor" msgstr "縮å°å€æ•°" msgid "Width" msgstr "横" msgid "Height" msgstr "縦" msgid "Orientation:" msgstr "変æ›:" msgid "Rotation" msgstr "回転" #, fuzzy msgid "Rotation angle" msgstr "アングルã®å›žè»¢" #, fuzzy msgid "Reset rotation angle" msgstr "アングルã®å›žè»¢ã‚’リセット" #. drawLines toggle button msgid "Grid lines" msgstr "" msgid "Number of grid lines to overlay in the crop area" msgstr "" msgid "Path" msgstr "パス" msgid "Select output path" msgstr "å‡ºåŠ›å ´æ‰€ã‚’é¸æŠž" msgid "Filename" msgstr "ファイルå" msgid "JPEG compression level" msgstr "JPEG圧縮比率" msgid "JPEG progressive encoding" msgstr "JPEGプログレッシブ" msgid "TIFF lossless Compress" msgstr "TIFF劣化無ã—圧縮" msgid "Embed EXIF data in output" msgstr "出力ã«EXIF情報を埋ã‚込む" msgid "Create ID file " msgstr "IDファイルを作æˆ" msgid "No" msgstr "ã„ã„ãˆ" msgid "Also" msgstr "IDファイルも" msgid "Only" msgstr "IDファイルã®ã¿" msgid "Save image defaults " msgstr "デフォルトã¨ã—ã¦ä¿å­˜" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "ç¾åœ¨ã®ç”»åƒæ“作パラメータをデフォルトã¨ã—ã¦ä¿å­˜ã€‚\n" "ã“ã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®å‡ºåŠ›ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã¯å¸¸ã«ä¿å­˜ã•れã¾ã™ã€‚" msgid "Never again" msgstr "二度ã¨ã—ãªã„" msgid "Always" msgstr "常ã«" msgid "Just this once" msgstr "今回ã®ã¿" msgid "Remember output path" msgstr "出力場所を記憶" msgid "Overwrite existing files without asking" msgstr "ファイルãŒå­˜åœ¨ã—ã¦ã‚‚質å•ç„¡ã—ã§ä¸Šæ›¸ãã™ã‚‹" msgid "Tag" msgstr "ã‚¿ã‚°" #. Fill table with EXIF tags msgid "Camera maker" msgstr "カメラメーカー" msgid "Camera model" msgstr "カメラモデル" msgid "Timestamp" msgstr "タイムスタンプ" msgid "Shutter time" msgstr "露光時間" msgid "Aperture" msgstr "絞り値" msgid "ISO speed" msgstr "ISO感度" msgid "35mm focal length" msgstr "35mmã¨ã—ã¦ã®ç„¦ç‚¹è·é›¢" msgid "Flash" msgstr "フラッシュ" msgid "White balance" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹" #, c-format msgid "EXIF data read by %s" msgstr "%sã§EXIFデータを読ã¿ã¾ã—ãŸ" msgid "Warning: EXIF data will not be sent to output" msgstr "警告:EXIF情報ãŒå‡ºåŠ›ã«å…¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "スãƒãƒƒãƒˆå€¤:" msgid "Exposure compensation in EV" msgstr "EV補償" msgid "Auto adjust exposure" msgstr "自動露出補正" msgid "Reset exposure to default" msgstr "éœ²å‡ºã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" msgid "Grayscale" msgstr "グレースケール" #. Lens correction page msgid "Lens correction" msgstr "レンズ補正" msgid "Base curve" msgstr "基本カーブ" msgid "Color management" msgstr "カラーマãƒã‚¸ãƒ¡ãƒ³ãƒˆ" msgid "Correct luminosity, saturation" msgstr "è¼åº¦ãƒ»å½©åº¦ã®è£œæ­£" msgid "Lightness Adjustments" msgstr "明度調整" msgid "Crop and rotate" msgstr "切り抜ãã¨å›žè»¢" msgid "Save" msgstr "ä¿å­˜" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "表示å€çŽ‡ï¼ˆãƒ‘ãƒ¼ã‚»ãƒ³ãƒˆï¼‰" msgid "Options" msgstr "オプション" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_削除" msgid "Send image to _Gimp" msgstr "イメージを_Gimpã¸é€ã‚‹" msgid "Fatal error setting C locale" msgstr "深刻ãªã‚¨ãƒ©ãƒ¼ : Cロケールã®è¨­å®š" #, c-format msgid "Curve version is not supported" msgstr "ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚«ãƒ¼ãƒ–ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "ニコンカーブã®ãƒ•ァイルãŒä¸æ­£ã§ã™ '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "カーブファイルを開ãã®ã«å¤±æ•—ã—ã¾ã—㟠'%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "ファイルを開ãã®ã«å¤±æ•—ã—ã¾ã—㟠'%s': %s" msgid "File exists" msgstr "ファイルãŒå­˜åœ¨ã—ã¾ã™" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "ファイル'%s'ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚\n" "上書ãã—ã¾ã™ã‹ï¼Ÿ" msgid "Error creating temporary file." msgstr "一時ファイル作æˆã‚¨ãƒ©ãƒ¼" msgid "Error activating Gimp." msgstr "" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "カメラã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ãŒä½¿ãˆãªã„ã®ã§è‡ªå‹•ホワイトãƒãƒ©ãƒ³ã‚¹ã«æˆ»ã‚Šã¾ã™ã€‚\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "--temperatureã¨--greenオプションã¯--wb=%sを上書ãã—ã¾ã™" #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' ã¯ãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹ã®è¨­å®šã¨ã—ã¦æ­£ã—ãã‚りã¾ã›ã‚“" msgid "Remote URI is not supported" msgstr "リモートã®URIã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "ダークフレームエラー: %sã¯rawファイルã§ã¯ã‚りã¾ã›ã‚“\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "ダークフレーム'%s'ã®èª­è¾¼ã«å¤±æ•—ã—ã¾ã—ãŸ\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "ダークフレーム '%s' ã¯ãƒ¡ã‚¤ãƒ³ç”»åƒã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“" #, c-format msgid "using darkframe '%s'\n" msgstr "ダークフレーム'%s'を使用\n" msgid "Error reading NEF curve" msgstr "NEFカーブã®èª­è¾¼ã«å¤±æ•—ã—ã¾ã—ãŸ" #, c-format msgid "Can not downsize from %d to %d." msgstr "%d ã‹ã‚‰ %d ã¸ãƒ€ã‚¦ãƒ³ã‚µã‚¤ã‚ºã§ãã¾ã›ã‚“。" #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "ファイル作æˆã‚¨ãƒ©ãƒ¼ '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "ファイル作æˆã‚¨ãƒ©ãƒ¼ã€‚" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "ç”»åƒã®ãƒ•ァイルåã¯IDã®ãƒ•ァイルåã¨åŒã˜ã«ã¯ã§ãã¾ã›ã‚“ '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "出力プロファイル'%s'ã‚’'%s'ã¸åŸ‹è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸ" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "'%d' ã¯ã‚µãƒãƒ¼ãƒˆã•れãªã„色深度ãªã®ã§ç„¡è¦–ã—ã¾ã—ãŸã€‚" #, c-format msgid "Unknown file type %d." msgstr "%dã®ãƒ•ァイルタイプãŒä¸æ˜Žã§ã™ã€‚" #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "直射日光" #. Probably same as above: msgid "Direct sunlight" msgstr "直射日光" msgid "Cloudy" msgstr "曇り" #. "Shadows" should be switched to this: msgid "Shade" msgstr "日陰" msgid "Incandescent" msgstr "白熱光" msgid "Incandescent warm" msgstr "暖白熱光" #. Same as "Incandescent": msgid "Tungsten" msgstr "タングステンç¯" msgid "Fluorescent" msgstr "è›å…‰ç¯" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "è›å…‰é«˜åœ§æ°´éŠ€ç¯" msgid "Cool white fluorescent" msgstr "冷白色è›å…‰ç¯" msgid "Warm white fluorescent" msgstr "温白色è›å…‰ç¯" msgid "Daylight fluorescent" msgstr "昼光色è›å…‰ç¯" msgid "Neutral fluorescent" msgstr "自然色è›å…‰ç¯" msgid "White fluorescent" msgstr "白色è›å…‰ç¯" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "ãƒŠãƒˆãƒªã‚¦ãƒ ç¯æ··åˆå…‰" msgid "Day white fluorescent" msgstr "昼白色è›å…‰ç¯" msgid "High temp. mercury-vapor fluorescent" msgstr "" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "フラッシュ (オートモード)" msgid "Evening sun" msgstr "夕日" msgid "Underwater" msgstr "水中" msgid "Black & white" msgstr "黒白" msgid "Manual WB" msgstr "マニュアルWB" msgid "Camera WB" msgstr "カメラWB" msgid "Auto WB" msgstr "自動WB" ufraw-0.19.2/po/sr@latin.po0000664000175000017500000013144612123734456012424 00000000000000# Serbian translation of UFRaw # Copyright (C) 2008-2013 Udi Fuchs. # This file is distributed under the same license as the ufraw package. # Courtesy of Prevod.org team (http://prevod.org/) -- 2008, 2009. # MiloÅ¡ Popović , 2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-16 12:54+0100\n" "Last-Translator: MiloÅ¡ Popović \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Otvori navigacioni prozor" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Vrednost %.*f je prevelika, skraćujem na %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Vrednost %.*f je premala, povećavam na %.*f." msgid "No input file, nothing to do." msgstr "Nema ulazne datoteke." #, c-format msgid "Loaded %s %s" msgstr "UÄitano %s %s" #, c-format msgid "Saved %s %s" msgstr "SaÄuvano %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "d" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: da prepiÅ¡em „%s“?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent mogućnost se koristi samo u paketnom režimu" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent mogućnost se koristi samo u paketnom režimu" msgid "Raw images" msgstr "Raw slike" msgid "UFRaw ID files" msgstr "NLRaw IB datoteke" msgid "Raw jpeg's" msgstr "Raw jpeg" msgid "Raw tiff's" msgstr "Raw tiff" msgid "All files" msgstr "Sve datoteke" msgid "Show hidden files" msgstr "Prikaži skrivene datoteke" msgid "Manual curve" msgstr "RuÄno napravljena kriva" msgid "Linear curve" msgstr "Linearna kriva" msgid "Custom curve" msgstr "Proizvoljna kriva" msgid "Camera curve" msgstr "Kriva iz kamere" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Nema profila" msgid "Color matrix" msgstr "Matrica boja" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (umetniti)" msgid "System default" msgstr "Podrazumevano u sistemu" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "" "PokuÅ¡avam prevoÄ‘enje .ufrawrc datoteke iz NLRaw-0.4 ili ranijeg izdanja" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "" "PokuÅ¡avam prevoÄ‘enje .ufrawrc datoteke iz NLRaw-0.6 ili ranijeg izdanja" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "Izdanje NLRaw-a u .ufrawrc datoteci nije podržano" #, c-format msgid "Too many anchors for curve '%s'" msgstr "PreviÅ¡e veza za krivu „%s“" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "PreviÅ¡e podeÅ¡avanja za osvetnjenost u IB datotecu, zanemarujem\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Izgleda da IB datoteka %s nije ispravna\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Ne mogu da proÄitam IB datoteku %s\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "GreÅ¡ka pri pravljenju datoteke „%s“." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "GreÅ¡ka pri obradi „%s“\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Ne mogu da upiÅ¡em u %s datoteku\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "ne mogu da --create-id na standardnom izlazu" msgid "UFRaw " msgstr "NLRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Neidentifikovani Leteći Raw prevodilac za slike sa digitalnih kamera.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Upotreba: ufraw [ mogućnosti ... ] [ raw_datoteke ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ mogućnosti ... ] [ raw_datoteke ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ mogućnosti ... ] [ podrazumevani_direktorijum ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Podrazumevano, „ufraw“ prikazuje prozorÄe za pregled svake raw slike, \n" "dajući korisniku mogućnost podeÅ¡avanja parametara slike pre njenog Äuvanja.\n" "Ukoliko nisu date raw slike u komandnoj liniji, NLRaw će prikazati " "prozorÄe.\n" "za izbor datoteke. Za obradu fotografija bez ikakvih pitanja (i bez " "pregleda)\n" "koristite „ufraw-batch“.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Ulazne datoteke mogu biti raw slike ili NLRaw IB datoteke. IB datoteke\n" "sadrže naziv raw slike i parametre za sreÄ‘ivanje slike. IB datoteke se mogu\n" "pozvati sa mogućnostima:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=IB_datoteka Primenjuje parametre iz IB datoteke na ostale raw " "slike.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Ostale mogućnosti su razdvojene u dve grupe.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Mogućnosti vezane za rad sa slikom su:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto PodeÅ¡avanje ravnoteže bele.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "" "--temperature=Temperatura\n" " Temperatura boje u Kelvinima.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "" "--green=Zelena UjednaÄenje zelene komponente u ravnoteži bele.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|Kriva\n" " Vrsta osnovne krive. „Kriva“ može da bude bilo koja\n" " kriva koja je prethodno uÄitana u grafiÄkom " "okruženju.\n" " (podrazumevana kriva iz kamere ukoliko postoji,\n" " a u suprotnom linearna).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=Datoteka\n" " Koristi osnovnu krivu iz zasebne datoteke. Ova\n" " mogućnost ima prednost nad --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|Kriva\n" " Vrsta krive za kanal sa luminansom. „Kriva“ može\n" " da bude lilo koja kriva koja je prethodno uÄitana\n" " u grafiÄkom okruženju (podrazumevano linearna).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=Datoteka Koristi krivu za kanal sa luminansom iz zasebne " "datoteke.\n" " Ova mogućnost ima prednost nad --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " IzvlaÄenje detalja za negativan EV.\n" " „clip“ ne izvlaÄi niÅ¡ta — bez artefakta.\n" " „lch“ izvlaÄi u LCH prostoru — daje blage detalje.\n" " „hsv“ izvlaÄi u HSV prostoru — daje oÅ¡tre detalje.\n" " (podrazumevano je lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Isecanje svetlih delove na pozitivan EV.\n" " „digital“ linearni digitalni zapis senzora.\n" " „film“ simulira blagi zapis film (podrazumevano je " "digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=Gama PodeÅ¡avanje Gama vrednosti osnovne krive " "(podrazumevano je\n" " 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=Lin. Linearnost osnovne krive (podrazumevano je 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=Kontrast PodeÅ¡avanje kontrasta (podrazumevano je 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=Zasićenost\n" " PodeÅ¡avanje zasićenosti (podrazumevano je 1.0, " "odnosno\n" " 0 za crno-bele slike).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=Osetljivost\n" " Osetljivost za talasno uklanjanje Å¡uma (podrazumevano " "je 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VREDNOST\n" " Osetljivost pri traženju i Äuvanju pregorelih piksela " "(podrazumevano je 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|Ekspozicija\n" " SamoodreÄ‘ivanje ekspozicije ili ispravka ekspozicije\n" " u EV (podrazumevano je 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|Crna\n" " SamoodreÄ‘ivanje crne taÄke ili vrednost crne taÄke\n" " (podrazumevano je 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algoritam za interpolaciju(podrazumevani je ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Primenjuje uglaÄ‘ivanje boja.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritam za prevod u sive tonove (podrazumevano ne\n" " koristi ni jedan).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritam za prevod u sive tonove (podrazumevano ne\n" " koristi ni jedan).\n" msgid "The options which are related to the final output are:\n" msgstr "Mogućnosti vezane za krajnji izlaz su:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=Faktor Sužavanje slike za odreÄ‘eni faktor (podrazumevano je " "1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "" "--size=VeliÄina Smanjivanje slike (visina,Å¡irina) na „VeliÄina“.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Izlazni format slike (podrazumevani je ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Broj bita po kanalu (podrazumevano je 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Pravljenje IB datoteke (podrazumevano je ne pravi).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "" "--compression=Vrednost\n" " JPEG kompresija (0-100, podrazumevano je 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Umeće EXIF u razvijenu sliku (podrazumevano umeće " "EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Zip pakovanje TIFF datoteka (podrazumevano ne pakuje u " "Zip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image IzvlaÄi pregled slike umetnut u raw datoteku umesto\n" " da prevodi raw sliku.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|Ugao|no\n" " Rotira sliku na postavke iz kamere, za „Ugao“ u\n" " stepenima, nadesno ili ne rotira sliku (podrazumevane\n" " su postavke iz kamere).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=Piksela\n" " Iseca izlaz za zadatu vrednost u pikselima, u odnosu " "na raw\n" " sliku nakon rotacije, ali pre promene veliÄine.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Ne ispravlja izobliÄenja soÄiva ili\n" " pokuÅ¡ava da automatski pronaÄ‘e objektiv kojim \n" " je slikano i sam ispravi izobliÄenja (podrazumevano\n" " ne ispravlja izobliÄenja).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=Putanja „Putanja“ za izlaznu datoteku (podrazumevano je u " "putanji\n" " ulazne datoteke).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=Datoteka Ime datoteke na izlazu, koristite „-“ za ispis na\n" " standardni izlaz.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=Datoteka Koristi zadatu datoteku za oduzimanje tamnim kadrom.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Prepisuje postojeće datoteke bez pitanja (nije " "podrazumevano).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Pokreće program u uvećanom prozor.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent Ne prikazuje nikakve poruke u paketnom režimu.\n" # Å ta je zapravo second group of options? msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "NLRaw najpre Äita podeÅ¡avanja iz $HOME/.ufrawrc datoteke. \n" "Nakon toga, ukoliko je zadata IB datoteka, Äita ta podeÅ¡avanja.\n" "Slede podeÅ¡avanja data kroz --conf opciju, zanemarujući \n" "ulazne/izlazne nazive datoteka iz IB datoteke.\n" "Na kraju se postavljaju opcije iz komandne linije. U paketnom\n" "režimu druga grupa opcija se NE Äita iz datoteke.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Poslednja mogućnost, --version prikazuje izdanje programa i mogućnosti koje " "su \n" "ukljuÄene tokom izgradnje programa, dok --help ispisuje ovu poruku.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "„%s“ nije ispravna vrednost za --%s mogućnost." msgid "ufraw was build without ZIP support." msgstr "ufraw je izgraÄ‘en bez podrÅ¡ke za ZIP datoteke." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch mogućnost je prevaziÄ‘ena. Koristite ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt je vratio kod karaktera 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "ne mogu da uÄitam krivu iz %s, ima previÅ¡e podeÅ¡enih osnovnih kriva" #, c-format msgid "failed to load curve from %s" msgstr "ne mogu da uÄitam krivu iz %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "„%s“ nije ispravan naziv osnovne krive." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "ne mogu da uÄitam krivu iz %s, ima previÅ¡e podeÅ¡enih kriva" #, c-format msgid "'%s' is not a valid curve name." msgstr "„%s“ nije ispravan naziv krive." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "„%s“ nije ispravna mogućnost za interpolaciju." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "„%s“ nije ispravna mogućnost za sive tonove." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "„%s“ nije ispravna mogućnost za sive tonove." #, c-format msgid "'%s' is not a valid restore option." msgstr "„%s“ nije ispravna mogućnost za izvlaÄenje detalja." #, c-format msgid "'%s' is not a valid clip option." msgstr "„%s“ nije ispravna mogućnost za isecanje." msgid "you can not specify both --shrink and --size" msgstr "ne možete koristiti --shrink i --size mogućnosti zajedno" #, c-format msgid "'%d' is not a valid bit depth." msgstr "„%d“ nije ispravan broj bitova." #, c-format msgid "Output type '%s' is deprecated" msgstr "Izlazna vrsta „%s“ je prevaziÄ‘ena" msgid "ufraw was build without TIFF support." msgstr "ufraw je izgraÄ‘en bez podrÅ¡ke za TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw je izgraÄ‘en bez podrÅ¡ke za JPEG" msgid "ufraw was build without PNG support." msgstr "ufraw je izgraÄ‘en bez podrÅ¡ke za PNG" #, c-format msgid "'%s' is not a valid output type." msgstr "„%s“ nije ispravna izlazna vrsta." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "„%s“ nije ispravna izlazna vrsta za umetnutu sliku." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "„%d“ nije ispravan broj bitova za umetnutu sliku." #, c-format msgid "'%s' is not a valid rotate option." msgstr "„%s“ nije ispravna vrednost rotacije." #, c-format msgid "'%s' is not a valid create-id option." msgstr "„%s“ nije ispravna create-id mogućnost." #, c-format msgid "'%s' is not a valid path." msgstr "„%s“ nije ispravna putanja." msgid "cannot output more than one file to the same output" msgstr "ne mogu da izbacim viÅ¡e od jedne datoteke na isti izlaz" #, c-format msgid "Raw file '%s' missing." msgstr "Nedostaje raw datoteka „%s“." msgid "Delete raw file" msgstr "ObriÅ¡i raw datoteku" msgid "_Delete selected" msgstr "_ObriÅ¡i izabrano" msgid "Delete _All" msgstr "ObriÅ¡i _sve" msgid "Select files to delete" msgstr "Izaberite datoteke za brisanje" #, c-format msgid "Error reading directory '%s'." msgstr "GreÅ¡ka pri Äitanju direktorijuma „%s“." #, c-format msgid "Error deleting '%s'" msgstr "GreÅ¡ka pri brisanju „%s“" msgid "Reading embedded image requires libjpeg." msgstr "ÄŒitanje umetnute slike zahteva libjpeg." msgid "No embedded image found" msgstr "Nije naÄ‘ena umetnuta slika" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Originalna veliÄina (%d) ja manja od zadate (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm pregled se ne poklapa, visina %d, Å¡irina %d, a bafer je %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "visina za JPEG pregled %d se razlikuje od oÄekivane (%d)." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Å¡irina za JPEG pregled %d se razlikuje od oÄekivane (%d)." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "GreÅ¡ka pri pravljenju datoteke „%s“.\n" "%s" msgid "No embedded image read" msgstr "Nema umetnute slike za Äitanje" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "GreÅ¡ka pri pravljenju datoteke „%s“. Nepoznata vrsta datoteke %d." #, c-format msgid "Error creating file '%s': %s" msgstr "GreÅ¡ka pri pravljenju datoteke „%s“: %s" #, c-format msgid "Error writing '%s'" msgstr "GreÅ¡ka u pisanju „%s“" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Nije podržana izlazna vrsta (%d) za umetnute slike" #, c-format msgid "Loading raw file '%s'" msgstr "UÄitavam raw datoteku „%s“" msgid "Can't allocate new image." msgstr "Ne mogu da uÄitam novu sliku." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Pozadina" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Nije uspelo umetanje izlaznog profila „%s“ u sliku." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF bafera je prevelik (%d). IgnoriÅ¡em." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Tvorac:\t\t\t%s\n" "Model:\t\t\t%s%s\n" "Stativ:\t\t\t%s\n" "Faktor isecanja:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "ProizvoÄ‘aÄ:\t\t%s\n" "Model:\t\t\t%s\n" "Žižna daljina:\t\t%s\n" "Otvor blende:\t\t%s\n" "Isecanje senzora:\t%.1f\n" "Vrsta:\t\t\t%s\n" "Stativi:\t\t\t%s" msgid "Focal" msgstr "Žiža" msgid "Focal length" msgstr "Žižna daljina" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-broj (otvor blende)" msgid "Distance" msgstr "Udaljenost" msgid "Distance to subject in meters" msgstr "Udaljenost od motiva u metrima" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "MatematiÄki model hromatskih aberacija" msgid "Parameters" msgstr "Parametri" msgid "Optical vignetting mathematical model" msgstr "MatematiÄki model optiÄkog vinjetarenja" msgid "Lens distortion mathematical model" msgstr "matematiÄki model izobliÄenja soÄiva" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometrija soÄiva:" msgid "The geometry of the lens used to make the shot" msgstr "Geometrija soÄiva kojim je snimak napravljen" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Ciljna geometrija:" msgid "The target geometry for output image" msgstr "Ciljna geometrija izlazne slike" msgid "Camera" msgstr "Kamera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Traži kameru na osnovu mustre\n" "Format: [Tvorac, ][Model]" msgid "Choose camera from complete list" msgstr "Bira kameru iz celokupnog spiska" msgid "Reset all lens correction settings" msgstr "Vraća sva podeÅ¡avanja soÄiva" #. Lens selector msgid "Lens" msgstr "Objektiv" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Traži objektiv na osnovu mustre\n" "Format: [Tvorac, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Bira objektiv iz celokupnog spiska" msgid "Automatically find lens and set lens corrections" msgstr "Sam nalazi model objektiva i ispravlja izobliÄenja" msgid "Lateral chromatic aberration" msgstr "BoÄne hromatske aberacije" msgid "Optical vignetting" msgstr "OptiÄko vinjetarenje" msgid "Lens distortion" msgstr "IzobliÄenja soÄiva" msgid "Lens geometry" msgstr "Geometrija soÄiva" msgid "Raw histogram with conversion curves" msgstr "Raw histogram sa krivama za prevoÄ‘enje" msgid "Live histogram" msgstr "Živi histogram" #. No darkframe file msgid "None" msgstr "NiÅ¡ta" msgid "Lightness" msgstr "Osvetljenost" msgid "Luminance" msgstr "Luminansa" msgid "Value" msgstr "Vrednost" msgid "Channel Mixer" msgstr "Mikser kanala" #, fuzzy msgid "UFRaw Message" msgstr "NLRaw " msgid "No more room for new curves." msgstr "Nema mesta za nove krive." msgid "Load curve" msgstr "UÄitaj krivu" msgid "All curve formats" msgstr "Svi formati kriva" msgid "UFRaw curve format" msgstr "NLRaw format krive" msgid "Nikon curve format" msgstr "Nikonov format krive" msgid "Save curve" msgstr "SaÄuvaj krivu" msgid "No more room for new profiles." msgstr "Nem viÅ¡e mesta za nove profile" msgid "Load color profile" msgstr "UÄitaj profil boja" msgid "Color Profiles" msgstr "Profili boja" msgid "Luminosity (Y value)" msgstr "Luminansa (Y vrednost)" msgid "Adams' zone" msgstr "Adamsova zona" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "veliÄina %dx%d, uvećanje %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "veliÄina %dx%d, u razmeri 1/%d" msgid "Wavelet denoising" msgstr "Talasno uklanjanje Å¡uma" msgid "Despeckling" msgstr "Rasplitanje" msgid "Interpolating" msgstr "Primenjujem interpolaciju" msgid "Rendering" msgstr "Iscrtavam" msgid "Loading preview" msgstr "UÄitavam pregled" msgid "Saving image" msgstr "ÄŒuvam sliku" #, c-format msgid "Black point: %0.3lf" msgstr "Crna taÄka: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Nema mesta za nova podeÅ¡avanja osvetljenja." msgid "Aspect ratio locked, click to unlock" msgstr "Razmera je zakljuÄana, kliknite da je otkljuÄate" msgid "Aspect ratio unlocked, click to lock" msgstr "Razmera je otkljuÄana, kliknite da je zakljuÄate" msgid "Load dark frame" msgstr "UÄitaj tamni kadar" msgid "clip" msgstr "potpuno isecanje (bez artafakta)" msgid "restore in LCH space for soft details" msgstr "izvlaÄenje u LCH prostoru za blage detalje" msgid "restore in HSV space for sharp details" msgstr "izvlaÄenje u HSV prostoru za oÅ¡tre detalje" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "IzvlaÄi detalje za negativan EV\n" "Trenutno je izabrano: %s" msgid "digital linear" msgstr "linearno kao kod digitalnih senzora" msgid "soft film like" msgstr "blago kao na filmu" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "IzvlaÄi svetle delove za pozitivan EV\n" "Trenutno je izbrano: %s" #, c-format msgid "Filename: %s%s" msgstr "Naziv datoteke: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Napravi i IB datoteku" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Napravi samo IB datoteku" msgid "UFRaw options" msgstr "NLRaw mogućnosti" msgid "Settings" msgstr "PodeÅ¡avanja" msgid "Input color profiles" msgstr "Ulazni profil boja" msgid "Output color profiles" msgstr "Izlazni profil boja" msgid "Display color profiles" msgstr "Profil boja ekrana" msgid "Base Curves" msgstr "Osnovne krive" msgid "Luminosity Curves" msgstr "Krive za luminansu" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Komanda za pozivanje Gimpa " msgid "Reset command to default" msgstr "Vrati komandu na podrazumevanu vrednost" msgid "Blink Over/Underexposure Indicators" msgstr "Trepteći indikatori pre/podeksponiranih delova" msgid "Configuration" msgstr "PodeÅ¡avanje" msgid "Save configuration" msgstr "SaÄuvaj podeÅ¡avanje" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "SaÄuvaj podeÅ¡avanje u datoteku ($HOME/.ufrawrc)" msgid "Log" msgstr "Dnevnik" msgid "About" msgstr "O programu" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Neidentifikovani Leteći Raw (NLRaw) je alat za\n" "Äitanje i obradu raw slika iz digitalnih kamera.\n" "NLRaw se oslanja na Raw za Digitalne Kamere (DCRaw)\n" "za samo prevoÄ‘enje raw slika.\n" "\n" "Autor: Udi Fuchs\n" "Veb adresa: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Linearno" msgid "Logarithmic" msgstr "Logaritamski" msgid "Hot pixels: " msgstr "Pregoreli pikseli:" msgid "mark" msgstr "oznaÄi" msgid "Hot pixel sensitivity" msgstr "Osetljivost na pregorevanje" msgid "Reset hot pixel sensitivity" msgstr "Vraća osetljivost za pregorele piksele" msgid "RGB histogram" msgstr "RGB histogram" msgid "R+G+B histogram" msgstr "R+G+B histogram" msgid "Luminosity histogram" msgstr "Histogram luminanse" msgid "Value (maximum) histogram" msgstr "Histogram (najveće) vrednosti" msgid "Saturation histogram" msgstr "Histogram zasićenosti" msgid "Average:" msgstr "Prosek:" msgid "Std. deviation:" msgstr "St. devijacija:" msgid "Overexposed:" msgstr "Preeksponirano:" msgid "Indicate" msgstr "Pokaži" msgid "Underexposed:" msgstr "Podeksponirano:" msgid "White Balance" msgstr "Ravnoteža bele" msgid "Cannot use camera white balance." msgstr "Ne mogu da koristim ravnotežu bele iz aparata." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Ne postoje podeÅ¡avanja ravnoteže bele za vaÅ¡ foto-aparat.\n" "Proverite NLRaw veb stranicu za podatke o ukljuÄivanju\n" "vaÅ¡eg aparata u listu podržanih." msgid "Reset white balance to initial value" msgstr "Vrati ravnotežu bele na poÄetnu vrednost" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Temperatura za ravnotežu bele u K" msgid "Green" msgstr "Zelena" msgid "Green component" msgstr "Zelena komponenta" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Izaberite taÄku u pregledu slike na osnovu koje se primenjuje ravnoteža bele" msgid "Chan. multipliers:" msgstr "Množioci kanala:" msgid "Bayer pattern interpolation" msgstr "Interpolacija Bajerovom mustrom" msgid "VNG four color interpolation" msgstr "VNG Äetvorobojna interpolacija" msgid "Bilinear interpolation" msgstr "Dvolinearna interpolacija" msgid "AHD interpolation" msgstr "AHD interpolacija" msgid "VNG interpolation" msgstr "VNG interpolacija" msgid "PPG interpolation" msgstr "PPG interpolacija" msgid "No interpolation" msgstr "Bez interpolacije" msgid "No Bayer pattern" msgstr "Ne postoji Bajerova mustra" msgid "Apply color smoothing" msgstr "Primeljuje uglaÄ‘ivanje boja" msgid "Denoise" msgstr "Uklanjanje Å¡uma" msgid "Threshold for wavelet denoising" msgstr "Osetljivost za talasno uklanjanje Å¡uma" msgid "Reset denoise threshold to default" msgstr "Vrati podrazumevanu vrednost osetljivosti na Å¡um" msgid "Dark Frame:" msgstr "Tamni kadar:" msgid "Reset dark frame" msgstr "PoniÅ¡ti tamni kadar" msgid "Reset adjustment" msgstr "PoniÅ¡ti podeÅ¡avanja" msgid "Select a spot on the preview image to choose hue" msgstr "Izaberite taÄku u pregledu slike na osnovi koje se primenjuje nijansa" msgid "Remove adjustment" msgstr "Ukloni podeÅ¡avanje" msgid "Grayscale Mode:" msgstr "Režim sivih tonova:" msgid "Reset channel mixer" msgstr "Resetuj mikser kanala" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Rasplitanje je korisno kada upotrebite veliku ISO vrednost i velike množioce " "kanala: kada je odreÄ‘eni kanal ima loÅ¡ odnos signala i Å¡uma. PokuÅ¡ajte da " "postavite vrednosti veliÄine prozora, smanjenja boje i broja prolaza na " "50,0,5 za taj kanal. Kada kanal sadrži samo Å¡um, probajte vrednosti " "1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgid "Update channel parameters together" msgstr "Osvežava sve vrednosti kanala zajedno" msgid "Reset despeckle parameters" msgstr "PoniÅ¡tiava vrednosti za rasplitanje" #. channel to view msgid "View channel:" msgstr "Prikaz kanala:" #. Parameters msgid "Window size:" msgstr "VeliÄina prozora:" msgid "Color decay:" msgstr "Smanjenje boje:" msgid "Passes:" msgstr "Broj prolaza:" msgid "Load base curve" msgstr "UÄitaj osnovnu krivu" msgid "Save base curve" msgstr "SaÄuvaj osnovnu krivu" msgid "Reset base curve to default" msgstr "Vrati osnovnu krivu na podrazumevano" msgid "Input ICC profile" msgstr "Ulazni ICC profil" msgid "Output ICC profile" msgstr "Izlazni ICC profil" msgid "Display ICC profile" msgstr "ICC profil ekrana" msgid "Gamma" msgstr "Gama" msgid "Gamma correction for the input profile" msgstr "Ispravka gama vrednosti za ulazni profil" msgid "Reset gamma to default" msgstr "Vrati gama vrednost na podrazumevano" msgid "Linearity" msgstr "Linearnost" msgid "Linear part of the gamma correction" msgstr "Linearna ispravka gama vrednosti" msgid "Reset linearity to default" msgstr "Vrati linearnost na podrazumevano" msgid "Output intent" msgstr "Izlazna namera" msgid "Perceptual" msgstr "Perceptivno" msgid "Relative colorimetric" msgstr "Relativno kolorimetriski" msgid "Saturation" msgstr "Zasićenost" msgid "Absolute colorimetric" msgstr "Apsolutno kolorimetriski" msgid "Output bit depth" msgstr "Broj bitova na izlazu" msgid "Display intent" msgstr "Prikazna namera" msgid "Disable soft proofing" msgstr "Onemogući korekciju iz programa" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Globalno podeÅ¡avanje kontrasta" msgid "Reset global contrast to default" msgstr "Vrati globalno podeÅ¡avanje kontrasta" msgid "Reset saturation to default" msgstr "Vrati zasićenost na podrazumevano" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Sam podesi krivu\n" "(Ravna histogram)" msgid "Reset curve to default" msgstr "Vrati krivu na podrazumevano" msgid "Reset black-point to default" msgstr "Vrati crnu taÄku na podrazumevano" msgid "Auto adjust black-point" msgstr "Sam podesi crnu taÄku" #. Start of Crop controls msgid "Left:" msgstr "Levo:" msgid "Top:" msgstr "Gore:" msgid "Right:" msgstr "Desno:" msgid "Bottom:" msgstr "Dole:" msgid "Auto fit crop area" msgstr "Sam iseca sliku na najbolju veliÄinu" #, fuzzy msgid "Reset the crop area" msgstr "PoniÅ¡ti region za isecanje" msgid "Aspect ratio:" msgstr "Razmera:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Razmera povrÅ¡ine za isecanje.\n" "Možete uneti decimalni zapis (1.273)\n" "ili u vidu dva broja (14:11)" msgid "Shrink factor" msgstr "Faktor suženja" msgid "Width" msgstr "Å irina" msgid "Height" msgstr "Visina" msgid "Orientation:" msgstr "Okretanje:" msgid "Rotation" msgstr "Rotacija" msgid "Rotation angle" msgstr "Ugao rotacije" msgid "Reset rotation angle" msgstr "PoniÅ¡tiava ugao rotacije" #. drawLines toggle button msgid "Grid lines" msgstr "Linije mreže" msgid "Number of grid lines to overlay in the crop area" msgstr "Broj linija u mreži koje se prikazuju iznad slike" msgid "Path" msgstr "Putanja" msgid "Select output path" msgstr "Izaberite izlaznu putanju" msgid "Filename" msgstr "Naziv datoteke" msgid "JPEG compression level" msgstr "Nivo JPEG kompresije" msgid "JPEG progressive encoding" msgstr "Progresivno JPEG kodiranje" msgid "TIFF lossless Compress" msgstr "TIFF kompresija bez gubitka" msgid "Embed EXIF data in output" msgstr "Umetni EXIF podatke u razvijenu sliku" msgid "Create ID file " msgstr "Napravi IB datoteku " msgid "No" msgstr "Ne" msgid "Also" msgstr "TakoÄ‘e" msgid "Only" msgstr "Samo" msgid "Save image defaults " msgstr "SaÄuvaj kao podrazumevano " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "ÄŒuva tekuće parametre u obradi slike kao podrazumevane.\n" "Uvek se Äuvaju izlazni parametri u ovom prozoru." msgid "Never again" msgstr "Nikad viÅ¡e" msgid "Always" msgstr "Uvek" msgid "Just this once" msgstr "Samo ovaj put" msgid "Remember output path" msgstr "Zapamti izlaznu putanju" msgid "Overwrite existing files without asking" msgstr "PrepiÅ¡i postojeće datoteke bez pitanja" msgid "Tag" msgstr "Oznaka" #. Fill table with EXIF tags msgid "Camera maker" msgstr "ProizvoÄ‘aÄ kamere" msgid "Camera model" msgstr "Model kamere" msgid "Timestamp" msgstr "Datum i vreme" msgid "Shutter time" msgstr "Dužina ekspozocije" msgid "Aperture" msgstr "Otvor blende" msgid "ISO speed" msgstr "ISO vrednost" msgid "35mm focal length" msgstr "Žižna daljina na 35mm" msgid "Flash" msgstr "Blic" msgid "White balance" msgstr "Ravnoteža bele" #, c-format msgid "EXIF data read by %s" msgstr "EXIF podaci su proÄitani pomoću %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Upozorenje: EXIF podaci neće biti poslati u izlazu" #, c-format msgid "%s - UFRaw" msgstr "%s - NLRaw" msgid "Spot values:" msgstr "Vrednosti taÄke:" msgid "Exposure compensation in EV" msgstr "Kompenzacija ekspozicije u EV" msgid "Auto adjust exposure" msgstr "Sam podesi ekspoziciju" msgid "Reset exposure to default" msgstr "Vrati ekspoziciju na podrazumevanu vrednost" msgid "Grayscale" msgstr "Sivi tonovi" #. Lens correction page msgid "Lens correction" msgstr "Korekcija soÄiva" msgid "Base curve" msgstr "Osnovna kriva" msgid "Color management" msgstr "Upravljanje bojama" msgid "Correct luminosity, saturation" msgstr "Ispravka luminanse i zasićenosti" msgid "Lightness Adjustments" msgstr "PodeÅ¡avanje osvetljenosti" msgid "Crop and rotate" msgstr "Isecanje i rotiranje" msgid "Save" msgstr "SaÄuvaj" msgid "EXIF" msgstr "EXIF podaci" msgid "Zoom percentage" msgstr "Uvećanje u procentima" msgid "Options" msgstr "Postavke" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_ObriÅ¡i" msgid "Send image to _Gimp" msgstr "PoÅ¡alju u _Gimp" msgid "Fatal error setting C locale" msgstr "Kobna greÅ¡ka pri postavljanju lokalizacije" #, c-format msgid "Curve version is not supported" msgstr "Izdanje krive nije podržano" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Neispravna Nikonova datoteka sa krivom „%s“" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "GreÅ¡ka pri otvaranju datoteke sa krivom „%s“: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "GreÅ¡ka pri otvaranju datoteke „%s“: %s" msgid "File exists" msgstr "Datoteka već postoji" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Već postoji „%s“ datoteka.\n" "Da prepiÅ¡em?" msgid "Error creating temporary file." msgstr "GreÅ¡ka pri pravljenju privremene datoteke." msgid "Error activating Gimp." msgstr "GreÅ¡ka u pokretanju Gimpa." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Ne mogu da koristim ravnotežu bele iz kamere, sam odreÄ‘ujem ravnotežu.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "mogućnosti --temperature i --green imaju prednost nad --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "„%s“ nije ispravna vrednost ravnoteže bele." msgid "Remote URI is not supported" msgstr "Udaljene adrese nisu podržane" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "greÅ¡ka u tamnom kadru: %s nije raw datoteka\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "greÅ¡ka pri uÄitavanju tamnog kadra „%s“\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Tamni kadar „%s“ ne odgovara slici" #, c-format msgid "using darkframe '%s'\n" msgstr "koristim tamni kadar „%s“\n" msgid "Error reading NEF curve" msgstr "GreÅ¡ka pri Äitanju NEF krive" #, c-format msgid "Can not downsize from %d to %d." msgstr "Ne mogu da smanjim sa %d na %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "GreÅ¡ka pri pravljenju datoteke „%s“." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "GreÅ¡ka pri pravljenju datoteke." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "Naziv datoteke sa slikom ne može da bude isti kao i naziv IB datoteke „%s“." #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Ne mogu da umetnem izlazni profil „%s“ u „%s“." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Zanemaren je nepodržan broj bitova „%d“" #, c-format msgid "Unknown file type %d." msgstr "Nepoznata vrsta datoteke %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Dnevna svetlost" #. Probably same as above: msgid "Direct sunlight" msgstr "Direktno sunce" msgid "Cloudy" msgstr "OblaÄno vreme" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Senka" msgid "Incandescent" msgstr "Sijalica" msgid "Incandescent warm" msgstr "Topla sijalica" #. Same as "Incandescent": msgid "Tungsten" msgstr "Sijalica" msgid "Fluorescent" msgstr "Neonka" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Visoko florescentna neonka" msgid "Cool white fluorescent" msgstr "Hladna bela neonka" msgid "Warm white fluorescent" msgstr "Topla bela neonka" msgid "Daylight fluorescent" msgstr "Neonka sa dnevnom svetlošću" msgid "Neutral fluorescent" msgstr "Neutralna neonka" msgid "White fluorescent" msgstr "Bela neonka" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Neonka sa natrijumovom parom" msgid "Day white fluorescent" msgstr "Bela neonka sa dnevnom svetlošću" msgid "High temp. mercury-vapor fluorescent" msgstr "Živina neonka visoke temperature" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Blic (automatski režim)" msgid "Evening sun" msgstr "VeÄernje sunce" msgid "Underwater" msgstr "Pod vodom" msgid "Black & white" msgstr "Crno-belo" msgid "Manual WB" msgstr "RuÄna ravnoteža bele" msgid "Camera WB" msgstr "Ravnoteža bele iz kamere" msgid "Auto WB" msgstr "Sam odredi ravnotežu bele" ufraw-0.19.2/po/zh_TW.po0000664000175000017500000012422512123734456011700 00000000000000# Traditional Chinese translation of UFRaw. # Copyright (C) 2010-2013 Udi Fuchs & Lu, Chao-Ming (Tetralet). # This file is distributed under the same license as the UFRaw package. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-06-15 00:00+0800\n" "Last-Translator: Tetralet \n" "Language-Team: Tetralet \n" "Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "開啟導航視窗" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "數值 %.*f éŽå¤§ã€‚調整為 %.*f。" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "數值 %.*f éŽå°ã€‚調整為 %.*f。" msgid "No input file, nothing to do." msgstr "沒有輸入檔,無事å¯åšã€‚" #, c-format msgid "Loaded %s %s" msgstr "已載入 %s %s" #, c-format msgid "Saved %s %s" msgstr "已儲存 %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "是(y)" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "å¦(n)" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s:是å¦è¦†å¯« '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent é¸é …åªé©ç”¨æ–¼æ‰¹æ¬¡è™•ç†æ¨¡å¼" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent é¸é …åªé©ç”¨æ–¼æ‰¹æ¬¡è™•ç†æ¨¡å¼" msgid "Raw images" msgstr "Raw å½±åƒ" msgid "UFRaw ID files" msgstr "UFRaw ID 檔" msgid "Raw jpeg's" msgstr "jpeg æ ¼å¼çš„ Raw" msgid "Raw tiff's" msgstr "tiff æ ¼å¼çš„ Raw" msgid "All files" msgstr "所有檔案" msgid "Show hidden files" msgstr "é¡¯ç¤ºéš±è—æª”" msgid "Manual curve" msgstr "手動曲線" msgid "Linear curve" msgstr "線性曲線" msgid "Custom curve" msgstr "自訂曲線" msgid "Camera curve" msgstr "相機曲線" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "沒有設定檔" msgid "Color matrix" msgstr "é¡è‰²èª¿æ•´çŸ©é™£" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB(內嵌)" msgid "System default" msgstr "系統é è¨­å€¼" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "å˜—è©¦è½‰æ› UFRaw-0.4 或更早版本的 .ufrawrc" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "å˜—è©¦è½‰æ› UFRaw-0.6 或更早版本的 .ufrawrc" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "在 .ufrawrc 裡的版本資訊ä¸è¢«æ”¯æ´" #, c-format msgid "Too many anchors for curve '%s'" msgstr "曲線 '%s' 的錨點éŽå¤š" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "在 ID 檔案裡有太多的亮度調整值。已忽略\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID 檔案 %s ä¼¼ä¹Žä¸æ˜¯ä¸€èˆ¬çš„æª”案\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "無法開啟 ID 檔案 %s 以供讀å–\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "在建立檔案 '%s' 時發生錯誤。" #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "åœ¨è§£æž '%s' 時發生錯誤\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "無法開啟檔案 %s 以供寫入\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "ä¸èƒ½åœ¨æ¨™æº–輸出上使用 --create-id åƒæ•¸" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Unidentified Flying Raw 數ä½ç›¸æ©Ÿå½±åƒè½‰æ›ç¨‹å¼ã€‚\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "用法:ufraw [ é¸é … ... ] [ raw-å½±åƒæª” ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ é¸é … ... ] [ raw-å½±åƒæª” ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ é¸é … ... ] [ é è¨­ç›®éŒ„ ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "在é è¨­æƒ…æ³ä¸‹ï¼Œ'ufraw' 會替æ¯å€‹ RAW å½±åƒé¡¯ç¤ºé è¦½è¦–窗,讓使用者å¯ä»¥åœ¨å„²å­˜ä¹‹å‰\n" "調整影åƒåƒæ•¸ã€‚如果沒有在命令列中事先指定 RAW å½±åƒï¼ŒUFRaw æœƒè·³å‡ºä¸€å€‹é¸æ“‡æª”案\n" "çš„å°è©±è¦–窗。若è¦ä»¥éžäº’å‹•å¼ï¼ˆä¸”沒有é è¦½ï¼‰é€²è¡Œåœ–片處ç†ï¼Œè«‹ä½¿ç”¨ 'ufraw-" "batch'。\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "輸入檔å¯ä»¥æ˜¯ RAW å½±åƒæˆ– ufraw çš„ ID 檔案。ID 檔案包å«äº†åŽŸå§‹å½±åƒçš„\n" "檔案å稱,和該影åƒçš„處ç†åƒæ•¸ã€‚在指定 ID æª”æ¡ˆçš„åŒæ™‚也å¯ä»¥ä½¿ç”¨ä»¥ä¸‹é¸é …:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "--conf=ID-file å°‡ ID æª”æ¡ˆè£¡çš„åƒæ•¸å¥—用到其他的 raw å½±åƒã€‚\n" msgid "The rest of the options are separated into two groups.\n" msgstr "其餘的é¸é …分為兩大類。\n" msgid "The options which are related to the image manipulation are:\n" msgstr "和影åƒè™•ç†ç›¸é—œçš„é¸é …:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto 白平衡設定。\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP è‰²æº«ï¼Œä»¥çµ•å°æº«åº¦ K 標示。\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN 綠色正è¦åŒ–。\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " è¦ä½¿ç”¨çš„基本曲線。CURVE 的話就是使用在 GUI 裡已經\n" " 載入的曲線。(é è¨­å€¼ç‚º camera,如果有的話;å¦å‰‡ç‚º\n" " linear)。\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " ä½¿ç”¨åŒ…å«æ–¼æŒ‡å®šæª”案中的基本曲線。\n" " æœƒè“‹éŽ --base-curve é¸é …。\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " è¦ä½¿ç”¨çš„光度曲線。CURVE 的話就是在 GUI 裡已經載入的\n" " 曲線。(é è¨­å€¼ç‚º linear)。\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file ä½¿ç”¨åŒ…å«æ–¼æŒ‡å®šæª”案中的光度曲線。\n" " æœƒè“‹éŽ --curve-file é¸é …。\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " ç•¶ EV 值為負時還原細節。\n" " 'clip' ä¸åšä»»ä½•還原 - ä¿ç•™åŽŸå§‹å½±åƒã€‚\n" " 'lch' 以 LCH 色彩空間還原 - 會讓細節柔化。\n" " 'hsv' 以 HSV 色彩空間還原 - 會讓細節銳化。\n" " (é è¨­å€¼ç‚º lch)。\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film ç•¶ EV 值為正時削減éŽäº®å€åŸŸã€‚\n" " 'digital' ä»¥ç·šæ€§æ•¸ä½æ„Ÿæ‡‰ç‚ºåŸºæº–。\n" " 'film' 模擬柔和影片的感覺。(é è¨­ç‚º digital)。\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMMA 基本曲線的 Gamma 調整值(é è¨­å€¼ç‚º 0.45)。\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY 基本曲線的直線性(é è¨­å€¼ç‚º 0.10)。\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT èª¿æ•´å°æ¯”度(é è¨­å€¼ç‚º 1.0)。\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "--saturation=SAT 調整飽和度(é è¨­å€¼ç‚º 1.0,0 為黑白輸出)。\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=THRESHOLD\n" " å°æ³¢æ¶ˆé™¤é›œè¨Šè‡¨ç•Œå€¼ï¼ˆé è¨­å€¼ç‚º 0.0)。\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " 嵿¸¬åŠä¿®è£œç†±ç‡¥é»žæ™‚çš„æ•æ„Ÿåº¦ï¼ˆé è¨­å€¼ç‚º 0.0)。\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " 自動æ›å…‰æˆ–是 EV çš„æ›å…‰æ ¡æ­£å€¼ï¼ˆé è¨­å€¼ç‚º 0)。\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " 自動黑點,或是黑點的值(é è¨­å€¼ç‚º 0)。\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " è¦ä½¿ç”¨çš„å…§æ’æ¼”算法(é è¨­å€¼ç‚º ahd)。\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing 套用é¡è‰²å¹³æ»‘。\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " è¦ä½¿ç”¨çš„ç°éšŽæ›ç®—æ¼”ç®—æ³•ï¼ˆé è¨­å€¼ç‚º none)。\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " è¦ä½¿ç”¨çš„ç°éšŽæ›ç®—æ¼”ç®—æ³•ï¼ˆé è¨­å€¼ç‚º none)。\n" msgid "The options which are related to the final output are:\n" msgstr "å’Œæœ€çµ‚è¼¸å‡ºçµæžœç›¸é—œçš„é¸é …:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FACTOR å½±åƒç¸®å°è‡³ 1/FACTOR(é è¨­å€¼ç‚º 1)。\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=SIZE 縮å°ï¼ˆé«˜ï¼Œå¯¬ï¼‰çš„æœ€å¤§å€¼è‡³ SIZE。\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " 輸出檔的格å¼ï¼ˆé è¨­å€¼ç‚º ppm)。\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 æ¯å€‹é¡è‰²é »é“的輸出ä½å…ƒæ·±åº¦ï¼ˆé è¨­å€¼ç‚º 8)。\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " no(ä¸ï¼‰| alsoï¼ˆåŒæ™‚)| only(åªï¼‰ç”¢ç”Ÿ ID 檔案。\n" " (é è¨­å€¼ç‚º no)。\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE JPEG 壓縮值 (0-100, é è¨­å€¼ç‚º 85)。\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif 輸出時是å¦åµŒå…¥ EXIF (é è¨­ç‚ºåµŒå…¥ EXIF)。\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "--[no]zip 啟用 [關閉] TIFF zip 壓縮(é è¨­å€¼ç‚º nozip)。\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image 匯出內嵌於 raw 檔案中的é è¦½å½±åƒï¼Œè€Œä¸æ˜¯è½‰æ› raw å½±" "åƒã€‚\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " 旋轉影åƒã€‚camera 為採用相機設定;以 ANGLE è§’åº¦é †æ™‚é‡æ—‹" "轉;\n" " æˆ–æ˜¯ä¸æ—‹è½‰å½±åƒï¼ˆé è¨­å€¼ç‚º camera)。\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " 根據指定的åƒç´ ç¯„åœè£å‰ªè¼¸å‡ºå½±åƒã€‚這項æ“ä½œæ˜¯åœ¨å½±åƒæ—‹è½‰" "後ã€\n" " 縮放比例之å‰é€²è¡Œã€‚\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto ä¸è¦å¥—用é¡é ­æ ¡æ­£ï¼›æˆ–æ˜¯è©¦è‘—è‡ªå‹•åµæ¸¬é¡é ­ä¸¦å¥—用校正。\n" " (é è¨­å€¼ç‚º none)。\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "--out-path=PATH 輸出檔案的 PATH(é è¨­ä½¿ç”¨è¼¸å…¥æª”的路徑) 。\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "--output=檔案å 輸出檔案å, 使用 '-' 為輸出到標準輸出。\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=FILE 使用 FILE 來進行 Raw 的暗場景 (darkframe) 消減。\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "--overwrite è¦†å¯«ç¾æœ‰æª”案而ä¸è¦æ±‚確èªï¼ˆé è¨­å€¼ç‚º no)。\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window 強制將視窗最大化。\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent åœ¨æ‰¹æ¬¡è½‰æ›æœŸé–“ä¸é¡¯ç¤ºä»»ä½•ä¿¡æ¯ã€‚\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw 首先會從 $HOME/.ufrawrc è³‡æºæª”中讀å–設定值。若有指定了 ID 檔的話,\n" "會接著讀å–å®ƒçš„è¨­å®šå€¼ã€‚ç„¶å¾Œï¼Œæœƒè™•ç† --conf é¸é …的設定,並忽略其 ID 檔中所\n" "指定的輸入/輸出檔案å稱。最後,會設定由命令列所指定的é¸é …ã€‚åœ¨æ‰¹æ¬¡è™•ç†æ¨¡å¼\n" "下,並 ä¸ æœƒ ç”±è³‡æºæª”中讀å–屬於第二類的é¸é …。\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "最後,但並ä¸å°±æ˜¯ä¸é‡è¦ï¼Œ--version 顯示 ufraw 的版本號碼和編譯é¸é …ï¼›\n" "--help 將會顯示此幫助訊æ¯å¾Œé€€å‡ºã€‚\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' 䏿˜¯ --%s é¸é …的有效值。" msgid "ufraw was build without ZIP support." msgstr "ufraw åœ¨ç·¨è­¯æ™‚æ²’æœ‰ç·¨å…¥å° ZIP 的支æ´ã€‚" #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch 已廢棄。請替而使用 ufraw-batch。" #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt 返回字元碼 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "未能從 %s 中載入曲線,包å«äº†å¤ªå¤šçš„基本曲線設定" #, c-format msgid "failed to load curve from %s" msgstr "未能從 %s 中載入曲線" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„基本曲線å稱。" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "未能從 %s 中載入曲線,包å«äº†å¤ªå¤šçš„æ›²ç·šè¨­å®š" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„æ›²ç·šå稱。" #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ interpolation é¸é …。" #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ grayscale é¸é …。" #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ grayscale é¸é …。" #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ restore é¸é …。" #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ clip é¸é …。" msgid "you can not specify both --shrink and --size" msgstr "您ä¸èƒ½åŒæ™‚指定 --shrink å’Œ --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' 䏿˜¯æœ‰æ•ˆçš„ä½å…ƒæ·±åº¦ã€‚" #, c-format msgid "Output type '%s' is deprecated" msgstr "ä¸å»ºè­°ä½¿ç”¨ '%s' 輸出類型" msgid "ufraw was build without TIFF support." msgstr "ufraw åœ¨ç·¨è­¯æ™‚æ²’æœ‰ç·¨å…¥å° TIFF 的支æ´ã€‚" msgid "ufraw was build without JPEG support." msgstr "ufraw åœ¨ç·¨è­¯æ™‚æ²’æœ‰ç·¨å…¥å° JPEG 的支æ´ã€‚" msgid "ufraw was build without PNG support." msgstr "ufraw åœ¨ç·¨è­¯æ™‚æ²’æœ‰ç·¨å…¥å° ZIP 的支æ´ã€‚" #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„輸出類型。" #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„內嵌影åƒè¼¸å‡ºé¡žåž‹ã€‚" #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' 䏿˜¯æœ‰æ•ˆçš„內嵌影åƒä½å…ƒæ·±åº¦ã€‚" #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ rotate é¸é …。" #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ create-id é¸é …。" #, c-format msgid "'%s' is not a valid path." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„路徑。" msgid "cannot output more than one file to the same output" msgstr "在相åŒçš„輸出下ä¸èƒ½è¼¸å‡ºå¤šå€‹æª”案" #, c-format msgid "Raw file '%s' missing." msgstr "找ä¸åˆ° Raw 檔 '%s'。" msgid "Delete raw file" msgstr "刪除 raw 檔" msgid "_Delete selected" msgstr "刪除已é¸å– (_D)" msgid "Delete _All" msgstr "全部刪除 (_A)" msgid "Select files to delete" msgstr "鏿“‡æª”案以便刪除" #, c-format msgid "Error reading directory '%s'." msgstr "在讀å–目錄 '%s' 時發生錯誤。" #, c-format msgid "Error deleting '%s'" msgstr "在刪除 '%s' 時發生錯誤" msgid "Reading embedded image requires libjpeg." msgstr "需有 libjpeg 以讀å–內嵌影åƒã€‚" msgid "No embedded image found" msgstr "沒有找到內嵌影åƒ" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "åŽŸå§‹å¤§å° (%d) å°æ–¼è¦æ±‚çš„å¤§å° (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm 縮圖ä¸ç›¸ç¬¦ï¼›é«˜ %d;寬 %d;而緩è¡å€ç‚º %d。" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "JPEG 縮圖高為 %d ä¸åŒæ–¼é æœŸçš„ %d。" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "JPEG 縮圖寬為 %d ä¸åŒæ–¼é æœŸçš„ %d。" #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "在建立檔案 '%s' 時發生錯誤。\n" "%s" msgid "No embedded image read" msgstr "未讀到任何的內嵌影åƒ" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "在建立檔案 '%s' 時發生錯誤。未知的檔案類型 %d。" #, c-format msgid "Error creating file '%s': %s" msgstr "在建立檔案 '%s' 時發生錯誤:%s" #, c-format msgid "Error writing '%s'" msgstr "在寫入 '%s' 時發生錯誤" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "輸出類型 (%d) 䏿”¯æ´å…§åµŒå½±åƒ" #, c-format msgid "Loading raw file '%s'" msgstr "正在載入 raw 檔案 '%s'" msgid "Can't allocate new image." msgstr "無法é…置新的影åƒã€‚" #. Create the "background" layer to hold the image... msgid "Background" msgstr "背景" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "無法在影åƒä¸­åµŒå…¥è¼¸å‡ºè¨­å®šæª” '%s'。" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF ç·©è¡å€é•·åº¦ %d 太長,已忽略。" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "生產者:\t\t%s\n" "型號:\t\t%s%s\n" "熱é´ï¼š\t\t%s\n" "焦è·è½‰æ›çŽ‡ï¼š\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "製造商:\t\t%s\n" "型號:\t\t%s\n" "焦è·ç¯„åœï¼š\t%s\n" "光圈:\t\t%s\n" "焦è·è½‰æ›çŽ‡ï¼š\t%.1f\n" "類型:\t\t%s\n" "熱é´ï¼š\t\t%s" msgid "Focal" msgstr "焦點" msgid "Focal length" msgstr "焦è·" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-數值(光圈)" msgid "Distance" msgstr "è·é›¢" msgid "Distance to subject in meters" msgstr "主體è·é›¢ï¼ˆå…¬å°ºï¼‰" #. Add the model combobox msgid "Model:" msgstr "型號:" msgid "Chromatic Aberrations mathematical model" msgstr "色åƒå·®çš„æ•¸å­¸æ¨¡åž‹" msgid "Parameters" msgstr "åƒæ•¸" msgid "Optical vignetting mathematical model" msgstr "光學暗角的數學模型" msgid "Lens distortion mathematical model" msgstr "é¡é ­å½¢è®Šçš„æ•¸å­¸æ¨¡åž‹" #. Lens geometry combobox msgid "Lens geometry:" msgstr "é¡é ­å¹¾ä½•:" msgid "The geometry of the lens used to make the shot" msgstr "æ‹æ”時é¡é ­å–得的幾何大å°" #. Target lens geometry combobox msgid "Target geometry:" msgstr "æˆå“幾何:" msgid "The target geometry for output image" msgstr "è¼¸å‡ºå½±åƒæ™‚æˆå“的幾何大å°" msgid "Camera" msgstr "照相機" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "使用範本來æœå°‹ç›¸æ©Ÿ\n" "æ ¼å¼ï¼š[製造商, ][型號]" msgid "Choose camera from complete list" msgstr "å¾žå®Œæ•´åˆ—è¡¨ä¸­é¸æ“‡ç›¸æ©Ÿ" msgid "Reset all lens correction settings" msgstr "é‡ç½®æ‰€æœ‰çš„é¡é ­æ ¡æ­£è¨­å®š" #. Lens selector msgid "Lens" msgstr "é¡é ­" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "使用範本來æœå°‹é¡é ­\n" "æ ¼å¼ï¼š[製造商, ][型號]" # fuzzy msgid "Choose lens from list of possible variants" msgstr "從å¯èƒ½çš„è¡ç”Ÿç‰ˆåˆ—表中é¸å–é¡é ­" msgid "Automatically find lens and set lens corrections" msgstr "自動æœå°‹é¡é ­ä¸¦è¨­å®šé¡é ­æ ¡æ­£" msgid "Lateral chromatic aberration" msgstr "æ©«å‘色åƒå·®" msgid "Optical vignetting" msgstr "光學暗角" msgid "Lens distortion" msgstr "é¡é ­å½¢è®Š" msgid "Lens geometry" msgstr "é¡é ­å¹¾ä½•" msgid "Raw histogram with conversion curves" msgstr "åŠ ä¸Šè½‰æ›æ›²ç·šçš„ Raw 直方圖" msgid "Live histogram" msgstr "動態直方圖" #. No darkframe file msgid "None" msgstr "ç„¡" msgid "Lightness" msgstr "亮度" msgid "Luminance" msgstr "è¼åº¦" msgid "Value" msgstr "值" msgid "Channel Mixer" msgstr "é¡è‰²é »é“æ··åˆå™¨" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "沒有足夠的空間給新的曲線。" msgid "Load curve" msgstr "載入曲線" msgid "All curve formats" msgstr "所有曲線格å¼" msgid "UFRaw curve format" msgstr "UFRaw 曲線格å¼" msgid "Nikon curve format" msgstr "Nicon 曲線格å¼" msgid "Save curve" msgstr "儲存曲線" msgid "No more room for new profiles." msgstr "沒有足夠的空間給新的設定檔。" msgid "Load color profile" msgstr "載入é¡è‰²è¨­å®šæª”" msgid "Color Profiles" msgstr "é¡è‰²è¨­å®šæª”" msgid "Luminosity (Y value)" msgstr "光度(Y值)" msgid "Adams' zone" msgstr "Adams' zone" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "尺寸 %dx%d, 縮放 %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "尺寸 %dx%d, 比例 1/%d" msgid "Wavelet denoising" msgstr "å°æ³¢æ¶ˆé™¤é›œè¨Š" msgid "Despeckling" msgstr "去除網點" msgid "Interpolating" msgstr "æ’值" msgid "Rendering" msgstr "渲染" msgid "Loading preview" msgstr "正在載入é è¦½" msgid "Saving image" msgstr "儲存影åƒ" #, c-format msgid "Black point: %0.3lf" msgstr "黑點:%0.3lf" msgid "No more room for new lightness adjustments." msgstr "沒有足夠的空間給新的亮度調整。" msgid "Aspect ratio locked, click to unlock" msgstr "已鎖定縮放比率,請點擊以解除鎖定" msgid "Aspect ratio unlocked, click to lock" msgstr "縮放比率未鎖定,請點擊以進行鎖定" msgid "Load dark frame" msgstr "載入暗場景" msgid "clip" msgstr "削減" msgid "restore in LCH space for soft details" msgstr "以 LCH 色彩空間還原柔和細節" msgid "restore in HSV space for sharp details" msgstr "以 HSV 色彩空間還原銳利細節" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "ç•¶ EV 值為負時還原細節\n" "ç¾æ³ï¼š%s" msgid "digital linear" msgstr "數ä½ç·šæ€§" msgid "soft film like" msgstr "模仿柔和影片" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "ç•¶ EV 值為正時削減éŽäº®å€åŸŸ\n" "ç¾æ³ï¼š%s" #, c-format msgid "Filename: %s%s" msgstr "檔案å:%s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "åŒæ™‚建立 ID 檔" msgid "" "\n" "Create only ID file" msgstr "" "\n" "åªå»ºç«‹ ID 檔案" msgid "UFRaw options" msgstr "UFRaw é¸é …" msgid "Settings" msgstr "設定" msgid "Input color profiles" msgstr "輸入é¡è‰²è¨­å®šæª”" msgid "Output color profiles" msgstr "輸出é¡è‰²è¨­å®šæª”" msgid "Display color profiles" msgstr "顯示é¡è‰²è¨­å®šæª”" msgid "Base Curves" msgstr "基本曲線" msgid "Luminosity Curves" msgstr "光度曲線" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Remote Gimp 命令" msgid "Reset command to default" msgstr "é‡ç½®å‘½ä»¤è‡³é è¨­å€¼" msgid "Blink Over/Underexposure Indicators" msgstr "é–ƒçˆ éŽåº¦/æ›å…‰ä¸è¶³ å€åŸŸ" msgid "Configuration" msgstr "設定" msgid "Save configuration" msgstr "儲存設定" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "å°‡è¨­å®šå„²å­˜è‡³è³‡æºæª” ($HOME/.ufrawrc)" msgid "Log" msgstr "日誌" msgid "About" msgstr "關於" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) 是用來\n" "讀å–å’Œæ“作數ä½ç›¸æ©Ÿ raw å½±åƒçš„工具程å¼ã€‚\n" "UFRaw 藉由 Digital Camera Raw (DCRaw) 以å–å¾—\n" "raw å½±åƒçš„真實編碼。\n" "\n" "作者:Udi Fuchs\n" "首é ï¼šhttp://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "線性" msgid "Logarithmic" msgstr "å°æ•¸" msgid "Hot pixels: " msgstr "熱燥點" msgid "mark" msgstr "é®ç½©" msgid "Hot pixel sensitivity" msgstr "ç†±ç‡¥é»žæ•æ„Ÿåº¦" msgid "Reset hot pixel sensitivity" msgstr "é‡ç½®ç†±ç‡¥é»žæ•感度" msgid "RGB histogram" msgstr "RGB 直方圖" msgid "R+G+B histogram" msgstr "R+G+B 直方圖" msgid "Luminosity histogram" msgstr "光度直方圖" msgid "Value (maximum) histogram" msgstr "定值 (最大) 直方圖" msgid "Saturation histogram" msgstr "飽和度直方圖" msgid "Average:" msgstr "å¹³å‡ï¼š" msgid "Std. deviation:" msgstr "標準å差:" msgid "Overexposed:" msgstr "éŽåº¦æ›å…‰ï¼š" msgid "Indicate" msgstr "顯示" msgid "Underexposed:" msgstr "æ›å…‰ä¸è¶³ï¼š" msgid "White Balance" msgstr "白平衡" msgid "Cannot use camera white balance." msgstr "無法使用相機白平衡。" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "æ²’æœ‰å’Œæ‚¨çš„ç›¸æ©Ÿåž‹è™Ÿç›¸å°æ‡‰çš„白平衡。\n" "請查看 UFRaw 的網站以å–å¾—å¦‚ä½•æ”¯æ´æ‚¨çš„相機的資訊。" msgid "Reset white balance to initial value" msgstr "é‡ç½®ç™½å¹³è¡¡ç‚ºåˆå§‹å€¼" msgid "Temperature" msgstr "色溫" msgid "White balance color temperature (K)" msgstr "白平衡色溫 (K)" msgid "Green" msgstr "綠色" msgid "Green component" msgstr "綠色部分" msgid "Select a spot on the preview image to apply spot white balance" msgstr "在é è¦½å½±åƒä¸Šé¸æ“‡ä¸€å€‹é»žä»¥ä½œç‚ºç™½å¹³è¡¡çš„基準點" msgid "Chan. multipliers:" msgstr "é¡è‰²é »é“增幅數:" msgid "Bayer pattern interpolation" msgstr "Bayer 範本æ’值" msgid "VNG four color interpolation" msgstr "VNG 四色æ’值" msgid "Bilinear interpolation" msgstr "Bilinear æ’值" msgid "AHD interpolation" msgstr "AHD æ’值" msgid "VNG interpolation" msgstr "VNG æ’值" msgid "PPG interpolation" msgstr "PPG æ’值" msgid "No interpolation" msgstr "䏿’值" msgid "No Bayer pattern" msgstr "沒有 Bayer 範本" msgid "Apply color smoothing" msgstr "套用é¡è‰²å¹³æ»‘" msgid "Denoise" msgstr "消除雜訊" msgid "Threshold for wavelet denoising" msgstr "å°æ³¢æ¶ˆé™¤é›œè¨Šçš„臨界值" msgid "Reset denoise threshold to default" msgstr "é‡ç½®æ¶ˆé™¤é›œè¨Šè‡¨ç•Œå€¼è‡³é è¨­å€¼" msgid "Dark Frame:" msgstr "暗場景:" msgid "Reset dark frame" msgstr "é‡ç½®æš—場景" msgid "Reset adjustment" msgstr "é‡ç½®èª¿æ•´å€¼" msgid "Select a spot on the preview image to choose hue" msgstr "在é è¦½å½±åƒä¸Šé¸æ“‡ä¸€å€‹é»žä»¥ä½œç‚ºæŒ‡å®šè‰²èª¿" msgid "Remove adjustment" msgstr "移除調整值" msgid "Grayscale Mode:" msgstr "ç°éšŽæ¨¡å¼ï¼š" msgid "Reset channel mixer" msgstr "é‡ç½®é¡è‰²é »é“æ··åˆå™¨" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "åŽ»é™¤ç¶²é»žä¸»è¦æ˜¯ç”¨åœ¨åŒæ™‚使用高 ISO 值與高é¡è‰²é »é“增幅:當æŸå€‹é¡è‰²é »é“已有很糟的" "訊號雜訊比時。å¯ä»¥è©¦è‘—將這個頻é“的視窗大å°ã€é¡è‰²è¡°æ¸›åŠè¡°è®Šå€¼çš„æ•¸é‡è¨­å®šç‚º " "50,0,5。當æŸå€‹é¡è‰²é »é“裡已全是雜訊時試試 1,0.6,1。\n" "ç•¶è¦–çª—å¤§å°æˆ–衰變值為零時,去除網點會被關閉。當啟用時,視窗大å°ä¸èƒ½å°æ–¼è¡°è®Š" "值。" msgid "Update channel parameters together" msgstr "åŒæ™‚æ›´æ–°é¡è‰²é »é“åƒæ•¸å€¼" msgid "Reset despeckle parameters" msgstr "é‡ç½®åŽ»é™¤ç¶²é»žçš„åƒæ•¸" #. channel to view msgid "View channel:" msgstr "檢視é¡è‰²é »é“:" #. Parameters msgid "Window size:" msgstr "視窗大å°" msgid "Color decay:" msgstr "é¡è‰²è¡°æ¸›ï¼š" msgid "Passes:" msgstr "衰變值:" msgid "Load base curve" msgstr "載入基本曲線" msgid "Save base curve" msgstr "儲存基本曲線" msgid "Reset base curve to default" msgstr "é‡ç½®åŸºæœ¬æ›²ç·šè‡³é è¨­å€¼" msgid "Input ICC profile" msgstr "輸入 ICC 設定檔" msgid "Output ICC profile" msgstr "輸出 ICC 設定檔" msgid "Display ICC profile" msgstr "顯示 ICC 設定檔" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "輸入設定檔的 Gamma æ ¡æ­£" msgid "Reset gamma to default" msgstr "é‡ç½® Gamma 至é è¨­å€¼" msgid "Linearity" msgstr "線性" msgid "Linear part of the gamma correction" msgstr "Gamma 校正的線性部分" msgid "Reset linearity to default" msgstr "é‡ç½®ç·šæ€§è‡³é è¨­å€¼" msgid "Output intent" msgstr "輸出å°è±¡" msgid "Perceptual" msgstr "感知å¼" msgid "Relative colorimetric" msgstr "相å°è‰²åº¦" msgid "Saturation" msgstr "飽和度" msgid "Absolute colorimetric" msgstr "絕å°è‰²åº¦" msgid "Output bit depth" msgstr "輸出ä½å…ƒæ·±åº¦" msgid "Display intent" msgstr "顯示å°è±¡" msgid "Disable soft proofing" msgstr "é—œé–‰è»Ÿå¼æ‰“樣" msgid "Contrast" msgstr "å°æ¯”度" msgid "Global contrast adjustment" msgstr "æ•´é«”å°æ¯”度調整" msgid "Reset global contrast to default" msgstr "é‡ç½®æ•´é«”å°æ¯”度至é è¨­å€¼" msgid "Reset saturation to default" msgstr "é‡ç½®é£½å’Œåº¦è‡³é è¨­å€¼" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "自動調整曲線\n" "(平化直方圖)" msgid "Reset curve to default" msgstr "é‡ç½®æ›²ç·šè‡³é è¨­å€¼" msgid "Reset black-point to default" msgstr "é‡ç½®é»‘點至é è¨­å€¼" msgid "Auto adjust black-point" msgstr "自動調整黑點" #. Start of Crop controls msgid "Left:" msgstr "左:" msgid "Top:" msgstr "上:" msgid "Right:" msgstr "å³ï¼š" msgid "Bottom:" msgstr "下:" msgid "Auto fit crop area" msgstr "自動符åˆè£å‰ªå€åŸŸ" #, fuzzy msgid "Reset the crop area" msgstr "é‡ç½®è£å‰ªå€åŸŸ" msgid "Aspect ratio:" msgstr "縮放比率:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "è£å‰ªå€åŸŸçš„縮放比率。\n" "å¯ä»¥è¼¸å…¥å進制數值,如 (1.273)\n" "或兩個數字的比例,如 (14:11)" msgid "Shrink factor" msgstr "å½±åƒç¸®æ”¾æ¯”率" msgid "Width" msgstr "寬度" msgid "Height" msgstr "高度" msgid "Orientation:" msgstr "æ–¹ä½ï¼š" msgid "Rotation" msgstr "旋轉" msgid "Rotation angle" msgstr "旋轉角度" msgid "Reset rotation angle" msgstr "é‡ç½®æ—‹è½‰è§’度" #. drawLines toggle button msgid "Grid lines" msgstr "格線" msgid "Number of grid lines to overlay in the crop area" msgstr "在è£å‰ªå€ä¸Šè¦é¡¯ç¤ºå¤šå°‘格線" msgid "Path" msgstr "路徑" msgid "Select output path" msgstr "鏿“‡è¼¸å‡ºè·¯å¾‘" msgid "Filename" msgstr "檔案å" msgid "JPEG compression level" msgstr "JPEG 壓縮等級" msgid "JPEG progressive encoding" msgstr "JPEG 漸進編碼" msgid "TIFF lossless Compress" msgstr "TIFF ç„¡æå£“縮" msgid "Embed EXIF data in output" msgstr "å°‡ EXIF 數據嵌入輸出檔" msgid "Create ID file " msgstr "建立 ID 檔" msgid "No" msgstr "ä¸è¦" msgid "Also" msgstr "åŒæ™‚" msgid "Only" msgstr "åªæœ‰" msgid "Save image defaults " msgstr "儲存為圖片é è¨­å€¼" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "將目å‰çš„å½±åƒè™•ç†åƒæ•¸å„²å­˜è‡³é è¨­å€¼ã€‚\n" "é€™å€‹è¦–çª—ä¸­çš„è¼¸å‡ºåƒæ•¸å°‡æœƒä¸æ–·å¾—被儲存。" msgid "Never again" msgstr "ä¸å†æç¤º" msgid "Always" msgstr "總是" msgid "Just this once" msgstr "åªæ­¤ä¸€æ¬¡" msgid "Remember output path" msgstr "記ä½è¼¸å‡ºè·¯å¾‘" msgid "Overwrite existing files without asking" msgstr "è¦†å¯«ç¾æœ‰æª”案而ä¸è¦æ±‚確èª" msgid "Tag" msgstr "標記" #. Fill table with EXIF tags msgid "Camera maker" msgstr "相機製造商" msgid "Camera model" msgstr "相機型號" msgid "Timestamp" msgstr "æ‹ç…§æ™‚é–“" msgid "Shutter time" msgstr "æ›å…‰æ™‚é–“" msgid "Aperture" msgstr "光圈" msgid "ISO speed" msgstr "ISO 速度" msgid "35mm focal length" msgstr "35mm 固定焦è·" msgid "Flash" msgstr "閃光燈" msgid "White balance" msgstr "白平衡" #, c-format msgid "EXIF data read by %s" msgstr "ç”± %s 讀出的 EXIF 資訊" msgid "Warning: EXIF data will not be sent to output" msgstr "警告:EXIF æ•¸æ“šå°‡ä¸æœƒå‚³é€åˆ°è¼¸å‡º" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "點值:" msgid "Exposure compensation in EV" msgstr "EV æ›å…‰è£œå„Ÿ" msgid "Auto adjust exposure" msgstr "自動調整æ›å…‰" msgid "Reset exposure to default" msgstr "é‡ç½®æ›å…‰è‡³é è¨­å€¼" msgid "Grayscale" msgstr "ç°éšŽ" #. Lens correction page msgid "Lens correction" msgstr "é¡é ­æ ¡æ­£" msgid "Base curve" msgstr "基本曲線" msgid "Color management" msgstr "色彩管ç†" msgid "Correct luminosity, saturation" msgstr "校正光度åŠé£½å’Œåº¦" msgid "Lightness Adjustments" msgstr "調整亮度" msgid "Crop and rotate" msgstr "è£å‰ªå’Œæ—‹è½‰" msgid "Save" msgstr "儲存" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "縮放比例" msgid "Options" msgstr "é¸é …" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "刪除(_D)" msgid "Send image to _Gimp" msgstr "傳é€åœ–片至 _Gimp" msgid "Fatal error setting C locale" msgstr "在設定 C å€åŸŸè³‡è¨Šæ™‚發生嚴é‡éŒ¯èª¤" #, c-format msgid "Curve version is not supported" msgstr "䏿”¯æ´çš„æ›²ç·šç‰ˆæœ¬" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "無效的 Nikon 曲線檔 '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "在開啟曲線檔 '%s' 時發生錯誤:%s" #, c-format msgid "Error opening file '%s': %s" msgstr "在開啟檔案 '%s' 時發生錯誤:%s" msgid "File exists" msgstr "檔案已經存在" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "檔案 '%s' 已經存在。\n" "是å¦è¦†å¯«ï¼Ÿ" msgid "Error creating temporary file." msgstr "在建立臨時檔時發生錯誤。" msgid "Error activating Gimp." msgstr "åœ¨å‘¼å« Gimp 時發生錯誤。" #, fuzzy msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "無法使用相機白平衡,回復為使用自動白平衡。\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "--temperature åŠ --green é¸é …æœƒè“‹éŽ --wb=%s é¸é …。" #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„白平衡設定值。" msgid "Remote URI is not supported" msgstr "尚未支æ´é ç¨‹çš„ URI" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "暗場景錯誤:%s 䏿˜¯ raw 檔案\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "在載入暗場景 '%s' 時發生錯誤\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "暗場景 '%s' 和主影åƒä¸ç›¸ç¬¦" #, c-format msgid "using darkframe '%s'\n" msgstr "使用暗場景 '%s'\n" msgid "Error reading NEF curve" msgstr "åœ¨è®€å– NEF 曲線時發生錯誤" #, c-format msgid "Can not downsize from %d to %d." msgstr "無法由 %d 縮å°è‡³ %d。" #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "在建立檔案 '%s' 時發生錯誤。" #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "在建立檔案時發生錯誤。" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "圖片的檔案åä¸èƒ½å’Œ ID 檔å '%s' 相åŒ" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "無法在 '%2$s' 中嵌入輸出設定檔 '%1$s'。" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "已忽略ä¸è¢«æ”¯æ´çš„ä½å…ƒæ·±åº¦ '%d' 。" #, c-format msgid "Unknown file type %d." msgstr "未知的檔案類型 %d。" #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "日光" #. Probably same as above: msgid "Direct sunlight" msgstr "陽光直射" msgid "Cloudy" msgstr "陰天" #. "Shadows" should be switched to this: msgid "Shade" msgstr "é™°å½±" msgid "Incandescent" msgstr "燈泡" msgid "Incandescent warm" msgstr "溫暖白熾燈" #. Same as "Incandescent": msgid "Tungsten" msgstr "鎢燈" msgid "Fluorescent" msgstr "螢光燈" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "高螢光燈" msgid "Cool white fluorescent" msgstr "冷白色螢光燈" msgid "Warm white fluorescent" msgstr "暖白色螢光燈" msgid "Daylight fluorescent" msgstr "日光螢光燈" msgid "Neutral fluorescent" msgstr "自然螢光燈" msgid "White fluorescent" msgstr "白色螢光燈" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "鈉蒸氣螢光燈" msgid "Day white fluorescent" msgstr "日光白色螢光燈" msgid "High temp. mercury-vapor fluorescent" msgstr "高溫汞蒸氣螢光燈" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "閃光(自動模å¼ï¼‰" msgid "Evening sun" msgstr "傿™š" msgid "Underwater" msgstr "水下" msgid "Black & white" msgstr "黑白" msgid "Manual WB" msgstr "手動白平衡" msgid "Camera WB" msgstr "相機白平衡" msgid "Auto WB" msgstr "自動白平衡" ufraw-0.19.2/po/sr.po0000664000175000017500000015667612123734456011310 00000000000000# Serbian translation of UFRaw # Copyright (C) 2008-2013 Udi Fuchs. # This file is distributed under the same license as the ufraw package. # Courtesy of Prevod.org team (http://prevod.org/) -- 2008, 2009. # Милош Поповић , 2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-16 12:54+0100\n" "Last-Translator: Милош Поповић \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Отвори навигациони прозор" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "ВредноÑÑ‚ %.*f је превелика, Ñкраћујем на %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "ВредноÑÑ‚ %.*f је премала, повећавам на %.*f." msgid "No input file, nothing to do." msgstr "Ðема улазне датотеке." #, c-format msgid "Loaded %s %s" msgstr "Учитано %s %s" #, c-format msgid "Saved %s %s" msgstr "Сачувано %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "д" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "н" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: да препишем „%s“?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent могућноÑÑ‚ Ñе кориÑти Ñамо у пакетном режиму" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent могућноÑÑ‚ Ñе кориÑти Ñамо у пакетном режиму" msgid "Raw images" msgstr "Raw Ñлике" msgid "UFRaw ID files" msgstr "ÐЛRaw ИБ датотеке" msgid "Raw jpeg's" msgstr "Raw jpeg" msgid "Raw tiff's" msgstr "Raw tiff" msgid "All files" msgstr "Све датотеке" msgid "Show hidden files" msgstr "Прикажи Ñкривене датотеке" msgid "Manual curve" msgstr "Ручно направљена крива" msgid "Linear curve" msgstr "Линеарна крива" msgid "Custom curve" msgstr "Произвољна крива" msgid "Camera curve" msgstr "Крива из камере" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Ðема профила" msgid "Color matrix" msgstr "Матрица боја" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (уметнити)" msgid "System default" msgstr "Подразумевано у ÑиÑтему" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Покушавам превођење .ufrawrc датотеке из ÐЛRaw-0.4 или ранијег издања" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Покушавам превођење .ufrawrc датотеке из ÐЛRaw-0.6 или ранијег издања" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "Издање ÐЛRaw-а у .ufrawrc датотеци није подржано" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Превише веза за криву „%s“" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Превише подешавања за оÑветњеноÑÑ‚ у ИБ датотецу, занемарујем\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Изгледа да ИБ датотека %s није иÑправна\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Ðе могу да прочитам ИБ датотеку %s\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Грешка при прављењу датотеке „%s“." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Грешка при обради „%s“\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Ðе могу да упишем у %s датотеку\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "не могу да --create-id на Ñтандардном излазу" msgid "UFRaw " msgstr "ÐЛRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Ðеидентификовани Летећи Raw преводилац за Ñлике Ñа дигиталних камера.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Употреба: ufraw [ могућноÑти ... ] [ raw_датотеке ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ могућноÑти ... ] [ raw_датотеке ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ могућноÑти ... ] [ подразумевани_директоријум ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Подразумевано, „ufraw“ приказује прозорче за преглед Ñваке raw Ñлике, \n" "дајући кориÑнику могућноÑÑ‚ подешавања параметара Ñлике пре њеног чувања.\n" "Уколико ниÑу дате raw Ñлике у командној линији, ÐЛRaw ће приказати " "прозорче.\n" "за избор датотеке. За обраду фотографија без икаквих питања (и без " "прегледа)\n" "кориÑтите „ufraw-batch“.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Улазне датотеке могу бити raw Ñлике или ÐЛRaw ИБ датотеке. ИБ датотеке\n" "Ñадрже назив raw Ñлике и параметре за Ñређивање Ñлике. ИБ датотеке Ñе могу\n" "позвати Ñа могућноÑтима:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ИБ_датотека Примењује параметре из ИБ датотеке на оÑтале raw " "Ñлике.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "ОÑтале могућноÑти Ñу раздвојене у две групе.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "МогућноÑти везане за рад Ñа Ñликом Ñу:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Подешавање равнотеже беле.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "" "--temperature=Темпeratura\n" " Температура боје у Келвинима.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=Зелена Уједначење зелене компоненте у равнотежи беле.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|Крива\n" " Ð’Ñ€Ñта оÑновне криве. „Крива“ може да буде било која\n" " крива која је претходно учитана у графичком окружењу.\n" " (подразумевана крива из камере уколико поÑтоји,\n" " а у Ñупротном линеарна).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=Датотека\n" " КориÑти оÑновну криву из заÑебне датотеке. Ова\n" " могућноÑÑ‚ има предноÑÑ‚ над --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|Крива\n" " Ð’Ñ€Ñта криве за канал Ñа луминанÑом. „Крива“ може\n" " да буде лило која крива која је претходно учитана\n" " у графичком окружењу (подразумевано линеарна).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=Датотека КориÑти криву за канал Ñа луминанÑом из заÑебне " "датотеке.\n" " Ова могућноÑÑ‚ има предноÑÑ‚ над --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Извлачење детаља за негативан EV.\n" " „clip“ не извлачи ништа — без артефакта.\n" " „lch“ извлачи у LCH проÑтору — даје благе детаље.\n" " „hsv“ извлачи у HSV проÑтору — даје оштре детаље.\n" " (подразумевано је lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film ИÑецање Ñветлих делове на позитиван EV.\n" " „digital“ линеарни дигитални Ð·Ð°Ð¿Ð¸Ñ Ñензора.\n" " „film“ Ñимулира благи Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð¸Ð»Ð¼ (подразумевано је " "digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=Гама Подешавање Гама вредноÑти оÑновне криве (подразумевано " "је\n" " 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=Лин. ЛинеарноÑÑ‚ оÑновне криве (подразумевано је 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=КонтраÑÑ‚ Подешавање контраÑта (подразумевано је 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=ЗаÑићеноÑÑ‚\n" " Подешавање заÑићеноÑти (подразумевано је 1.0, одноÑно\n" " 0 за црно-беле Ñлике).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=ОÑетљивоÑÑ‚\n" " ОÑетљивоÑÑ‚ за талаÑно уклањање шума (подразумевано је " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=ВРЕДÐОСТ\n" " ОÑетљивоÑÑ‚ при тражењу и чувању прегорелих пикÑела " "(подразумевано је 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|ЕкÑпозиција\n" " Самоодређивање екÑпозиције или иÑправка екÑпозиције\n" " у EV (подразумевано је 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|Црна\n" " Самоодређивање црне тачке или вредноÑÑ‚ црне тачке\n" " (подразумевано је 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Ðлгоритам за интерполацију(подразумевани је ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Примењује углађивање боја.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Ðлгоритам за превод у Ñиве тонове (подразумевано не\n" " кориÑти ни један).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Ðлгоритам за превод у Ñиве тонове (подразумевано не\n" " кориÑти ни један).\n" msgid "The options which are related to the final output are:\n" msgstr "МогућноÑти везане за крајњи излаз Ñу:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=Фактор Сужавање Ñлике за одређени фактор (подразумевано је " "1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=Величина Смањивање Ñлике (виÑина,ширина) на „Величина“.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Излазни формат Ñлике (подразумевани је ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Број бита по каналу (подразумевано је 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Прављење ИБ датотеке (подразумевано је не прави).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "" "--compression=Вреднost\n" " JPEG компреÑија (0-100, подразумевано је 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Умеће EXIF у развијену Ñлику (подразумевано умеће " "EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Zip паковање TIFF датотека (подразумевано не пакује у " "Zip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Извлачи преглед Ñлике уметнут у raw датотеку умеÑто\n" " да преводи raw Ñлику.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|Угао|no\n" " Ротира Ñлику на поÑтавке из камере, за „Угао“ у\n" " Ñтепенима, надеÑно или не ротира Ñлику (подразумеване\n" " Ñу поÑтавке из камере).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=ПикÑела\n" " ИÑеца излаз за задату вредноÑÑ‚ у пикÑелима, у одноÑу " "на raw\n" " Ñлику након ротације, али пре промене величине.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Ðе иÑправља изобличења Ñочива или\n" " покушава да аутоматÑки пронађе објектив којим \n" " је Ñликано и Ñам иÑправи изобличења (подразумевано\n" " не иÑправља изобличења).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=Путања „Путања“ за излазну датотеку (подразумевано је у " "путањи\n" " улазне датотеке).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=Датотека Име датотеке на излазу, кориÑтите „-“ за иÑÐ¿Ð¸Ñ Ð½Ð°\n" " Ñтандардни излаз.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=Датотека КориÑти задату датотеку за одузимање тамним кадром.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite ПрепиÑује поÑтојеће датотеке без питања (није " "подразумевано).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Покреће програм у увећаном прозор.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent Ðе приказује никакве поруке у пакетном режиму.\n" # Шта је заправо second group of options? msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "ÐЛRaw најпре чита подешавања из $HOME/.ufrawrc датотеке. \n" "Ðакон тога, уколико је задата ИБ датотека, чита та подешавања.\n" "Следе подешавања дата кроз --conf опцију, занемарујући \n" "улазне/излазне називе датотека из ИБ датотеке.\n" "Ðа крају Ñе поÑтављају опције из командне линије. У пакетном\n" "режиму друга група опција Ñе ÐЕ чита из датотеке.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "ПоÑледња могућноÑÑ‚, --version приказује издање програма и могућноÑти које " "Ñу \n" "укључене током изградње програма, док --help иÑпиÑује ову поруку.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "„%s“ није иÑправна вредноÑÑ‚ за --%s могућноÑÑ‚." msgid "ufraw was build without ZIP support." msgstr "ufraw је изграђен без подршке за ZIP датотеке." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch могућноÑÑ‚ је превазиђена. КориÑтите ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt је вратио код карактера 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "не могу да учитам криву из %s, има превише подешених оÑновних крива" #, c-format msgid "failed to load curve from %s" msgstr "не могу да учитам криву из %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "„%s“ није иÑправан назив оÑновне криве." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "не могу да учитам криву из %s, има превише подешених крива" #, c-format msgid "'%s' is not a valid curve name." msgstr "„%s“ није иÑправан назив криве." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "„%s“ није иÑправна могућноÑÑ‚ за интерполацију." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "„%s“ није иÑправна могућноÑÑ‚ за Ñиве тонове." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "„%s“ није иÑправна могућноÑÑ‚ за Ñиве тонове." #, c-format msgid "'%s' is not a valid restore option." msgstr "„%s“ није иÑправна могућноÑÑ‚ за извлачење детаља." #, c-format msgid "'%s' is not a valid clip option." msgstr "„%s“ није иÑправна могућноÑÑ‚ за иÑецање." msgid "you can not specify both --shrink and --size" msgstr "не можете кориÑтити --shrink и --size могућноÑти заједно" #, c-format msgid "'%d' is not a valid bit depth." msgstr "„%d“ није иÑправан број битова." #, c-format msgid "Output type '%s' is deprecated" msgstr "Излазна врÑта „%s“ је превазиђена" msgid "ufraw was build without TIFF support." msgstr "ufraw је изграђен без подршке за TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw је изграђен без подршке за JPEG" msgid "ufraw was build without PNG support." msgstr "ufraw је изграђен без подршке за PNG" #, c-format msgid "'%s' is not a valid output type." msgstr "„%s“ није иÑправна излазна врÑта." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "„%s“ није иÑправна излазна врÑта за уметнуту Ñлику." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "„%d“ није иÑправан број битова за уметнуту Ñлику." #, c-format msgid "'%s' is not a valid rotate option." msgstr "„%s“ није иÑправна вредноÑÑ‚ ротације." #, c-format msgid "'%s' is not a valid create-id option." msgstr "„%s“ није иÑправна create-id могућноÑÑ‚." #, c-format msgid "'%s' is not a valid path." msgstr "„%s“ није иÑправна путања." msgid "cannot output more than one file to the same output" msgstr "не могу да избацим више од једне датотеке на иÑти излаз" #, c-format msgid "Raw file '%s' missing." msgstr "ÐедоÑтаје raw датотека „%s“." msgid "Delete raw file" msgstr "Обриши raw датотеку" msgid "_Delete selected" msgstr "_Обриши изабрано" msgid "Delete _All" msgstr "Обриши _Ñве" msgid "Select files to delete" msgstr "Изаберите датотеке за бриÑање" #, c-format msgid "Error reading directory '%s'." msgstr "Грешка при читању директоријума „%s“." #, c-format msgid "Error deleting '%s'" msgstr "Грешка при бриÑању „%s“" msgid "Reading embedded image requires libjpeg." msgstr "Читање уметнуте Ñлике захтева libjpeg." msgid "No embedded image found" msgstr "Ðије нађена уметнута Ñлика" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Оригинална величина (%d) ја мања од задате (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm преглед Ñе не поклапа, виÑина %d, ширина %d, а бафер је %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "виÑина за JPEG преглед %d Ñе разликује од очекиване (%d)." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "ширина за JPEG преглед %d Ñе разликује од очекиване (%d)." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Грешка при прављењу датотеке „%s“.\n" "%s" msgid "No embedded image read" msgstr "Ðема уметнуте Ñлике за читање" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Грешка при прављењу датотеке „%s“. Ðепозната врÑта датотеке %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Грешка при прављењу датотеке „%s“: %s" #, c-format msgid "Error writing '%s'" msgstr "Грешка у пиÑању „%s“" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Ðије подржана излазна врÑта (%d) за уметнуте Ñлике" #, c-format msgid "Loading raw file '%s'" msgstr "Учитавам raw датотеку „%s“" msgid "Can't allocate new image." msgstr "Ðе могу да учитам нову Ñлику." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Позадина" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Ðије уÑпело уметање излазног профила „%s“ у Ñлику." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF бафера је превелик (%d). Игноришем." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Творац:\t\t\t%s\n" "Модел:\t\t\t%s%s\n" "Статив:\t\t\t%s\n" "Фактор иÑецања:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Произвођач:\t\t\t%s\n" "Модел:\t\t\t\t%s\n" "Жижна даљина:\t\t%s\n" "Отвор бленде:\t\t%s\n" "ИÑецање Ñензора:\t%.1f\n" "Ð’Ñ€Ñта:\t\t\t\t%s\n" "Стативи:\t\t\t%s" msgid "Focal" msgstr "Жижа" msgid "Focal length" msgstr "Жижна даљина" msgid "F" msgstr "Ф" msgid "F-number (Aperture)" msgstr "Ф-број (отвор бленде)" msgid "Distance" msgstr "УдаљеноÑÑ‚" msgid "Distance to subject in meters" msgstr "УдаљеноÑÑ‚ од мотива у метрима" #. Add the model combobox msgid "Model:" msgstr "Модел:" msgid "Chromatic Aberrations mathematical model" msgstr "Математички модел хроматÑких аберација" msgid "Parameters" msgstr "Параметри" msgid "Optical vignetting mathematical model" msgstr "Математички модел оптичког вињетарења" msgid "Lens distortion mathematical model" msgstr "математички модел изобличења Ñочива" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Геометрија Ñочива:" msgid "The geometry of the lens used to make the shot" msgstr "Геометрија Ñочива којим је Ñнимак направљен" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Циљна геометрија:" msgid "The target geometry for output image" msgstr "Циљна геометрија излазне Ñлике" msgid "Camera" msgstr "Камера" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Тражи камеру на оÑнову муÑтре\n" "Формат: [Творац, ][Модел]" msgid "Choose camera from complete list" msgstr "Бира камеру из целокупног ÑпиÑка" msgid "Reset all lens correction settings" msgstr "Враћа Ñва подешавања Ñочива" #. Lens selector msgid "Lens" msgstr "Објектив" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Тражи објектив на оÑнову муÑтре\n" "Формат: [Творац, ][Модел]" msgid "Choose lens from list of possible variants" msgstr "Бира објектив из целокупног ÑпиÑка" msgid "Automatically find lens and set lens corrections" msgstr "Сам налази модел објектива и иÑправља изобличења" msgid "Lateral chromatic aberration" msgstr "Бочне хроматÑке аберације" msgid "Optical vignetting" msgstr "Оптичко вињетарење" msgid "Lens distortion" msgstr "Изобличења Ñочива" msgid "Lens geometry" msgstr "Геометрија Ñочива" msgid "Raw histogram with conversion curves" msgstr "Raw хиÑтограм Ñа кривама за превођење" msgid "Live histogram" msgstr "Живи хиÑтограм" #. No darkframe file msgid "None" msgstr "Ðишта" msgid "Lightness" msgstr "ОÑветљеноÑÑ‚" msgid "Luminance" msgstr "ЛуминанÑа" msgid "Value" msgstr "ВредноÑÑ‚" msgid "Channel Mixer" msgstr "МикÑер канала" #, fuzzy msgid "UFRaw Message" msgstr "ÐЛRaw " msgid "No more room for new curves." msgstr "Ðема меÑта за нове криве." msgid "Load curve" msgstr "Учитај криву" msgid "All curve formats" msgstr "Сви формати крива" msgid "UFRaw curve format" msgstr "ÐЛRaw формат криве" msgid "Nikon curve format" msgstr "Ðиконов формат криве" msgid "Save curve" msgstr "Сачувај криву" msgid "No more room for new profiles." msgstr "Ðем више меÑта за нове профиле" msgid "Load color profile" msgstr "Учитај профил боја" msgid "Color Profiles" msgstr "Профили боја" msgid "Luminosity (Y value)" msgstr "ЛуминанÑа (Y вредноÑÑ‚)" msgid "Adams' zone" msgstr "ÐдамÑова зона" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "величина %dx%d, увећање %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "величина %dx%d, у размери 1/%d" msgid "Wavelet denoising" msgstr "ТалаÑно уклањање шума" msgid "Despeckling" msgstr "РаÑплитање" msgid "Interpolating" msgstr "Примењујем интерполацију" msgid "Rendering" msgstr "ИÑцртавам" msgid "Loading preview" msgstr "Учитавам преглед" msgid "Saving image" msgstr "Чувам Ñлику" #, c-format msgid "Black point: %0.3lf" msgstr "Црна тачка: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Ðема меÑта за нова подешавања оÑветљења." msgid "Aspect ratio locked, click to unlock" msgstr "Размера је закључана, кликните да је откључате" msgid "Aspect ratio unlocked, click to lock" msgstr "Размера је откључана, кликните да је закључате" msgid "Load dark frame" msgstr "Учитај тамни кадар" msgid "clip" msgstr "потпуно иÑецање (без артафакта)" msgid "restore in LCH space for soft details" msgstr "извлачење у LCH проÑтору за благе детаље" msgid "restore in HSV space for sharp details" msgstr "извлачење у HSV проÑтору за оштре детаље" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Извлачи детаље за негативан EV\n" "Тренутно је изабрано: %s" msgid "digital linear" msgstr "линеарно као код дигиталних Ñензора" msgid "soft film like" msgstr "благо као на филму" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Извлачи Ñветле делове за позитиван EV\n" "Тренутно је избрано: %s" #, c-format msgid "Filename: %s%s" msgstr "Ðазив датотеке: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Ðаправи и ИБ датотеку" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Ðаправи Ñамо ИБ датотеку" msgid "UFRaw options" msgstr "ÐЛRaw могућноÑти" msgid "Settings" msgstr "Подешавања" msgid "Input color profiles" msgstr "Улазни профил боја" msgid "Output color profiles" msgstr "Излазни профил боја" msgid "Display color profiles" msgstr "Профил боја екрана" msgid "Base Curves" msgstr "ОÑновне криве" msgid "Luminosity Curves" msgstr "Криве за луминанÑу" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Команда за позивање Гимпа " msgid "Reset command to default" msgstr "Врати команду на подразумевану вредноÑÑ‚" msgid "Blink Over/Underexposure Indicators" msgstr "Трептећи индикатори пре/подекÑпонираних делова" msgid "Configuration" msgstr "Подешавање" msgid "Save configuration" msgstr "Сачувај подешавање" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Сачувај подешавање у датотеку ($HOME/.ufrawrc)" msgid "Log" msgstr "Дневник" msgid "About" msgstr "О програму" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Ðеидентификовани Летећи Raw (ÐЛRaw) је алат за\n" "читање и обраду raw Ñлика из дигиталних камера.\n" "ÐЛRaw Ñе оÑлања на Raw за Дигиталне Камере (DCRaw)\n" "за Ñамо превођење raw Ñлика.\n" "\n" "Ðутор: Udi Fuchs\n" "Веб адреÑа: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Линеарно" msgid "Logarithmic" msgstr "ЛогаритамÑки" msgid "Hot pixels: " msgstr "Прегорели пикÑели:" msgid "mark" msgstr "означи" msgid "Hot pixel sensitivity" msgstr "ОÑетљивоÑÑ‚ на прегоревање" msgid "Reset hot pixel sensitivity" msgstr "Враћа оÑетљивоÑÑ‚ за прегореле пикÑеле" msgid "RGB histogram" msgstr "RGB хиÑтограм" msgid "R+G+B histogram" msgstr "R+G+B хиÑтограм" msgid "Luminosity histogram" msgstr "ХиÑтограм луминанÑе" msgid "Value (maximum) histogram" msgstr "ХиÑтограм (највеће) вредноÑти" msgid "Saturation histogram" msgstr "ХиÑтограм заÑићеноÑти" msgid "Average:" msgstr "ПроÑек:" msgid "Std. deviation:" msgstr "Ст. девијација:" msgid "Overexposed:" msgstr "ПреекÑпонирано:" msgid "Indicate" msgstr "Покажи" msgid "Underexposed:" msgstr "ПодекÑпонирано:" msgid "White Balance" msgstr "Равнотежа беле" msgid "Cannot use camera white balance." msgstr "Ðе могу да кориÑтим равнотежу беле из апарата." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Ðе поÑтоје подешавања равнотеже беле за ваш фото-апарат.\n" "Проверите ÐЛRaw веб Ñтраницу за податке о укључивању\n" "вашег апарата у лиÑту подржаних." msgid "Reset white balance to initial value" msgstr "Врати равнотежу беле на почетну вредноÑÑ‚" msgid "Temperature" msgstr "Температура" msgid "White balance color temperature (K)" msgstr "Температура за равнотежу беле у К" msgid "Green" msgstr "Зелена" msgid "Green component" msgstr "Зелена компонента" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Изаберите тачку у прегледу Ñлике на оÑнову које Ñе примењује равнотежа беле" msgid "Chan. multipliers:" msgstr "Множиоци канала:" msgid "Bayer pattern interpolation" msgstr "Интерполација Бајеровом муÑтром" msgid "VNG four color interpolation" msgstr "VNG четворобојна интерполација" msgid "Bilinear interpolation" msgstr "Дволинеарна интерполација" msgid "AHD interpolation" msgstr "AHD интерполација" msgid "VNG interpolation" msgstr "VNG интерполација" msgid "PPG interpolation" msgstr "PPG интерполација" msgid "No interpolation" msgstr "Без интерполације" msgid "No Bayer pattern" msgstr "Ðе поÑтоји Бајерова муÑтра" msgid "Apply color smoothing" msgstr "Примељује углађивање боја" msgid "Denoise" msgstr "Уклањање шума" msgid "Threshold for wavelet denoising" msgstr "ОÑетљивоÑÑ‚ за талаÑно уклањање шума" msgid "Reset denoise threshold to default" msgstr "Врати подразумевану вредноÑÑ‚ оÑетљивоÑти на шум" msgid "Dark Frame:" msgstr "Тамни кадар:" msgid "Reset dark frame" msgstr "Поништи тамни кадар" msgid "Reset adjustment" msgstr "Поништи подешавања" msgid "Select a spot on the preview image to choose hue" msgstr "Изаберите тачку у прегледу Ñлике на оÑнови које Ñе примењује нијанÑа" msgid "Remove adjustment" msgstr "Уклони подешавање" msgid "Grayscale Mode:" msgstr "Режим Ñивих тонова:" msgid "Reset channel mixer" msgstr "РеÑетуј микÑер канала" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "РаÑплитање је кориÑно када употребите велику ИСО вредноÑÑ‚ и велике множиоце " "канала: када је одређени канал има лош Ð¾Ð´Ð½Ð¾Ñ Ñигнала и шума. Покушајте да " "поÑтавите вредноÑти величине прозора, Ñмањења боје и броја пролаза на 50,0,5 " "за тај канал. Када канал Ñадржи Ñамо шум, пробајте вредноÑти 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgid "Update channel parameters together" msgstr "ОÑвежава Ñве вредноÑти канала заједно" msgid "Reset despeckle parameters" msgstr "Поништиава вредноÑти за раÑплитање" #. channel to view msgid "View channel:" msgstr "Приказ канала:" #. Parameters msgid "Window size:" msgstr "Величина прозора:" msgid "Color decay:" msgstr "Смањење боје:" msgid "Passes:" msgstr "Број пролаза:" msgid "Load base curve" msgstr "Учитај оÑновну криву" msgid "Save base curve" msgstr "Сачувај оÑновну криву" msgid "Reset base curve to default" msgstr "Врати оÑновну криву на подразумевано" msgid "Input ICC profile" msgstr "Улазни ICC профил" msgid "Output ICC profile" msgstr "Излазни ICC профил" msgid "Display ICC profile" msgstr "ICC профил екрана" msgid "Gamma" msgstr "Гама" msgid "Gamma correction for the input profile" msgstr "ИÑправка гама вредноÑти за улазни профил" msgid "Reset gamma to default" msgstr "Врати гама вредноÑÑ‚ на подразумевано" msgid "Linearity" msgstr "ЛинеарноÑÑ‚" msgid "Linear part of the gamma correction" msgstr "Линеарна иÑправка гама вредноÑти" msgid "Reset linearity to default" msgstr "Врати линеарноÑÑ‚ на подразумевано" msgid "Output intent" msgstr "Излазна намера" msgid "Perceptual" msgstr "Перцептивно" msgid "Relative colorimetric" msgstr "Релативно колориметриÑки" msgid "Saturation" msgstr "ЗаÑићеноÑÑ‚" msgid "Absolute colorimetric" msgstr "ÐпÑолутно колориметриÑки" msgid "Output bit depth" msgstr "Број битова на излазу" msgid "Display intent" msgstr "Приказна намера" msgid "Disable soft proofing" msgstr "Онемогући корекцију из програма" msgid "Contrast" msgstr "КонтраÑÑ‚" msgid "Global contrast adjustment" msgstr "Глобално подешавање контраÑта" msgid "Reset global contrast to default" msgstr "Врати глобално подешавање контраÑта" msgid "Reset saturation to default" msgstr "Врати заÑићеноÑÑ‚ на подразумевано" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Сам подеÑи криву\n" "(Равна хиÑтограм)" msgid "Reset curve to default" msgstr "Врати криву на подразумевано" msgid "Reset black-point to default" msgstr "Врати црну тачку на подразумевано" msgid "Auto adjust black-point" msgstr "Сам подеÑи црну тачку" #. Start of Crop controls msgid "Left:" msgstr "Лево:" msgid "Top:" msgstr "Горе:" msgid "Right:" msgstr "ДеÑно:" msgid "Bottom:" msgstr "Доле:" msgid "Auto fit crop area" msgstr "Сам иÑеца Ñлику на најбољу величину" #, fuzzy msgid "Reset the crop area" msgstr "Поништи регион за иÑецање" msgid "Aspect ratio:" msgstr "Размера:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Размера површине за иÑецање.\n" "Можете унети децимални Ð·Ð°Ð¿Ð¸Ñ (1.273)\n" "или у виду два броја (14:11)" msgid "Shrink factor" msgstr "Фактор Ñужења" msgid "Width" msgstr "Ширина" msgid "Height" msgstr "ВиÑина" msgid "Orientation:" msgstr "Окретање:" msgid "Rotation" msgstr "Ротација" msgid "Rotation angle" msgstr "Угао ротације" msgid "Reset rotation angle" msgstr "Поништиава угао ротације" #. drawLines toggle button msgid "Grid lines" msgstr "Линије мреже" msgid "Number of grid lines to overlay in the crop area" msgstr "Број линија у мрежи које Ñе приказују изнад Ñлике" msgid "Path" msgstr "Путања" msgid "Select output path" msgstr "Изаберите излазну путању" msgid "Filename" msgstr "Ðазив датотеке" msgid "JPEG compression level" msgstr "Ðиво JPEG компреÑије" msgid "JPEG progressive encoding" msgstr "ПрогреÑивно JPEG кодирање" msgid "TIFF lossless Compress" msgstr "TIFF компреÑија без губитка" msgid "Embed EXIF data in output" msgstr "Уметни EXIF податке у развијену Ñлику" msgid "Create ID file " msgstr "Ðаправи ИБ датотеку " msgid "No" msgstr "Ðе" msgid "Also" msgstr "Такође" msgid "Only" msgstr "Само" msgid "Save image defaults " msgstr "Сачувај као подразумевано " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Чува текуће параметре у обради Ñлике као подразумеване.\n" "Увек Ñе чувају излазни параметри у овом прозору." msgid "Never again" msgstr "Ðикад више" msgid "Always" msgstr "Увек" msgid "Just this once" msgstr "Само овај пут" msgid "Remember output path" msgstr "Запамти излазну путању" msgid "Overwrite existing files without asking" msgstr "Препиши поÑтојеће датотеке без питања" msgid "Tag" msgstr "Ознака" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Произвођач камере" msgid "Camera model" msgstr "Модел камере" msgid "Timestamp" msgstr "Датум и време" msgid "Shutter time" msgstr "Дужина екÑпозоције" msgid "Aperture" msgstr "Отвор бленде" msgid "ISO speed" msgstr "ISO вредноÑÑ‚" msgid "35mm focal length" msgstr "Жижна даљина на 35mm" msgid "Flash" msgstr "Блиц" msgid "White balance" msgstr "Равнотежа беле" #, c-format msgid "EXIF data read by %s" msgstr "EXIF подаци Ñу прочитани помоћу %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Упозорење: EXIF подаци неће бити поÑлати у излазу" #, c-format msgid "%s - UFRaw" msgstr "%s - ÐЛRaw" msgid "Spot values:" msgstr "ВредноÑти тачке:" msgid "Exposure compensation in EV" msgstr "Компензација екÑпозиције у EV" msgid "Auto adjust exposure" msgstr "Сам подеÑи екÑпозицију" msgid "Reset exposure to default" msgstr "Врати екÑпозицију на подразумевану вредноÑÑ‚" msgid "Grayscale" msgstr "Сиви тонови" #. Lens correction page msgid "Lens correction" msgstr "Корекција Ñочива" msgid "Base curve" msgstr "ОÑновна крива" msgid "Color management" msgstr "Управљање бојама" msgid "Correct luminosity, saturation" msgstr "ИÑправка луминанÑе и заÑићеноÑти" msgid "Lightness Adjustments" msgstr "Подешавање оÑветљеноÑти" msgid "Crop and rotate" msgstr "ИÑецање и ротирање" msgid "Save" msgstr "Сачувај" msgid "EXIF" msgstr "EXIF подаци" msgid "Zoom percentage" msgstr "Увећање у процентима" msgid "Options" msgstr "ПоÑтавке" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Обриши" msgid "Send image to _Gimp" msgstr "Пошаљу у _Гимп" msgid "Fatal error setting C locale" msgstr "Кобна грешка при поÑтављању локализације" #, c-format msgid "Curve version is not supported" msgstr "Издање криве није подржано" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "ÐеиÑправна Ðиконова датотека Ñа кривом „%s“" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Грешка при отварању датотеке Ñа кривом „%s“: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Грешка при отварању датотеке „%s“: %s" msgid "File exists" msgstr "Датотека већ поÑтоји" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Већ поÑтоји „%s“ датотека.\n" "Да препишем?" msgid "Error creating temporary file." msgstr "Грешка при прављењу привремене датотеке." msgid "Error activating Gimp." msgstr "Грешка у покретању Гимпа." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Ðе могу да кориÑтим равнотежу беле из камере, Ñам одређујем равнотежу.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "могућноÑти --temperature и --green имају предноÑÑ‚ над --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "„%s“ није иÑправна вредноÑÑ‚ равнотеже беле." msgid "Remote URI is not supported" msgstr "Удаљене адреÑе ниÑу подржане" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "грешка у тамном кадру: %s није raw датотека\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "грешка при учитавању тамног кадра „%s“\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Тамни кадар „%s“ не одговара Ñлици" #, c-format msgid "using darkframe '%s'\n" msgstr "кориÑтим тамни кадар „%s“\n" msgid "Error reading NEF curve" msgstr "Грешка при читању NEF криве" #, c-format msgid "Can not downsize from %d to %d." msgstr "Ðе могу да Ñмањим Ñа %d на %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Грешка при прављењу датотеке „%s“." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Грешка при прављењу датотеке." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "Ðазив датотеке Ñа Ñликом не може да буде иÑти као и назив ИБ датотеке „%s“." #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Ðе могу да уметнем излазни профил „%s“ у „%s“." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Занемарен је неподржан број битова „%d“" #, c-format msgid "Unknown file type %d." msgstr "Ðепозната врÑта датотеке %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Дневна ÑветлоÑÑ‚" #. Probably same as above: msgid "Direct sunlight" msgstr "Директно Ñунце" msgid "Cloudy" msgstr "Облачно време" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Сенка" msgid "Incandescent" msgstr "Сијалица" msgid "Incandescent warm" msgstr "Топла Ñијалица" #. Same as "Incandescent": msgid "Tungsten" msgstr "Сијалица" msgid "Fluorescent" msgstr "Ðеонка" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "ВиÑоко флореÑцентна неонка" msgid "Cool white fluorescent" msgstr "Хладна бела неонка" msgid "Warm white fluorescent" msgstr "Топла бела неонка" msgid "Daylight fluorescent" msgstr "Ðеонка Ñа дневном Ñветлошћу" msgid "Neutral fluorescent" msgstr "Ðеутрална неонка" msgid "White fluorescent" msgstr "Бела неонка" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Ðеонка Ñа натријумовом паром" msgid "Day white fluorescent" msgstr "Бела неонка Ñа дневном Ñветлошћу" msgid "High temp. mercury-vapor fluorescent" msgstr "Живина неонка виÑоке температуре" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Блиц (аутоматÑки режим)" msgid "Evening sun" msgstr "Вечерње Ñунце" msgid "Underwater" msgstr "Под водом" msgid "Black & white" msgstr "Црно-бело" msgid "Manual WB" msgstr "Ручна равнотежа беле" msgid "Camera WB" msgstr "Равнотежа беле из камере" msgid "Auto WB" msgstr "Сам одреди равнотежу беле" ufraw-0.19.2/po/de.po0000664000175000017500000013350112123734456011232 00000000000000# German translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs, Matthias Urlichs and Chris Leick. # This file is distributed under the same license as the ufraw package. # Chris Leick , 2009-2011. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2011-09-06 22:21+0100\n" "Last-Translator: Chris Leick \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Das Navigatorfenster öffnen" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Wert %.*f zu groß, auf %.*f gekürzt" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Wert %.*f zu klein, auf %.*f gekürzt" msgid "No input file, nothing to do." msgstr "Keine Eingabedatei, nichts zu tun." #, c-format msgid "Loaded %s %s" msgstr "%s %s geladen" #, c-format msgid "Saved %s %s" msgstr "%s %s gesichert" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "j" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: »%s« überschreiben?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent-Option ist nur im Stapelverarbeitungsmodus gültig" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent-Option ist nur im Stapelverarbeitungsmodus gültig" msgid "Raw images" msgstr "Raw-Bilder" msgid "UFRaw ID files" msgstr "UFRaw-ID-Dateien" msgid "Raw jpeg's" msgstr "Raw-jpegs" msgid "Raw tiff's" msgstr "Raw-tiffs" msgid "All files" msgstr "Alle Dateien" msgid "Show hidden files" msgstr "Versteckte Dateien anzeigen" msgid "Manual curve" msgstr "Manuelle Kurve" msgid "Linear curve" msgstr "Lineare Kurve" msgid "Custom curve" msgstr "Benutzerdefinierte Kurve" msgid "Camera curve" msgstr "Kamerakurve" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Kein Profil" msgid "Color matrix" msgstr "Farbmatrix" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (eingebettet)" msgid "System default" msgstr "Systemstandard" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Es wird versucht .ufrawrc von UFRaw-0.4 oder früher zu konvertieren" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Es wird versucht .ufrawrc von UFRaw-0.6 oder früher zu konvertieren" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw-Version in .ufrawrc wird nicht unterstützt" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Zu viele Anker für Kurve »%s«" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Zu viele Helligkeitsanpassungen in der ID-Datei, wird ignoriert\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID-Datei %s scheint keine reguläre Datei zu sein\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "ID-Datei %s kann nicht zum Lesen geöffnet werden\n" "%s\n" #, c-format msgid "Error reading from file '%s'." msgstr "Fehler beim Lesen der Datei »%s«." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Fehler beim Analysieren von »%s«\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Datei %s kann nicht zum Schreiben geöffnet werden\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "--create-id kann ID nicht mit stdout erzeugen" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - »Unidentified Flying Raw«-Konverter für Digitalkamerafotos.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Aufruf: ufraw [ Optionen ... ] [ raw-Bilddateien ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ Optionen ... ] [ raw-Bilddateien ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ Optionen ... ] [ Standardverzeichnis ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Standardmäßig zeigt »ufraw« ein Vorschaufenster für jedes raw-Bild. Dies\n" "erlaubt es dem Benutzer, die Bildparameter vor dem Speichern zu\n" "optimieren. Wenn in einer Befehlszeile keine raw-Bilder angegeben sind,\n" "zeigt UFRaw einen Dateiauswahldialog. Benutzen Sie »ufraw-batch«, um\n" "Bilder ohne Nachfragen (und ohne Vorschau) zu verarbeiten.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Die Eingabedateien können entweder raw-Bilder oder ufraws ID-Dateien\n" "sein. ID-Dateien enthalten einen Raw-Bilddateinamen und die Parameter\n" "zur Handhabung des Bildes. ID-Dateien können außerdem auch mit der\n" "folgenden Option verwandt werden:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-Datei Die Parameter in der ID-Datei auf andere\n" " raw-Bilder anwenden.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Die restlichen Optionen sind in zwei Gruppen unterteilt.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Die Optionen, die zu den Bildmanipulation gehören, sind:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Weißabgleich-Einstellungen.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Farbtemperatur in Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN Normierung grüner Farbe.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Typ der zu benutzenden Basistonkurve. CURVE kann\n" " jede Kurve sein, die vorher in das GUI geladen\n" " wurde. (Standardkamera, wenn eine solche\n" " existiert, andernfalls linear).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=Datei\n" " Basistonkurve, die in der angegebenen Datei\n" " enthalten ist, wird benutzt. Setzt --base-curve-\n" " Option außer Kraft.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Typ der zu benutzenden Lichtstärkekurve. CURVE\n" " kann jede Kurve sein, die vorher in das GUI\n" " geladen wurde. (Standard: linear)\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=Datei Lichtstärkekurve, die in der angegebenen Datei\n" " enthalten ist, wird benutzt. Setzt --curve-Option\n" " außer Kraft.\n" # EV = Exposure value msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Details für negativen EV wiederherstellen.\n" " »clip« stellt nichts wieder her, sicher vor\n" " Artefakten.\n" " »lch« stellt im LCH-Raum wieder her, gibt weiche\n" " Details.\n" " »hsv« stellt im HSV-Raum wieder her, gibt scharfe\n" " Details.\n" " (Standard: lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Clip-Hervorhebung für positiven EV.\n" " »digital« linear-digitale Sensor-Antwort.\n" " »film« bildet weiche Filmantwort nach.\n" " (Standard: digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Gamma-Anpassung der Basiskurve (Standard: 0,45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITÄT Linearität der Basiskurve (Standard: 0,10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Kontrastanpassung (Standard: 1,0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Sättigungsanpassung (Standard: 1,0, 0 für SW-" "Ausgabe).\n" # http://de.wikipedia.org/wiki/Wavelet msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=SCHWELLENWERT\n" " Schwelle für Wavelet-Rauschunterdrückung\n" " (Standard: 0,0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=WERT\n" " Empfindlichkeit für das Erkennen und Verkleinern von\n" " Hotpixeln (Bildpunkte mit nicht " "proportionalem Lichteinfall; Standard 0.0)\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " Automatische Belichtung oder Belichtungskorrektur\n" " in EV (Standard: 0).\n" # http://de.wikipedia.org/wiki/Farbwert msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " Automatischer Schwarzpunkt oder Schwarzpunktwert\n" " (Standard: 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Zu benutzender Interpolationsalgorithmus\n" " (Standard: ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Farbglättung übernehmen\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Zu benutzender Grausstufen-Umwandlungsalgorithmus\n" " (Standard: none).\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Zu benutzender Graustufenmixerwerte (Standard 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Die Optionen, die zu der endgültigen Ausgabe gehören, sind:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FAKTOR Das Bild um FAKTOR schrumpfen (Standard: 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=GRÖßE Verkleinerung maximal(Höhe, Breite) auf GRÖßE\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Format der Ausgabedatei (Standard: ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Ausgabe-Bit-Tiefe pro Kanal (Standard: 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " »no|also|only«-ID-Datei erstellen (Standard: no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=WERT JPEG-Komprimierung (0-100, Standard: 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif EXIF in Ausgabe einbetten (Standard: EXIF einbetten)\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Einschalten [Ausschalten] der\n" " TIFF-zip-Komprimierung (Standard: nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Das in der raw-Datei eingebettete Vorschaubild\n" " entpacken, anstatt das raw-Bild zu konvertieren.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|WINKEL|no\n" " Bild auf Einstellung der Kamera drehen, um WINKEL\n" " Grad im Uhrzeigersinn drehen oder das Bild nicht\n" " drehen (Standard: camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PUNKTE\n" " Die Ausgabe auf den gegebenen Punktebereich\n" " kürzen, relativ zum raw-Bild nach der Drehung aber\n" " vor jeglicher Skalierung.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Wenden Sie keine Linsenkorrektur an oder versuchen " "Sie\n" " nicht eine anzuwenden.\n" " Korrektur durch automatisches Erkennen der Linse\n" " (Standard none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PFAD PFAD für Ausgabedatei (Standardmäßig wird Pfad der\n" " Eingabedatei benutzt).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=DATEI Ausgabedateiname, benutzen Sie »-« für Ausgabe auf\n" " stdout.\n" # http://astrofotografie.hohmann-edv.de/aufnahmetechniken/ # toucam.dunkelbildabzug.php msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=DATEI DATEI für Dunkelbildabzug benutzen.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Existierende Dateien ohne Nachfrage überschreiben\n" " (Standard: Nein).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Maximierung des Fensters erzwingen\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Während der Stapelkonvertierung keine Nachrichten\n" " anzeigen.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw liest zuerst die Einstellung aus der Ressourcen-Datei $HOME/.ufrawrc.\n" "Falls eine ID-Datei angegeben ist, wird dann deren Einstellung gelesen.\n" "Als nächstes wird die Einstellung aus der Option --conf genommen, wobei die\n" "Eingabe-/Ausgabedateinamen in der ID-Datei ignoriert werden. Als letztes\n" "werden die Optionen von der Befehlszeile gesetzt. Im\n" "Stapelverarbeitungsmodus wird die zweite Gruppe von Optionen NICHT aus der\n" "Ressourcen-Datei gelesen.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Zu guter Letzt zeigt --version die Versionsnummer und\n" "Kompilierungsoptionen für ufraw an. --help zeigt diese Hilfenachricht\n" "und endet.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "»%s« ist kein gültiger Wert für die --%s-Option." msgid "ufraw was build without ZIP support." msgstr "ufraw wurde ohne ZIP-Unterstützung erstellt." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch ist veraltet. Benutzen Sie anstelle dessen ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt gab Zeichenkode 0%o zurück?" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" "Kurve von %s zu laden fehlgeschlagen, zu viele konfigurierte Basiskurven" #, c-format msgid "failed to load curve from %s" msgstr "Kurve von %s zu laden fehlgeschlagen" #, c-format msgid "'%s' is not a valid base curve name." msgstr "»%s« ist kein gültiger Basiskurvenname." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "Kurve von %s zu laden fehlgeschlagen, zu viele konfigurierte Kurven" #, c-format msgid "'%s' is not a valid curve name." msgstr "»%s« ist kein gültiger Kurvenname." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "»%s« ist keine gültige Interpolationsoption." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "»%s« ist keine gültige Graustufenoption." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "»%s« ist keine gültige Graustufenmixeroption." #, c-format msgid "'%s' is not a valid restore option." msgstr "»%s« ist keine gültige Wiederherstellungsoption." #, c-format msgid "'%s' is not a valid clip option." msgstr "»%s« ist keine gültige Clip-Option." msgid "you can not specify both --shrink and --size" msgstr "Sie können --shrink und --size nicht zusammen angeben" #, c-format msgid "'%d' is not a valid bit depth." msgstr "»%d« ist keine gültige Bit-Tiefe." #, c-format msgid "Output type '%s' is deprecated" msgstr "Ausgabetyp »%s« ist missbilligt" msgid "ufraw was build without TIFF support." msgstr "ufraw wurde ohne TIFF-Unterstützung erstellt." msgid "ufraw was build without JPEG support." msgstr "ufraw wurde ohne JPEG-Unterstützung erstellt." msgid "ufraw was build without PNG support." msgstr "ufraw wurde ohne PNG-Unterstützung erstellt." #, c-format msgid "'%s' is not a valid output type." msgstr "»%s« ist kein gültiger Ausgabetyp." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "»%s« ist kein gültiger Ausgabetyp für eingebettetes Bild." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "»%d« ist keine gültige Bit-Tiefe für eingebettetes Bild." #, c-format msgid "'%s' is not a valid rotate option." msgstr "»%s« ist keine gültige Drehoption." #, c-format msgid "'%s' is not a valid create-id option." msgstr "»%s« ist keine gültige create-id-Option." #, c-format msgid "'%s' is not a valid path." msgstr "»%s« ist kein gültiger Pfad." msgid "cannot output more than one file to the same output" msgstr "" "es kann nicht mehr als eine Datei auf der gleiche Ausgabe ausgegeben werden" #, c-format msgid "Raw file '%s' missing." msgstr "Raw-Datei »%s« fehlt." msgid "Delete raw file" msgstr "Raw-Datei löschen" msgid "_Delete selected" msgstr "Auswahl _Löschen" msgid "Delete _All" msgstr "_Alle löschen" msgid "Select files to delete" msgstr "Dateien zum Löschen auswählen" #, c-format msgid "Error reading directory '%s'." msgstr "Fehler beim Lesen von Verzeichnis »%s«." #, c-format msgid "Error deleting '%s'" msgstr "Fehler beim Löschen von »%s«" msgid "Reading embedded image requires libjpeg." msgstr "Zum Lesen des eingebetteten Bildes wird libjpeg benötigt." msgid "No embedded image found" msgstr "Kein eingebettetes Bild gefunden" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Originalgröße (%d) ist kleiner als die angeforderte Größe (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "ppm-Vorschaubild stimmt nicht überein, Höhe %d, Breite %d, während Puffer %d " "ist." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Höhe von JPEG-Vorschaubild %d verschieden von erwartetem %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Breite von JPEG-Vorschaubild %d verschieden von erwartetem %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Fehler beim Erstellen der Datei »%s«.\n" "%s" msgid "No embedded image read" msgstr "Kein eingebettetes Bild gelesen" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Fehler beim Erstellen der Datei »%s«. Unbekannter Dateityp %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Fehler beim Erstellen der Datei »%s«: %s" #, c-format msgid "Error writing '%s'" msgstr "Fehler beim Schreiben von »%s«" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Nicht unterstützter Ausgabetyp (%d) für eingebettetes Bild" #, c-format msgid "Loading raw file '%s'" msgstr "Raw-Datei »%s« wird geladen" msgid "Can't allocate new image." msgstr "Neues Bild kann nicht allokiert werden." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Hintergrund" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Einbetten von Ausgabeprofil »%s« in Bild fehlgeschlagen." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF-Pufferlänge %d zu lang, ignoriert." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Hersteller:\t\t%s\n" "Modell:\t\t%s%s\n" "Eingehängt:\t\t%s\n" "Schnittfaktor:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Hersteller:\t\t%s\n" "Modell:\t\t%s\n" "Brennweitenbereich:\t%s\n" "Blende:\t\t%s\n" "Schnittfaktor:\t%.1f\n" "Typ:\t\t%s\n" "Einhängungen:\t\t%s" msgid "Focal" msgstr "Brennweite" msgid "Focal length" msgstr "Brennweite" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-Nummer (Blende)" msgid "Distance" msgstr "Entfernung" msgid "Distance to subject in meters" msgstr "Entfernung zum Objekt in Meter" #. Add the model combobox msgid "Model:" msgstr "Modell:" msgid "Chromatic Aberrations mathematical model" msgstr "Mathematisches Modell farblicher Aberrationen" msgid "Parameters" msgstr "Parameter" msgid "Optical vignetting mathematical model" msgstr "Mathematisches Modell optischer Eckenabschattung" msgid "Lens distortion mathematical model" msgstr "Mathematisches Modell der Linsenverzerrung" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Linsengeometrie:" msgid "The geometry of the lens used to make the shot" msgstr "Die Geometrie der Linse, die benutzt wurde, um diesen Schuss zu machen" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Zielgeometrie:" msgid "The target geometry for output image" msgstr "Die Zielgeometrie für das Ausgabebild" msgid "Camera" msgstr "Kamera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Unter Benutzung eines Musters nach einer Kamera suchen\n" "Format: [Hersteller, ][Modell]" msgid "Choose camera from complete list" msgstr "Kamera aus kompletter Liste auswählen" msgid "Reset all lens correction settings" msgstr "Alle Linsenjorrektureinstellungen zurücksetzen" #. Lens selector msgid "Lens" msgstr "Linse" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Unter Benutzung eines Musters nach einer Linse suchen\n" "Format: [Hersteller, ][Modell]" msgid "Choose lens from list of possible variants" msgstr "Linse aus einer Liste mit möglichen Varianten auswählen" msgid "Automatically find lens and set lens corrections" msgstr "Linse automatisch suchen und Linsenkorrektur einstellen" msgid "Lateral chromatic aberration" msgstr "Seitliche farbliche Aberration" msgid "Optical vignetting" msgstr "optische Eckenabschattung" msgid "Lens distortion" msgstr "Linsenverzerrung" msgid "Lens geometry" msgstr "Linsengeometrie" msgid "Raw histogram with conversion curves" msgstr "Raw-Histogramm mit Konvertierungskurven" msgid "Live histogram" msgstr "Live-Histogramm" #. No darkframe file msgid "None" msgstr "Keine" msgid "Lightness" msgstr "Helligkeit" msgid "Luminance" msgstr "Leuchtdichte" msgid "Value" msgstr "Wert" msgid "Channel Mixer" msgstr "Kanalmixer" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Kein Platz mehr für neue Kurven." msgid "Load curve" msgstr "Kurve laden" msgid "All curve formats" msgstr "Alle Kurvenformate" msgid "UFRaw curve format" msgstr "UFRaw-Kurvenformat" msgid "Nikon curve format" msgstr "Nikon-Kurvenformat" msgid "Save curve" msgstr "Kurve speichern" msgid "No more room for new profiles." msgstr "Kein Platz mehr für neue Profile." msgid "Load color profile" msgstr "Farbprofil laden" msgid "Color Profiles" msgstr "Farbprofile" msgid "Luminosity (Y value)" msgstr "Leuchtkraft (Y-Wert)" msgid "Adams' zone" msgstr "Adams' Zone" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "Größe %dx%d, Zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "Größe %dx%d, Skala 1/%d" msgid "Wavelet denoising" msgstr "Wavelet-Rauschunterdrückung" msgid "Despeckling" msgstr "Störungsentfernung" msgid "Interpolating" msgstr "Interpolation" msgid "Rendering" msgstr "Rendering" msgid "Loading preview" msgstr "Vorschau laden" msgid "Saving image" msgstr "Bild speichern" #, c-format msgid "Black point: %0.3lf" msgstr "Schwarzpunkt: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Kein Platz mehr für neue Helligkeitsanpassungen" msgid "Aspect ratio locked, click to unlock" msgstr "Seitenverhältnis gesperrt, klicken zum Entsperren" msgid "Aspect ratio unlocked, click to lock" msgstr "Seitenverhältnis entsperrt, klicken zum Sperren" msgid "Load dark frame" msgstr "Dunkelbild laden" msgid "clip" msgstr "Clip" msgid "restore in LCH space for soft details" msgstr "im LCH-Raum wiederherstellen für weiche Details" msgid "restore in HSV space for sharp details" msgstr "im HSV-Raum wiederherstellen für scharfe Details" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Details für negativen EV wiederherstellen\n" "Derzeitiger Status: %s" msgid "digital linear" msgstr "digital linear" msgid "soft film like" msgstr "wie weicher Film" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Clip-Hervorhebungen für positiven EV\n" "Derzeitiger Status: %s" #, c-format msgid "Filename: %s%s" msgstr "Dateiname: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Außerdem ID-Datei erstellen" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Nur ID-Datei erstellen" msgid "UFRaw options" msgstr "UFRaw-Optionen" msgid "Settings" msgstr "Einstellungen" msgid "Input color profiles" msgstr "Eingabe-Farbprofile" msgid "Output color profiles" msgstr "Ausgabe-Farbprofile" msgid "Display color profiles" msgstr "Farbprofile anzeigen" msgid "Base Curves" msgstr "Basiskurven" msgid "Luminosity Curves" msgstr "Leuchtkraftkurven" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Gimp-Befehl aus der Ferne" msgid "Reset command to default" msgstr "Befehl auf Standard zurücksetzen" msgid "Blink Over/Underexposure Indicators" msgstr "Über-/Unterbelichtungsindikatoren für Blinken" msgid "Configuration" msgstr "Konfiguration" msgid "Save configuration" msgstr "Konfiguration sichern" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Konfiguration in Einstellungsdatei ($HOME/.ufrawrc) sichern" msgid "Log" msgstr "Protokoll" msgid "About" msgstr "Über" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Das Unidentifizierte Fliegende Raw (UFRaw)\n" "ist ein Dienstprogramm, um raw-Bilder von Digitalkameras zu lesen und zu\n" "manipulieren.\n" "UFRaw beruht auf Digital Camera Raw (DCRaw)\n" "\n" "Autor: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Linear" msgid "Logarithmic" msgstr "Logarithmisch" msgid "Hot pixels: " msgstr "Hotpixel (Bildpunkte mit nicht proportionalem Lichteinfall): " msgid "mark" msgstr "markieren" msgid "Hot pixel sensitivity" msgstr "" "Empfindlichkeit für Hotpixel (Bildpunkte mit nicht proportionalem " "Lichteinfall)" msgid "Reset hot pixel sensitivity" msgstr "" "Empfindlichkeit für Hotpixel (Bildpunkte mit nicht proportionalem " "Lichteinfall) zurücksetzen" msgid "RGB histogram" msgstr "RGB-Histogramm" msgid "R+G+B histogram" msgstr "R+G+B-Histogramm" msgid "Luminosity histogram" msgstr "Leuchtkrafthistogramm" msgid "Value (maximum) histogram" msgstr "Werte-(Maximum)-Histogramm" msgid "Saturation histogram" msgstr "Sättigungshistogramm" msgid "Average:" msgstr "Durchschnitt:" msgid "Std. deviation:" msgstr "Standardabweichung:" msgid "Overexposed:" msgstr "Überbelichtet:" msgid "Indicate" msgstr "Andeuten" msgid "Underexposed:" msgstr "Unterbelichtet:" msgid "White Balance" msgstr "Weißabgleich" msgid "Cannot use camera white balance." msgstr "Kamera kann nicht mit Weißabgleich verwandt werden." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Für Ihr Kameramodell gibt es keine Voreinstellung des Weißabgleichs.\n" "Prüfen Sie die Webseite von UFRaw, um Informationen darüber zu erhalten,\n" "wie Ihre Kamera unterstützt werden kann." msgid "Reset white balance to initial value" msgstr "Weißabgleich auf Anfangswert zurücksetzen" msgid "Temperature" msgstr "Temperatur" msgid "White balance color temperature (K)" msgstr "Farbtemperatur (K) für Weißabgleich" msgid "Green" msgstr "Grün" msgid "Green component" msgstr "Grüne Komponente" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Wählen Sie einen Punkt auf dem Vorschaubild, um den Weißabgleichspunkt " "anzuwenden." msgid "Chan. multipliers:" msgstr "Kanalmultiplikatoren:" msgid "Bayer pattern interpolation" msgstr "Bayer-Musterinterpolation" msgid "VNG four color interpolation" msgstr "VNG-Vierfarbinterpolation" msgid "Bilinear interpolation" msgstr "Bilineare Interpolation" msgid "AHD interpolation" msgstr "AHD-Interpolation" msgid "VNG interpolation" msgstr "VNG-Interpolation" msgid "PPG interpolation" msgstr "PPG-Interpolation" msgid "No interpolation" msgstr "Keine Interpolation" msgid "No Bayer pattern" msgstr "Kein Bayer-Muster" msgid "Apply color smoothing" msgstr "Farbglättung übernehmen" msgid "Denoise" msgstr "Rauschunterdrückung" msgid "Threshold for wavelet denoising" msgstr "Schwelle für Wavelet-Rauschunterdrückung" msgid "Reset denoise threshold to default" msgstr "Grenzwert für Rauschunterdrückung auf Standard setzen" msgid "Dark Frame:" msgstr "Dunkelbild:" msgid "Reset dark frame" msgstr "Dunkelbild zurücksetzen" msgid "Reset adjustment" msgstr "Anpassung zurücksetzen" msgid "Select a spot on the preview image to choose hue" msgstr "Wählen Sie einen Punkt auf dem Vorschaubild, um Farbton auszuwählen " msgid "Remove adjustment" msgstr "Anpassung entfernen" msgid "Grayscale Mode:" msgstr "Graustufenmodus:" msgid "Reset channel mixer" msgstr "Kanalmixer zurücksetzen" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Störungsentfernung ist hauptsächlich nützlich, wenn eine hohe ISO-Nummer mit " "einem hohen Kanalmultiplikator kombiniert wird: wenn ein Kanal ein sehr " "schlechtes Verhältnis zwischen Signal und Rauschen hat. Versuchen Sie die " "Fenstergröße, Farbdämpfung und die Zahl der Durchgänge für diesen Kanal auf " "50,0,5 zu setzen. Wenn ein Kanal nur Rauschen enthält, dann versuchen Sie " "1,0.6,1.\n" "Störungsentfernung ist ausgeschaltet, wenn die Fenstergröße oder die " "Durchgänge gleich Null sind. Wenn es eingeschaltet ist, kann die " "Fenstergröße nicht kleiner sein, als die Anzahl der Durchgänge." msgid "Update channel parameters together" msgstr "Kanalparameter zusammen aktualisieren" msgid "Reset despeckle parameters" msgstr "Störungsentfernungsparameter zurücksetzen" #. channel to view msgid "View channel:" msgstr "Kanal ansehen:" #. Parameters msgid "Window size:" msgstr "Fenstergröße:" msgid "Color decay:" msgstr "Farbdämpfung:" msgid "Passes:" msgstr "Durchgänge:" msgid "Load base curve" msgstr "Basiskurve laden" msgid "Save base curve" msgstr "Basiskurve sichern" msgid "Reset base curve to default" msgstr "Basiskurve auf Standard zurücksetzen" msgid "Input ICC profile" msgstr "Eingabe-ICC-Profil" msgid "Output ICC profile" msgstr "Ausgabe-ICC-Profil" msgid "Display ICC profile" msgstr "ICC-Profil anzeigen" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Gamma-Korrektur für das Eingabeprofil" msgid "Reset gamma to default" msgstr "Gamma auf Standard zurücksetzen" msgid "Linearity" msgstr "Linearität" msgid "Linear part of the gamma correction" msgstr "Linearer Teil der Gamma-Korrektur" msgid "Reset linearity to default" msgstr "Linearität auf Standard zurücksetzen" msgid "Output intent" msgstr "Ausgabezweck" msgid "Perceptual" msgstr "Wahrnehmend" msgid "Relative colorimetric" msgstr "Relativ kolorimetrisch" msgid "Saturation" msgstr "Sättigung" msgid "Absolute colorimetric" msgstr "Absolut kolorimetrisch" msgid "Output bit depth" msgstr "Ausgabe-Bit-Tiefe" msgid "Display intent" msgstr "Eingabezweck" msgid "Disable soft proofing" msgstr "Weichen Korrekturabzug ausschalten" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Globale Kontrastanpassung" msgid "Reset global contrast to default" msgstr "Globale Kontrasteinstellung auf Standard zurücksetzen" msgid "Reset saturation to default" msgstr "Sättigung auf Standard zurücksetzen" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automatisch angepasste Kurve\n" "(Histogramm abflachen)" msgid "Reset curve to default" msgstr "Kurve auf Standard zurücksetzen" msgid "Reset black-point to default" msgstr "Schwarzpunkt auf Standard zurücksetzen" msgid "Auto adjust black-point" msgstr "Automatisch angepasster Schwarzpunkt" #. Start of Crop controls msgid "Left:" msgstr "Links:" msgid "Top:" msgstr "Kopfende:" msgid "Right:" msgstr "Rechts:" msgid "Bottom:" msgstr "Fußende:" msgid "Auto fit crop area" msgstr "Schnittbereich automatisch anpassen" #, fuzzy msgid "Reset the crop area" msgstr "Schnittregion zurücksetzen" msgid "Aspect ratio:" msgstr "Seitenverhältnis:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Seitenverhältnis der Schnittregion.\n" "Kann in dezimaler Schreibweise (1,273)\n" "oder als Verhältnis von zwei Zahlen (14:11) eingegeben werden." msgid "Shrink factor" msgstr "Schrumpffaktor" msgid "Width" msgstr "Breite" msgid "Height" msgstr "Höhe" msgid "Orientation:" msgstr "Ausrichtung:" msgid "Rotation" msgstr "Drehung" msgid "Rotation angle" msgstr "Drehwinkel" msgid "Reset rotation angle" msgstr "Drehwinkel zurücksetzen" #. drawLines toggle button msgid "Grid lines" msgstr "Gitterlinien" msgid "Number of grid lines to overlay in the crop area" msgstr "Anzahl der Gitterlinien, die über den Ausschneidebereich gelegt werden" msgid "Path" msgstr "Pfad" msgid "Select output path" msgstr "Ausgabepfad wählen" msgid "Filename" msgstr "Dateiname" msgid "JPEG compression level" msgstr "JPEG-Komprimierungsstufe" msgid "JPEG progressive encoding" msgstr "fortlaufende JPEG-Kodierung" msgid "TIFF lossless Compress" msgstr "verlustfreie TIFF-Komprimierung" msgid "Embed EXIF data in output" msgstr "EXIF-Daten-Ausgabe einbetten" msgid "Create ID file " msgstr "ID-Datei erzeugen" msgid "No" msgstr "Nein" msgid "Also" msgstr "Außerdem" msgid "Only" msgstr "Nur" msgid "Save image defaults " msgstr "Bildstandards sichern" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Derzeitige Bild-Manipulationsparameter als Standards sichern.\n" "Die Ausgabeparameter in diesem Fenster werden immer gesichert." msgid "Never again" msgstr "Niemals wieder" msgid "Always" msgstr "Immer" msgid "Just this once" msgstr "Nur dieses eine Mal" msgid "Remember output path" msgstr "An Ausgabepfad erinnern" msgid "Overwrite existing files without asking" msgstr "Existierende Dateien ohne Nachfrage überschreiben" msgid "Tag" msgstr "Markierung" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Kamerahersteller" msgid "Camera model" msgstr "Kameramodell" msgid "Timestamp" msgstr "Zeitstempel" msgid "Shutter time" msgstr "Verschlusszeit" msgid "Aperture" msgstr "Blende" msgid "ISO speed" msgstr "ISO-Geschwindigkeit" msgid "35mm focal length" msgstr "35mm Brennweite" msgid "Flash" msgstr "Blitz" msgid "White balance" msgstr "Weißabgleich" #, c-format msgid "EXIF data read by %s" msgstr "EXIF-Daten von %s gelesen" msgid "Warning: EXIF data will not be sent to output" msgstr "Warnung: EXIF-Daten werden nicht an die Ausgabe gesendet" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Punktwerte:" msgid "Exposure compensation in EV" msgstr "Belichtungsausgleich in EV" msgid "Auto adjust exposure" msgstr "Automatisch angepasster Ausgleich" msgid "Reset exposure to default" msgstr "Ausgleich auf Standard zurücksetzen" msgid "Grayscale" msgstr "Graustufen" #. Lens correction page msgid "Lens correction" msgstr "Linsenkorrektur" msgid "Base curve" msgstr "Basiskurve" msgid "Color management" msgstr "Farbverwaltung" msgid "Correct luminosity, saturation" msgstr "Leuchtstärke und Sättigung korrigieren" msgid "Lightness Adjustments" msgstr "Helligkeitsanpassungen" msgid "Crop and rotate" msgstr "Schneiden und drehen" msgid "Save" msgstr "Sichern" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom-Prozentsatz" msgid "Options" msgstr "Optionen" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Löschen" msgid "Send image to _Gimp" msgstr "Bild an _Gimp senden" msgid "Fatal error setting C locale" msgstr "Schwerwiegender Fehler beim Einstellen von C-Sprachumgebung" #, c-format msgid "Curve version is not supported" msgstr "Kurvenversion wird nicht unterstützt" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Falsche Nikon-Kurvendatei »%s«" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Fehler beim Öffnen der Kurvendatei »%s«: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Fehler beim Öffnen der Datei »%s«: %s" msgid "File exists" msgstr "Datei existiert" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Datei »%s« existiert bereits.\n" "Überschreiben?" msgid "Error creating temporary file." msgstr "Fehler beim Erstellen der temporären Datei." msgid "Error activating Gimp." msgstr "Fehler bei der Aktivierung von Gimp" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Der Weißabgleich der Kamera kann nicht verwendet werden, es wird zum " "automatischen Weißabgleich zurückgekehrt.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "--temperature- und --green-Optionen überschreiben die Option --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "»%s« ist keine gültige Weißabgleich-Einstellung." msgid "Remote URI is not supported" msgstr "URI in der Ferne wird nicht unterstützt" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "Dunkelbild-Fehler: %s ist keine raw-Datei\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "Fehler beim Laden von Dunkelbild »%s«\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Dunkelbild »%s« ist inkompatibel zu Hauptbild" #, c-format msgid "using darkframe '%s'\n" msgstr "Dunkelbild »%s« wird benutzt\n" msgid "Error reading NEF curve" msgstr "Fehler beim Lesen der NEF-Kurve" #, c-format msgid "Can not downsize from %d to %d." msgstr "Es kann nicht von %d auf %d verkleinert werden." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Fehler beim Erstellen der Datei »%s«." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Fehler beim Erstellen der Datei." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Bilddateiname kann nicht gleich dem ID-Dateinamen »%s« sein" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Einbetten des Ausgabeprofils »%s« in »%s« fehlgeschlagen." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Nicht unterstützte Bit-Tiefe »%d« ignoriert." #, c-format msgid "Unknown file type %d." msgstr "Unbekannter Dateityp %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Tageslicht" #. Probably same as above: msgid "Direct sunlight" msgstr "Direkte Sonneneinstrahlung" msgid "Cloudy" msgstr "Wolkig" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Schatten" msgid "Incandescent" msgstr "Strahlend" msgid "Incandescent warm" msgstr "Strahlend warm" #. Same as "Incandescent": msgid "Tungsten" msgstr "Wolfram" msgid "Fluorescent" msgstr "Fluoreszierend" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Hoch fluoreszierend" msgid "Cool white fluorescent" msgstr "Kalt weiß fluoreszierend" msgid "Warm white fluorescent" msgstr "Warm weiß fluoreszierend" msgid "Daylight fluorescent" msgstr "Tageslicht-fluoreszierend" msgid "Neutral fluorescent" msgstr "Neutral fluoreszierend" msgid "White fluorescent" msgstr "Weiß fluoreszierend" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Natriumdampf-fluoreszierend" msgid "Day white fluorescent" msgstr "Tagesweiß-fluoreszierend" msgid "High temp. mercury-vapor fluorescent" msgstr "Hochtemperatur-Quecksilberdampf-fluoreszierend" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Blitz (automatischer Modus)" msgid "Evening sun" msgstr "Abendsonne" msgid "Underwater" msgstr "Unter Wasser" msgid "Black & white" msgstr "Schwarz & Weiß" msgid "Manual WB" msgstr "Manuelles SW" msgid "Camera WB" msgstr "Kamera-SW" msgid "Auto WB" msgstr "Automatisches SW" ufraw-0.19.2/po/POTFILES.in0000644000175000017500000000055611342040635012047 00000000000000curveeditor_widget.c iccjpeg.c nikon_curve.c uf_gtk.cc ufobject.cc ufraw-batch.c ufraw.c ufraw_chooser.c ufraw_conf.c ufraw_delete.c ufraw_developer.c ufraw_embedded.c ufraw_exiv2.cc ufraw-gimp.c ufraw_icons.c ufraw_lensfun.cc ufraw_lens_ui.c ufraw_message.c ufraw_preview.c ufraw_routines.c ufraw_saver.c ufraw_settings.cc ufraw_ufraw.c ufraw_writer.c wb_presets.c ufraw-0.19.2/po/it.po0000664000175000017500000013077712123734456011272 00000000000000# Italian translation of Ufraw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the Ufraw package. # daniele , 2007-2009. # eugenio , 2009. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-10-14 06:00+0100\n" "Last-Translator: Eugenio Baldi \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Apri finestra navigatore" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Valore %.*f troppo grande, truncato a %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Valore %.*f troppo piccolo, truncato a %.*f." msgid "No input file, nothing to do." msgstr "Nessun file input, niente da fare." #, c-format msgid "Loaded %s %s" msgstr "Caricato %s %s" #, c-format msgid "Saved %s %s" msgstr "Salvato %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "s" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s:·sovrascrivi·'%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "l'opzione --silent è valida unicamente in modalità batch" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "l'opzione --silent è valida unicamente in modalità batch" msgid "Raw images" msgstr "Immagini Raw" msgid "UFRaw ID files" msgstr "File con ID UFRaw" msgid "Raw jpeg's" msgstr "Raw jpeg" msgid "Raw tiff's" msgstr "Raw Tiff" msgid "All files" msgstr "Tutti i file" msgid "Show hidden files" msgstr "Mostra file nascosti" msgid "Manual curve" msgstr "Curva manuale" msgid "Linear curve" msgstr "Curva lineare" msgid "Custom curve" msgstr "Curva predefinita" msgid "Camera curve" msgstr "Curva fotocamera" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Nessun profilo" msgid "Color matrix" msgstr "Matrice di colore" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "" msgid "System default" msgstr "Predefinito di sistema" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Conversione di .ufrawrc da UFRaw-0.4 o precedente" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Conversione·di·.ufrawrc·da·UFRaw-0.6·o·precedente" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "Versione di UFRaw in .ufrawrc non supportata" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Troppi punti di ancoraggio per la curva '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Troppi aggiustamenti di lumonisità nel ID file, ignorati\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Il file ID %s non sembra essere un file regolare\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Non è possibile aprire il file ID %s in lettura\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Errore durante la creazione del file '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Errore di parsing su '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Non è possibile aprire il file %s in scrittura\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "non è possibile usare --create-id con stdout" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Convertitore Unidentified Flying Raw per immagini digitali.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Utilizzo: ufraw [ opzioni ... ] [ raw-image-files ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opzioni ... ] [ immagini raw ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opzioni ... ] [ directory-predefinita ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "In maniera predefinita 'ufraw' mostra un'anteprima per ogni immagine raw\n" "permettendo modifiche ai parametri dell'immagine. Se non vengono indicate\n" "immagini raw nella riga di comando, UFRaw mostrerà una finestra di dialogo.\n" "Per elaborare le immagini senza interazione (e senza anteprima) bisogna\n" "utilizzare 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "I file di input possono essere immagini raw o file ID di ufraw. Questi\n" "ultimi contengono il nome dell'immagine raw e una serie di parametri\n" "per la gestione della stessa. E' altresì possibile usare un file ID unico\n" "con l'opzione:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=file-ID Applica i parametri del file ID sulle immagini RAW.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Le restanti opzioni sono separate in due gruppi.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Le opzioni collegate alla manipolazione dell'immagine sono:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Impostazioni per il bilanciamento del bianco.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Temperatura colore in Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN Normalizzazione del colore verde.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Tipi di curva base dei toni da usare. CURVE può " "essere\n" " qualsiasi curva precedentemente caricata " "nell'interfaccia.\n" " (predefinita \"camera\" se esiste, altrimenti \"linear" "\").\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " Usa la curva base dei toni presente nel file.\n" " Prevale sull'opzione passata con --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Tipo di curva della luminosità da usare. CURVE può " "essere\n" " qualsiasi curva che era stata precedentemente caricata " "con\n" " l'interfaccia (predefinto \"linear\").\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file Usa la curva della luminosità presente nel file.\n" " Prevale sull'opzione passata con --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Ripristina dettagli per EV negativi.\n" " 'clip' non ripristina nulla - cautelativo.\n" " 'lch' ripristina nello spazio LCH - offre dettagli " "soft.\n" " 'hsv' ripristina nello spazio HSV - offre dettagli " "definiti.\n" " (predefinito lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Tieni luci alte per EV positivi.\n" " 'digital' risposta lineare ai sensori digitali.\n" " 'film' emula la risposta soft tipica della pellicola. " "(predefinito digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Aggiustamento gamma per la curva base (predefinito " "0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY Linearità della curva base (predefinito 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Aggiustamento contrasto (predefinito 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Aggiustamento della saturazione (predefinito 1.0, 0 " "per output in Bianco e Nero).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=THRESHOLD\n" " Soglia per il wavelet nella riduzione di disturbo " "(predefinito 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" "Soglia per la ricerca e la riduzione dei pixel bruciati(default 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " Esposizione automatica o correzione in EV (predefinita " "0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " Valore del punto di nero (predefinito 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algoritmo di interpolazione da utilizzare " "(predefinito: ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Applica definizione colore.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo per la conversione della scala di grigio " "(predefinito nessuno).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo per la conversione della scala di grigio " "(predefinito nessuno).\n" msgid "The options which are related to the final output are:\n" msgstr "Le opzioni relative all'output finale sono:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FATTORE Riscala l'immagine per un fattore indicato " "(predefinito 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "" "--size=SIZE Ridimensiona (per altezza e larghezza) al valore " "indicato.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Formato di uscita (predefinito ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Profondità bit di uscita per canale (predefinito 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Crea nessuno|anche|solo il file ID (predefinito \"no" "\").\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE Compressione JPEG (0-100, predefinita 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Integra nell'output JPEG E PNG i dati EXIF\n" " (integrazione predefinita).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Abilita [disabilita] compressione zip TIFF " "(predefinito no zip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Estrae l'anteprima immagine nel file raw anziché " "convertire\n" " l'immagine raw.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " Ruota l'immagine come impostato dalla fotocamera, di " "ANGOLO gradi\n" " in senso orario, oppure non ruotare (default camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Taglia l'output al numero di pixel indicato, " "relativamente alla\n" " immagine raw dopo la rotazione ma prima di ogni " "scalatura.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Non applica la correzione ottica oppure cerca di " "applicarla\n" " riconoscendo automaticamente le lenti (default none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PATH Percorso per l'output (in maniera predefinita la " "directory del file input).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FILE Nome del file di output, usa '-' per lo stdout.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=FILE Usa FILE la sottrazione della darkframe dal file raw.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Sovrascrivi i file esistenti senza chiedere " "(disabilitato in maniera predefinita).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Forza la finestra massimizzata.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Non mostrare alcun messaggio durante la conversione " "batch.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw legge le impostazioni dal file $HOME/.ufrawrc. Se specificato, sarà\n" "letto un file ID. Seguiranno le impostazioni passate con l'opzione --conf, " "ignorando\n" "i nomi dei file input/output nel file ID. Per ultimo, le opzioni passate " "nella linea\n" "dei comandi. In modalità batch, il secondo gruppo di opzioni non è letto dal " "file\n" "delle risorse.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Ultimo, ma non meno importante, --version mostra la versione e le opzioni\n" "di compilazione per ufraw e --help mostra questo messaggio ed esce.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' non è un valore valido per l'opzione --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw è stato compilato senza supporto ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch è obsoleto. Utilizza ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt ha restituito il codice carattere 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "non è possibile caricare la curva da %s, troppe curve base configurate" #, c-format msgid "failed to load curve from %s" msgstr "non è possibile caricare la curva da %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' non è un nome valido per una curva." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "non è possibile caricare la curva da %s, troppe curve configurate." #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' non è un nome valido per la curva." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' non è una valida opzione per l'interpolazione." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' non è un'opzione valida per la scala di grigio." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' non è un'opzione valida per la scala di grigio." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' non è un'opzione valida per il ripristino." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' non è un'opzione valida di clip." msgid "you can not specify both --shrink and --size" msgstr "non è possibile specificare contemporaneamente --shrink e --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' non è un bit valido per la profondità." #, c-format msgid "Output type '%s' is deprecated" msgstr "Tipo di uscita '%s' deprecato" msgid "ufraw was build without TIFF support." msgstr "ufraw è stato compilato senza supporto TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw è stato compilato senza supporto JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw è stato compilato senza supporto PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' non è un tipo valido di output." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' non è un tipo di output valido per immagini integrate." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' non è un valido bit di profondità per le immagini integrate." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' non è un'opzione valida per la rotazione." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' non è un'opzione valida per create-id." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' non è un valido tracciato." msgid "cannot output more than one file to the same output" msgstr "non è possibile esportare molteplici file sullo stesso output." #, c-format msgid "Raw file '%s' missing." msgstr "File Raw '%s' mancante." msgid "Delete raw file" msgstr "Elimina file raw" msgid "_Delete selected" msgstr "_Elimina selezione" msgid "Delete _All" msgstr "Elimin_a tutto" msgid "Select files to delete" msgstr "Seleziona file da eliminare" #, c-format msgid "Error reading directory '%s'." msgstr "Errore di lettura per la directory '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Errore durante l'eliminazione di '%s'" msgid "Reading embedded image requires libjpeg." msgstr "La lettura delle immagini integrate richiede libjpeg." msgid "No embedded image found" msgstr "Nessuna immagine integrata" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "La dimensione originale (%d) è più piccola di quella richiesta (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "miniature ppm non coincidenti, altezza %d, larghezza %d, mentre il buffer è " "%d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Miniature JPEG alte %d differenti dal previsto %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Miniature JPEG di larghezza %d differenti da %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Errore durante la creazione del file '%s'.\n" "%s" msgid "No embedded image read" msgstr "Nessuna immagine letta" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "" "Errore durante la creazione del file '%s'. Tipo di file sconosciuto %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Errore durante la creazione del file '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Errore di scrittura per '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Tipo di output non supportato (%d) per immagini integrate" #, c-format msgid "Loading raw file '%s'" msgstr "Caricamento del file raw '%s'" msgid "Can't allocate new image." msgstr "Non è possibile allocare una nuova immagine." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Sfondo" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Non è possibile integrare il profilo di output '%s' nell'immagine." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "Il buffer EXIF è troppo lungo (%d) e sarà ignorato." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Produttore:\t\t%s\n" "Modello:\t\t\t%s%s\n" "Posizione:\t\t%s\n" "Fattore di crop:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Produttore:\t\t%s\n" "Modello:\t\t\t%s\n" "Estensione Focale:\t%s\n" "Apertura:\t\t\t%s\n" "Fattore riduzione:\t%.1f\n" "Tipo:\t\t\t%s\n" "Posizione:\t\t%s" msgid "Focal" msgstr "Focale" msgid "Focal length" msgstr "Lunghezza focale" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-numero (apertura)" msgid "Distance" msgstr "Distanza" msgid "Distance to subject in meters" msgstr "Distanza al soggetto in metri" #. Add the model combobox msgid "Model:" msgstr "Modello:" msgid "Chromatic Aberrations mathematical model" msgstr "Modello matematico aberrazione cromatica" msgid "Parameters" msgstr "Parametri" msgid "Optical vignetting mathematical model" msgstr "Modello matematico per la vignettatura ottica" msgid "Lens distortion mathematical model" msgstr "Modello matematico distorsione ottica" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometria lenti:" msgid "The geometry of the lens used to make the shot" msgstr "Geometria delle lenti utilizzate per la foto" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Geometria obiettivo:" msgid "The target geometry for output image" msgstr "La geometria obiettivo per immagine di output" msgid "Camera" msgstr "Fotocamera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Cerca fotocamera utilizzando un pattern\n" "Formato: [produttore, ][modello]" msgid "Choose camera from complete list" msgstr "Scegli fotocamera dalla lista completa" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "Lente" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Cerca lenti utilizzando un pattern\n" "Formato: [produttore, ][modello]" msgid "Choose lens from list of possible variants" msgstr "Scegli lenti dalla lista di possibili varianti" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "Aberrazione cromatica laterale" msgid "Optical vignetting" msgstr "Vignettatura ottica" msgid "Lens distortion" msgstr "Distorsione lente" msgid "Lens geometry" msgstr "Geometria lente" msgid "Raw histogram with conversion curves" msgstr "Istogramma Raw con curve di conversione" msgid "Live histogram" msgstr "Istogramma attivo" #. No darkframe file msgid "None" msgstr "Nessuno" msgid "Lightness" msgstr "Luminosità" msgid "Luminance" msgstr "Luminescenza" msgid "Value" msgstr "Valore" msgid "Channel Mixer" msgstr "Mixer di canale" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Spazio esaurito per nuove curve." msgid "Load curve" msgstr "Carica curva" msgid "All curve formats" msgstr "Formati per tutte le curve" msgid "UFRaw curve format" msgstr "Formato curva UFRaw" msgid "Nikon curve format" msgstr "Formato curve Nikon" msgid "Save curve" msgstr "Salva curva" msgid "No more room for new profiles." msgstr "Spazio esaurito per nuovi profili." msgid "Load color profile" msgstr "Carica profilo colore" msgid "Color Profiles" msgstr "Profili colore" msgid "Luminosity (Y value)" msgstr "Luminosità (valore Y)" msgid "Adams' zone" msgstr "Zona di Adam" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "dimensione %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "dimensione %dx%d, scala 1/%d" msgid "Wavelet denoising" msgstr "Riduzione del rumore" msgid "Despeckling" msgstr "Smacchiatura" msgid "Interpolating" msgstr "Interpolazione" msgid "Rendering" msgstr "Rendering" msgid "Loading preview" msgstr "Caricamento anteprima" msgid "Saving image" msgstr "Salvataggio immagine" #, c-format msgid "Black point: %0.3lf" msgstr "Punto di nero: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Non e possibile fare altre correzzioni di luminostà" msgid "Aspect ratio locked, click to unlock" msgstr "Rapporto dimensioni bloccato, click per sbloccarlo" msgid "Aspect ratio unlocked, click to lock" msgstr "Rapporto dimensioni sbloccato, click per bloccarlo" msgid "Load dark frame" msgstr "Carica darkframe" msgid "clip" msgstr "clip" msgid "restore in LCH space for soft details" msgstr "Ripristina nello spazio LCH per dettagli soft" msgid "restore in HSV space for sharp details" msgstr "Ripristina nello spazio HSV per dettagli definiti" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Ripristina dettagli per valori EV negativi\n" "In uso: %s" msgid "digital linear" msgstr "lineare digitale" msgid "soft film like" msgstr "tipo pellicola" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Tieni luci alte per EV positivi\n" "In uso: %s" #, c-format msgid "Filename: %s%s" msgstr "Nome file: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Crea anche file ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Crea solo file ID" msgid "UFRaw options" msgstr "Opzioni UFRaw" msgid "Settings" msgstr "Impostazioni" msgid "Input color profiles" msgstr "Profili di colore in input" msgid "Output color profiles" msgstr "Profili di colore in output" msgid "Display color profiles" msgstr "Mostra profili colore" msgid "Base Curves" msgstr "Curve base" msgid "Luminosity Curves" msgstr "Curve luminosità" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Comando remoto di gimp" msgid "Reset command to default" msgstr "Ripristina comando predefinito" msgid "Blink Over/Underexposure Indicators" msgstr "Indicatori lampeggianti per la sovra/sottoesposizione" msgid "Configuration" msgstr "Configurazione" msgid "Save configuration" msgstr "Salva configurazione" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Salva le configurazioni nel file ($HOME/.ufrawrc)" msgid "Log" msgstr "Registro" msgid "About" msgstr "Info" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) è uno strumento\n" "per leggere e manipolare immagini raw da fotocamere digitali.\n" "UFRaw si appoggia su Digital Camera Raw (DCRaw)\n" "per la codifica delle immagini raw.\n" "\n" "Autore: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "Traduttori: Daniele Medri & Eugenio Baldi\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineare" msgid "Logarithmic" msgstr "Logaritmico" msgid "Hot pixels: " msgstr "Pixel Bruciati:" msgid "mark" msgstr "evidenzia" msgid "Hot pixel sensitivity" msgstr "Soglia pixel Bruciati" msgid "Reset hot pixel sensitivity" msgstr "Resetta la soglia dei Pixel Bruciati" msgid "RGB histogram" msgstr "Istogramma RGB" msgid "R+G+B histogram" msgstr "Istogramma R+G+B" msgid "Luminosity histogram" msgstr "Istogramma luminosità" msgid "Value (maximum) histogram" msgstr "Istogramma valore (massimo)" msgid "Saturation histogram" msgstr "Istogramma di saturazione" msgid "Average:" msgstr "Media:" msgid "Std. deviation:" msgstr "Deviazione:" msgid "Overexposed:" msgstr "Sovraesposto:" msgid "Indicate" msgstr "Mostra" msgid "Underexposed:" msgstr "Sottoesposto:" msgid "White Balance" msgstr "Bilanciamento del bianco" msgid "Cannot use camera white balance." msgstr "" "Non è possibile utilizzare il bilanciamento del bianco della fotocamera." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Non ci sono preimpostazioni per il bilanciamento di bianco per il tuo\n" "modello di fotocamera. Controlla la pagina web di UFRaw per ricevere\n" "supporto per i modelli non supportati." msgid "Reset white balance to initial value" msgstr "Ripristina bilanciamento del bianco iniziale" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Temperatura colore del bilanciamento di bianco (K)" msgid "Green" msgstr "Verde" msgid "Green component" msgstr "Componente verde" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Seleziona un punto sull'anteprima immagine per applicare il bilanciamento di " "bianco" msgid "Chan. multipliers:" msgstr "Moltiplicatori canale:" msgid "Bayer pattern interpolation" msgstr "Interpolazione del motivo Bayer" msgid "VNG four color interpolation" msgstr "Interpolazione VNG a quattro colori" msgid "Bilinear interpolation" msgstr "Interpolazione Bilineare" msgid "AHD interpolation" msgstr "Interpolazione AHD" msgid "VNG interpolation" msgstr "Interpolazione VNG" msgid "PPG interpolation" msgstr "Interpolazione PPG" msgid "No interpolation" msgstr "Nessuna interpolazione" msgid "No Bayer pattern" msgstr "Nessun motivo Bayer" msgid "Apply color smoothing" msgstr "Applica definizione colore" msgid "Denoise" msgstr "Togli disturbo" msgid "Threshold for wavelet denoising" msgstr "Soglia per il wavelet denoising" msgid "Reset denoise threshold to default" msgstr "Ripristina la soglia denoise predefinita" msgid "Dark Frame:" msgstr "Darkframe:" msgid "Reset dark frame" msgstr "Ripristina darkframe" msgid "Reset adjustment" msgstr "Reset sistemazione" msgid "Select a spot on the preview image to choose hue" msgstr "Seleziona un punto sull'anteprima immagine per scegliere la tonalità" msgid "Remove adjustment" msgstr "Rimuovi sistemazione" msgid "Grayscale Mode:" msgstr "Modalità scala di grigio:" msgid "Reset channel mixer" msgstr "Ripristina mixer di canale" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "La smacchiatuara è utilizzata principalmente in immagini con elevati valore " "ISOh con un alto moltiplicatore di canale: quando un canale ha una pessima " "qualità. Prova ad impostare demensione finestra, decadimento colere e numero " "di passate a 50,0,5 per quel canale. Quando un canale contiene solo disturbo " "puoi provare 1,0.6,1.\n" "La smacchiatura è disattivata quando la dimensione della finestra è " "impostata a zero. La dimensione finestra non può essere inferiore al numero " "di passate." msgid "Update channel parameters together" msgstr "Aggiorna contemporaneamente i parametri di canale" msgid "Reset despeckle parameters" msgstr "Azzera i parametri di smacchiatura" #. channel to view msgid "View channel:" msgstr "Visualizza canale:" #. Parameters msgid "Window size:" msgstr "Dimensione finestra;" msgid "Color decay:" msgstr "Decadimento colore" msgid "Passes:" msgstr "Passate" msgid "Load base curve" msgstr "Carica curva base" msgid "Save base curve" msgstr "Salva curva base" msgid "Reset base curve to default" msgstr "Ripristina curva base predefinita" msgid "Input ICC profile" msgstr "Profilo ICC input" msgid "Output ICC profile" msgstr "Profilo ICC output" msgid "Display ICC profile" msgstr "Mostra profilo ICC" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Correzione del gamma per il profilo di input" msgid "Reset gamma to default" msgstr "Ripristina gamma predefinita" msgid "Linearity" msgstr "Linearità" msgid "Linear part of the gamma correction" msgstr "Parte lineare della correzione gamma" msgid "Reset linearity to default" msgstr "Ripristina linearità predefinita" msgid "Output intent" msgstr "Intento di output" msgid "Perceptual" msgstr "Percettiva" msgid "Relative colorimetric" msgstr "Colorimetrico relativo" msgid "Saturation" msgstr "Saturazione" msgid "Absolute colorimetric" msgstr "Colorimetrico assoluto" msgid "Output bit depth" msgstr "Profondità bit di uscita" msgid "Display intent" msgstr "Mostra intento" msgid "Disable soft proofing" msgstr "Disabilita soft proofing" msgid "Contrast" msgstr "Contrasto" msgid "Global contrast adjustment" msgstr "Aggiustamento globale del contrasto" msgid "Reset global contrast to default" msgstr "Ripristina contrasto globale predefinito" msgid "Reset saturation to default" msgstr "Ripristina saturazione predefinita" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Aggiustamento automatico curva\n" "(Istogramma piatto)" msgid "Reset curve to default" msgstr "Ripristina curva predefinita" msgid "Reset black-point to default" msgstr "Ripristina punto di nero predefinito" msgid "Auto adjust black-point" msgstr "Aggiustamento punto di nero" #. Start of Crop controls msgid "Left:" msgstr "Sinistra:" msgid "Top:" msgstr "Alto:" msgid "Right:" msgstr "Destra:" msgid "Bottom:" msgstr "Basso:" msgid "Auto fit crop area" msgstr "Adattamento automatico area di ritaglio" #, fuzzy msgid "Reset the crop area" msgstr "Ripristina la regione di taglio" msgid "Aspect ratio:" msgstr "Rapporto aspetto:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Rapporto dell'area di taglio.\n" "Può essere indicata in notazione decimale (1.273)\n" "o come rapporto di numeri (14:11)" msgid "Shrink factor" msgstr "Fattore di ridimensionamento" msgid "Width" msgstr "Larghezza" msgid "Height" msgstr "Altezza" msgid "Orientation:" msgstr "Orientamento:" msgid "Rotation" msgstr "Rotazione" msgid "Rotation angle" msgstr "Angolo di Rotazione" msgid "Reset rotation angle" msgstr "Azzera Angolo di Rotazione" #. drawLines toggle button msgid "Grid lines" msgstr "Linee Griglia" msgid "Number of grid lines to overlay in the crop area" msgstr "Numero di linee griglia per sovrapporre l'area tagliata" msgid "Path" msgstr "Posizione" msgid "Select output path" msgstr "Scegli percorso di uscita" msgid "Filename" msgstr "Nome file" msgid "JPEG compression level" msgstr "Livello di compressione JPEG" msgid "JPEG progressive encoding" msgstr "Codifica progressiva JPEG" msgid "TIFF lossless Compress" msgstr "Compressione TIFF senza perdita" msgid "Embed EXIF data in output" msgstr "Integra dati EXIF nel file da registrare" msgid "Create ID file " msgstr "Crea file ID" msgid "No" msgstr "No" msgid "Also" msgstr "Anche" msgid "Only" msgstr "Solo" msgid "Save image defaults " msgstr "Salva impostazioni immagine" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Salva i parametri di manipolazione dell'immagine corrente come predefiniti.\n" "I parametri di output in questa finestra sono sempre salvati." msgid "Never again" msgstr "Mai più" msgid "Always" msgstr "Sempre" msgid "Just this once" msgstr "Questa volta" msgid "Remember output path" msgstr "Ricorda posizione di uscita" msgid "Overwrite existing files without asking" msgstr "Sovrascrivi i file esistenti senza interazione" msgid "Tag" msgstr "Tag" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Produttore" msgid "Camera model" msgstr "Modello" msgid "Timestamp" msgstr "Data/ora" msgid "Shutter time" msgstr "Tempo di scatto" msgid "Aperture" msgstr "Apertura" msgid "ISO speed" msgstr "Sensibilità ISO" msgid "35mm focal length" msgstr "Lunghezza focale 35mm" msgid "Flash" msgstr "Flash" msgid "White balance" msgstr "Bilanciamento del bianco" #, c-format msgid "EXIF data read by %s" msgstr "Dati EXIF letti da %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Avvertimento: i dati EXIF non saranno inviati in output" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "Valori spot:" msgid "Exposure compensation in EV" msgstr "Compensazione dell'esposizione in EV" msgid "Auto adjust exposure" msgstr "Aggiustamento automatico dell'esposizione" msgid "Reset exposure to default" msgstr "Ripristina l'esposizione predefinita" msgid "Grayscale" msgstr "Scala di grigio" #. Lens correction page msgid "Lens correction" msgstr "Correzione lenti" msgid "Base curve" msgstr "Curva base" msgid "Color management" msgstr "Gestione colore" msgid "Correct luminosity, saturation" msgstr "Corretta luminosità, saturazione" msgid "Lightness Adjustments" msgstr "Correzzione Luminosità" msgid "Crop and rotate" msgstr "Taglia e ruota" msgid "Save" msgstr "Salva" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom %" msgid "Options" msgstr "Opzioni" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Elimina" msgid "Send image to _Gimp" msgstr "Invia immagine a _Gimp" msgid "Fatal error setting C locale" msgstr "Errore durante l'impostazione della localizzazione C" #, c-format msgid "Curve version is not supported" msgstr "La versione della curva non è supportata" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Il file '%s' delle curve Nikon non è valido" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Errore durante l'apertura del file '%s' per la curva: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Errore durante l'apertura del file '%s': %s" msgid "File exists" msgstr "Il file esiste" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Il file '%s' esiste già.\n" "Sovrascrivi?" msgid "Error creating temporary file." msgstr "Errore durante la creazione del file temporaneo." msgid "Error activating Gimp." msgstr "Errore durante l'apertura di Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Non è possibile utilizzare il bilanciamento del bianco della fotocamera, si " "utilizzerà quello automatico.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "le opzioni --temperature e --green sovrastano l'opzione --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' non è un'impostazione valida per il bilanciamento del bianco." msgid "Remote URI is not supported" msgstr "URI remoto non supportato" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "errore della cornice di scuro: %s non è un file raw\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "errore durante l'apertura della darkframe '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Darkframe '%s' incompatibile con l'immagine principale" #, c-format msgid "using darkframe '%s'\n" msgstr "utilizzo darkframe '%s'\n" msgid "Error reading NEF curve" msgstr "Errore durante la lettura della curva NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "Non è possibile scalare da %d a %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Errore durante la creazione del file '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Errore durante la creazione del file." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "Il nome del file immagine non può essere uguale al nome del file ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Non è stato possibile integrare il profilo di output '%s' in '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Ignorata, profondità bit '%d' non supportata." #, c-format msgid "Unknown file type %d." msgstr "Tipo di file sconosciuto %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Luce del giorno" #. Probably same as above: msgid "Direct sunlight" msgstr "Luce del sole diretta" msgid "Cloudy" msgstr "Nuvoloso" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Ombra" msgid "Incandescent" msgstr "Incandescente" msgid "Incandescent warm" msgstr "Incandescente calda" #. Same as "Incandescent": msgid "Tungsten" msgstr "Tungsteno" msgid "Fluorescent" msgstr "Fluorescente" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluorescente alta" msgid "Cool white fluorescent" msgstr "Fluorescente bianca e definita" msgid "Warm white fluorescent" msgstr "Fluorescente calda e bianca" msgid "Daylight fluorescent" msgstr "Luce del giorno fluorescente" msgid "Neutral fluorescent" msgstr "Fluorescente neutrale" msgid "White fluorescent" msgstr "Fluorescente bianco" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Fluorescente" msgid "Day white fluorescent" msgstr "Fluorescente bianca" msgid "High temp. mercury-vapor fluorescent" msgstr "Alta temp. fluorescente ai vapori di mercurio" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flash (modalità automatica)" msgid "Evening sun" msgstr "Sole tardo pomeriggio" msgid "Underwater" msgstr "Sott'acqua" msgid "Black & white" msgstr "Bianco e Nero" msgid "Manual WB" msgstr "Bilanciamento del bianco - Manuale" msgid "Camera WB" msgstr "Bilanciamento del bianco - Fotocamera" msgid "Auto WB" msgstr "Bilanciamento del bianco - Automatico" ufraw-0.19.2/po/zh_CN.po0000664000175000017500000012037512123734456011650 00000000000000# Translation of ufraw.pot to Simplified Chinese. # Copyright (C) 2009-2013 Udi Fuchs & Xu Yuanfei. # This file is distributed under the same license as the UFraw package. # Xu Yuanfei , 2009. # Aron Xu , 2009. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-10-21 23:21+0800\n" "Last-Translator: Xu Yuanfei \n" "Language-Team: Simplified Chinese \n" "Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "打开导航窗å£" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "" msgid "No input file, nothing to do." msgstr "没有输入文件,没有任何æ“作。" #, c-format msgid "Loaded %s %s" msgstr "已加载 %s %s" #, c-format msgid "Saved %s %s" msgstr "å·²ä¿å­˜ %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "是(y)" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "å¦(n)" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: 覆盖 '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--沉默选项,åªé€‚ç”¨äºŽæ‰¹å¤„ç†æ¨¡å¼" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--沉默选项,åªé€‚ç”¨äºŽæ‰¹å¤„ç†æ¨¡å¼" msgid "Raw images" msgstr "Raw 图åƒ" msgid "UFRaw ID files" msgstr "UFRaw ID 文件" msgid "Raw jpeg's" msgstr "Raw jpeg's" msgid "Raw tiff's" msgstr "Raw tiff's" msgid "All files" msgstr "所有文件" msgid "Show hidden files" msgstr "显示éšè—文件" msgid "Manual curve" msgstr "手动曲线" msgid "Linear curve" msgstr "线性曲线" msgid "Custom curve" msgstr "自定义曲线" msgid "Camera curve" msgstr "相机曲线" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "æ— é…置文件" msgid "Color matrix" msgstr "颜色矩阵 (Color matrix)" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (嵌入å¼)" msgid "System default" msgstr "系统默认" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "å°è¯•从 UFRaw-0.4 æˆ–æ›´æ—©ç‰ˆæœ¬è½¬æ¢ .ufrawrc" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "å°è¯•从 UFRaw-0.6 æˆ–æ›´æ—©ç‰ˆæœ¬è½¬æ¢ .ufrawrc" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "æ­¤UFRawç‰ˆæœ¬ä¸æ”¯æŒçš„ .ufrawrc" #, c-format msgid "Too many anchors for curve '%s'" msgstr "曲线锚点太多 '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "ID文件包å«å¤ªå¤šäº®åº¦è°ƒæ•´ï¼Œå¿½ç•¥\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID文件 %s ä¸åƒä¸€ä¸ªæ­£å¸¸çš„æ–‡ä»¶ã€‚ \n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "无法打开ID文件 %s è¿›è¡Œè¯»å– \n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "创建文件时出错 '%s'" #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "è§£æžé”™è¯¯ '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "无法打开文件 %s 进行写入æ“作 \n" "%s\n" msgid "cannot --create-id with stdout" msgstr "ä¸èƒ½å‘标准输出使用 --create-id 傿•°" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - UFRaw æ•°ç ç›¸æœºå›¾åƒè½¬æ¢ã€‚ \n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "用法: ufraw [ 选项 ... ] [ raw-å›¾åƒæ–‡ä»¶ ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ 选项 ... ] [ raw-å›¾åƒæ–‡ä»¶ ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ 选项 ... ] [ 默认目录 ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "默认情况下 'ufraw' 为æ¯ä¸ª RAW å›¾åƒæ˜¾ç¤ºé¢„览窗å£ï¼Œä½¿ç”¨æˆ·å¯ä»¥åœ¨ä¿å­˜ä¹‹å‰è°ƒæ•´å›¾åƒ" "å‚\n" "数。如果没有在命令行中给定 RAW 图åƒï¼ŒUFRaw ä¼šæ˜¾ç¤ºä¸€ä¸ªæ–‡ä»¶é€‰æ‹©å¯¹è¯æ¡†ã€‚è¦è¿›è¡Œ\n" "éžäº¤äº’å¼å›¾ç‰‡å¤„ç†(没有预览)请使用'ufraw-batch'。\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "输入文件å¯ä»¥æ˜¯ RAW å›¾åƒæˆ– ufraw çš„ ID 文件。ID 文件包å«åŽŸå§‹å›¾åƒçš„æ–‡ä»¶åå’Œå‚" "数,\n" "以处ç†å›¾åƒã€‚也å¯ä»¥ä½¿ç”¨çš„ ID 文件的选项: \n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "--conf=ID-file 应用IDæ–‡ä»¶å‚æ•°åˆ°å…¶ä»–raw图åƒã€‚\n" msgid "The rest of the options are separated into two groups.\n" msgstr "其余选项分为两组。\n" msgid "The options which are related to the image manipulation are:\n" msgstr "图åƒå¤„ç†ç›¸å…³é€‰é¡¹ï¼š\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto 白平衡设置。\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP 色温。\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN 绿色正常化。\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " 使用基础色调曲线类型。CURVE å¯ä»¥æ˜¯å…ˆå‰åŠ è½½GUI中的任何\n" " 曲线。(如果设置了默认相机,linear 无效)。\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " 使用包å«åœ¨æŒ‡å®šæ–‡ä»¶ä¸­çš„基础色调曲线。\n" " 䏿ޥå—-基础曲线-选项。\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " 应用亮度曲线类型。曲线å¯ä»¥æ˜¯å…ˆå‰åŠ è½½GUI中的任何曲线。\n" " (默认 linear)。\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file 应用包å«åœ¨æŒ‡å®šæ–‡ä»¶ä¸­çš„äº®åº¦æ›²çº¿ã€‚ä¸æŽ¥å—-曲线-选项。\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " 调整EV值以还原细节(仅在EV为负值时生效)。\n" " 'clip' ä¸åšä»»ä½•æ¢å¤ - 获得无æŸçš„原件。\n" " 'lch' 在 LCH 空间æ¢å¤ - 获得柔和细节。\n" " 'hsv' 在 HSV 空间æ¢å¤ - 获得é”利细节。\n" " (默认为 lch)。\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film 调整EV值削å‡é«˜å…‰ç»†èŠ‚(正的EV值)。\n" " 'digital' 线性数字传感器的å应。\n" " 'film' 模仿柔和影片å应。 (默认 digital)。\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMMA 基础曲线的Gamma调整 (默认 0.45)。\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY 基础曲线的线性 (默认 0.10)。\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT 调整对比度 (默认 1.0)。\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "--saturation=SAT 调整饱和度 (默认 1.0, 0 为黑白输出)。\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=THRESHOLD\n" " å°æ³¢é™å™ªé˜ˆå€¼ (默认 0.0)。\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " 检测和削å‡çƒ­åƒç´ çš„çµæ•度(默认值 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " 自动æ›å…‰æˆ–EVæ›å…‰è°ƒæ•´ (默认 0)。\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " 自动黑点(黑色控制点)或黑点值 (默认 0)。\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " 使用æ’值算法 (默认 ahd)。\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing 应用颜色平滑\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " 使用ç°é˜¶æ¢ç®—法 (默认 none)。\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " 使用ç°é˜¶æ¢ç®—法 (默认 none)。\n" msgid "The options which are related to the final output are:\n" msgstr "涉åŠåˆ°æœ€ç»ˆè¾“出的选项:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FACTOR å›¾åƒæ”¶ç¼©å› æ•°(1/FACTOR) (默认 1)。\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=尺寸 缩å°è‡³å°ºå¯¸(高,宽)。\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " è¾“å‡ºæ–‡ä»¶æ ¼å¼ (默认 ppm)。\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 输出通é“使·± (默认 8)。\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " 创建ID文件 no(ä¸)|also(还)|only(åª) (默认 no)。\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE JPEG压缩值 (0-100, 默认 85)。\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif 是å¦åµŒå…¥EXIF (默认嵌入EXIF)。\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "--[no]zip å¯ç”¨ [ç¦ç”¨] TIFF zip 压缩 (默认 nozip)。\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image æå–嵌入在 raw 文件中的预览图åƒï¼Œè€Œä¸æ˜¯è½¬æ¢ raw 图" "åƒã€‚\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " 旋转图åƒã€‚ camera 为根æ®ç›¸æœºè®¾ç½®ï¼› ANGLE 为顺时针方å‘è§’" "度; \n" " no ä¸ºä¸æ—‹è½¬ (默认 camera)。\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " æ ¹æ®ç»™å®šçš„åƒç´ èŒƒå›´è£å‰ªè¾“出。此æ“ä½œåœ¨åŽŸå§‹å›¾åƒæ—‹è½¬åŽå’Œç¼©" "放比例之\n" " å‰ç”Ÿæ•ˆã€‚\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=路径 输出文件的路径(默认使用的输入文件的路径) 。\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "--output=文件å 输出文件å, 使用 '-' 为输出到标准输出。\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=文件å 使用Rawé»‘è‰²å¸§æ¶ˆå‡æ–‡ä»¶ã€‚\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "--overwrite 覆盖现有文件而ä¸è¯¢é—®(默认 no)。\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window å¼ºåˆ¶çª—å£æœ€å¤§åŒ–。\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent 批é‡è½¬æ¢æ—¶ä¸æ˜¾ç¤ºä»»ä½•ä¿¡æ¯ã€‚\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw首先从$HOME/.ufrawrc读å–èµ„æºæ–‡ä»¶è®¾ç½®ã€‚ç„¶åŽï¼Œå¦‚果一个ID文件被指定,\n" "它将读å–设置。接ç€ï¼Œ--conf选项设置被采用,并忽略ID文件中的输入/输出文件å。\n" "最åŽï¼Œè®¾ç½®å‘½ä»¤è¡Œä¸­çš„é€‰é¡¹ã€‚åœ¨æ‰¹å¤„ç†æ¨¡å¼ä¸‹ï¼Œç¬¬äºŒç»„选项是ä¸è¯»å–çš„èµ„æºæ–‡ä»¶ã€‚\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "最åŽï¼Œä½†å¹¶éžä¸é‡è¦ï¼Œ--version 显示 ufraw 的版本å·å’Œç¼–译选项,--help 显示此帮" "助信\n" "æ¯å¹¶é€€å‡ºã€‚\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' 䏿˜¯ --%s 选项的有效值。" msgid "ufraw was build without ZIP support." msgstr "ufraw䏿”¯æŒZIP。" #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch 已废弃。用 ufraw-batch 替代。" #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt è¿”å›žå­—ç¬¦ä»£ç  0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "未能从 %s 中加载曲线,包å«å¤ªå¤šçš„基础曲线é…ç½®" #, c-format msgid "failed to load curve from %s" msgstr "未能从 %s 中加载曲线" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„基础曲线å称。" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "未能从 %s 中加载曲线,包å«å¤ªå¤šçš„æ›²çº¿é…ç½®" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„æ›²çº¿å称。" #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„æ’å€¼é€‰é¡¹ã€‚" #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ç°é˜¶é€‰é¡¹ã€‚" #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ç°é˜¶é€‰é¡¹ã€‚" #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„æ¢å¤é€‰é¡¹ã€‚" #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„剪辑选项。" msgid "you can not specify both --shrink and --size" msgstr "您ä¸èƒ½åŒæ—¶æŒ‡å®š --shrink å’Œ --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' 䏿˜¯æœ‰æ•ˆä½æ·±ã€‚" #, c-format msgid "Output type '%s' is deprecated" msgstr "䏿ލè '%s' 输出类型" msgid "ufraw was build without TIFF support." msgstr "ufraw 䏿”¯æŒ TIFF。" msgid "ufraw was build without JPEG support." msgstr "ufraw 䏿”¯æŒ JPEG。" msgid "ufraw was build without PNG support." msgstr "ufraw 䏿”¯æŒ PNG。" #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„输出类型。" #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„嵌入å¼å›¾åƒè¾“出类型。" #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' 䏿˜¯æœ‰æ•ˆçš„嵌入å¼å›¾åƒä½æ·±ã€‚" #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„æ—‹è½¬é€‰é¡¹ã€‚" #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„ ID 创建选项。" #, c-format msgid "'%s' is not a valid path." msgstr "'%s' 䏿˜¯æœ‰æ•ˆçš„路径。" msgid "cannot output more than one file to the same output" msgstr "在相åŒçš„输出设置下ä¸èƒ½è¾“出多个文件" #, c-format msgid "Raw file '%s' missing." msgstr "找ä¸åˆ° '%s' Raw 文件。" msgid "Delete raw file" msgstr "删除 raw 文件" msgid "_Delete selected" msgstr "删除选中(_D)" msgid "Delete _All" msgstr "删除所有(_A)" msgid "Select files to delete" msgstr "选择文件删除" #, c-format msgid "Error reading directory '%s'." msgstr "读å–目录时出错 '%s'。" #, c-format msgid "Error deleting '%s'" msgstr "删除时出错 '%s'" msgid "Reading embedded image requires libjpeg." msgstr "读嵌入å¼å›¾åƒéœ€è¦ libjpeg 。" msgid "No embedded image found" msgstr "没有找到嵌入å¼å›¾åƒ" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "原始尺寸 (%d) å°äºŽè¦æ±‚的尺寸 (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm 缩略图ä¸åŒ¹é…, 高 %d, 宽 %d, 而缓冲区 %d。" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "JPEG 缩略图高 %d 与预期的 %d ä¸åŒã€‚" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "JPEG 缩略图宽 %d 与预期的 %d ä¸åŒã€‚" #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "创建文件时å‘生错误 '%s'.\n" "%s" msgid "No embedded image read" msgstr "没有读å–嵌入å¼å›¾åƒ" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "创建文件时å‘生错误 '%s'。未知文件类型 %d 。" #, c-format msgid "Error creating file '%s': %s" msgstr "创建文件时å‘生错误 '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "写入错误 '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "嵌入å¼å›¾åƒä¸æ”¯æŒçš„输出类型 (%d) " #, c-format msgid "Loading raw file '%s'" msgstr "载入raw文件 '%s'" msgid "Can't allocate new image." msgstr "æ— æ³•åˆ†é…æ–°çš„图象。" #. Create the "background" layer to hold the image... msgid "Background" msgstr "背景" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "无法在图åƒä¸­åµŒå…¥è¾“出é…置文件 '%s' " #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF缓冲区长度 %d, 太长,忽略。" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "制造者:\t\t%s\n" "åž‹å·:\t\t%s%s\n" "挂载:\t\t%s\n" "剪è£å› å­:\t\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "制造者:\t\t%s\n" "åž‹å·:\t\t%s\n" "焦è·èŒƒå›´:\t\t%s\n" "光圈:\t\t%s\n" "剪è£å› å­:\t\t%.1f\n" "类型:\t\t%s\n" "挂载:\t\t%s" msgid "Focal" msgstr "焦点" msgid "Focal length" msgstr "焦è·" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-数值(光圈)" msgid "Distance" msgstr "è·ç¦»" #, fuzzy msgid "Distance to subject in meters" msgstr "主体è·ç¦»" #. Add the model combobox msgid "Model:" msgstr "åž‹å·ï¼š" msgid "Chromatic Aberrations mathematical model" msgstr "色差的数学模型" msgid "Parameters" msgstr "傿•°" msgid "Optical vignetting mathematical model" msgstr "光学暗角的数学模型" msgid "Lens distortion mathematical model" msgstr "镜头畸å˜çš„æ•°å­¦æ¨¡åž‹" #. Lens geometry combobox msgid "Lens geometry:" msgstr "镜头几何:" msgid "The geometry of the lens used to make the shot" msgstr "æ‹æ‘„镜头使用的几何" #. Target lens geometry combobox msgid "Target geometry:" msgstr "目标几何:" msgid "The target geometry for output image" msgstr "输出图åƒçš„目标几何" msgid "Camera" msgstr "照相机" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "æœç´¢ç›¸æœºçš„使用模å¼\n" "æ ¼å¼: [Maker, ][Model]" msgid "Choose camera from complete list" msgstr "从完整列表中选择相机" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "镜头" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "æœç´¢é•œå¤´çš„使用模å¼\n" "æ ¼å¼: [Maker, ][Model]" msgid "Choose lens from list of possible variants" msgstr "从列表选择镜头åŠå¯èƒ½çš„å˜ç§" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "横å‘色差" msgid "Optical vignetting" msgstr "光学暗角" msgid "Lens distortion" msgstr "镜头畸å˜" msgid "Lens geometry" msgstr "镜头几何" msgid "Raw histogram with conversion curves" msgstr "å…·æœ‰è½¬æ¢æ›²çº¿çš„Raw直方图" msgid "Live histogram" msgstr "动æ€ç›´æ–¹å›¾" #. No darkframe file msgid "None" msgstr "æ— " msgid "Lightness" msgstr "亮度" msgid "Luminance" msgstr "明度" msgid "Value" msgstr "值" msgid "Channel Mixer" msgstr "é€šé“æ··åˆå™¨" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "没有足够的空间给新的曲线" msgid "Load curve" msgstr "加载曲线" msgid "All curve formats" msgstr "所有曲线格å¼" msgid "UFRaw curve format" msgstr "UFRaw曲线格å¼" msgid "Nikon curve format" msgstr "尼康曲线格å¼" msgid "Save curve" msgstr "ä¿å­˜æ›²çº¿" msgid "No more room for new profiles." msgstr "没有足够的空间给新的é…置文件" msgid "Load color profile" msgstr "加载颜色é…置文件" msgid "Color Profiles" msgstr "颜色é…置文件" msgid "Luminosity (Y value)" msgstr "亮度(Y值)" msgid "Adams' zone" msgstr "Adams 区域" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "尺寸 %dx%d, 缩放 %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "尺寸 %dx%d, 比例 1/%d" #, fuzzy msgid "Wavelet denoising" msgstr "å°æ³¢é™å™ªçš„阈值" msgid "Despeckling" msgstr "" #, fuzzy msgid "Interpolating" msgstr "䏿’值" msgid "Rendering" msgstr "" msgid "Loading preview" msgstr "正在载入预览" msgid "Saving image" msgstr "ä¿å­˜å›¾åƒ" #, c-format msgid "Black point: %0.3lf" msgstr "黑色控制点: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "没有足够的空间给新的亮度曲线。" msgid "Aspect ratio locked, click to unlock" msgstr "" msgid "Aspect ratio unlocked, click to lock" msgstr "" msgid "Load dark frame" msgstr "加载黑色帧(dark frame)" msgid "clip" msgstr "剪辑" msgid "restore in LCH space for soft details" msgstr "在 LCH 空间æ¢å¤æŸ”和细节" msgid "restore in HSV space for sharp details" msgstr "在 HSV 空间æ¢å¤é”利细节" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "调整 EV 值以还原细节(仅在 EV 为负值时生效)\n" "现状: %s" msgid "digital linear" msgstr "数字线性" msgid "soft film like" msgstr "模仿柔和影片" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "调整EV值削å‡é«˜å…‰ç»†èŠ‚(正的EV值)\n" "现状: %s" #, c-format msgid "Filename: %s%s" msgstr "文件å: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "还创建ID文件" msgid "" "\n" "Create only ID file" msgstr "" "\n" "åªåˆ›å»ºID文件" msgid "UFRaw options" msgstr "UFRaw选项" msgid "Settings" msgstr " 设 ç½® " msgid "Input color profiles" msgstr "输入颜色é…置文件" msgid "Output color profiles" msgstr "输出颜色é…置文件" msgid "Display color profiles" msgstr "显示颜色é…置文件" msgid "Base Curves" msgstr "基础曲线" msgid "Luminosity Curves" msgstr "亮度曲线" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "远程 Gimp 命令" msgid "Reset command to default" msgstr "é‡è®¾å‘½ä»¤ä¸ºé»˜è®¤" msgid "Blink Over/Underexposure Indicators" msgstr "é—ªçƒ/æ›å…‰ä¸è¶³æŒ‡ç¤º" msgid "Configuration" msgstr "é…ç½®" msgid "Save configuration" msgstr "ä¿å­˜é…ç½® " msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "å°†é…ç½®ä¿å­˜åˆ°èµ„æºæ–‡ä»¶ ($HOME/.ufrawrc)" msgid "Log" msgstr "日志" msgid "About" msgstr "关于" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "UFRaw是一个用æ¥è¯»å–å’Œæ“作数ç ç›¸æœºRaw(原始)图åƒçš„实用程åºã€‚\n" "UFRawä¾èµ–æ•°ç ç›¸æœºRaw(DCRaw)图åƒçš„实际编ç ã€‚\n" "\n" "作者: Udi Fuchs\n" "主页: http://ufraw.sourceforge.net/\n" "翻译: Xu Yuanfei , Aron Xu \n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "线性" msgid "Logarithmic" msgstr "对数" msgid "Hot pixels: " msgstr "热åƒç´ ï¼š " msgid "mark" msgstr "标记" msgid "Hot pixel sensitivity" msgstr "热åƒç´ çµæ•度" msgid "Reset hot pixel sensitivity" msgstr "å¤ä½é‡çƒ­åƒç´ çµæ•度" msgid "RGB histogram" msgstr "RGB 直方图" msgid "R+G+B histogram" msgstr "R+G+B 直方图" msgid "Luminosity histogram" msgstr "亮度直方图" msgid "Value (maximum) histogram" msgstr "定值(最大)直方图" msgid "Saturation histogram" msgstr "饱和度直方图" msgid "Average:" msgstr "å¹³å‡ï¼š" msgid "Std. deviation:" msgstr "标准å差:" msgid "Overexposed:" msgstr "过度æ›å…‰ï¼š" msgid "Indicate" msgstr "显示" msgid "Underexposed:" msgstr "æ›å…‰ä¸è¶³ï¼š" msgid "White Balance" msgstr "白平衡" #, fuzzy msgid "Cannot use camera white balance." msgstr "无法使用相机白平衡,æ¢å¤è‡ªåŠ¨ç™½å¹³è¡¡ã€‚" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "没有与你的相机型å·å¯¹åº”的预设白平衡。\n" "检查UFRaw项目网站上的信æ¯ï¼Œä»¥äº†è§£å¯¹æ‚¨çš„相机支æŒã€‚" msgid "Reset white balance to initial value" msgstr "é‡è®¾ç™½å¹³è¡¡ä¸ºåˆå§‹å€¼" msgid "Temperature" msgstr "色温" msgid "White balance color temperature (K)" msgstr "白平衡颜色温度 (K)" msgid "Green" msgstr "绿色" msgid "Green component" msgstr "绿色部分" msgid "Select a spot on the preview image to apply spot white balance" msgstr "在图åƒä¸Šé€‰æ‹©ä¸€ç‚¹ä»¥å¯¹ç™½å¹³è¡¡è¿›è¡Œå®žæ—¶é¢„览" msgid "Chan. multipliers:" msgstr "通é“å€å¢žæ•°:" msgid "Bayer pattern interpolation" msgstr "Bayeræ¨¡å¼æ’值" msgid "VNG four color interpolation" msgstr "VNG 四色æ’值" msgid "Bilinear interpolation" msgstr "Bilinear æ’值" msgid "AHD interpolation" msgstr "AHD æ’值" msgid "VNG interpolation" msgstr "VNG æ’值" msgid "PPG interpolation" msgstr "PPG æ’值" msgid "No interpolation" msgstr "䏿’值" msgid "No Bayer pattern" msgstr "æ—  Bayer æ ·å¼" msgid "Apply color smoothing" msgstr "应用颜色平滑" msgid "Denoise" msgstr "é™å™ª" msgid "Threshold for wavelet denoising" msgstr "å°æ³¢é™å™ªçš„阈值" msgid "Reset denoise threshold to default" msgstr "é‡è®¾ä¸ºé™å™ªé˜ˆå€¼çš„默认值" msgid "Dark Frame:" msgstr "黑色帧(Dark Frame)" msgid "Reset dark frame" msgstr "é‡è®¾é»‘色帧(dark frame)" msgid "Reset adjustment" msgstr "å¤ä½è°ƒæ•´" msgid "Select a spot on the preview image to choose hue" msgstr "选择预览图åƒä¸Šçš„一个点以选择色调" msgid "Remove adjustment" msgstr "删除调整" msgid "Grayscale Mode:" msgstr "ç°é˜¶æ¨¡å¼ï¼š" msgid "Reset channel mixer" msgstr "é‡è®¾é€šé“æ··åˆå™¨" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" msgid "Update channel parameters together" msgstr "" #, fuzzy msgid "Reset despeckle parameters" msgstr "é‡è®¾é»‘色帧(dark frame)" #. channel to view msgid "View channel:" msgstr "" #. Parameters msgid "Window size:" msgstr "" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "" msgid "Load base curve" msgstr "加载基础曲线" msgid "Save base curve" msgstr "ä¿å­˜åŸºç¡€æ›²çº¿" msgid "Reset base curve to default" msgstr "é‡è®¾ä¸ºåŸºç¡€æ›²çº¿é»˜è®¤å€¼" msgid "Input ICC profile" msgstr "输入 ICC é…置文件" msgid "Output ICC profile" msgstr "输出 ICC é…置文件" msgid "Display ICC profile" msgstr "显示 ICC é…置文件" msgid "Gamma" msgstr "伽马" msgid "Gamma correction for the input profile" msgstr "输入é…置文件的伽马调整" msgid "Reset gamma to default" msgstr "é‡è®¾ä¸ºä¼½é©¬é»˜è®¤å€¼" msgid "Linearity" msgstr "线性" msgid "Linear part of the gamma correction" msgstr "Gamma调整的线性部分" msgid "Reset linearity to default" msgstr "é‡è®¾ä¸ºçº¿æ€§é»˜è®¤å€¼" msgid "Output intent" msgstr "输出æ„图" msgid "Perceptual" msgstr "感知å¼" msgid "Relative colorimetric" msgstr "相对色度" msgid "Saturation" msgstr "饱和度" msgid "Absolute colorimetric" msgstr "ç»å¯¹è‰²åº¦" msgid "Output bit depth" msgstr "è¾“å‡ºä½æ·±" msgid "Display intent" msgstr "显示æ„图" msgid "Disable soft proofing" msgstr "ç¦ç”¨ç”µå­æ ¡æ ·" msgid "Contrast" msgstr "对比度" msgid "Global contrast adjustment" msgstr "总体对比度调整" msgid "Reset global contrast to default" msgstr "é‡è®¾ä¸ºæ€»ä½“对比度默认值" msgid "Reset saturation to default" msgstr "é‡è®¾ä¸ºé¥±å’Œåº¦é»˜è®¤å€¼" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "自动调整曲线\n" "(拼åˆç›´æ–¹å›¾)" msgid "Reset curve to default" msgstr "é‡è®¾ä¸ºæ›²çº¿é»˜è®¤å€¼" msgid "Reset black-point to default" msgstr "é‡è®¾ä¸ºé»‘色控制点默认值" msgid "Auto adjust black-point" msgstr "自动调整黑色控制点" #. Start of Crop controls msgid "Left:" msgstr "左:" msgid "Top:" msgstr "上:" msgid "Right:" msgstr "å³ï¼š" msgid "Bottom:" msgstr "下:" msgid "Auto fit crop area" msgstr "" #, fuzzy msgid "Reset the crop area" msgstr "é‡è®¾è£å‰ªåŒºåŸŸ" msgid "Aspect ratio:" msgstr "宽高比:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "è£å‰ªåŒºåŸŸçš„宽高比。\n" "å¯ä»¥è¾“å…¥å进制数值,如(1.273)\n" "或两个数字的比例,如(14:11)" msgid "Shrink factor" msgstr "收缩因å­" msgid "Width" msgstr "宽度" msgid "Height" msgstr "高度" msgid "Orientation:" msgstr "定ä½ï¼š" msgid "Rotation" msgstr "旋转" #, fuzzy msgid "Rotation angle" msgstr "旋转角度" #, fuzzy msgid "Reset rotation angle" msgstr "å¤ä½æ—‹è½¬è§’度" #. drawLines toggle button msgid "Grid lines" msgstr "" #, fuzzy msgid "Number of grid lines to overlay in the crop area" msgstr "覆盖è£å‰ªåŒºåŸŸçš„æ ¡å‡†çº¿æ•°" msgid "Path" msgstr "路径" msgid "Select output path" msgstr "选择输出路径" msgid "Filename" msgstr "文件å" msgid "JPEG compression level" msgstr "JPEG 压缩级别" msgid "JPEG progressive encoding" msgstr "JPEG æ¸è¿›ç¼–ç " msgid "TIFF lossless Compress" msgstr "TIFF æ— æŸåŽ‹ç¼©" msgid "Embed EXIF data in output" msgstr "输出时嵌入EXIFæ•°æ®" msgid "Create ID file " msgstr "创建 ID 文件" msgid "No" msgstr "å¦" msgid "Also" msgstr "而且" msgid "Only" msgstr "åªæ˜¯" msgid "Save image defaults " msgstr "ä¿å­˜å›¾ç‰‡é»˜è®¤å€¼" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "ä¿å­˜å½“å‰å›¾åƒå¤„ç†å‚数为默认值。\n" "è¾“å‡ºå‚æ•°åœ¨æ­¤çª—å£ä¸­ä¼šå§‹ç»ˆä¿å­˜ã€‚" msgid "Never again" msgstr "ä¸å†æç¤º" msgid "Always" msgstr "总是" msgid "Just this once" msgstr "åªæ­¤ä¸€æ¬¡" msgid "Remember output path" msgstr "è®°ä½è¾“出路径" msgid "Overwrite existing files without asking" msgstr "覆盖现有文件而ä¸è¯¢é—®" msgid "Tag" msgstr "标记" #. Fill table with EXIF tags msgid "Camera maker" msgstr "相机制造商" msgid "Camera model" msgstr "相机型å·" msgid "Timestamp" msgstr "æ‹ç…§æ—¶é—´" msgid "Shutter time" msgstr "æ›å…‰æ—¶é—´" msgid "Aperture" msgstr "光圈" msgid "ISO speed" msgstr "ISO 速度" msgid "35mm focal length" msgstr "等效 35mm 焦è·" msgid "Flash" msgstr "闪光ç¯" msgid "White balance" msgstr "白平衡" #, c-format msgid "EXIF data read by %s" msgstr "读å–EXIFæ•°æ® %s" msgid "Warning: EXIF data will not be sent to output" msgstr "警告: EXIF æ•°æ®ä¸ä¼šè¢«è¾“出" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "点值:" msgid "Exposure compensation in EV" msgstr "EV æ›å…‰è¡¥å¿" msgid "Auto adjust exposure" msgstr "自动调整æ›å…‰" msgid "Reset exposure to default" msgstr "å¤ä½è‡³é»˜è®¤å€¼" msgid "Grayscale" msgstr "ç°é˜¶" #. Lens correction page msgid "Lens correction" msgstr "镜头调整" msgid "Base curve" msgstr "基础曲线" msgid "Color management" msgstr "色彩管ç†" msgid "Correct luminosity, saturation" msgstr "校正亮度,饱和度" msgid "Lightness Adjustments" msgstr "调整亮度" msgid "Crop and rotate" msgstr "è£å‰ªã€æ—‹è½¬" msgid "Save" msgstr "ä¿å­˜" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "缩放比例" msgid "Options" msgstr "选项" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "删除(_D)" msgid "Send image to _Gimp" msgstr "å‘é€å›¾ç‰‡åˆ° _Gimp" msgid "Fatal error setting C locale" msgstr "C 区域严é‡é”™è¯¯" #, c-format msgid "Curve version is not supported" msgstr "æ›²çº¿ç‰ˆæœ¬ä¸æ”¯æŒ" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "无效的尼康曲线文件 '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "打开曲线文件 '%s': %s 出错" #, c-format msgid "Error opening file '%s': %s" msgstr "打开文件 '%s': %s 出错" msgid "File exists" msgstr "文件是å¦å­˜åœ¨" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "文件 '%s' 已存在。\n" "覆盖å—?" msgid "Error creating temporary file." msgstr "创建临时文件时出错。" msgid "Error activating Gimp." msgstr "激活 Gimp 时出错。" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "无法使用相机白平衡,æ¢å¤è‡ªåŠ¨ç™½å¹³è¡¡ã€‚\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "在 --wb=%s 选项中--temperature å’Œ --green 选项是无效的。" #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' 䏿˜¯ç™½å¹³è¡¡è®¾ç½®çš„æœ‰æ•ˆå€¼ã€‚" msgid "Remote URI is not supported" msgstr "远程的 URI ä¸è¢«æ”¯æŒ" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "黑色帧(darkframe)错误: %s 䏿˜¯ raw 文件\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "载入黑色帧(darkframe) '%s' 出错\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "黑色帧(darkframe) '%s' 和主图åƒä¸ç¬¦" #, c-format msgid "using darkframe '%s'\n" msgstr "使用黑色帧(darkframe) '%s'\n" msgid "Error reading NEF curve" msgstr "è¯»å– NEF 曲线出错" #, c-format msgid "Can not downsize from %d to %d." msgstr "无法从 %d ç¼©å° %d 。" #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "创建文件时出错 '%s'" #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "创建文件时出错。" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "图片文件åä¸èƒ½å’ŒID文件åç›¸åŒ '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "无法嵌入输出é…置文件 '%s' 到 '%s' 中。" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "å¿½ç•¥ä¸æ”¯æŒçš„使·± '%d' 。" #, c-format msgid "Unknown file type %d." msgstr "未知文件类型 %d 。" #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "日光" #. Probably same as above: msgid "Direct sunlight" msgstr "直射阳光" msgid "Cloudy" msgstr "阴天" #. "Shadows" should be switched to this: msgid "Shade" msgstr "阴影" msgid "Incandescent" msgstr "ç¯æ³¡" msgid "Incandescent warm" msgstr "温暖白炽ç¯" #. Same as "Incandescent": msgid "Tungsten" msgstr "é’¨-白炽ç¯" msgid "Fluorescent" msgstr "è§å…‰ç¯" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "高è§å…‰ç¯" msgid "Cool white fluorescent" msgstr "冷白色è§å…‰ç¯" msgid "Warm white fluorescent" msgstr "暖白è§å…‰ç¯" msgid "Daylight fluorescent" msgstr "日光è§å…‰ç¯" msgid "Neutral fluorescent" msgstr "中性è§å…‰ç¯" msgid "White fluorescent" msgstr "白色è§å…‰ç¯" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "钠蒸气è§å…‰ç¯" msgid "Day white fluorescent" msgstr "日温白色è§å…‰ç¯" msgid "High temp. mercury-vapor fluorescent" msgstr "高温汞蒸气è§å…‰ç¯" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "闪光(自动模å¼)" msgid "Evening sun" msgstr "傿™š" msgid "Underwater" msgstr "水下" msgid "Black & white" msgstr "黑白" msgid "Manual WB" msgstr "手动白平衡" msgid "Camera WB" msgstr "相机白平衡" msgid "Auto WB" msgstr "自动白平衡" ufraw-0.19.2/po/nb.po0000664000175000017500000013024312123734456011241 00000000000000# Norwegian BokmÃ¥l translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Alvin Brattli , 2008-2009. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-10-12 18:00+0200\n" "Last-Translator: Alvin Brattli\n" "Language-Team: \n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Ã…pne navigasjonsvinduet" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Verdien %.*f er for stor, beskÃ¥ret til %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Verdien %.*f er for liten, beskÃ¥ret til %.*f." msgid "No input file, nothing to do." msgstr "Ingen inndatafil, ingenting Ã¥ gjøre." #, c-format msgid "Loaded %s %s" msgstr "Lastet inn %s %s" #, c-format msgid "Saved %s %s" msgstr "Lagret %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "j" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: overskriv «%s»?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "Alternativet --silent kan bare brukes i batch-modus" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "Alternativet --silent kan bare brukes i batch-modus" msgid "Raw images" msgstr "Raw-bilder" msgid "UFRaw ID files" msgstr "UFRaw ID-filer" msgid "Raw jpeg's" msgstr "Raw jpeg-er" msgid "Raw tiff's" msgstr "Raw tiff-er" msgid "All files" msgstr "Alle filer" msgid "Show hidden files" msgstr "Vis skjulte filer" msgid "Manual curve" msgstr "Manuell kurve" msgid "Linear curve" msgstr "Lineær kurve" msgid "Custom curve" msgstr "Selvvalgt kurve" msgid "Camera curve" msgstr "Kamerakurve" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Ingen profil" msgid "Color matrix" msgstr "Fargematrise" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (innebygd)" msgid "System default" msgstr "Systemets standardverdi" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Prøver Ã¥ konvertere .ufrawrc fra UFRaw-0.4 eller tidligere" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Prøver Ã¥ konvertere .ufrawrc fra UFRaw-0.6 eller tidligere" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw-versjonen i .ufrawrc er ikke støttet" #, c-format msgid "Too many anchors for curve '%s'" msgstr "For mange ankerpunkter i kurven «%s»" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "For mange lysverdijusteringer i ID-filen, ignorert\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID-filen %s ser ikke ut som en alminnelig fil\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Kan ikke Ã¥pne ID-filen %s for lesing\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Feil ved oppretting av filen «%s»." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Feil ved tolking av «%s»\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Kan ikke Ã¥pne filen %s for skriving\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "Kan ikke --create-id til standardutdata" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Uidentifisert Flyvende Raw-konverterer for bilder fra digitalkamera.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Bruk: ufraw [ alternativer ... ] [ raw-bildefiler ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ alternativer ... ] [ raw-bildefiler ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ alternativer ... ] [ standardmappe ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Normalt viser «ufraw» et forhÃ¥ndsvisningsvindu for hvert raw-bilde.\n" "Dette lar brukeren finjustere bildeparametrene før bildet lagres. UFRaw\n" "viser en filvalgsdialog hvis det ikke er angitt noen raw-bilder pÃ¥\n" "kommandolinjen. Bruk «ufraw-batch» for Ã¥ behandle bilder uten Ã¥ mÃ¥tte\n" "svare pÃ¥ spørsmÃ¥l (og uten forhÃ¥ndsvisning).\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Inndatafilene kan være enten raw-bilder eller ufraws ID-filer. ID-filer\n" "inneholder filnavnet til et raw-bilde og parametrene for behandling av\n" "bildet. Man kan ogsÃ¥ bruke en ID-fil med alternativet:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "--conf=ID-fil Bruk parametrene i ID-fil pÃ¥ andre raw-bilder.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Resten av alternativene er delt i to grupper.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Alternativene knyttet til bildebehandling er:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Innstilling for hvitbalanse.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Fargetemperatur i Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GRØNN Grønn fargenormalisering.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|KURVE\n" " Kurvetype for basistone. KURVE kan være en hvilken\n" " som helst kurve som har vært lest inn i det grafiske\n" " brukergrensesnittet (standardverdi camera, om den\n" " eksisterer, ellers linear).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=fil\n" " Bruk basistonekurve fra den angitte filen.\n" " Overkjører alternativet --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|KURVE\n" " Kurvetype for lysstyrke. KURVE kan være en hvilken\n" " som helst kurve som har vært lest inn i det grafiske\n" " brukergrensesnittet (standardverdi: linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=fil Bruk lysstyrkekurve fra angitt fil.\n" " Overkjører alternativet --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Gjenopprett detaljer for negative EV.\n" " «clip» gjenoppretter ingenting. Ingen detaljer " "mistes.\n" " «lch» gjenoppretter i LCH-fargerommet (bløte " "detaljer).\n" " «hsv» gjenoppretter i HSV-fargerommet (skarpe " "detaljer).\n" " (standardverdi: lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Klipp høylys for positive EV.\n" " «digital» lineær digitalsensorkurve.\n" " «film» etterligner blød filmkurve.\n" " (standardverdi: digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Gammajustering for basiskurven (standardverdi: 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEARITET\n" " Basiskurvens linearitet (standardverdi: 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=KONTRAST Kontrastjustering (standardverdi 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=METNING Justering av fargemetning (standardverdi 1.0,\n" " 0 for svarthvit utdata).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=VERDI\n" " Terskel for wavelet støyreduksjon (standardverdi: " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VERDI\n" " Følsomhet for deteksjon og reduksjon av\n" " defekte piksler (standardverdi: 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EKSPONERING\n" " Automatisk eksponering eller eksponeringskorreksjon\n" " i EV (standardverdi: 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|SORT\n" " Automatisk sortpunkt eller sortpunktsverdi\n" " (standardverdi: 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algoritme for interpolasjon (standardverdi: ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Bruk fargeutjevning.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritme for konvertering av grÃ¥toner\n" " (standardverdi none).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritme for konvertering av grÃ¥toner\n" " (standardverdi none).\n" msgid "The options which are related to the final output are:\n" msgstr "Alternativene knyttet til endelige utdata er:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FAKTOR Forminsk bildet med FAKTOR (standardverdi: 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=STØRRELSE Forminsk maks(højde,bredde) til STØRRELSE.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Filformat for utdata (standardverdi: ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Bitdybde for hver kanal i utdata (standardverdi: 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Lag ikke|ogsÃ¥|kun ID-fil (standardverdi: ikke).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VERDI JPEG-komprimering (0-100, standardverdi: 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif [Ikke] inkluder EXIF i JPEG- eller PNG-utdata\n" " (standardverdi: inkluder EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip SlÃ¥ pÃ¥ [slÃ¥ av] zip-komprimering for TIFF\n" " (standardverdi: slÃ¥ av).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Pakk ut forhÃ¥ndsvisningsbildet inkludert i raw-filen\n" " i stedet for Ã¥ konvertere raw-bildet.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|VINKEL|no\n" " Roter bildet i henhold til kameraets innstilling,\n" " VINKEL grader med klokka eller ingen rotasjon\n" " (standardverdi: camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIKSLER\n" " Beskjær utdata med oppgitt antall piksler i forhold " "til\n" " raw-bildet etter rotasjon, men før skalering.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Ikke korriger for objektivet (none) eller prøv Ã¥\n" " korrigere ved Ã¥ automatisk oppdage hvilket objektiv\n" " som har vært brukt (standardverdi none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=STI STI for utdatafil (som standardverdi brukes\n" " inndatafilens sti).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FIL Utdatafilens navn, bruk «-» for standardutdata.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=FIL Bruk FIL for raw-sortbildesubtraksjon.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Overskriv eksisterende filer uten Ã¥ spørre\n" " (standardverdi: nei).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Tving vinduet til Ã¥ være maksimalisert.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent Vær helt stille under satsvis konvertering.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw leser først innstillinger fra ressursfilen $HOME/.ufrawrc.\n" "SÃ¥ leses innstillinger fra en ID-fil, om en slik er angitt.\n" "Deretter hentes innstillinger fra alternativet --conf, hvor filnavn\n" "for inn- og utdata fra ID-filen ignoreres. Til slutt brukes alternativene\n" "fra kommandolinjen. I satsvis modus vil den andre gruppen med opsjoner\n" "IKKE bli lest fra ressursfilen.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Sist, men ikke minst, viser --version versjonsnummer og alternativer\n" "brukt under kompilering av ufraw, mens --help viser denne hjelpeteksten\n" "og stopper programmet.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "«%s» er ikke en gyldig verdi for alternativet --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw ble bygget uten støtte for ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch er avlegs. Bruk ufraw-batch istedenfor." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt gav tilbake tegnkode 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "kunne ikke lese basiskurve fra %s, for mange kurver allerede satt opp" #, c-format msgid "failed to load curve from %s" msgstr "kunne ikke lese inn kurve fra %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "«%s» er et ugyldig navn pÃ¥ en basiskurve." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "kunne ikke lese inn kurve fra %s, for mange kurver allerede lest inn" #, c-format msgid "'%s' is not a valid curve name." msgstr "«%s» er et ugyldig kurvenavn." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "«%s» er et ugyldig alternativ for interpolasjon." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "«%s» er et ugyldig alternativ for grÃ¥tone." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "«%s» er et ugyldig alternativ for grÃ¥tone." #, c-format msgid "'%s' is not a valid restore option." msgstr "«%s» er et ugyldig alternativ for gjenoppretting." #, c-format msgid "'%s' is not a valid clip option." msgstr "«%s» er et ugyldig alternativ for klipping." msgid "you can not specify both --shrink and --size" msgstr "du kan ikke angi bÃ¥de --shrink og --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "«%d» er en ugyldig bitdybde." #, c-format msgid "Output type '%s' is deprecated" msgstr "Utdatatype «%s» er foreldet" msgid "ufraw was build without TIFF support." msgstr "ufraw ble bygget uten støtte for TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw ble bygget uten støtte for JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw ble bygget uten støtte for PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "«%s» er en ugyldig utdatatype." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "«%s» er en ugyldig utdatatype for inkluderte bilder." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "«%d» er en ugyldig bitdybde for inkluderte bilder." #, c-format msgid "'%s' is not a valid rotate option." msgstr "«%s» er et ugyldig alternativ for rotate." #, c-format msgid "'%s' is not a valid create-id option." msgstr "«%s» er et ugyldig alternative for create-id." #, c-format msgid "'%s' is not a valid path." msgstr "«%s» er ikke en gyldig sti." msgid "cannot output more than one file to the same output" msgstr "kan ikke skrive mer enn en fil til samme utdata" #, c-format msgid "Raw file '%s' missing." msgstr "Raw-filen «%s» eksisterer ikke." msgid "Delete raw file" msgstr "Slett raw-fil" msgid "_Delete selected" msgstr "_Slett valgte" msgid "Delete _All" msgstr "Slett _alle" msgid "Select files to delete" msgstr "Velg filer som skal slettes" #, c-format msgid "Error reading directory '%s'." msgstr "Kunne ikke lese mappen «%s»." #, c-format msgid "Error deleting '%s'" msgstr "Kunne ikke slette «%s»" msgid "Reading embedded image requires libjpeg." msgstr "MÃ¥ ha libjpeg for Ã¥ kunne lese inkluderte bilder." msgid "No embedded image found" msgstr "Fant ikke inkludert bilde" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Originalstørrelsen (%d) er mindre enn den valgte størrelsen (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "Uoverensstemmelse i inkludert ppm; høyde %d, bredde %d, mens buffer er %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Høyde pÃ¥ inkludert JPEG (%d) er forskjellig fra forventet (%d)." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Bredde pÃ¥ inkludert JPEG (%d) er forskjellig fra forventet (%d)." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Feil ved oppretting av filen «%s».\n" "%s" msgid "No embedded image read" msgstr "Inkludert bilde ble ikke lest inn" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Feil ved oppretting av filen «%s». Ukjent filtype %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Feil ved oppretting av filen «%s»: %s" #, c-format msgid "Error writing '%s'" msgstr "Feil ved skriving til «%s»" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Ikke støttet utdatatype (%d) for inkludert bilde" #, c-format msgid "Loading raw file '%s'" msgstr "Leser inn raw-filen «%s»" msgid "Can't allocate new image." msgstr "Kan ikke reservere plass til nytt bilde." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Bakgrunn" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Feil ved inkludering av utdataprofilen «%s» i bildet." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF-buffer med lengde %d er for lang, ignorert." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Fabrikat:\t\t\t%s\n" "Modell:\t\t\t%s%s\n" "Fatning:\t\t\t%s\n" "Beskjæringsfaktor:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Fabrikat:\t\t\t\t%s\n" "Modell:\t\t\t\t%s\n" "BrennviddeomrÃ¥de:\t%s\n" "Blender:\t\t\t\t%s\n" "Beskjæringsfaktor:\t\t%.1f\n" "Type:\t\t\t\t%s\n" "Fatninger:\t\t\t%s" msgid "Focal" msgstr "Brennvidde" msgid "Focal length" msgstr "Brennvidde" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-tall (blender)" msgid "Distance" msgstr "Avstand" msgid "Distance to subject in meters" msgstr "Avstand til motivet i meter" #. Add the model combobox msgid "Model:" msgstr "Modell:" msgid "Chromatic Aberrations mathematical model" msgstr "Matematisk modell for kromatisk aberrasjon" msgid "Parameters" msgstr "Parametre" msgid "Optical vignetting mathematical model" msgstr "Matematisk modell for optisk vignettering" msgid "Lens distortion mathematical model" msgstr "Matematisk modell for forvrengning i objektiv" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Objektivgeometri:" msgid "The geometry of the lens used to make the shot" msgstr "Geometrien i objektivet som ble brukt for Ã¥ ta bildet" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Motivgeometri:" msgid "The target geometry for output image" msgstr "Ønsket motivgeometri i det ferdige bildet" msgid "Camera" msgstr "Kamera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Let etter kamera ved hjelp av et mønster\n" "Format: [fabrikant, ][modell]" msgid "Choose camera from complete list" msgstr "Velg kamera fra fullstendig liste" msgid "Reset all lens correction settings" msgstr "Tilbakestill alle instillinger for objektivkorreksjon" #. Lens selector msgid "Lens" msgstr "Objektiv" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Let etter objektiv ved hjelp av et mønster\n" "Format: [fabrikant, ][modell]" msgid "Choose lens from list of possible variants" msgstr "Velg objektiv fra liste over mulige varianter" msgid "Automatically find lens and set lens corrections" msgstr "Finn objektiv og sett korreksjon for objektivet automatisk" msgid "Lateral chromatic aberration" msgstr "Sidelengs kromatisk aberrasjon" msgid "Optical vignetting" msgstr "Optisk vignettering" msgid "Lens distortion" msgstr "Objektivets forvrengning" msgid "Lens geometry" msgstr "Objektivets geometri" msgid "Raw histogram with conversion curves" msgstr "Raw-histogram med konverteringskurver" msgid "Live histogram" msgstr "Sanntidshistogram" #. No darkframe file msgid "None" msgstr "Ingen" msgid "Lightness" msgstr "Lyshet" msgid "Luminance" msgstr "Luminans" msgid "Value" msgstr "Verdi" msgid "Channel Mixer" msgstr "Fargekanalmikser" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Ikke mere plass til nye kurver." msgid "Load curve" msgstr "Les inn kurve" msgid "All curve formats" msgstr "Alle kurveformater" msgid "UFRaw curve format" msgstr "UFRaw kurveformat" msgid "Nikon curve format" msgstr "Nikon kurveformat" msgid "Save curve" msgstr "Lagre kurve" msgid "No more room for new profiles." msgstr "Ikke mere plass til nye profiler." msgid "Load color profile" msgstr "Les inn fargeprofil" msgid "Color Profiles" msgstr "Fargeprofiler" msgid "Luminosity (Y value)" msgstr "Lysstyrke (Y-verdi)" msgid "Adams' zone" msgstr "Adams' sone" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "størrelse %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "størrelse %dx%d, skala 1/%d" msgid "Wavelet denoising" msgstr "Wavelet støyreduksjon" msgid "Despeckling" msgstr "Fjern flekker" msgid "Interpolating" msgstr "Interpolerer" msgid "Rendering" msgstr "Tegner opp" msgid "Loading preview" msgstr "Leser inn forhÃ¥ndsvisning" msgid "Saving image" msgstr "Lagrer bildet" #, c-format msgid "Black point: %0.3lf" msgstr "Sortpunkt: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Ikke mere plass til nye lysverdijusteringer." msgid "Aspect ratio locked, click to unlock" msgstr "Høyde-/breddeforholdet er lÃ¥st, klikk for Ã¥ lÃ¥se opp" msgid "Aspect ratio unlocked, click to lock" msgstr "Høyde-/breddeforholdet er ulÃ¥st, klikk for Ã¥ lÃ¥se" msgid "Load dark frame" msgstr "Les inn sortbilde" msgid "clip" msgstr "klipp" msgid "restore in LCH space for soft details" msgstr "gjenopprett i LCH-fargerom for myke detaljer" msgid "restore in HSV space for sharp details" msgstr "gjenopprett i HSV-fargerom for skarpe detaljer" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Gjenopprett detaljer for negative EV\n" "NÃ¥værende tilstand: %s" msgid "digital linear" msgstr "digital lineær" msgid "soft film like" msgstr "myk filmlignende" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Klipp høylys for positive EV\n" "NÃ¥værende tilstand: %s" #, c-format msgid "Filename: %s%s" msgstr "Filnavn: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Opprett ogsÃ¥ ID-fil" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Opprett bare ID-fil" msgid "UFRaw options" msgstr "UFRaw alternativer" msgid "Settings" msgstr "Innstillinger" msgid "Input color profiles" msgstr "Fargeprofiler for inndata" msgid "Output color profiles" msgstr "Fargeprofiler for utdata" msgid "Display color profiles" msgstr "Fargeprofiler for skjerm" msgid "Base Curves" msgstr "Basiskurver" msgid "Luminosity Curves" msgstr "Lysstyrkekurver" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Ekstern Gimp-kommando" msgid "Reset command to default" msgstr "Sett kommando tilbake til standardverdi" msgid "Blink Over/Underexposure Indicators" msgstr "Blinkende indikatorer for over- og undereksponering" msgid "Configuration" msgstr "Oppsett" msgid "Save configuration" msgstr "Lagre oppsett" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Lagre oppsett til ressursfil ($HOME/.ufrawrc)" msgid "Log" msgstr "Logg" msgid "About" msgstr "Om" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Uidentifisert Flyvende Raw (UFRaw) er et " "program\n" "for Ã¥ lese og behandle raw-bilder fra digitalkameraer.\n" "UFRaw bruker Digital Camera Raw (DCRaw)\n" "til den egentlige kodingen av raw-bilder.\n" "\n" "Programforfatter: Udi Fuchs\n" "Hjemmeside: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineær" msgid "Logarithmic" msgstr "Logaritmisk" msgid "Hot pixels: " msgstr "Defekte piksler: " msgid "mark" msgstr "marker" msgid "Hot pixel sensitivity" msgstr "Følsomhet for defekte piksler" msgid "Reset hot pixel sensitivity" msgstr "Tilbakestill følsomhet for defekte piksler" msgid "RGB histogram" msgstr "RGB-histogram" msgid "R+G+B histogram" msgstr "R+G+B-histogram" msgid "Luminosity histogram" msgstr "Lysstyrkehistogram" msgid "Value (maximum) histogram" msgstr "Maksimalverdihistogram" msgid "Saturation histogram" msgstr "Fargemetningshistogram" msgid "Average:" msgstr "Gjennomsnitt:" msgid "Std. deviation:" msgstr "Standardavvik:" msgid "Overexposed:" msgstr "Overeksponert:" msgid "Indicate" msgstr "Vis" msgid "Underexposed:" msgstr "Undereksponert:" msgid "White Balance" msgstr "Hvitbalanse" msgid "Cannot use camera white balance." msgstr "Kan ikke bruke kameraets hvitbalanse." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Det finnes ingen forvalg for hvitbalanse for din kameramodell.\n" "Se pÃ¥ UFRaws hjemmeside for informasjon om hvordan du kan fÃ¥\n" "støtte for ditt kamera." msgid "Reset white balance to initial value" msgstr "Sett hvitbalanse tilbake til startverdien" msgid "Temperature" msgstr "Temperatur" msgid "White balance color temperature (K)" msgstr "Hvitbalansens fargetemperatur (K)" msgid "Green" msgstr "Grønn" msgid "Green component" msgstr "Grønn komponent" msgid "Select a spot on the preview image to apply spot white balance" msgstr "Velg et punkt pÃ¥ forhÃ¥ndsvisningsbildet for Ã¥ mÃ¥le punkthvitbalanse" msgid "Chan. multipliers:" msgstr "Kanalmultiplikatorer:" msgid "Bayer pattern interpolation" msgstr "Bayermønsterinterpolasjon" msgid "VNG four color interpolation" msgstr "VNG firefargers interpolasjon" msgid "Bilinear interpolation" msgstr "Bilineær interpolasjon" msgid "AHD interpolation" msgstr "AHD-interpolasjon" msgid "VNG interpolation" msgstr "VNG-interpolasjon" msgid "PPG interpolation" msgstr "PPG-interpolasjon" msgid "No interpolation" msgstr "Ingen interpolasjon" msgid "No Bayer pattern" msgstr "Intet Bayermønster" msgid "Apply color smoothing" msgstr "Bruk fargeutjevning" msgid "Denoise" msgstr "Støyreduksjon" msgid "Threshold for wavelet denoising" msgstr "Terskelverdi for wavelet støyreduksjon" msgid "Reset denoise threshold to default" msgstr "Sett terskelverdi for støyreduksjon tilbake til standardverdi" msgid "Dark Frame:" msgstr "Sortbilde:" msgid "Reset dark frame" msgstr "Tilbakestill sortbilde" msgid "Reset adjustment" msgstr "Tilbakestill justering" msgid "Select a spot on the preview image to choose hue" msgstr "Velg et punkt pÃ¥ forhÃ¥ndsvisningsbildet for Ã¥ velge fargetone" msgid "Remove adjustment" msgstr "Fjern justering" msgid "Grayscale Mode:" msgstr "Modus for grÃ¥toneskala:" msgid "Reset channel mixer" msgstr "Tilbakestill fargekanalmikser" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Fjerning av flekker er mest nyttig nÃ¥r høye ISO-tall kombineres med en stor " "kanalmultiplikator, dvs. nÃ¥r en kanal har et veldig dÃ¥rlig signal-/ " "støyforhold. Prøv med verdier for vindusstørrelse, «color decay» og antall " "kjøringer pÃ¥ henholdsvis 50, 0 og 5 for gjeldende kanal. For en kanal som " "bare inneholder støy, prøv 1, 0.6 og 1. Funksjonaliteten slÃ¥s av nÃ¥r " "vindusstørrelse eller antall kjøringer er null. Vindusstørrelse kan ikke " "være mindre enn antall kjøringer." msgid "Update channel parameters together" msgstr "Oppdater kanalparametre samtidig" msgid "Reset despeckle parameters" msgstr "Tilbakestill parametre for fjerning av flekker" #. channel to view msgid "View channel:" msgstr "Vis kanal:" #. Parameters msgid "Window size:" msgstr "Vindusstørrelse:" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "Kjøringer:" msgid "Load base curve" msgstr "Les inn basiskurve" msgid "Save base curve" msgstr "Lagre basiskurve" msgid "Reset base curve to default" msgstr "Sett basiskurve tilbake til standardverdi" msgid "Input ICC profile" msgstr "ICC-profil for inndata" msgid "Output ICC profile" msgstr "ICC-profil for utdata" msgid "Display ICC profile" msgstr "ICC-profil for skjerm" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Gammakorreksjon for inndataprofilen" msgid "Reset gamma to default" msgstr "Sett gamma tilbake til standardverdi" msgid "Linearity" msgstr "Linearitet" msgid "Linear part of the gamma correction" msgstr "Lineær del av gammakorreksjonen" msgid "Reset linearity to default" msgstr "Sett linearitet tilbake til standardverdi" msgid "Output intent" msgstr "Fargetilpasning for utdata" msgid "Perceptual" msgstr "Sansningsmessig" msgid "Relative colorimetric" msgstr "Relativ kolorimetrisk" msgid "Saturation" msgstr "Fargemetning" msgid "Absolute colorimetric" msgstr "Absolutt kolorimetrisk" msgid "Output bit depth" msgstr "Bitdybde for utdata" msgid "Display intent" msgstr "Fargetilpasning for skjerm" msgid "Disable soft proofing" msgstr "Ingen programkorrektur" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Global kontrastjustering" msgid "Reset global contrast to default" msgstr "Sett global kontrast tilbake til standardverdi" msgid "Reset saturation to default" msgstr "Sett fargemetning tilbake til standardverdi" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automatisk kurveinnstilling\n" "(Flat ut histogram)" msgid "Reset curve to default" msgstr "Sett kurve tilbake til standardverdi" msgid "Reset black-point to default" msgstr "Sett sortpunkt tilbake til standardverdi" msgid "Auto adjust black-point" msgstr "Automatisk innstilling av sortpunkt" #. Start of Crop controls msgid "Left:" msgstr "Venstre:" msgid "Top:" msgstr "Topp:" msgid "Right:" msgstr "Høyre:" msgid "Bottom:" msgstr "Bunn:" msgid "Auto fit crop area" msgstr "Tilpass beskjæringsomrÃ¥det automatisk" #, fuzzy msgid "Reset the crop area" msgstr "Tilbakestill beskjæringsomrÃ¥de" msgid "Aspect ratio:" msgstr "Høyde/bredde-forhold:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Høyde/bredde-forhold for beskjæring.\n" "Kan angis som desimaltall (1.273)\n" "eller som et forhold mellom to tall (14:11)" msgid "Shrink factor" msgstr "Forminskelsesfaktor" msgid "Width" msgstr "Bredde" msgid "Height" msgstr "Høyde" msgid "Orientation:" msgstr "Orientering:" msgid "Rotation" msgstr "Rotasjon" msgid "Rotation angle" msgstr "Rotasjonsvinkel" msgid "Reset rotation angle" msgstr "Tilbakestill rotasjonsvinkel" #. drawLines toggle button msgid "Grid lines" msgstr "Gitterlinjer" msgid "Number of grid lines to overlay in the crop area" msgstr "Antall justeringslinjer som legges over beskjæringsomrÃ¥det" msgid "Path" msgstr "Sti" msgid "Select output path" msgstr "Velg sti for utdata" msgid "Filename" msgstr "Filnavn" msgid "JPEG compression level" msgstr "JPEG komprimeringsnivÃ¥" msgid "JPEG progressive encoding" msgstr "JPEG progressiv koding" msgid "TIFF lossless Compress" msgstr "TIFF tapsfri komprimering" msgid "Embed EXIF data in output" msgstr "Inkluder EXIF-data i JPEG- eller PNG-filer" msgid "Create ID file " msgstr "Opprett ID-fil " msgid "No" msgstr "Nei" msgid "Also" msgstr "OgsÃ¥" msgid "Only" msgstr "Bare" msgid "Save image defaults " msgstr "Lagre standardverdier for bilder " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Lagre valgte parametre for bildebehandling som standardverdier.\n" "Parametrene for utdata i dette vinduet lagres alltid." msgid "Never again" msgstr "Aldri igjen" msgid "Always" msgstr "Alltid" msgid "Just this once" msgstr "Bare denne gangen" msgid "Remember output path" msgstr "Husk sti for utdata" msgid "Overwrite existing files without asking" msgstr "Skriv over eksisterende filer uten Ã¥ spørre" msgid "Tag" msgstr "Tagg" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Kamerafabrikant" msgid "Camera model" msgstr "Kameramodell" msgid "Timestamp" msgstr "Tidsstempel" msgid "Shutter time" msgstr "Lukkertid" msgid "Aperture" msgstr "Blender" msgid "ISO speed" msgstr "ISO-følsomhet" msgid "35mm focal length" msgstr "35mm brennvidde" msgid "Flash" msgstr "Blits" msgid "White balance" msgstr "Hvitbalanse" #, c-format msgid "EXIF data read by %s" msgstr "EXIF-data lest av %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Advarsel: EXIF-data vil ikke bli sendt til utdata" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Punktverdier:" msgid "Exposure compensation in EV" msgstr "Eksponeringskompensasjon i EV" msgid "Auto adjust exposure" msgstr "Automatisk eksponeringsinnstilling" msgid "Reset exposure to default" msgstr "Sett eksponering tilbake til standardverdi" msgid "Grayscale" msgstr "GrÃ¥toneskala" #. Lens correction page msgid "Lens correction" msgstr "Korriger for objektiv" msgid "Base curve" msgstr "Basiskurve" msgid "Color management" msgstr "Fargestyring" msgid "Correct luminosity, saturation" msgstr "Korriger lysstyrke, fargemetning" msgid "Lightness Adjustments" msgstr "Lysverdijusteringer" msgid "Crop and rotate" msgstr "Beskjær og roter" msgid "Save" msgstr "Lagre" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom-prosent" msgid "Options" msgstr "Alternativer" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Slett" msgid "Send image to _Gimp" msgstr "Send bildet til _Gimp" msgid "Fatal error setting C locale" msgstr "Uopprettelig feil ved innstilling av C-lokalisering" #, c-format msgid "Curve version is not supported" msgstr "Kurveversjon er ikke støttet" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Ugyldig Nikon kurvefil «%s»" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Feil ved Ã¥pning av kurvefil «%s»: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Feil ved Ã¥pning av filen «%s»: %s" msgid "File exists" msgstr "Filen finnes" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Filen «%s» finnes allerede.\n" "Overskriv?" msgid "Error creating temporary file." msgstr "Feil ved opprettelse av midlertidig fil." msgid "Error activating Gimp." msgstr "Kunne ikke starte Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Kan ikke bruke kameraets hvitbalanse, bruker automatisk hvitbalanse " "isteden.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "" "Alternativene --temperature og --green overkjører alternativet --wb=%s. " #, c-format msgid "'%s' is not a valid white balance setting." msgstr "«%s» er ikke en gyldig innstilling for hvitbalanse." msgid "Remote URI is not supported" msgstr "Ekstern URI er ikke støttet" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "sortbildefeil: %s er ikke en raw-fil\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "kunne ikke lese inn sortbilde «%s»\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Sortbildet «%s» passer ikke til hovedbildet" #, c-format msgid "using darkframe '%s'\n" msgstr "bruker sortbildet «%s»\n" msgid "Error reading NEF curve" msgstr "Det oppstod en feil ved innlesing av NEF-kurven" #, c-format msgid "Can not downsize from %d to %d." msgstr "Kan ikke forminske fra %d til %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Feil ved oppretting av filen «%s»." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Feil ved oppretting av fil." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Bildets filnavn kan ikke være det samme som ID-filnavnet «%s»" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Kunne ikke inkludere utdataprofilen «%s» i «%s»." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Ikke støttet bitdybde «%d» ignorert." #, c-format msgid "Unknown file type %d." msgstr "Ukjent filtype %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Dagslys" #. Probably same as above: msgid "Direct sunlight" msgstr "Direkte sollys" msgid "Cloudy" msgstr "Overskyet" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Skygge" msgid "Incandescent" msgstr "Glødelampe" msgid "Incandescent warm" msgstr "Varm glødelampe" #. Same as "Incandescent": msgid "Tungsten" msgstr "Glødelampe" msgid "Fluorescent" msgstr "Fluoriserende" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluoriserende høy" msgid "Cool white fluorescent" msgstr "Kald hvit fluoriserende" msgid "Warm white fluorescent" msgstr "Varm hvit fluoriserende" msgid "Daylight fluorescent" msgstr "Dagslysfluoriserende" msgid "Neutral fluorescent" msgstr "Nøytral fluoriserende" msgid "White fluorescent" msgstr "Hvit fluoriserende" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Natriumlampe" msgid "Day white fluorescent" msgstr "Hvit dagslysfluoriserende" msgid "High temp. mercury-vapor fluorescent" msgstr "Høytemperatur kvikksølvlampe" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Blits (auto-modus)" msgid "Evening sun" msgstr "Kveldssol" msgid "Underwater" msgstr "Under vann" msgid "Black & white" msgstr "Svarthvit" msgid "Manual WB" msgstr "Manuell HB" msgid "Camera WB" msgstr "Kameraets HB" msgid "Auto WB" msgstr "Automatisk HB" ufraw-0.19.2/po/pt.po0000664000175000017500000012651012123734456011267 00000000000000# Portuguese (Brazil) translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Bruno Buys , 2007, 2009. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-10-07 10:53-0300\n" "Last-Translator: Bruno Buys \n" "Language-Team: Portuguese\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Abrir a janela do navegador" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "" msgid "No input file, nothing to do." msgstr "Nenhum arquivo de entrada, nada a fazer." #, c-format msgid "Loaded %s %s" msgstr "carregou %s %s" #, c-format msgid "Saved %s %s" msgstr "salvou %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "s" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: sobrescrever '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "opção --silent é válida somente no modo em lotes" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "opção --silent é válida somente no modo em lotes" msgid "Raw images" msgstr "Imagens cruas" msgid "UFRaw ID files" msgstr "Arquivos ID do UFRaw" msgid "Raw jpeg's" msgstr "Raw jpeg" msgid "Raw tiff's" msgstr "Raw tiff" msgid "All files" msgstr "Todos os arquivos" msgid "Show hidden files" msgstr "Exibir arquivos ocultos" msgid "Manual curve" msgstr "Curva manual" msgid "Linear curve" msgstr "Curva linear" msgid "Custom curve" msgstr "Curva personalizada" msgid "Camera curve" msgstr "Curva da câmera" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Sem perfil" msgid "Color matrix" msgstr "Matriz de cores" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (embebido)" msgid "System default" msgstr "Padrões do sistema" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Tentando converter .ufrawrc do UFRaw-0.4 ou anterior" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Tentando converter .ufrawrc do UFRaw-0.6 ou anterior" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "A versão do UFRaw em .ufrawrc não é suportada" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Muitas âncoras para a curva '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Muitos ajustes de luminosidade no arquivo ID, ignorado\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "O arquivo ID %s parece não ser um arquivo regular\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Não é possível abrir o arquivo ID %s para leitura\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Erro criando arquivo '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Erro analisando '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Não é possível abrir o arquivo %s para leitura\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "não é possível --create-id com stdout" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw conversor para imagens de câmeras digitais.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Uso: ufraw [ opções ... ] [ arquivos-crus ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opções ... ] [ arquivos-crus ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opções ... ] [ diretório-padrão ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Por padrão o 'ufraw' mostra uma janela de prévia para cada imagem crua\n" "permitindo que o usuário manipule os parâmetros da imagem antes de salvá-" "las.\n" "Se nenhuma imagem crua for especificada na linha de comando, UFRaw irá\n" "mostrar um diálogo de escolha de arquivo. Para processar as imagens sem\n" "que seja feita nenhuma pergunta (e sem a prévia), use 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Os arquivos de entrada podem ser tanto arquivos crus quanto arquivos ID\n" "do ufraw. Arquivos ID contém o nome de arquivo de uma imagem crua e os\n" "parâmetros para lidar com ela. Pode-se também usar um arquivo ID com a\n" "opção:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-file Aplica os parâmetros em ID-file para outras imagens " "cruas.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "O restante das opções é separado em dois grupos.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "As opções relacionadas com manipulação de imagens são:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Definição de balanço de branco.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Temperatura de cor em Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN Normalização de verde\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Tipo de curva base a ser usado. CURVE pode ser\n" " qualquer curva previamente carregada na GUI.\n" " (o padrão é da câmera, se existir. Caso contrário,\n" " linear).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " Usar curva base incluída no arquivo especificado.\n" " Substitui a opção --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Tipo de curva de luminosidade a ser usada. CURVE pode\n" " ser qualquer curva previamente carregada na GUI.\n" " (o padrão é linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file Usar a curva de luminosidade incluída no arquivo\n" " especificado. Substitui a opção --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Restaura detalhes para EV negativo.\n" " 'clip' não restaura nada - livre de artefatos.\n" " 'lch' retaura em espaço LCH - dando detalhes suaves.\n" " 'hsv' restaura em espaço HSV - dando detalhes " "nítidos.\n" " (o padrão é lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Clipa superexposições para EV positivos.\n" " 'digital' resposta de sensor linear digital.\n" " 'film' simula a resposta de filme suave. (o padrão é " "digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMMA Ajuste de gamma da curva base (padrão é 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY Linearidade da curva base (padrão é 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contraste=CONT ajuste de Contraste (padrão 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Ajuste de saturação (padrão 1.0, 0 para saída em " "P&B).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--limite-para-remoção-ruído-por-wavelet=THRESHOLD\n" " Valor limite para remoção de ruído por wavelet (padrão " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--sensibilidade-a-hotpixel=VALOR\n" " Sensibilidade para detectar e corrigir pixels-quentes " "(padrão 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " Auto exposição ou correção de exposição em EV (padrão " "é 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " Auto ponto de preto ou valor de ponto de preto (padrão " "é 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|bilinear\n" " Algoritmo de interpolação a ser usado (padrão é ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Aplicar atenuação de cor.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo de conversão de escala de cinza a ser usado " "(padrão nenhum).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo de conversão de escala de cinza a ser usado " "(padrão nenhum).\n" msgid "The options which are related to the final output are:\n" msgstr "As opções relacionadas à saída final são:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FATOR Encolher a imagem por FATOR (padrão é 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=TAMANHO Diminuir max(altura,largura) para TAMANHO.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm8|ppm16|tiff8|tiff16|jpeg\n" " Formato de arquivo de saída (padrão ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Profundidade de bits por canal (padrão 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Cria arquivo ID: não|também|somente (padrão não).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALOR compressão JPEG (0-100, padrão é 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif Insere EXIF na saída (padrão é inserir EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Habilita [desabilita] compressão zip em TIFF (padrão " "nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extrai a imagem miniatura embutida no arquivo cru\n" " em vez de convertê-la.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " Rotaciona a imagem segundo definições da câmera,por " "ANGLE graus\n" " sentido horário, ou não rotaciona a imagem (padrão " "câmera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Corta a saída segundo a gama de pixels dada, relativa " "à\n" " imagem cruz depois da rotação, mas antes de qualquer " "redimensionamento.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=CAMINHO CAMINHO para o arquivo de saída (padrão é usar o " "caminho do arquivo de entrada).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=ARQUIVO Nome do arquivo de saída, use '-' para direcionar " "para stdout.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=ARQUIVO Usar ARQUIVO para subtração de quadro preto cru.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Sobrescreve arquivos existentes sem perguntar (padrão " "não).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Faz a janela ser maximizada.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Não mostra nenhuma mensagem durante conversão em " "lote.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw primeiro lê as configurações do arquivo de recurso $HOME/.ufrawrc.\n" "Depois, se um arquivo ID é especificado, suas configurações são lidas. " "Depois, asconfigurações\n" "das opções --conf são lidas, ignorando nomes de arquivos de entrada e saída " "noarquivo ID.\n" "Por fim, as opções de linha de comando são definidas. Em modo de lote, o " "segundo\n" "grupo de opções NÃO é lido do arquivo de recursos.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Lembre-se que --version mostra o número de versão e opções de compilação\n" "para o ufraw e --help mostra essa mensagem de ajuda e sai.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' não é um valor válido para a opção --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw foi compilado sem suporte a zip." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch é obsoleto. Use ufraw-batch no lugar." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt retornou código de caractere 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "falhou ao carregar a curva de %s, muitas curvas base configuradas" #, c-format msgid "failed to load curve from %s" msgstr "falhou ao carregar curva de %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' não é um nome de curva base válido" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "falhou ao carregar a curva de %s, muitas curvas configuradas" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' não é um nome de curva válido." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' não é uma opção de interpolação válida." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' não é uma opção válida de escala de cinza." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' não é uma opção válida de escala de cinza." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' não é uma opção de restauração válida." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' não é uma opção de clipe válida" msgid "you can not specify both --shrink and --size" msgstr "você não pode especificar --shrink e --size juntos" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' não é uma profundidade de bits válida" #, c-format msgid "Output type '%s' is deprecated" msgstr "Tipo de saída '%s' está deprecado" msgid "ufraw was build without TIFF support." msgstr "ufraw foi compilado sem suporte a TIFF" msgid "ufraw was build without JPEG support." msgstr "ufraw foi compilado sem suporte a JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw foi compilado sem suporte a PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' não é um tipo válido de saída." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' não é um tipo válido de saída para imagem embutida." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "" "'%d' não é um tipo válido de profundidade de bits para imagem embutida." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' não é uma opção válida de rotacionar" #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' não é uma opção válida de create-id" #, c-format msgid "'%s' is not a valid path." msgstr "'%s' não é um caminho válido." msgid "cannot output more than one file to the same output" msgstr "não é possível gravar mais de um arquivo na mesma saída" #, c-format msgid "Raw file '%s' missing." msgstr "O arquivo cru '%s' está faltando" msgid "Delete raw file" msgstr "Deletar arquivo cru" msgid "_Delete selected" msgstr "_Deleta o selecionado" msgid "Delete _All" msgstr "Deletar _tudo" msgid "Select files to delete" msgstr "Selecionar arquivos a deletaar" #, c-format msgid "Error reading directory '%s'." msgstr "Erro lendo diretório '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Erro deletando '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Ler imagens embutidas requer libjpeg." msgid "No embedded image found" msgstr "Não foi encontrada imagem embutida" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "O tamanho original (%d) é menor do que o tamanho solicitado (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "erro em miniatura ppm, altura %d, largura %d, enquanto buffer %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Altura %d da miniatura JPEG é diferente do esperado %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Largura %d da miniatura JPEG é diferente do esperado %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Erro criando arquivo '%s'\n" "%s" msgid "No embedded image read" msgstr "Nenhuma imagem embutida lida" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Erro criando arquivo '%s'. Tipo de arquivo desconhecido %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Erro criando arquivo '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Erro gravando '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Tipo de arquivo de saída (%d) não suportado para imagem embutida" #, c-format msgid "Loading raw file '%s'" msgstr "Carregando arquivo cru '%s'" msgid "Can't allocate new image." msgstr "Não foi possível alocar nova imagem." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Fundo" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Falhou ao embutir perfil de saída '%s' na imagem." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "Largura de buffer EXIF %d muito longo, ignorado." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Fabricante:\t\t%s\n" "Modelo:\t\t\t%s%s\n" "Mount:\t\t\t%s\n" "Fator de corte:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Fabricante:\t\t%s\n" "Modelo:\t\t\t%s\n" "Distância focal:\t%s\n" "Abertura:\t\t\t%s\n" "Fator de corte:\t%.1f\n" "Tipo:\t\t\t%s\n" "Mounts:\t\t\t%s" msgid "Focal" msgstr "Focal" msgid "Focal length" msgstr "Distância focal" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "Número F (Abertura)" msgid "Distance" msgstr "Distância" #, fuzzy msgid "Distance to subject in meters" msgstr "Distância até o sujeito" #. Add the model combobox msgid "Model:" msgstr "Modelo:" msgid "Chromatic Aberrations mathematical model" msgstr "Modelo matemático para Aberrações Cromáticas" msgid "Parameters" msgstr "Parâmetros" msgid "Optical vignetting mathematical model" msgstr "Modelo matemático para 'vignetting' ótico" msgid "Lens distortion mathematical model" msgstr "Modelo matemático para distorção de lentes" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometria das lentes:" msgid "The geometry of the lens used to make the shot" msgstr "A geometria da lente usada para fazer o disparo" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Geometria alvo:" msgid "The target geometry for output image" msgstr "Geometria alvo para imagem de saída" msgid "Camera" msgstr "Câmera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Buscar pela câmera usando um padrão\n" "Formato: [Fabricante, ][Modelo]" msgid "Choose camera from complete list" msgstr "Escolher a câmera de uma lista completa" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "Lente" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Busca pela lente usando um padrão\n" "Formato: [Fabricante, ][Modelo]" msgid "Choose lens from list of possible variants" msgstr "Escolher a lente de uma lista de variantes possíveis" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "Aberração cromática lateral" msgid "Optical vignetting" msgstr "'Vignetting' ótico" msgid "Lens distortion" msgstr "Distorção da lente" msgid "Lens geometry" msgstr "Gemoetria da lente" msgid "Raw histogram with conversion curves" msgstr "Histograma cru com curvas de conversão" msgid "Live histogram" msgstr "Histograma ao vivo" #. No darkframe file msgid "None" msgstr "Nenhum" msgid "Lightness" msgstr "Luminosidade" msgid "Luminance" msgstr "Luminância" msgid "Value" msgstr "Valor" msgid "Channel Mixer" msgstr "Mixer de canais" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Não há mais espaço para novas curvas" msgid "Load curve" msgstr "Carregar curva" msgid "All curve formats" msgstr "Todos os formatos de curva" msgid "UFRaw curve format" msgstr "Formato de curva UFRaw" msgid "Nikon curve format" msgstr "Formato de curva Nikon" msgid "Save curve" msgstr "Salvar curva" msgid "No more room for new profiles." msgstr "Não há mais espaço para novos perfis." msgid "Load color profile" msgstr "Carregar perfis de cor" msgid "Color Profiles" msgstr "Perfis de cor" msgid "Luminosity (Y value)" msgstr "Luminosidade (valor Y)" msgid "Adams' zone" msgstr "Zona de Adams" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "tamanho %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "tamanho %dx%d, escala 1/%d" #, fuzzy msgid "Wavelet denoising" msgstr "Limite para eliminação de ruído por wavelet" msgid "Despeckling" msgstr "" #, fuzzy msgid "Interpolating" msgstr "Sem interpolação" msgid "Rendering" msgstr "" msgid "Loading preview" msgstr "Carregando a prévia" msgid "Saving image" msgstr "Salvando a imagem" #, c-format msgid "Black point: %0.3lf" msgstr "Ponto preto: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Não há mais espaço para novos ajustes de luminosidade" msgid "Aspect ratio locked, click to unlock" msgstr "" msgid "Aspect ratio unlocked, click to lock" msgstr "" msgid "Load dark frame" msgstr "Carregar quadro negro" msgid "clip" msgstr "clipe" msgid "restore in LCH space for soft details" msgstr "restaure em espaço LCH para ter detalhes suaves" msgid "restore in HSV space for sharp details" msgstr "restaure em espaço HSV para detalhes nítidos" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Restaura detalhes para EV negativo\n" "Estado atual: %s" msgid "digital linear" msgstr "linear digital" msgid "soft film like" msgstr "como filme suave" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Clipa superexposições para EV positivo\n" "Estado atual: %s" #, c-format msgid "Filename: %s%s" msgstr "Nome de arquivo: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Criar também arquivo ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Criar somente arquivo ID" msgid "UFRaw options" msgstr "Opções UFRaw" msgid "Settings" msgstr "Configurações" msgid "Input color profiles" msgstr "Perfis de cor de entrada" msgid "Output color profiles" msgstr "Perfis de cor de saída" msgid "Display color profiles" msgstr "Mostrar perfis de cor" msgid "Base Curves" msgstr "Curvas base" msgid "Luminosity Curves" msgstr "Curvas de luminosidade" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Comando Gimp remoto" msgid "Reset command to default" msgstr "Redefine o comando para o padrão" msgid "Blink Over/Underexposure Indicators" msgstr "Piscar indicadores Sub/Superexpostos" msgid "Configuration" msgstr "Configuração" msgid "Save configuration" msgstr "Salva a configuração" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Salva a configuração no arquivo de recursos ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "Sobre" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "O Unidentified Flying Raw (UFRaw) é um " "utilitário para\n" "ler e manipular imagens cruas de câmeras digitais.\n" "UFRaw usa o Digital Camera Raw (DCRaw)\n" "para a decodificação das imagens cruas.\n" "\n" "Autor: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Linear" msgid "Logarithmic" msgstr "Logarítmico" msgid "Hot pixels: " msgstr "Pixels quentes:" msgid "mark" msgstr "" msgid "Hot pixel sensitivity" msgstr "Sensibilidade a pixels quentes" msgid "Reset hot pixel sensitivity" msgstr "Redefine a sensibilidade a pixels quentes" msgid "RGB histogram" msgstr "Histograma RGB" msgid "R+G+B histogram" msgstr "Histograma R+G+B" msgid "Luminosity histogram" msgstr "Histograma de luminosidade" msgid "Value (maximum) histogram" msgstr "Histograma de valor (máximo)" msgid "Saturation histogram" msgstr "Histograma de saturação" msgid "Average:" msgstr "Média:" msgid "Std. deviation:" msgstr "Desv. padrão:" msgid "Overexposed:" msgstr "Superexposto:" msgid "Indicate" msgstr "Indicar" msgid "Underexposed:" msgstr "Subexposto:" msgid "White Balance" msgstr "Balanço de branco" #, fuzzy msgid "Cannot use camera white balance." msgstr "" "Balanço de branco da câmera não disponível, revertendo para o balanço de " "branco padrão." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Não existem predefinições de balanço de branco para o seu modelo de câmera.\n" "Olhe na página web do UFRaw para informações sobre como conseguir suporte\n" "para a sua câmera." msgid "Reset white balance to initial value" msgstr "Redefine o balanço de branco para o valor inicial" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Temperatura de cor do balanço de branco (K)" msgid "Green" msgstr "Verde" msgid "Green component" msgstr "Componente de verde" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Selecione um ponto na imagem de prévia para aplicar o balanço de branco de " "ponto" msgid "Chan. multipliers:" msgstr "Mult. de canal:" msgid "Bayer pattern interpolation" msgstr "Interpolação por padrão de Bayer" msgid "VNG four color interpolation" msgstr "Interpolação VNG de quatro cores" msgid "Bilinear interpolation" msgstr "Interpolação bilinear" msgid "AHD interpolation" msgstr "Interpolação AHD" msgid "VNG interpolation" msgstr "Interpolação VNG" msgid "PPG interpolation" msgstr "Interpolação PPG" msgid "No interpolation" msgstr "Sem interpolação" msgid "No Bayer pattern" msgstr "Nenhum padrão de Bayer" msgid "Apply color smoothing" msgstr "Aplica atenuação de cor" msgid "Denoise" msgstr "Elimina ruído" msgid "Threshold for wavelet denoising" msgstr "Limite para eliminação de ruído por wavelet" msgid "Reset denoise threshold to default" msgstr "Redefine a eliminação de ruído para o padrão" msgid "Dark Frame:" msgstr "Quadro negro:" msgid "Reset dark frame" msgstr "Redefine quadro negro:" msgid "Reset adjustment" msgstr "Redefine ajuste" msgid "Select a spot on the preview image to choose hue" msgstr "" "Selecione um ponto na imagem de prévia para aplicar o balanço de branco de " "ponto" msgid "Remove adjustment" msgstr "Remove o ajuste" msgid "Grayscale Mode:" msgstr "Modo em escala de cinza" msgid "Reset channel mixer" msgstr "Redefnie o canal do mixer" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" msgid "Update channel parameters together" msgstr "" #, fuzzy msgid "Reset despeckle parameters" msgstr "Redefine quadro negro:" #. channel to view msgid "View channel:" msgstr "" #. Parameters msgid "Window size:" msgstr "" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "" msgid "Load base curve" msgstr "Carregar curva base" msgid "Save base curve" msgstr "Salvar curva base" msgid "Reset base curve to default" msgstr "Redefine a curva base para o padrão" msgid "Input ICC profile" msgstr "Perfil ICC de entrada" msgid "Output ICC profile" msgstr "Perfil ICC de saída" msgid "Display ICC profile" msgstr "Mostra o perfil ICC" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Correção de gamma para o perfil de entrada" msgid "Reset gamma to default" msgstr "Redefine gamma para o padrão" msgid "Linearity" msgstr "Linearidade" msgid "Linear part of the gamma correction" msgstr "Parte linear da correção de gamma" msgid "Reset linearity to default" msgstr "Redefine linearidade para o padrão" msgid "Output intent" msgstr "Intento de saída" msgid "Perceptual" msgstr "Perceptual" msgid "Relative colorimetric" msgstr "Relativo colorimétrico" msgid "Saturation" msgstr "Saturação" msgid "Absolute colorimetric" msgstr "Absoluto colorimétrico" msgid "Output bit depth" msgstr "Profundidade de bits de saída" msgid "Display intent" msgstr "Mostra o intento" msgid "Disable soft proofing" msgstr "Desabilita o soft proofing" msgid "Contrast" msgstr "Contraste" msgid "Global contrast adjustment" msgstr "Ajuste global de contraste" msgid "Reset global contrast to default" msgstr "Redefine o contraste global para o padrão" msgid "Reset saturation to default" msgstr "Redefine saturação para o padrão" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Auto ajusta curva\n" "(Achata o histograma)" msgid "Reset curve to default" msgstr "Redefine a curva para o padrão" msgid "Reset black-point to default" msgstr "Redefine o ponto de preto para o padrão" msgid "Auto adjust black-point" msgstr "Auto ajusta o ponto de preto" #. Start of Crop controls msgid "Left:" msgstr "Esquerda:" msgid "Top:" msgstr "Alto:" msgid "Right:" msgstr "Direita:" msgid "Bottom:" msgstr "Base:" msgid "Auto fit crop area" msgstr "" #, fuzzy msgid "Reset the crop area" msgstr "Redefine a região de corte" msgid "Aspect ratio:" msgstr "Aspecto:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Aspecto da área de corte.\n" "Pode ser dado em notação decimal (1.273)\n" "ou como taxa entre dois números (14:11)" msgid "Shrink factor" msgstr "Fator de encolhimento" msgid "Width" msgstr "Largura" msgid "Height" msgstr "Altura" msgid "Orientation:" msgstr "Orientação:" msgid "Rotation" msgstr "Rotação" #, fuzzy msgid "Rotation angle" msgstr "Ãngulo de rotação" #, fuzzy msgid "Reset rotation angle" msgstr "Redefine o ângulo de rotação" #. drawLines toggle button msgid "Grid lines" msgstr "" #, fuzzy msgid "Number of grid lines to overlay in the crop area" msgstr "Número de linhas de alinhamento para sobrepor na área de corte" msgid "Path" msgstr "Caminho" msgid "Select output path" msgstr "Seleciona o caminho de saída" msgid "Filename" msgstr "Nome de arquivo" msgid "JPEG compression level" msgstr "Nível de compressão JPEG" msgid "JPEG progressive encoding" msgstr "Codificação progressiva JPEG" msgid "TIFF lossless Compress" msgstr "Compressão TIFF sem perdas" msgid "Embed EXIF data in output" msgstr "Embeber dados EXIF na saída" msgid "Create ID file " msgstr "Criar arquivo ID" msgid "No" msgstr "Não" msgid "Also" msgstr "Também" msgid "Only" msgstr "Somente" msgid "Save image defaults " msgstr "Padrões para salvar imagens" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Salva parâmetros de manipulação de imagem atuais como padrão.\n" "Os parâmetros de saída nesta janela são sempre salvos." msgid "Never again" msgstr "Nunca mais" msgid "Always" msgstr "Sempre" msgid "Just this once" msgstr "Somente esta vez" msgid "Remember output path" msgstr "Lembrar o caminho de saída" msgid "Overwrite existing files without asking" msgstr "Sobrescrever arquivos existentes sem perguntar" msgid "Tag" msgstr "Tag" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Fabricante da câmera" msgid "Camera model" msgstr "Modelo da câmera" msgid "Timestamp" msgstr "Registro de data" msgid "Shutter time" msgstr "Tempo do disparador" msgid "Aperture" msgstr "Abertura" msgid "ISO speed" msgstr "Velocidade ISO" msgid "35mm focal length" msgstr "Distância focal 35mm" msgid "Flash" msgstr "Flash" msgid "White balance" msgstr "Balanço de branco" #, c-format msgid "EXIF data read by %s" msgstr "dados EXIF lidos por %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Aviso: dados EXIF não serão enviados para a saída" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Valores de ponto:" msgid "Exposure compensation in EV" msgstr "Compensação de exposição em EV" msgid "Auto adjust exposure" msgstr "Auto ajusta exposição" msgid "Reset exposure to default" msgstr "Redefine a exposição para o padrão" msgid "Grayscale" msgstr "Escala de cinza" #. Lens correction page msgid "Lens correction" msgstr "Correção das lentes" msgid "Base curve" msgstr "Curva base" msgid "Color management" msgstr "Gerenciamento de cores" msgid "Correct luminosity, saturation" msgstr "Luminosidade correta, saturação" msgid "Lightness Adjustments" msgstr "Ajustes de luminosidade" msgid "Crop and rotate" msgstr "Corta e rotaciona" msgid "Save" msgstr "Salvar" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Porcentagem de zoom:" msgid "Options" msgstr "Opções" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Deletar" msgid "Send image to _Gimp" msgstr "Manda a imagem para o _Gimp" msgid "Fatal error setting C locale" msgstr "Erro fatal definindo o locale C" #, c-format msgid "Curve version is not supported" msgstr "Versão de curva não suportada" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Arquivo de curva Nikon inválida '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Erro abrindo arquivo de Curva '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Erro abrindo arquivo '%s': %s" msgid "File exists" msgstr "O arquivo existe" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "O arquivo '%s' já existe.\n" "Sobrescrever?" msgid "Error creating temporary file." msgstr "Erro criando arquivo temporário." msgid "Error activating Gimp." msgstr "Erro ativando o Gimp" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Balanço de branco da câmera não disponível, revertendo para o balanço de " "branco padrão.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "as opções --temperature e --green substituem a opção --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' não é uma configuração de balanço de branco válida." msgid "Remote URI is not supported" msgstr "URI remota não é suportada" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "erro de quadro negro: %s não é um arquivo cru\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "erro carregando quadro negro '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "O quadro negro '%s' é incompatível com a imagem principal" #, c-format msgid "using darkframe '%s'\n" msgstr "usando quadro negro '%s'\n" msgid "Error reading NEF curve" msgstr "Erro lendo curva NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "Não é possível encolher de %d para %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Erro criando arquivo '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Erro criando arquivo" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "O nome do arquivo de imagem não pode ser o mesmo que o arquivo ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Falhou ao embutir perfil de saída '%s' em '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Profundidade de bit '%d não suportada foi ignorada" #, c-format msgid "Unknown file type %d." msgstr "Tipo de arquivo %d desconhecido" #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Luz do dia" #. Probably same as above: msgid "Direct sunlight" msgstr "Luz do sol direta" msgid "Cloudy" msgstr "Nublado" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Sombra" msgid "Incandescent" msgstr "Incandescente" msgid "Incandescent warm" msgstr "Incandescente quente" #. Same as "Incandescent": msgid "Tungsten" msgstr "Tungstênio" msgid "Fluorescent" msgstr "Fluorescente" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluorescente alta" msgid "Cool white fluorescent" msgstr "Fluorescente branca fria" msgid "Warm white fluorescent" msgstr "Fluorescente branca quente" msgid "Daylight fluorescent" msgstr "Fluorescente luz do dia" msgid "Neutral fluorescent" msgstr "Fluorescente neutra" msgid "White fluorescent" msgstr "Fluorescente branco" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Fluorescente de vapor de sódio" msgid "Day white fluorescent" msgstr "Fluorescente branca de dia" msgid "High temp. mercury-vapor fluorescent" msgstr "Fluorescente de vapor de mercúrio de alta temperatura" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flash (modo auto)" msgid "Evening sun" msgstr "Sol da tarde" msgid "Underwater" msgstr "Subaquática" msgid "Black & white" msgstr "Preto & branco" msgid "Manual WB" msgstr "WB manual" msgid "Camera WB" msgstr "WB da câmera" msgid "Auto WB" msgstr "Auto WB" ufraw-0.19.2/po/pl.po0000664000175000017500000012727712123734456011272 00000000000000# Polish translation for UFRaw # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Tomasz Golinski tomaszg@alpha.uwb.edu.pl, 2007-2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-04 23:12+0100\n" "Last-Translator: Tomasz Golinski \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Otwiera okno nawigacji" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Wartość %.*f za duża, zmniejszono do %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Wartość %.*f za maÅ‚a, zwiÄ™kszono do %.*f." msgid "No input file, nothing to do." msgstr "Brak pliku wejÅ›ciowego, nic do roboty." #, c-format msgid "Loaded %s %s" msgstr "Wczytano %s %s" #, c-format msgid "Saved %s %s" msgstr "Zapisano %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "t" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: nadpisać '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "opcja --silent dziaÅ‚a tylko w trybie batch" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "opcja --silent dziaÅ‚a tylko w trybie batch" msgid "Raw images" msgstr "ZdjÄ™cia RAW" msgid "UFRaw ID files" msgstr "Pliki UFRaw ID" msgid "Raw jpeg's" msgstr "Jpegi RAW " msgid "Raw tiff's" msgstr "Tiffy RAW" msgid "All files" msgstr "Wszystkie pliki" msgid "Show hidden files" msgstr "Pokaż ukryte pliki" msgid "Manual curve" msgstr "Krzywa manualna" msgid "Linear curve" msgstr "Krzywa liniowa" msgid "Custom curve" msgstr "Krzywa użytkownika" msgid "Camera curve" msgstr "Krzywa z aparatu" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Brak profilu" msgid "Color matrix" msgstr "Macierz kolorów" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (dołączony)" msgid "System default" msgstr "DomyÅ›lny systemowy" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "PróbujÄ™ skonwertować .ufrawrc z wersji UFRaw-0.4 lub wczeÅ›niejszej" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "PróbujÄ™ skonwertować .ufrawrc z wersji UFRaw-0.6 lub wczeÅ›niejszej" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "Wersja UFRaw w pliku .ufrawrc nie jest obsÅ‚ugiwana" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Za dużo wÄ™złów krzywej '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Za dużo poprawek jasnoÅ›ci w pliku ID, zignorowano\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Plik ID %s nie wydaje siÄ™ być poprawnym plikiem\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Nie mogÄ™ odczytać pliku ID %s\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Błąd tworzenia pliku '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Błąd przetwarzania '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Nie mogÄ™ zapisać pliku %s\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "nie można utworzyć pliku ID (--create-id) ze standardowym wyjÅ›ciem" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Unidentified Flying Raw konwerter zdjęć z aparatów cyfrowych\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "SkÅ‚adnia: ufraw [ opcje ... ] [ pliki-raw ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opcje ... ] [ pliki-raw ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opcje ... ] [ domyÅ›lny-katalog ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "DomyÅ›lnie 'ufraw' wyÅ›wietla okno podglÄ…du dla każdego pliku raw " "umożliwiajÄ…c\n" "użytkownikowi dopasowanie parametrów zdjÄ™cia przez zapisaniem. Jeżeli nie " "podano\n" "plików RAW w linii poleceÅ„, UFRaw wyÅ›wietli okno wyboru pliku. Aby " "przetwarzać\n" "zdjÄ™cia bez pytaÅ„ (i bez podglÄ…du) proszÄ™ użyć 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Plikami wejÅ›ciowymi mogÄ… być albo pliki RAW albo pliki ID ufrawa. Pliki ID\n" "zawierajÄ… nazwÄ™ pliku RAW i parametry obróbki zdjÄ™cia.\n" "Można także użyć pliku ID z opcjÄ…:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-file Zastosuj parametry z pliku ID do innych plików RAW.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "PozostaÅ‚e opcje podzielone sÄ… na dwie grupy.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Opcje zwiÄ…zane z parametrami manipulacjÄ… zdjÄ™ciem:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Ustawienie balansu bieli.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Temperatura koloru w kelwinach.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN Normalizacja zielonego kanaÅ‚u.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Typ krzywej bazowej. CURVE może być dowlnÄ…\n" " krzywÄ…, która byÅ‚a uprzednio zaÅ‚adowana w GUI.\n" " (domyÅ›lna jest krzywa z aparatu, jeżeli taka " "istnieje,\n" " liniowa w przeciwnym wypadku).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=plik\n" " Użyj krzywÄ… bazowÄ… z podanego pliku.\n" " Anuluje opcjÄ™ --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Typ krzywej luminancji. CURVE może być dowlnÄ…\n" " krzywÄ…, która byÅ‚a uprzednio zaÅ‚adowana w GUI.\n" " (domyÅ›lna jest krzywa liniowa).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file Użyj krzywÄ… luminancji z podanego pliku.\n" " Anuluje opcjÄ™ --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Przywróć detale dla ujemnych korekt EV.\n" " 'clip' nie przywraca niczego - brak artefaktów.\n" " 'lch' przywraca w przestrzeni LCH - miÄ™kkie detale.\n" " 'hsv' przywraca w przestrzni HSV - ostre detale.\n" " (domyÅ›lnie lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Ucinanie Å›wiateÅ‚ dla dodatnich korekt EV.\n" " 'digital' - liniowa charakterystyka cyfrowego " "sensora.\n" " 'film' - emuluje miÄ™kkÄ… charakterystykÄ™ kliszy. " "(domyÅ›lnie digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Korekta gamma krzywej bazowej (domyÅ›lnie 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY Liniowość krzywej bazowej (domyÅ›lnie 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Ustawienie kontrastu (domyÅ›lnie 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Korekta satuacji (domyÅ›lnie 1.0, 0 odpowiada plikowi " "czarno-biaÅ‚emu).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=THRESHOLD\n" " Próg odszumiania falkowego (domyÅ›lnie 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=WARTOSC\n" " CzuÅ‚ość wykrywania i usuwania hot pikseli (domyÅ›lnie " "0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " Automatyczna korekta ekspozycji lub korekta ekspozycji " "w EV (domyÅ›lnie 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " Automatyczne dopasowanie punktu czerni lub wartość " "punktu czerni (domyÅ›lnie 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Stosowany algorytm interpolacji (domyÅ›lnie ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Zastosuj wygÅ‚adzanie kolorów.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algorytm konwersji do skali szaroÅ›ci (domyÅ›lnie " "none).\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=RED,GREEN,BLUE\n" " WartoÅ›ci miksera do skali szaroÅ›ci (domyÅ›lnie 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Opcje zwiÄ…zane z plikiem wynikowym:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FACTOR Zmniejszenie zdjÄ™cia FACTOR razy (domyÅ›lnie 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=SIZE Zmniejsz max(szerokość,wysokość) do SIZE.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Format pliku wyjÅ›ciowego (domyÅ›lnie ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Ilość blitów pliku wyjÅ›ciowego (domyÅ›lnie 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Utwórz plik ID nie|także|tylko (domyÅ›lnie no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE Kompresja JPEG (0-100, domyslnie 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Dołącz EXIF do wyjÅ›ciowego pliku (domyÅ›lnie - " "dołącz).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Włącz [wyłącz] kompresjÄ™ zip pliku TIFF (domyÅ›lnie " "nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Zapisz zdjÄ™cie dołączone do pliku RAW\n" " zamiast konwertować RAW.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|KÄ„T|no Obrócić zdjÄ™cie zgodnie z danymi aparatu, o KÄ„T " "stopni zgodnie z ruchem zegara, albo nie obracać\n" " (domyÅ›lnie zgodnie z danymi aparatu).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIKSELE\n" " Wykadruj wynikowe zdjÄ™cie o podanÄ… ilość pikseli " "wzglÄ™dem\n" " pliku raw po obróceniu, ale przed skalowaniem.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Wyłącz korekcjÄ™ obiektywu lub próbuj zastosować\n" " korekcjÄ™ automatycznie wykrywajÄ…c obiektyw (domyÅ›lnie " "wyłączone).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PATH Åšcieżka pliku wyjÅ›ciowego (domyÅ›lnie - Å›cieżka pliku " "wejÅ›ciowego).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FILE Nazwa pliku wyjÅ›ciowego, użyj '-' by zapisać do " "standardowego wyjÅ›cia.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=FILE Użyj FILE do usuniÄ™cia ciemnej klatki.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Nadpisz istniejÄ…ce pliki bez pytania (domyÅ›lnie nie).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window WymuÅ› maksymalizacjÄ™ okna.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Nie wyÅ›wietlaj żadnych komunikatów w trakcie " "konwersji.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw najpierw odczytuje ustawienia z pliku $HOME/.ufrawrc.\n" "NastÄ™pnie, jeżeli podany byÅ‚ plik ID, odczytywane sÄ… ustawienia w nim " "zawarte.\n" "NastÄ™pnie z opcji --conf sÄ… uwzglÄ™dniane ignorujÄ…c nazwy plików wejÅ›cia/" "wyjÅ›cia z pliku ID.\n" "Na koniec, opcje z linii poleceÅ„ sÄ… uwzglÄ™dniane. W trybie wsadowym (batch) " "druga grupa \n" "opcji NIE jest wczytywana z pliku z zasobami.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Na koniec, --version wyÅ›wietla numer wersji i opcje kompilacji ufrawa, a --" "help wyÅ›wietla ten ekran.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' nie jest poprawnÄ… wartoÅ›ciÄ… dla opcji --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw zostaÅ‚ skompilowany bez obsÅ‚ugi ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch jest przestarzałą opcjÄ…. ProszÄ™ używać ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt zwróciÅ‚ znak o kodzie 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" "błąd wczytywania krzywej z pliku %s, za dużo skonfigurowanych krzywych " "bazowych." #, c-format msgid "failed to load curve from %s" msgstr "błąd wczytywania krzywej z pliku %s." #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' nie jest poprawnÄ… nazwÄ… krzywej bazowej." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "" "błąd wczytywania krzywej z pliku %s, za dużo skonfigurowanych krzywych." #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' nie jest poprawnÄ… nazwÄ… krzywej." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' nie jest poprawnym ustawieniem interpolacji." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' nie jest poprawnÄ… opcjÄ… trybu skali szaroÅ›ci." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' nie jest poprawnÄ… opcjÄ… dla '--grayscale-mixer'." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' nie jest poprawnym ustawieniem przywracania." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' nie jest poprawnym ustawieniem ucinania." msgid "you can not specify both --shrink and --size" msgstr "nie można jednoczeÅ›nie użyć --shrink i --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' nie jest poprawnÄ… iloÅ›ciÄ… bitów." #, c-format msgid "Output type '%s' is deprecated" msgstr "Typ pliku wyjÅ›ciowego '%s' jest niepoprawny." msgid "ufraw was build without TIFF support." msgstr "ufraw zostaÅ‚ skompilowany bez obsÅ‚ugi TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw zostaÅ‚ skompilowany bez obsÅ‚ugi JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw zostaÅ‚ skompilowany bez obsÅ‚ugi PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' nie jest poprawnym typem pliku wyjÅ›ciowego." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "" "'%s' nie jest poprawnym typem pliku wyjÅ›ciowego dla dołączonego zdjÄ™cia." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' nie jest poprawnÄ… iloÅ›ciÄ… bitów dla dołączonego zdjÄ™cia." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' nie jest poprawnÄ… opcjÄ… obrotu." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' nie jest poprawnÄ… opcjÄ… tworzenia plików ID." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' nie jest poprawnÄ… Å›cieżkÄ…." msgid "cannot output more than one file to the same output" msgstr "nie można utworzyć wiÄ™cej niż jednego pliku z tÄ… samÄ… nazwÄ…." #, c-format msgid "Raw file '%s' missing." msgstr "Plik RAW '%s' nie istnieje." msgid "Delete raw file" msgstr "UsuÅ„ plik RAW" msgid "_Delete selected" msgstr "_UsuÅ„ zaznaczone" msgid "Delete _All" msgstr "UsuÅ„ _Wszystkie" msgid "Select files to delete" msgstr "Wybierz pliki do usuniÄ™cia" #, c-format msgid "Error reading directory '%s'." msgstr "Błąd odczytu katalogu '%s'." #, c-format msgid "Error deleting '%s'" msgstr "BÅ‚ad usuwania '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Odczyt dołączonego zdjÄ™cia wymaga biblioteki libjpeg." msgid "No embedded image found" msgstr "Nie znaleziono dołączonego zdjÄ™cia." #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Oryginalny rozmiar (%d) jest mniejszy niż podany rozmiar (%d)." #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "Niezgodność miniatury ppm, wysokość %d, szerokość %d, podczas gdy bufor %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Wysokość miniatury JPEG %d inna niż oczekiwana %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Szerokość miniatury JPEG %d inna niż oczekiwana %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Błąd tworzenia pliku '%s'.\n" "%s" msgid "No embedded image read" msgstr "Nie odczytano dołączonego zdjÄ™cia." #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Błąd tworzenia pliku '%s'. Nieznany typ pliku %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Błąd tworzenia pliku '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Błąd zapisu '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "NieobsÅ‚ugiwany typ pliku wyjÅ›ciowego (%d) dla dołączonego zdjÄ™cia" #, c-format msgid "Loading raw file '%s'" msgstr "Wczytywanie pliku RAW '%s'" msgid "Can't allocate new image." msgstr "Nie mogÄ™ utworzyć nowego obrazu." #. Create the "background" layer to hold the image... msgid "Background" msgstr "TÅ‚o" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Błąd osadzenia profilu wyjÅ›ciowego '%s' w pliku." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "DÅ‚ugość bufora EXIF %d za duża, zignorowano." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Firma:\t\t%s\n" "Model:\t\t%s%s\n" "Bagnet:\t\t%s\n" "Crop:\t\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Firma:\t\t\t\t%s\n" "Model:\t\t\t\t%s\n" "Zakres ogniskowych:\t%s\n" "PrzesÅ‚ona:\t\t\t%s\n" "Crop:\t\t\t\t%.1f\n" "Typ:\t\t\t\t\t%s\n" "Bagnet:\t\t\t\t%s" msgid "Focal" msgstr "Ogniskowa" msgid "Focal length" msgstr "Ogniskowa" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "PrzesÅ‚ona" msgid "Distance" msgstr "OdlegÅ‚ość" msgid "Distance to subject in meters" msgstr "OdlegÅ‚ość przedmiotowa w metrach" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "Model matematyczny aberracji chromatycznej" msgid "Parameters" msgstr "Parametry" msgid "Optical vignetting mathematical model" msgstr "Model matematyczny winietowania" msgid "Lens distortion mathematical model" msgstr "Model matematyczny dystorsji" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometria obiektywu" msgid "The geometry of the lens used to make the shot" msgstr "Geometria obiektywu użytego do zrobienia zdjÄ™cia" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Docelowa geometria" msgid "The target geometry for output image" msgstr "Docelowa geometria zdjÄ™cia wynikowego" msgid "Camera" msgstr "Aparat" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Szukaj aparatu używajÄ…c wzorca\n" "Format: [Producent, ][Model]" msgid "Choose camera from complete list" msgstr "Wybierz aparat z peÅ‚nej listy" msgid "Reset all lens correction settings" msgstr "Zresetuj wszystkie ustawienia korekcji obiektywu" #. Lens selector msgid "Lens" msgstr "Obiektyw" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Szukaj obiektywu używajÄ…c wzorca\n" "Format: [Producent, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Wybierz obiektyw z listy dostÄ™pnych możliwoÅ›ci" msgid "Automatically find lens and set lens corrections" msgstr "Automatycznie znajdź obiektyw i ustaw korekcjÄ™" msgid "Lateral chromatic aberration" msgstr "Boczna aberracja chromatyczna" msgid "Optical vignetting" msgstr "Winietowanie" msgid "Lens distortion" msgstr "Dystorsja" msgid "Lens geometry" msgstr "Geometria obiektywu" msgid "Raw histogram with conversion curves" msgstr "Histogram RAW z krzywymi konwersji" msgid "Live histogram" msgstr "Histogram live" #. No darkframe file msgid "None" msgstr "Brak" msgid "Lightness" msgstr "Jasność" msgid "Luminance" msgstr "Luminancja" msgid "Value" msgstr "Wartość" msgid "Channel Mixer" msgstr "Mikser kanałów" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Brak miejsca na nowe krzywe." msgid "Load curve" msgstr "Wczytaj krzywÄ…" msgid "All curve formats" msgstr "Wszystkie formaty krzywych" msgid "UFRaw curve format" msgstr "Format krzywej UFRaw" msgid "Nikon curve format" msgstr "Format krzywej Nikona" msgid "Save curve" msgstr "Zapisz krzywÄ…" msgid "No more room for new profiles." msgstr "Brak miejsca na nowe profile." msgid "Load color profile" msgstr "Wczytaj profil kolorów" msgid "Color Profiles" msgstr "Profile kolorów" msgid "Luminosity (Y value)" msgstr "Luminancja (wartość Y)" msgid "Adams' zone" msgstr "Strefy Adamsa" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "rozmiar %dx%d, powiÄ™kszenie %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "rozmiar %dx%d, skala 1/%d" msgid "Wavelet denoising" msgstr "Odszumianie falkowe" msgid "Despeckling" msgstr "Odplamianie" msgid "Interpolating" msgstr "Interpolacja" msgid "Rendering" msgstr "Renderowanie" msgid "Loading preview" msgstr "Wczytywanie podglÄ…du" msgid "Saving image" msgstr "Zapisywanie zdjÄ™cia" #, c-format msgid "Black point: %0.3lf" msgstr "Punkt czerni: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Brak miejsca na nowe poprawki jasnoÅ›ci." msgid "Aspect ratio locked, click to unlock" msgstr "Stosunek boków zablokowany, kliknij by odblokować." msgid "Aspect ratio unlocked, click to lock" msgstr "Stosunek boków odblokowany, kliknij by zablokować." msgid "Load dark frame" msgstr "Wczytaj ciemnÄ… klatkÄ™" msgid "clip" msgstr "utnij" msgid "restore in LCH space for soft details" msgstr "przywróć miÄ™kkie detale w przestrzeni LCH" msgid "restore in HSV space for sharp details" msgstr "przywróć ostre detale w przestrzeni HSV" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Przywróć detale dla ujemnych korekt EV\n" "Wybrana opcja: %s" msgid "digital linear" msgstr "cyfrowo liniowo" msgid "soft film like" msgstr "miÄ™kko kliszowo" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Ucinanie Å›wiateÅ‚ dla dodatnich korekt EV\n" "Wybrana opcja: %s" #, c-format msgid "Filename: %s%s" msgstr "Zapisz pod nazwÄ… %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Utwórz także plik ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "utwórz tylko plik ID" msgid "UFRaw options" msgstr "Opcje UFRaw" msgid "Settings" msgstr "Ustawienia" msgid "Input color profiles" msgstr "WejÅ›ciowe profile kolorów" msgid "Output color profiles" msgstr "WyjÅ›ciowe profile kolorów" msgid "Display color profiles" msgstr "Profile kolorów monitora" msgid "Base Curves" msgstr "Krzywe bazowe" msgid "Luminosity Curves" msgstr "Krzywe luminancji" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Polecenie 'gimp-remote' " msgid "Reset command to default" msgstr "Ustaw polecenie domyÅ›lne" msgid "Blink Over/Underexposure Indicators" msgstr "Mruganie wskaźników prze/niedoÅ›wietlenia" msgid "Configuration" msgstr "Konfiguracja" msgid "Save configuration" msgstr "Zapisz konfiguracjÄ™ " msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Zapisz konfiguracjÄ™ do pliku ustawieÅ„ ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "O UFRaw" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) - " "Niezidentyfikowany RAW LatajÄ…cy\n" "jest programem do odczytu i korekty zdjęć w formacie RAW z aparatów " "cyfrowych.\n" "UFRaw opiera siÄ™ na Digital Camera Raw (DCRaw)\n" "jako narzÄ™dziu do dekodowania RAWów.\n" "\n" "Autor: Udi Fuchs\n" "Strona domowa: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Liniowy" msgid "Logarithmic" msgstr "Logarytmiczny" msgid "Hot pixels: " msgstr "Hot piksele:" msgid "mark" msgstr "zaznacz" msgid "Hot pixel sensitivity" msgstr "CzuÅ‚ość hot pikseli" msgid "Reset hot pixel sensitivity" msgstr "Zresetuj czuÅ‚ość hot pikseli" msgid "RGB histogram" msgstr "Histogram RGB" msgid "R+G+B histogram" msgstr "Histogram R+G+B" msgid "Luminosity histogram" msgstr "Histogram luminancji" msgid "Value (maximum) histogram" msgstr "Histogram jasnoÅ›ci (maksimum)" msgid "Saturation histogram" msgstr "Histogram jasnoÅ›ci" msgid "Average:" msgstr "Åšrednia:" msgid "Std. deviation:" msgstr "Std. odchylenie:" msgid "Overexposed:" msgstr "PrzeÅ›wietlone:" msgid "Indicate" msgstr "Pokaż" msgid "Underexposed:" msgstr "NiedoÅ›wietlone:" msgid "White Balance" msgstr "Balans bieli" msgid "Cannot use camera white balance." msgstr "Nie mogÄ™ użyć balansu bieli aparatu." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Brak ustawieÅ„ balansu bieli dla tego aparatu.\n" "Zajrzyj na stronÄ™ UFRaw, żeby siÄ™ dowiedzieć jak uzyskać wsparcie\n" "dla tego aparatu." msgid "Reset white balance to initial value" msgstr "Ustaw poczÄ…tkowÄ… wartość balansu bieli" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Temperatura barwowa balansu bieli" msgid "Green" msgstr "Zielony" msgid "Green component" msgstr "Zielona skÅ‚adowa" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Wybierz obszar na podglÄ…dzie zdjÄ™cia by zastosować punktowy balans bieli" msgid "Chan. multipliers:" msgstr "Mnożniki kanałów:" msgid "Bayer pattern interpolation" msgstr "Interpolacja wzorca Bayera" msgid "VNG four color interpolation" msgstr "Interpolacja VNG (czterokolorowa)" msgid "Bilinear interpolation" msgstr "Interpolacja dwuliniowa" msgid "AHD interpolation" msgstr "Interpolacja AHD" msgid "VNG interpolation" msgstr "Interpolacja VNG" msgid "PPG interpolation" msgstr "Interpolacja PPG" msgid "No interpolation" msgstr "Bez interpolacji" msgid "No Bayer pattern" msgstr "Brak wzorca Bayera" msgid "Apply color smoothing" msgstr "Zastosuj wygÅ‚adzanie kolorów" msgid "Denoise" msgstr "Odszumianie" msgid "Threshold for wavelet denoising" msgstr "Próg odszumiania falkowego" msgid "Reset denoise threshold to default" msgstr "Ustaw domyÅ›lny próg odszumiania" msgid "Dark Frame:" msgstr "Ciemna klatka:" msgid "Reset dark frame" msgstr "Zresetuj ciemnÄ… klatkÄ™" msgid "Reset adjustment" msgstr "Zresetuj poprawkÄ™" msgid "Select a spot on the preview image to choose hue" msgstr "Wybierz obszar na podglÄ…dzie zdjÄ™cia z potrzebnym odcieniem koloru" msgid "Remove adjustment" msgstr "UsuÅ„ poprawkÄ™" msgid "Grayscale Mode:" msgstr "Tryb skali szaroÅ›ci:" msgid "Reset channel mixer" msgstr "Zresetuj mikser kanałów" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Odplamianie jest głównie przydatny przy połączeniu wysokiego ISO z dużym " "mnożnikiem kanaÅ‚u: gdy jeden kanaÅ‚ ma bardzo zÅ‚y stosunek sygnaÅ‚u do szumu. " "Spróbuj ustawić rozmiar okna, zanik koloru i ilość przejść na 50,0,5 dla " "tego kanaÅ‚u. JeÅ›li kanaÅ‚ zawiera tylko szum, spróbuj 1,0.6,1.\n" "Odplamianie jest wyłączone, gdy rozmiar okna lub ilość przejść wynosi zero. " "W przypadku, gdy odplamianie jest włączone, rozmiar okna nie może być " "mniejszy niż ilość przejść." msgid "Update channel parameters together" msgstr "Zmieniaj parametry kanałów razem" msgid "Reset despeckle parameters" msgstr "Zresetuj parametry odplamiania" #. channel to view msgid "View channel:" msgstr "Zobacz kanaÅ‚:" #. Parameters msgid "Window size:" msgstr "Rozmiar okna:" msgid "Color decay:" msgstr "Zanik koloru:" msgid "Passes:" msgstr "PrzejÅ›cia:" msgid "Load base curve" msgstr "Wczytaj krzywÄ… bazowÄ…" msgid "Save base curve" msgstr "Zapisz krzywÄ… bazowÄ…" msgid "Reset base curve to default" msgstr "Ustaw domyÅ›lnÄ… krzywÄ… bazowÄ…" msgid "Input ICC profile" msgstr "WejÅ›ciowy profil ICC" msgid "Output ICC profile" msgstr "WyjÅ›ciowy profil ICC" msgid "Display ICC profile" msgstr "Profil ICC monitora" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Korekcja gamma dla profilu wejÅ›ciowego" msgid "Reset gamma to default" msgstr "Ustaw domyÅ›lnÄ… gammÄ™" msgid "Linearity" msgstr "Liniowość" msgid "Linear part of the gamma correction" msgstr "Liniowa część korekcji gamma" msgid "Reset linearity to default" msgstr "Ustaw domyÅ›lnÄ… liniowość" msgid "Output intent" msgstr "Sposób konwersji" msgid "Perceptual" msgstr "Wizualny" msgid "Relative colorimetric" msgstr "Kolorymetryczny wzglÄ™dny" msgid "Saturation" msgstr "Nasycenie" msgid "Absolute colorimetric" msgstr "Kolorymetryczny absolutny" msgid "Output bit depth" msgstr "Ilość bitów pliku wyjÅ›ciowego" msgid "Display intent" msgstr "Sposób konwersji" msgid "Disable soft proofing" msgstr "Wyłącz programowy proof" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Globalna korekta kontrastu" msgid "Reset global contrast to default" msgstr "Ustaw domyÅ›lny kontrast" msgid "Reset saturation to default" msgstr "Ustaw domyÅ›lnÄ… saturacjÄ™" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automatycznie dopasuj krzywÄ…\n" "(SpÅ‚aszcz histogram)" msgid "Reset curve to default" msgstr "Ustaw domyÅ›lnÄ… krzywÄ…" msgid "Reset black-point to default" msgstr "Ustaw domyÅ›lny punkt czerni" msgid "Auto adjust black-point" msgstr "Automatycznie dopasuj punkt czerni" #. Start of Crop controls msgid "Left:" msgstr "Lewo:" msgid "Top:" msgstr "Góra:" msgid "Right:" msgstr "Prawo:" msgid "Bottom:" msgstr "Dół:" msgid "Auto fit crop area" msgstr "Automatycznie dopasuj kadr" #, fuzzy msgid "Reset the crop area" msgstr "Zresetuj kadr" msgid "Aspect ratio:" msgstr "Stosunek boków" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Stosunek boków kadru.\n" "Może być wprowadzony jako liczba dziesiÄ™tna (1.273)\n" "lub jako stosunek dwóch liczb (14:11)" msgid "Shrink factor" msgstr "Zmniejszenie" msgid "Width" msgstr "Szer." msgid "Height" msgstr "Wys." msgid "Orientation:" msgstr "Orientacja:" msgid "Rotation" msgstr "Obrót" msgid "Rotation angle" msgstr "KÄ…t obrotu" msgid "Reset rotation angle" msgstr "Zresetuj kÄ…t obrotu" #. drawLines toggle button msgid "Grid lines" msgstr "Linie siatki" msgid "Number of grid lines to overlay in the crop area" msgstr "Ilość linii uÅ‚atwiajÄ…cych kadrowanie do wyÅ›wietlenia na zdjÄ™ciu" msgid "Path" msgstr "Åšcieżka" msgid "Select output path" msgstr "Wybierz Å›cieżkÄ™ wyjÅ›cia" msgid "Filename" msgstr "Nazwa pliku" msgid "JPEG compression level" msgstr "StopieÅ„ kompresji JPEG" msgid "JPEG progressive encoding" msgstr "Kodowanie progresywne JPEG" msgid "TIFF lossless Compress" msgstr "Bezstratna kompresja TIFF" msgid "Embed EXIF data in output" msgstr "Dołącz dane EXIF do pliku wyjÅ›ciowego" msgid "Create ID file " msgstr "Utwórz plik ID" msgid "No" msgstr "Nie" msgid "Also" msgstr "Także" msgid "Only" msgstr "Tylko" msgid "Save image defaults " msgstr "Zapis ustawieÅ„ domyÅ›lnych " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Zapisz bieżące ustawienia parametrów zdjÄ™cia jako domyÅ›lne.\n" "Opcje z tego okna sÄ… zawsze zapisywane." msgid "Never again" msgstr "Nigdy" msgid "Always" msgstr "Zawsze" msgid "Just this once" msgstr "Tylko tym razem" msgid "Remember output path" msgstr "ZapamiÄ™taj wyjÅ›ciowÄ… Å›cieżkÄ™" msgid "Overwrite existing files without asking" msgstr "Nadpisz istniejÄ…ce pliki bez pytania" msgid "Tag" msgstr "Tag" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Producent aparatu" msgid "Camera model" msgstr "Model aparatu" msgid "Timestamp" msgstr "Data" msgid "Shutter time" msgstr "Czas" msgid "Aperture" msgstr "PrzesÅ‚ona" msgid "ISO speed" msgstr "CzuÅ‚ość ISO" msgid "35mm focal length" msgstr "Odpowiednik ogniskowej na 35mm" msgid "Flash" msgstr "Lampa bÅ‚yskowa" msgid "White balance" msgstr "Balans bieli" #, c-format msgid "EXIF data read by %s" msgstr "Dane EXIF odczytane przez %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Uwaga: dane EXIF nie zostanÄ… zapisane" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "WartoÅ›ci punktowe" msgid "Exposure compensation in EV" msgstr "Korekta ekspozycji w EV" msgid "Auto adjust exposure" msgstr "Autodopasowanie ekspozycji" msgid "Reset exposure to default" msgstr "Ustawienie domyÅ›lnej korekty ekspozycji" msgid "Grayscale" msgstr "Skala szaroÅ›ci" #. Lens correction page msgid "Lens correction" msgstr "Korekcja obiektywu" msgid "Base curve" msgstr "Krzywa bazowa" msgid "Color management" msgstr "ZarzÄ…dzanie kolorem" msgid "Correct luminosity, saturation" msgstr "Korekta luminancji, saturacji" msgid "Lightness Adjustments" msgstr "Poprawki jasnoÅ›ci" msgid "Crop and rotate" msgstr "Kadrowanie i obrót" msgid "Save" msgstr "Zapisz" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Procent powiÄ™kszenia" msgid "Options" msgstr "Opcje" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_UsuÅ„" msgid "Send image to _Gimp" msgstr "WyÅ›lij zdjÄ™cie do _Gimpa" msgid "Fatal error setting C locale" msgstr "Błąd krytyczny ustawienia C locale" #, c-format msgid "Curve version is not supported" msgstr "NiebsÅ‚ugiwana wersja krzywej" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Niepoprawna plik krzywej Nikona '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "BÅ‚ad odczytu pliku krzywej '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "BÅ‚ad odczytu pliku '%s': %s" msgid "File exists" msgstr "Plik istnieje" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Plik '%s' istnieje.\n" "Nadpisać?" msgid "Error creating temporary file." msgstr "Błąd tworzenia tymczasowego pliku." msgid "Error activating Gimp." msgstr "Błąd uruchomienia Gimpa" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Nie mogÄ™ użyć balansu bieli aparatu, stosujÄ™ automatyczny balans bieli.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "opcje --temperature i --green anulujÄ… opcjÄ™ --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' nie jest poprawnym ustawieniem balansu bieli." msgid "Remote URI is not supported" msgstr "Zdalny URI nie jest obsÅ‚ugiwany" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "błąd ciemnej klatki: %s nie jest plikiem RAW\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "błąd wczytywania ciemnej klatki '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Ciemna klatka '%s' jest niekompatybilna z głównym zdjÄ™ciem" #, c-format msgid "using darkframe '%s'\n" msgstr "używam ciemnej klatki '%s'\n" msgid "Error reading NEF curve" msgstr "Błąd odczytu krzywej NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "Nie mogÄ™ zmniejszyć z %d do %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Błąd tworzenia pliku '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Błąd tworzenia pliku." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Nazwa pliku zdjÄ™cia nie może być taka sama jak pliku ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Nie udaÅ‚o siÄ™ dołączyć profilu wyjÅ›ciowego '%s' w '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Niepoprawna ilość bitów '%d' zignorowana." #, c-format msgid "Unknown file type %d." msgstr "Nieznany typ pliku %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Dzienne" #. Probably same as above: msgid "Direct sunlight" msgstr "BezpoÅ›rednie Å›wiatÅ‚o sÅ‚oneczne" msgid "Cloudy" msgstr "Zachmurzone" #. "Shadows" should be switched to this: msgid "Shade" msgstr "CieÅ„" msgid "Incandescent" msgstr "Å»arówka" msgid "Incandescent warm" msgstr "Å»arowe ciepÅ‚e" #. Same as "Incandescent": msgid "Tungsten" msgstr "Å»arówka" msgid "Fluorescent" msgstr "Jarzeniowe" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Jarzeniowe wysokie" msgid "Cool white fluorescent" msgstr "ChÅ‚odna biaÅ‚a jarzeniówka" msgid "Warm white fluorescent" msgstr "CiepÅ‚e biaÅ‚e jarzeniowe" msgid "Daylight fluorescent" msgstr "Dzienne jarzeniowe" msgid "Neutral fluorescent" msgstr "Neutralne jarzeniowe" msgid "White fluorescent" msgstr "BiaÅ‚e jarzeniowe" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Sodowe" msgid "Day white fluorescent" msgstr "Dzienne biaÅ‚e jarzeniowe" msgid "High temp. mercury-vapor fluorescent" msgstr "Wys.temp. rtÄ™ciowe" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "ÅšwiatÅ‚o bÅ‚yskowe (tryb auto)" msgid "Evening sun" msgstr "Wieczorne sÅ‚oÅ„ce" msgid "Underwater" msgstr "Podwodne" msgid "Black & white" msgstr "Czarno-biaÅ‚y" msgid "Manual WB" msgstr "Manualny balans bieli" msgid "Camera WB" msgstr "Balans bieli aparatu" msgid "Auto WB" msgstr "Automatyczny balans bieli" ufraw-0.19.2/po/Makefile.in.in0000664000175000017500000001767712123734456012773 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ localedir = $(libdir)/locale gnulocaledir = $(datadir)/locale gettextsrcdir = $(datadir)/glib-2.0/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge -v DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ $(POFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=./`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) --directory=$(top_srcdir) \ --add-comments --no-location --keyword=_ --keyword=N_ \ --flag=g_strdup_printf:1:c-format \ --flag=g_string_printf:2:c-format \ --flag=g_string_append_printf:2:c-format \ --flag=g_error_new:3:c-format \ --flag=g_set_error:4:c-format \ --flag=g_markup_printf_escaped:1:c-format \ --flag=g_log:3:c-format \ --flag=g_print:1:c-format \ --flag=g_printerr:1:c-format \ --flag=g_printf:1:c-format \ --flag=g_fprintf:2:c-format \ --flag=g_sprintf:2:c-format \ --flag=g_snprintf:3:c-format \ --flag=g_scanner_error:2:c-format \ --flag=g_scanner_warn:2:c-format \ --files-from=$(srcdir)/POTFILES.in \ && test ! -f $(GETTEXT_PACKAGE).po \ || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $$dir; \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ fi; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "glib"; then \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done if test "$(PACKAGE)" = "glib"; then \ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ fi check: all dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m rm -f $(GMOFILES) maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) dist distdir: update-po $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done # POTFILES is created from POTFILES.in by stripping comments, empty lines # and Intltool tags (enclosed in square brackets), and appending a full # relative path to them POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' \ -e "s/^\[.*\] +//" \ -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ufraw-0.19.2/po/nl.po0000664000175000017500000012726012123734456011260 00000000000000# Translation of UFRaw to Nederlands. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Simon Oosthoek , 2008-2011. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2011-08-12 13:37+0200\n" "Last-Translator: Simon Oosthoek\n" "Language-Team: American English \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Open het navigatorscherm" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Waarde %.*f te groot, ingekort tot %.*f" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Waarde %.*f te klein, ingekort tot %.*f" msgid "No input file, nothing to do." msgstr "Geen input file, niks te doen" #, c-format msgid "Loaded %s %s" msgstr "Ingelezen %s %s" #, c-format msgid "Saved %s %s" msgstr "Opgeslagen %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "j" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: overschrijven '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent parameter is alleen geldig in batch modus" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent parameter is alleen geldig in batch modus" msgid "Raw images" msgstr "RAW afbeeldingen" msgid "UFRaw ID files" msgstr "UFRaw ID bestanden" msgid "Raw jpeg's" msgstr "RAW jpeg's" msgid "Raw tiff's" msgstr "RAW tiff's" msgid "All files" msgstr "Alle bestanden" msgid "Show hidden files" msgstr "Laat verborgen bestanden zien" msgid "Manual curve" msgstr "Handmatige curve" msgid "Linear curve" msgstr "Lineaire curve" msgid "Custom curve" msgstr "Speciale curve" msgid "Camera curve" msgstr "Camera curve" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Geen Profiel" msgid "Color matrix" msgstr "Kleurmatrix" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (embedded)" msgid "System default" msgstr "Systeem standaardwaarde" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Proberen oudere .ufrawrc (0.4 of ouder) te converteren" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Proberen oudere .ufrawrc (0.6 of ouder) te converteren" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw versie in .ufrawrc wordt niet ondersteund" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Teveel ankerpunten voor curve '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Te veel lichtwaarde aanpassingen in het ID bestand, niet toegepast\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID bestand %s lijkt geen normale file te zijn\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Kan ID bestand %s niet lezen\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Fout bij aanmaken van bestand '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Fout bij interpreteren van '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Kan bestand %s niet schrijven\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "kan optie --create-id niet uitvoeren zonder stdout" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw converter voor digitale camera afbeeldingen.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Gebruik: ufraw [ opties ... ] [ raw-afbeeldingsbestanden ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opties ... ] [ raw-afbeeldingsbestanden ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opties ... ] [ bij-verstek-map ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Standaard laat 'ufraw' een voorbeeldvenster zien voor elke RAW afbeelding,\n" " zodat de gebruiker de parameters kan afstemmen voor het opslaan. Als er " "geen\n" "RAW afbeeldingen mee zijn gegeven vanaf de commandoregel zal UFRAW\n" "een bestandskeuze venster laten zien.\n" "Als deze interactiviteit niet gewenst is, gebruik dan 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "De invoerbestanden kunnen RAW bestanden zijn, of ufraw ID bestanden.\n" "ID bestanden bevatten de RAW bestandsnaam en de parameters om deze te " "interpreteren.\n" "Het is ook mogelijk om een ID bestand te gebruiken met de optie:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-bestand Pas de parameters in het ID-bestand toe op andere " "raw bestanden.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Verdere opties zijn onderverdeeld in twee groepen.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "" "De opties die betrekking hebben op de verandering van de afbeelding zijn:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Wit balans instelling.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Kleurtemperatuur in Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GROEN Groen kleur normalisatie.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Te gebruiken type basis toon curve. CURVE kan elke " "curve\n" " zijn die eerder in de GUI was geladen.\n" " (camera curve, indien aanwezig, anders lineair).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=bestand\n" " Gebruik basis toon curve in bestand.\n" " Heeft prioriteit boven --base-curve optie.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Te gebruiken type helderheidscurve. CURVE kan elke " "curve zijn\n" " die al eerder in de Grafische omgeving geladen is " "geweest.\n" " (standaard: linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=bestand Gebruik helderheids curve in bestand.\n" " Heeft prioriteit boven --curve optie.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Herstel details voor negatieve EV.\n" " 'clip' herstelt niets - zonder artefacten.\n" " 'lch' herstelt in LCH space - geeft zachte details.\n" " 'hsv' herstelt in HSV space - geeft scherpe details.\n" " (standaard: lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Clip highlights voor positieve EV.\n" " 'digital' lineaire digitale sensorreactie.\n" " 'film' streeft zachte filmreactie na. (standaard: " "digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Gamma instelling van de basiscurve (standaard 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEARITY Lineariteit van de basiscurve (standaard 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Contrastaanpassing (standaard 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Verzadigings aanpassing (standaard 1.0, 0 voor Z/W " "output).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=DREMPELWAARDE\n" " Wavelet ontruis drempelwaarde (standaard 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " Gevoeligheid voor waarnemen en afvlakken van hot-pixels" "(standaard 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|BELICHTING\n" " Auto belichting of belichting aanpassen met BELICHTING " "in EV (standaard: 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|ZWART\n" " Auto zwart-punt of zwart-punt waarde (standaard: 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolatie algoritme (standaard: ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Pas kleur vereffening toe\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Te gebruiken grijswaarden conversie algoritme " "(standaard: none).\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=ROOD,GROEN,BLAUW\n" " Te gebruiken grijswaarden mengverhouding (standaard: " "1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "De opties van toepassing op de uiteindelijke output zijn:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FACTOR Verklein de afbeelding met FACTOR (standaard: 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=MAAT Schaal max(hoogte, breedte) terug tot MAAT.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output bestandsformaat (standaard ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Output bit diepte per kanaal (standaard: 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " ID bestand aanmaken; nee|ook|alleen (standaard: no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=WAARDE JPEG compressie (0-100, standaard 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif Embed EXIF in output (standaard embed EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Gebruik [geen] TIFF zip (deflate) compressie " "(standaard: nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extraheer de voorbeeldafbeelding uit het raw bestand\n" " in plaats van het raw bestand te converteren.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|HOEK|no\n" " Roteer afbeelding volgens de camera's instelling, \n" " met HOEK graden of geen rotatie toepassen (standaard: " "camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Snij de output volgens de opgegeven pixel maat,\n" " toegepast op de RAW foto na rotatie, maar voor " "verkleining.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Pas geen lens-correctie toe of probeer\n" " te corrigeren door middel van autodetectie " "van de lens (standaard none)\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PAD PAD voor output bestand (gebruik standaard hetzelfde " "pad als input bestand).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=BESTAND Output bestandsnaam, gebruik '-' voor output naar " "stdout.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=BESTAND Gebruik BESTAND voor raw zwartbeeld reductie.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Overschrijf bestaande bestanden zonder vragen " "(standaard: wel vragen).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Forceer schermvullend venster.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Geef geen berichten weer tijdens batch conversie.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw leest eerst de instellingen uit configuratiebestand $HOME/.ufrawrc.\n" "Vervolgens, als een ID bestand is opgegeven, worden die instellingen " "gelezen.\n" "Daarna worden de instellingen uit de --conf optie genomen, waarbij de input/" "output\n" "bestandsnamen in het ID bestand genegeerd worden.\n" "Als laatste worden de opties van de commandoregel gezet. In batch modus\n" "worden opties uit de tweede groep NIET gelezen uit het configuratiebestand.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "De laatste opties;\n" " --version laat het versienummer en de opties voor compileren van ufraw " "zien, en\n" "--help vertoont deze boodschap en stopt.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' is geen geldige waarde voor de optie --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw is gemaakt zonder ZIP ondersteuning." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch is achterhaald. Gebruik ufraw-batch in plaats van deze optie." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt geeft character code 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "fout bij inlezen curve van %s, teveel basis curves ingesteld" #, c-format msgid "failed to load curve from %s" msgstr "fout bij inlezen curve van %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' is geen geldige basis curve naam." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "fout bij inlezen curve van %s, teveel curves ingesteld" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' is geen geldige curve naam." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' is geen geldige interpolatie optie." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' is geen geldige grijsschaal optie." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' is geen geldige grijsschaal-mixer optie." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' is geen geldige herstel optie." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' is geen geldige clip optie." msgid "you can not specify both --shrink and --size" msgstr "de opties --shrink en --size sluiten elkaar uit" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' is geen geldige bit diepte." #, c-format msgid "Output type '%s' is deprecated" msgstr "Output type '%s' is achterhaald" msgid "ufraw was build without TIFF support." msgstr "ufraw is gemaakt zonder TIFF ondersteuning." msgid "ufraw was build without JPEG support." msgstr "ufraw is gemaakt zonder JPEG ondersteuning." msgid "ufraw was build without PNG support." msgstr "ufraw is gemaakt zonder PNG ondersteuning." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' is geen geldig output type." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' is geen geldig output type voor embedded afbeeldingen." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' is geen geldige bit diepte voor embedded afbeeldingen." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' is geen geldige rotatie optie." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' is geen geldige create-id optie." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' is geen geldig pad." msgid "cannot output more than one file to the same output" msgstr "kan niet meer dan één bestand naar dezelfde output sturen" #, c-format msgid "Raw file '%s' missing." msgstr "Raw bestand '%s' niet gevonden." msgid "Delete raw file" msgstr "Verwijder raw bestand" msgid "_Delete selected" msgstr "_Delete geselecteerd" msgid "Delete _All" msgstr "Delete _All" msgid "Select files to delete" msgstr "Selecteer bestanden om te verwijderen" #, c-format msgid "Error reading directory '%s'." msgstr "Fout bij lezen van map '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Fout bij verwijderen '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Lezen van embedded afbeelding vereist libjpeg." msgid "No embedded image found" msgstr "Geen embedded afbeelding gevonden" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "" "Oorspronkelijke afmeting (%d) is kleiner dan de gevraagde afmeting (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm thumb mismatch, hoogte %d, breedte %d, terwijl buffer %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "JPEG thumb hoogte %d anders dan verwacht %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "JPEG thumb breedte %d anders dan verwacht %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Fout bij aanmaken bestand '%s'.\n" "%s" msgid "No embedded image read" msgstr "Geen embedded afbeelding gelezen" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Fout bij aanmaken bestand '%s'. Onbekend bestandstype %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Fout bij aanmaken bestand '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Fout bij schrijven naar '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Niet ondersteund output type (%d) voor embedded afbeelding" #, c-format msgid "Loading raw file '%s'" msgstr "Inlezen raw bestand '%s'" msgid "Can't allocate new image." msgstr "Kan geen nieuwe afbeelding alloceren." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Achtergrond" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Niet gelukt het output profiel '%s' te embedden in afbeelding." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF buffer lengte %d, te lang, genegeerd." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Merk:\t\t%s\n" "Model:\t\t%s%s\n" "Vatting:\t\t%s\n" "Crop factor:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Merk:\t\t\t\t%s\n" "Model:\t\t\t\t%s\n" "Brandpuntsafstand:\t%s\n" "Diafragma:\t\t\t%s\n" "Crop factor:\t\t\t%.1f\n" "Type:\t\t\t\t%s\n" "Vattingen:\t\t\t%s" msgid "Focal" msgstr "Brandpunt" msgid "Focal length" msgstr "Brandpuntsafstand" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-getal (Diafragma)" msgid "Distance" msgstr "Afstand" msgid "Distance to subject in meters" msgstr "Afstand tot onderwerp in meters" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "Chromatische Aberratie wiskundig model" msgid "Parameters" msgstr "Parameters" msgid "Optical vignetting mathematical model" msgstr "Wiskundig model voor optische vignettering " msgid "Lens distortion mathematical model" msgstr "Wiskundig model voor lens vervorming" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Lens geometrie:" msgid "The geometry of the lens used to make the shot" msgstr "De geometrie van de lens gebruikt voor de foto" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Doel geometrie:" msgid "The target geometry for output image" msgstr "De doel geometrie voor de output afbeelding" msgid "Camera" msgstr "Camera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Zoek een camera met sjabloon\n" "Vorm: [Merk, ][Model]" msgid "Choose camera from complete list" msgstr "Kies camera uit de complete lijst" msgid "Reset all lens correction settings" msgstr "Reset alle lenscorrectie instellingen" #. Lens selector msgid "Lens" msgstr "Lens" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Zoek een lens met een sjabloon\n" "Vorm: [Merk, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Kies een lens uit de lijst van mogelijke varianten" msgid "Automatically find lens and set lens corrections" msgstr "lenscorrecties zetten door automatische lensherkenning" msgid "Lateral chromatic aberration" msgstr "Laterale chromatische aberratie" msgid "Optical vignetting" msgstr "Optische vignettering" msgid "Lens distortion" msgstr "Lens vervorming" msgid "Lens geometry" msgstr "Lens geometrie" msgid "Raw histogram with conversion curves" msgstr "Raw histogram met conversie curves" msgid "Live histogram" msgstr "Actueel histogram" #. No darkframe file msgid "None" msgstr "Geen" msgid "Lightness" msgstr "Lichtheid" msgid "Luminance" msgstr "Helderheid" msgid "Value" msgstr "Waarde" msgid "Channel Mixer" msgstr "Kleur Mixer" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Geen ruimte voor nieuwe curves." msgid "Load curve" msgstr "Inlezen curve" msgid "All curve formats" msgstr "Alle curve formaten" msgid "UFRaw curve format" msgstr "UFRaw curve formaat" msgid "Nikon curve format" msgstr "Nikon curve formaat" msgid "Save curve" msgstr "Curve opslaan" msgid "No more room for new profiles." msgstr "Geen ruimte voor meer profielen." msgid "Load color profile" msgstr "Inlezen kleurprofiel" msgid "Color Profiles" msgstr "Kleur Profielen" msgid "Luminosity (Y value)" msgstr "Helderheid (Y waarde)" msgid "Adams' zone" msgstr "Ansel Adams zone" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "afmeting %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "afmeting %dx%d, schaal 1/%d" msgid "Wavelet denoising" msgstr "Wavelet ruisonderdrukking" msgid "Despeckling" msgstr "Despeckling" msgid "Interpolating" msgstr "Interpoleren" msgid "Rendering" msgstr "Rendering" msgid "Loading preview" msgstr "Inlezen voorbeeld" msgid "Saving image" msgstr "Bewaren afbeelding" #, c-format msgid "Black point: %0.3lf" msgstr "Zwartpunt: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Geen ruimte voor nieuwe lichtwaarde aanpassingen." msgid "Aspect ratio locked, click to unlock" msgstr "beeldverhouding vast, klik om vrij te maken" msgid "Aspect ratio unlocked, click to lock" msgstr "beeldverhouding vrij, klik om vast te zetten" msgid "Load dark frame" msgstr "Inlezen zwartbeeld" msgid "clip" msgstr "clip" msgid "restore in LCH space for soft details" msgstr "herstel in LCH ruimte voor zachte details" msgid "restore in HSV space for sharp details" msgstr "herstel in HSV ruimte voor scherpe details " #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Details herstellen bij negatieve EV\n" "status: %s" msgid "digital linear" msgstr "digitaal lineair" msgid "soft film like" msgstr "zacht film-achtig" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Clip highlights bij positieve EV\n" "status: %s" #, c-format msgid "Filename: %s%s" msgstr "Bestandsnaam: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Maak ook ID bestand" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Maak alleen ID bestand" msgid "UFRaw options" msgstr "UFRaw opties" msgid "Settings" msgstr "Instellingen" msgid "Input color profiles" msgstr "Input kleurprofielen" msgid "Output color profiles" msgstr "Output kleurprofielen" msgid "Display color profiles" msgstr "Toon kleurprofielen" msgid "Base Curves" msgstr "Basis Curves" msgid "Luminosity Curves" msgstr "Helderheids Curves" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Opstartcommando voor Gimp" msgid "Reset command to default" msgstr "Reset commando naar verstekwaarde" msgid "Blink Over/Underexposure Indicators" msgstr "Knipper Over/Onderbelichtings Indicatoren" msgid "Configuration" msgstr "Configuratie" msgid "Save configuration" msgstr "Bewaar configuratie" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Bewaar configuratie in configuratiebestand ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "Over UFRaw" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) is een programma " "om\n" "raw afbeeldingen van digitale cameras te lezen en manipuleren.\n" "UFRaw gebruikt Digital Camera Raw (DCRaw)\n" "voor de daadwerkelijke interpretatie van de raw afbeeldingen.\n" "\n" "Programmeur: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineair" msgid "Logarithmic" msgstr "Logaritmisch" msgid "Hot pixels: " msgstr "Hot pixels: " msgid "mark" msgstr "markeer" msgid "Hot pixel sensitivity" msgstr "Hot pixel gevoeligheid" msgid "Reset hot pixel sensitivity" msgstr "Reset hot pixel gevoeligheid" msgid "RGB histogram" msgstr "RGB histogram" msgid "R+G+B histogram" msgstr "R+G+B histogram" msgid "Luminosity histogram" msgstr "Helderheids histogram" msgid "Value (maximum) histogram" msgstr "Waarde (maximum) histogram" msgid "Saturation histogram" msgstr "Verzadigings histogram" msgid "Average:" msgstr "Gemiddeld:" msgid "Std. deviation:" msgstr "Standaardafwijking:" msgid "Overexposed:" msgstr "Overbelicht:" msgid "Indicate" msgstr "Aangeven" msgid "Underexposed:" msgstr "Onderbelicht:" msgid "White Balance" msgstr "Witbalans" msgid "Cannot use camera white balance." msgstr "Kan camera witbalans niet gebruiken." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Er zijn geen witbalans presets voor uw camera model.\n" "Kijk op UFRaw's webpagina voor informatie om uw camera\n" "ondersteund te krijgen." msgid "Reset white balance to initial value" msgstr "Reset witbalans naar beginwaarde" msgid "Temperature" msgstr "Temperatuur" msgid "White balance color temperature (K)" msgstr "Witbalans kleur temperatuur (K)" msgid "Green" msgstr "Groen" msgid "Green component" msgstr "Groen component" msgid "Select a spot on the preview image to apply spot white balance" msgstr "Selecteer een plek in het voorbeeld voor \"spot\" witbalans" msgid "Chan. multipliers:" msgstr "Kanaal multiplicatoren:" msgid "Bayer pattern interpolation" msgstr "Bayer patroon interpolatie" msgid "VNG four color interpolation" msgstr "VNG vier kleuren interpolatie" msgid "Bilinear interpolation" msgstr "Bilineaire interpolatie" msgid "AHD interpolation" msgstr "AHD interpolatie" msgid "VNG interpolation" msgstr "VNG interpolatie" msgid "PPG interpolation" msgstr "PPG interpolatie" msgid "No interpolation" msgstr "Geen interpolatie" msgid "No Bayer pattern" msgstr "Geen Bayer patroon" msgid "Apply color smoothing" msgstr "Pas kleur vereffening toe" msgid "Denoise" msgstr "Ontruis" msgid "Threshold for wavelet denoising" msgstr "Drempelwaarde voor wavelet ontruising" msgid "Reset denoise threshold to default" msgstr "Reset ontruis drempelwaarde naar verstekwaarde" msgid "Dark Frame:" msgstr "Zwartbeeld:" msgid "Reset dark frame" msgstr "Reset zwartbeeld" msgid "Reset adjustment" msgstr "Reset aanpassing" msgid "Select a spot on the preview image to choose hue" msgstr "Selecteer een plek in het voorbeeld voor tint selectie" msgid "Remove adjustment" msgstr "Verwijder aanpassing" msgid "Grayscale Mode:" msgstr "Grijsschaal algoritme:" msgid "Reset channel mixer" msgstr "Reset Kleurmixer" # There's a few problems here: # The last sentence should be put before the next-to-last one. (I did so in the translation). # I don't know how to translate the numbers, since the normal dutch way of representing numbers is using a comma for decimal separator. I don't know how this would end up in a completely dutch environment (which I'm not using) # msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Despeckling is vooral nuttig bij hoge ISO waardes samen met een hoge " "kanaalvermenigvuldiging: wanneer één kanaal een erg lage signaal/ruis " "verhouding heeft. Probeer een instelling van window size, kleurverval en " "aantal iteraties van 50,0,5 voor dat kanaal. Als een kanaal alleen maar ruis " "bevat, probeer dan 1,0.6,1.\n" "De waarde van window size mag niet kleiner zijn dan het aantal iteraties. " "Despeckling wordt niet toegepast als de window size of aantal iteraties nul " "is. " msgid "Update channel parameters together" msgstr "kanaalparameters tegelijk aanpassen" msgid "Reset despeckle parameters" msgstr "Reset despeckle parameters" #. channel to view msgid "View channel:" msgstr "bekijk kanaal:" #. Parameters msgid "Window size:" msgstr "Window size:" msgid "Color decay:" msgstr "Kleurverval:" msgid "Passes:" msgstr "Iteraties:" msgid "Load base curve" msgstr "Inlezen basis curve" msgid "Save base curve" msgstr "Opslaan basis curve" msgid "Reset base curve to default" msgstr "Reset basis curve naar verstekwaarde" msgid "Input ICC profile" msgstr "Input ICC profiel" msgid "Output ICC profile" msgstr "Output ICC profiel" msgid "Display ICC profile" msgstr "Scherm ICC profiel" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Gamma correctie voor het input profiel" msgid "Reset gamma to default" msgstr "Reset gamma naar verstekwaarde" msgid "Linearity" msgstr "Lineariteit" msgid "Linear part of the gamma correction" msgstr "Lineair deel van de gamma correctie" msgid "Reset linearity to default" msgstr "Reset lineariteit naar verstekwaarde" msgid "Output intent" msgstr "Output doel" msgid "Perceptual" msgstr "Perceptueel" msgid "Relative colorimetric" msgstr "Relatief colorimetric" msgid "Saturation" msgstr "Verzadiging" msgid "Absolute colorimetric" msgstr "Absoluut colorimetric" msgid "Output bit depth" msgstr "Output bit diepte" msgid "Display intent" msgstr "Display doel" msgid "Disable soft proofing" msgstr "Uitschakelen soft proofing" msgid "Contrast" msgstr "Contrast" msgid "Global contrast adjustment" msgstr "Globale contrast aanpassing" msgid "Reset global contrast to default" msgstr "Reset globaal contrast naar verstekwaarde" msgid "Reset saturation to default" msgstr "Reset verzadiging naar verstekwaarde" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automatische curve\n" "(vervlak histogram)" msgid "Reset curve to default" msgstr "Reset curve naar verstekwaarde" msgid "Reset black-point to default" msgstr "Reset zwartpunt naar verstekwaarde" msgid "Auto adjust black-point" msgstr "Automatisch zwartpunt" #. Start of Crop controls msgid "Left:" msgstr "Links:" msgid "Top:" msgstr "Boven:" msgid "Right:" msgstr "Rechts:" msgid "Bottom:" msgstr "Onder:" msgid "Auto fit crop area" msgstr "Automatisch aanpassen uitsnede" #, fuzzy msgid "Reset the crop area" msgstr "Reset de uitsnijgrenzen" msgid "Aspect ratio:" msgstr "Aspect ratio:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Uitsnijvlak aspect ratio.\n" "Kan in decimale notatie (1.273)\n" "of als ratio van twee getallen (14:11)" msgid "Shrink factor" msgstr "Krimp factor" msgid "Width" msgstr "Breedte" msgid "Height" msgstr "Hoogte" msgid "Orientation:" msgstr "Orientatie:" msgid "Rotation" msgstr "Rotatie" msgid "Rotation angle" msgstr "Rotatiehoek" msgid "Reset rotation angle" msgstr "Reset Rotatiehoek" #. drawLines toggle button msgid "Grid lines" msgstr "Hulplijnen" msgid "Number of grid lines to overlay in the crop area" msgstr "Aantal hulplijnen op het uitsnede gebied" msgid "Path" msgstr "Pad " msgid "Select output path" msgstr "Kies output pad" msgid "Filename" msgstr "Bestandsnaam" msgid "JPEG compression level" msgstr "JPEG compressie niveau" msgid "JPEG progressive encoding" msgstr "JPEG progressieve codering" msgid "TIFF lossless Compress" msgstr "TIFF lossless Compressie" msgid "Embed EXIF data in output" msgstr "Embed EXIF data in uitvoerbestanden" msgid "Create ID file " msgstr "Maak ID bestand " msgid "No" msgstr "Nee" msgid "Also" msgstr "Allebei" msgid "Only" msgstr "Alleen" msgid "Save image defaults " msgstr "Afbeeldings instellingen bewaren " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Huidige afbeeldingsbewerkingen opslaan als verstekwaarden.\n" "De output parameters in dit venster worden altijd bewaard." msgid "Never again" msgstr "Nooit meer" msgid "Always" msgstr "Altijd" msgid "Just this once" msgstr "Alleen deze keer" msgid "Remember output path" msgstr "Bewaar output pad" msgid "Overwrite existing files without asking" msgstr "Overschrijf bestaande bestanden zonder vragen" msgid "Tag" msgstr "Tag" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Camera merk" msgid "Camera model" msgstr "Camera model" msgid "Timestamp" msgstr "Tijdmarkering" msgid "Shutter time" msgstr "Sluitertijd" msgid "Aperture" msgstr "Diafragma" msgid "ISO speed" msgstr "ISO snelheid" msgid "35mm focal length" msgstr "35mm brandpuntsafstand" msgid "Flash" msgstr "Flits" msgid "White balance" msgstr "Witbalans" #, c-format msgid "EXIF data read by %s" msgstr "EXIF data gelezen door %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Let op: EXIF data wordt niet naar output gestuurd" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Spot waardes:" msgid "Exposure compensation in EV" msgstr "Belichtings compensatie in EV" msgid "Auto adjust exposure" msgstr "Belichting automatisch aanpassen" msgid "Reset exposure to default" msgstr "Reset belichting naar verstekwaarde" msgid "Grayscale" msgstr "Grijsschaal" #. Lens correction page msgid "Lens correction" msgstr "Lens correctie" msgid "Base curve" msgstr "Basis curve" msgid "Color management" msgstr "Kleur management" msgid "Correct luminosity, saturation" msgstr "Corrigeer helderheid, verzadiging" msgid "Lightness Adjustments" msgstr "Lightness Aanpassing" msgid "Crop and rotate" msgstr "Uitsnijden en roteren" msgid "Save" msgstr "Opslaan" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom percentage" msgid "Options" msgstr "Opties" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Delete" msgid "Send image to _Gimp" msgstr "Stuur afbeelding naar _Gimp" msgid "Fatal error setting C locale" msgstr "Fatale fout instellen C locale" #, c-format msgid "Curve version is not supported" msgstr "Curve versie wordt niet ondersteund" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Ongeldig Nikon curve bestand '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Fout bij openen Curve bestand'%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Fout bij openen bestand '%s': %s" msgid "File exists" msgstr "Bestand bestaat" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Bestand '%s' bestaat al.\n" "Overschrijven?" msgid "Error creating temporary file." msgstr "Fout bij aanmaken tijdelijk bestand." msgid "Error activating Gimp." msgstr "Fout bij opstarten van Gimp" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "Kan camera witbalans niet gebruiken, verder met auto witbalans.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "--temperature en --green opties gaan boven de --wb=%s optie." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' is geen geldige witbalans instelling." msgid "Remote URI is not supported" msgstr "Remote URI wordt niet ondersteund" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "zwartbeeld fout: %s is geen raw bestand\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "fout bij inlezen zwartbeeld '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Zwartbeeld '%s' is incompatibel met afbeelding" #, c-format msgid "using darkframe '%s'\n" msgstr "zwartbeeld '%s' in gebruik\n" msgid "Error reading NEF curve" msgstr "Fout bij inlezen NEF curve" #, c-format msgid "Can not downsize from %d to %d." msgstr "Kan niet terugschalen van %d naar %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Fout bij aanmaken van bestand '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Fout bij aanmaken van bestand" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "Afbeeldingsbestandsnaam kan niet gelijk zijn aan de ID bestandsnaam '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Mislukt om output profiel '%s' te embedden in '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Niet ondersteunde bitdiepte '%d' genegeerd." #, c-format msgid "Unknown file type %d." msgstr "Onbekend bestandstype %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Daglicht" #. Probably same as above: msgid "Direct sunlight" msgstr "Direct zonlicht" msgid "Cloudy" msgstr "Bewolkt" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Schaduw" msgid "Incandescent" msgstr "Vlammend licht" msgid "Incandescent warm" msgstr "Vlammend warm licht" #. Same as "Incandescent": msgid "Tungsten" msgstr "Wolfraam" msgid "Fluorescent" msgstr "Fluoriserend" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluoriserend hoog" msgid "Cool white fluorescent" msgstr "Koel wit fluoriserend" msgid "Warm white fluorescent" msgstr "Warm wit fluoriserend" msgid "Daylight fluorescent" msgstr "Daglicht fluoriserend" msgid "Neutral fluorescent" msgstr "Neutraal Fluoriserend" msgid "White fluorescent" msgstr "Wit fluoriserend" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Natriumdamp fluoriserend" msgid "Day white fluorescent" msgstr "Dagwit fluoriserend" msgid "High temp. mercury-vapor fluorescent" msgstr "Hoge temp. kwikdamp fluoriserend" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flits (auto modus)" msgid "Evening sun" msgstr "Avondzon" msgid "Underwater" msgstr "Onderwater" msgid "Black & white" msgstr "Zwart Wit" msgid "Manual WB" msgstr "Handmatige WB" msgid "Camera WB" msgstr "Camera WB" msgid "Auto WB" msgstr "Auto WB" ufraw-0.19.2/po/ko.po0000664000175000017500000013154612123734456011262 00000000000000# Korean translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Homin,Lee , 2007-2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-18 14:45+0900\n" "Last-Translator: Homin Lee \n" "Language-Team: Gnome-kr-hackers \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Korean\n" "X-Poedit-Country: KOREA, REPUBLIC OF\n" "X-Poedit-SourceCharset: utf-8\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "네비게ì´ì…˜ ì°½ 열기" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "ê°’ %.*fì´(ê°€) 너무 커서, %.*f로 조정합니다." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "ê°’ %.*fì´(ê°€) 너무 작아서, %.*f로 조정합니다." msgid "No input file, nothing to do." msgstr "ìž…ë ¥ 파ì¼ì´ 없으므로 ì•„ë¬´ê²ƒë„ í•˜ì§€ 않습니다." #, c-format msgid "Loaded %s %s" msgstr "%s %s 불러옴" #, c-format msgid "Saved %s %s" msgstr "%s %s 저장ë¨" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "y" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: '%s'ì„(를) ë®ì–´ 쓸까요?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent ì˜µì…˜ì€ ë°°ì¹˜ëª¨ë“œì—서만 유효합니다." #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent ì˜µì…˜ì€ ë°°ì¹˜ëª¨ë“œì—서만 유효합니다." msgid "Raw images" msgstr "Raw ì´ë¯¸ì§€" msgid "UFRaw ID files" msgstr "UFRaw ID 파ì¼" msgid "Raw jpeg's" msgstr "Raw jpeg's" msgid "Raw tiff's" msgstr "Raw tiff's" msgid "All files" msgstr "모든 파ì¼" msgid "Show hidden files" msgstr "숨겨진 íŒŒì¼ í‘œì‹œ" msgid "Manual curve" msgstr "ìˆ˜ë™ ê³¡ì„ " msgid "Linear curve" msgstr "ì§ì„ " msgid "Custom curve" msgstr "맞춤 곡선" msgid "Camera curve" msgstr "ì¹´ë©”ë¼ ê³¡ì„ " #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "í”„ë¡œíŒŒì¼ ì—†ìŒ" msgid "Color matrix" msgstr "컬러 매트릭스" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (내장)" msgid "System default" msgstr "시스템 기본 설정" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "UFRaw-0.4 í˜¹ì€ ì´ì „ 버전으로 부터 .ufrawrc를 변경 ì‹œë„ ì¤‘" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "UFRaw-0.6 í˜¹ì€ ì´ì „ 버전으로 부터 .ufrawrc를 변경 ì‹œë„ ì¤‘" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr ".ufrawrc ì•ˆì˜ UFRaw ë²„ì „ì€ ì§€ì›ë˜ì§€ 않습니다" #, c-format msgid "Too many anchors for curve '%s'" msgstr "곡선 '%s'ì— ë„ˆë¬´ ë§Žì€ ê³ ì •ì ì´ 있습니다" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "ID 파ì¼ì— ë°ê¸° ì¡°ì •ì´ ë„ˆë¬´ ë§Žì•„ 무시ë˜ì—ˆìŠµë‹ˆë‹¤\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID íŒŒì¼ %sì´(ê°€) ì •ìƒì ì¸ íŒŒì¼ ê°™ì§€ 않습니다\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "ID íŒŒì¼ %sì„(를) ì½ê¸° 위해 ì—´ 수 없습니다\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "%s íŒŒì¼ ë§Œë“¤ê¸° 실패." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "'%s' 파싱 오류\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "ID íŒŒì¼ %sì„(를) 쓰기 위해 ì—´ 수 없습니다\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "stdoutì„ --create-id와 ê°™ì´ ì‚¬ìš© í•  수 없습니다" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Unidentified Flying Raw converter for digital camera images.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "사용법: ufraw [ options ... ] [ raw-image-files ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ options ... ] [ default-directory ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "기본 ë™ìž‘으로 'ufraw'는 사용ìžê°€ ì´ë¯¸ì§€ë“¤ì˜ 파ë¼ë¯¸í„°ë“¤ì„ 조정하고\n" "저장하ë„ë¡ ê°ê°ì˜ raw ì´ë¯¸ì§€ì— 대해 미리보기 ì°½ì„ í‘œì‹œí•©ë‹ˆë‹¤.\n" "만약 raw ì´ë¯¸ì§€ë“¤ì´ 커맨드ë¼ì¸ì— 주어지지 않는다면 UFRaw는\n" "íŒŒì¼ ì„ íƒ ë‹¤ì´ì–¼ë¡œê·¸ë¥¼ 표시할 것 입니다.\n" "ì´ë¯¸ì§€ì— 대한 ì§ˆë¬¸ì„ ë°›ì§€ 않고(미리보기 ì—†ì´) 처리하려면\n" "'ufraw-batch'를 사용하세요.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "ìž…ë ¥ 파ì¼ë¡œëŠ” raw ì´ë¯¸ì§€ë‚˜ ufrawì˜ ID 파ì¼ì´ 가능합니다.\n" "ID 파ì¼ì€ raw ì´ë¯¸ì§€ì˜ íŒŒì¼ ì´ë¦„ê³¼ ì´ë¯¸ì§€ë¥¼ 처리하기 위한 ì¡°ì •ê°’ì„ í¬í•¨í•©ë‹ˆ" "다.\n" "ID 파ì¼ê³¼ 함께 사용 가능한 ì˜µì…˜ì€ ë‹¤ìŒê³¼ 같습니다:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-file ID-fileì— ìžˆëŠ” 파ë¼ë¯¸í„°ë¥¼ 다른 raw ì´ë¯¸ì§€ì— ì ìš©í•¨.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "나머지 ì˜µì…˜ë“¤ì€ ë‘ ê·¸ë£¹ìœ¼ë¡œ 분리 ë©ë‹ˆë‹¤.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "ì´ë¯¸ì§€ ì¡°ì •ì— ê´€ë ¨ëœ ì˜µì…˜ë“¤:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto í™”ì´íЏ 벨런스 설정.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP ìƒ‰ì˜¨ë„ ìº˜ë¹ˆê°’.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN 녹색 ì •ìƒí™”.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " 사용할 색조 곡선 종류. CURVE로는 GUI ìƒì—서\n" " 미리 불러온 ìƒ‰ì¡°ê³¡ì„ ì„ ì‚¬ìš©í•  수 있ì”니다.\n" " (기본값 cameraê°€ 존재한다면 사용, 그외ì—는 linear).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " 지정한 파ì¼ì˜ 기본 색조 ê³¡ì„ ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.\n" " --base-curve option ì„¤ì •ê°’ì„ ë®ì–´ì”니다.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " 사용할 색조 곡선 타입. CURVE는 GUIì—서 미리\n" " 불러온 곡선 중ì—서 ì„ íƒí•  수 있다. \n" " (기본값 linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=file 지정한 파ì¼ì˜ 색조 ê³¡ì„ ì„ ì‚¬ìš©\n" " --curve ì˜µì…˜ì„ ë®ì–´ì”€.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " 암부ì—서 디테ì¼ì„ ë³µì›í•˜ëŠ” 방법.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film 명부ì—서 하ì´ë¼ì´íŠ¸ë¥¼ 잘ë¼ë‚´ëŠ” 방법.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMMA 기본 ê³¡ì„ ì˜ ê°ë§ˆ ë³´ì •ê°’ (기본값 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITY 기본 ê³¡ì„ ìœ ì„ í˜•ë„ (기본값 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT 대비 ì¡°ì • (기본값 1.0)\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "--saturation=SAT ì±„ë„ ì¡°ì • (기본값 1.0, í‘ë°± ì‚¬ì§„ì„ ì›í•˜ë©´ 0).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=THRESHOLD\n" " ìž” ë…¸ì´ì¦ˆ 제거 임계값 (기본값 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " í•«í”½ì…€ì„ ê°ì§€í•˜ê³  제거하기 위한 ê°ë„ (기본값 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " ìžë™ 노출 ë³´ì •| 노출 ë³´ì • ê°’ EV (기본값 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " ìžë™ 암부 | 암부 ê°’ (기본값 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing 색 부드럽게 하기.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " 그레ì´ìŠ¤ì¼€ì¼ ë³€í™˜ì— ì‚¬ìš©í•  알고리즘 (기본값 none).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " 그레ì´ìŠ¤ì¼€ì¼ ë³€í™˜ì— ì‚¬ìš©í•  알고리즘 (기본값 none).\n" msgid "The options which are related to the final output are:\n" msgstr "최종 ì¶œë ¥ì— ê´€ë ¨ëœ ì˜µì…˜ë“¤:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FACTOR ì´ë¯¸ì§€ë¥¼ FACTOR 비율로 축소합니다 (기본값 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=SIZE 최대 (height,width) í¬ê¸°ë¡œ ì´ë¯¸ì§€ë¥¼ 줄임.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " 출력 íŒŒì¼ í¬ë©§ (기본값 ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 ì±„ë„ ë³„ 출력 비트 (default 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " ID íŒŒì¼ ë§Œë“¤ê¸° 옵션. no|also|only (기본값 no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE JPEG 압축률 (0-100, 기본값 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "--[no]exif ì¶œë ¥ì— EXIF í¬í•¨ 여부(기본값 exif).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip TIFF zip ì••ì¶•ì„ í™œì„±[비활성] 하기 (기본값 nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image raw파ì¼ì„ 변환하는 대신 raw파ì¼ì— í¬í•¨ëœ\n" " 미리보기 ì´ë¯¸ì§€ë¥¼ 추출하기.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " ì¹´ë©”ë¼ ì„¤ì •ì— ë”°ë¼ íšŒì „|ANGLE ê°’(ê°)으로 시계 ë°©í–¥ 회" "ì „|\n" " 회전하지 ì•ŠìŒ (기본값 camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " 주어진 픽셀 ì˜ì—­ ë§Œí¼ ì¶œë ¥ë¬¼ì„ ìž˜ë¼(Crop)낸다. ì´ë¯¸ì§€" "를 회전한 후,\n" " ìŠ¤ì¼€ì¼ ë˜ê¸° ì „ì— ê°’ì´ ì ìš© ëœë‹¤.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto 렌즈 ë³´ì •ì„ í•˜ì§€ 않거나 렌즈를 ìžë™ìœ¼ë¡œ ê°ì§€í•˜ì—¬\n" " ë³´ì • 실행 (기본값 none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=PATH 출력 파ì¼ì˜ 경로 (기본값 ìž…ë ¥ 파ì¼ì˜ 경로 사용).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FILE 출력 íŒŒì¼ ì´ë¦„, 표준출력으로 내보내려면 '-'를 사용하세" "ìš”.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=FILE 핫픽셀 제거를 위한 다í¬í”„레임 파ì¼.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "--overwrite 기존 파ì¼ì— ë®ì–´ 쓰기 (기본값 no).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window ì°½ í¬ê¸°ë¥¼ 강제로 최대화 하기.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent 변환하는 ë™ì•ˆ 아무 ë©”ì‹œì§€ë„ í‘œì‹œí•˜ì§€ 않ìŒ.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw는 가장 먼저 $HOME/.ufrawrc 리소스 파ì¼ì˜ ì„¤ì •ë“¤ì„ ì½ìŠµë‹ˆë‹¤.\n" "다ìŒìœ¼ë¡œ, 지정한 ID파ì¼(ì´ ìžˆìœ¼ë©´)ì—서 ì„¤ì •ì„ ì½ê³ , --conf 옵션으로 ë°›ì€\n" "ì„¤ì •ì„ ì½ìŠµë‹ˆë‹¤. ID파ì¼ì˜ ìž…/출력 íŒŒì¼ ì´ë¦„ì€ ë¬´ì‹œí•©ë‹ˆë‹¤.\n" "마지막으로, 커맨드 ë¼ì¸ìœ¼ë¡œ 주어진 ì˜µì…˜ë“¤ì´ ì„¤ì •ë©ë‹ˆë‹¤. 배치모드ì—서는\n" "ë‘번재 ê·¸ë£¹ì˜ ì˜µì…˜ë“¤ì€ ë¦¬ì†ŒìŠ¤ 파ì¼ì—서 ì½ì§€ 않습니다.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "마지막, 하지만 하찮지 ì•Šì€ ì •ë³´, --versionì€ ë²„ì „ë²ˆí˜¸ì™€ ufrawì˜ ì»´íŒŒì¼\n" "ì˜µì…˜ì„ í‘œì‹œí•©ë‹ˆë‹¤. 그리고 --help는 ì´ ë„ì›€ë§ ë©”ì‹œì§€ë¥¼ 표시하고 마침니다.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s'ì€(는) --%sì˜ ì˜¬ë°”ë¥¸ ê°’ì´ ì•„ë‹™ë‹ˆë‹¤." msgid "ufraw was build without ZIP support." msgstr "ufrawê°€ ZIP ì§€ì›ì´ ë¹ ì§„ 채로 빌드ë¨." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch는 ë”ì´ìƒ 사용ë˜ì§€ 않습니다. 대신 ufraw-batch를 사용하세요." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getoptê°€ 문ìžì½”드 0%o ?? 를 반환하였습니다." #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "%s(으)로 부터 곡선 불러오기 실패, ì¡°ì •ëœ ê¸°ë³¸ ê³¡ì„ ì´ ë„ˆë¬´ ë§Žì´ ìžˆìŒ" #, c-format msgid "failed to load curve from %s" msgstr "%s(으)로 부터 곡선 불러오기 실패" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s'ì€(는) 올바른 기본 곡선 ì´ë¦„ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "%s(으)로 부터 곡선 불러오기 실패. ì¡°ì •ëœ ê³¡ì„ ì´ ë„ˆë¬´ ë§Žì´ ìžˆìŒ" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s'ì€(는) 올바른 곡선 ì´ë¦„ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s'ì€(는) 올바른 ë³´ê°„ ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s'ì€(는) 올바른 그레ì´ìŠ¤ì¼€ì¼ ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s'ì€(는) 올바른 그레ì´ìŠ¤ì¼€ì¼ ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s'ì€(는) 올바른 복구 ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s'ì€(는) 올바른 잘ë¼ë‚´ê¸° ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." msgid "you can not specify both --shrink and --size" msgstr "--shrink와 --size를 둘다 설정할 수 없습니다" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d'ì€(는) 올바른 비트수가 아닙니다." #, c-format msgid "Output type '%s' is deprecated" msgstr "출력 타입 '%s'ì„(를) 사용할 수 없습니다" msgid "ufraw was build without TIFF support." msgstr "ufrawê°€ TIFF ì§€ì›ì´ ë¹ ì§„ 채로 빌드ë¨." msgid "ufraw was build without JPEG support." msgstr "ufrawê°€ JPEG ì§€ì›ì´ ë¹ ì§„ 채로 빌드ë¨." msgid "ufraw was build without PNG support." msgstr "ufrawê°€ PNG ì§€ì›ì´ ë¹ ì§„ 채로 빌드ë¨." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s'ì€(는) 올바른 출력 íƒ€ìž…ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s'ì€(는) 내장 ì´ë¯¸ì§€ ì¶œë ¥ì— ì‚¬ìš©í•  수 없는 출력 타입 입니다." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d'ì€(는) 내장 ì´ë¯¸ì§€ ì¶œë ¥ì— ì‚¬ìš©í•  수 없는 비트수 입니다." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s'ì€(는) 올바른 회전 ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s'ì€(는) 올바른 create-id ì˜µì…˜ì´ ì•„ë‹™ë‹ˆë‹¤." #, c-format msgid "'%s' is not a valid path." msgstr "'%s'ì€(는) 올바른 경로가 아닙니다." msgid "cannot output more than one file to the same output" msgstr "하나 ì´ìƒì˜ 파ì¼ë¡œ 부터 ê°™ì€ ì¶œë ¥ìœ¼ë¡œ 출력할 수 없습니다" #, c-format msgid "Raw file '%s' missing." msgstr "Raw íŒŒì¼ '%s'(ì„)를 ì°¾ì„ ìˆ˜ 없습니다." msgid "Delete raw file" msgstr "Raw íŒŒì¼ ì‚­ì œ" msgid "_Delete selected" msgstr "ì„ íƒëœ 것 ì‚­ì œ(_D)" msgid "Delete _All" msgstr "ì „ì²´ ì‚­ì œ(_A)" msgid "Select files to delete" msgstr "지울 íŒŒì¼ ì„ íƒ" #, c-format msgid "Error reading directory '%s'." msgstr "'%s' 디렉터리 ì½ê¸° 오류." #, c-format msgid "Error deleting '%s'" msgstr "'%s' ì‚­ì œ 오류" msgid "Reading embedded image requires libjpeg." msgstr "내장 ì´ë¯¸ì§€ë¥¼ ì½ê¸° 위해서는 libjpegê°€ 필요합니다." msgid "No embedded image found" msgstr "내장 ì´ë¯¸ì§€ë¥¼ ì°¾ì„ ìˆ˜ 없습니다" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "ì›ë³¸ í¬ê¸° (%d)ì´(ê°€) ìš”ì²­ëœ í¬ê¸° (%d) 보다 작습니다" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "ppm ì¸ë„¤ì¼ì˜ ë†’ì´ %d, 너비 %dì´(ê°€) 버í¼ê¸¸ì´ %d와 ë§žì§€ 않습니다." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "JPEG ì¸ë„¤ì¼ì˜ ë†’ì´ %dì´(ê°€) 기대한 %d와 다릅니다." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "JPEG ì¸ë„¤ì¼ì˜ 너비 %dì´(ê°€) 기대한 %d와 다릅니다." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "'%s'íŒŒì¼ ë§Œë“¤ê¸° 오류.\n" "%s" msgid "No embedded image read" msgstr "ì½ì–´ì˜¨ 내장 ì´ë¯¸ì§€ê°€ 없습니다" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "'%s'íŒŒì¼ ë§Œë“¤ê¸° 오류. 알 수 없는 íŒŒì¼ íƒ€ìž… %d." #, c-format msgid "Error creating file '%s': %s" msgstr "'%s'íŒŒì¼ ë§Œë“¤ê¸° 오류: %s" #, c-format msgid "Error writing '%s'" msgstr "'%s' 쓰기 오류" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "ì´ë¯¸ì§€ ë‚´ìž¥ì„ ì§€ì›í•˜ì§€ 않는 íŒŒì¼ íƒ€ìž… (%d)" #, c-format msgid "Loading raw file '%s'" msgstr "raw íŒŒì¼ '%s' 불러오는 중" msgid "Can't allocate new image." msgstr "새 ì´ë¯¸ì§€ë¥¼ 할당할 수 없습니다." #. Create the "background" layer to hold the image... msgid "Background" msgstr "ë°°ê²½" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "출력 í”„ë¡œíŒŒì¼ '%s'ì„(를) ì´ë¯¸ì§€ì— 내장 실패." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF ë²„í¼ ê¸¸ì´ %dì´(ê°€) 매우 길어 무시ë©ë‹ˆë‹¤." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "제조사:\t\t%s\n" "모ë¸:\t\t%s%s\n" "마운트:\t\t%s\n" "í¬ë¡­ 배수:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "ë©”ì´ì»¤:\t\t%s\n" "모ë¸:\t\t%s\n" "ì´ˆì  ê±°ë¦¬:\t%s\n" "조리개:\t\t%s\n" "í¬ë¡­ 배수:\t%.1f\n" "타입:\t\t%s\n" "마운트:\t\t%s" msgid "Focal" msgstr "ì´ˆì " msgid "Focal length" msgstr "ì´ˆì  ê±°ë¦¬" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-ê°’ (조리개)" msgid "Distance" msgstr "거리" msgid "Distance to subject in meters" msgstr "피사체 ê¹Œì§€ì˜ ê±°ë¦¬(미터)" #. Add the model combobox msgid "Model:" msgstr "모ë¸:" msgid "Chromatic Aberrations mathematical model" msgstr "ìƒ‰ìˆ˜ì°¨ì˜ ìˆ˜í•™ì  ëª¨ë¸" msgid "Parameters" msgstr "파ë¼ë¯¸í„°" msgid "Optical vignetting mathematical model" msgstr "ë¹„ë„¤íŒ…ì˜ ìˆ˜í•™ì  ëª¨ë¸" msgid "Lens distortion mathematical model" msgstr "렌즈 ì™œê³¡ì˜ ìˆ˜í•™ì  ëª¨ë¸" #. Lens geometry combobox msgid "Lens geometry:" msgstr "렌즈 기하면:" msgid "The geometry of the lens used to make the shot" msgstr "ì´¬ì˜ì— 사용한 ë Œì¦ˆì˜ ê¸°í•˜ë©´" #. Target lens geometry combobox msgid "Target geometry:" msgstr "ëŒ€ìƒ ê¸°í•˜ë©´:" msgid "The target geometry for output image" msgstr "출력 ì´ë¯¸ì§€ì— 사용할 기하면" msgid "Camera" msgstr "ì¹´ë©”ë¼" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "패턴으로 ì¹´ë©”ë¼ ê²€ìƒ‰\n" "í¬ë©§: [Maker, ][Model]" msgid "Choose camera from complete list" msgstr "ì „ì²´ 리스트ì—서 ì¹´ë©”ë¼ë¥¼ ì„ íƒ" msgid "Reset all lens correction settings" msgstr "렌즈 ë³´ì • 설정 초기화" #. Lens selector msgid "Lens" msgstr "렌즈" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "패턴으로 렌즈 검색\n" "í¬ë©§: [Maker, ][Model]" msgid "Choose lens from list of possible variants" msgstr "가능한 리스트ì—서 렌즈 ì„ íƒ" msgid "Automatically find lens and set lens corrections" msgstr "ìžë™ìœ¼ë¡œ 렌즈를 찾아서 렌즈 ë³´ì •ê°’ 설정" msgid "Lateral chromatic aberration" msgstr "측면 색수차" msgid "Optical vignetting" msgstr "ê´‘í•™ 비네팅" msgid "Lens distortion" msgstr "렌즈 외곡" msgid "Lens geometry" msgstr "렌즈 기하면" msgid "Raw histogram with conversion curves" msgstr "변환 ê³¡ì„ ì„ ì ìš©í•œ Raw 히스토그램" msgid "Live histogram" msgstr "ë¼ì´ë¸Œ 히스토그램" #. No darkframe file msgid "None" msgstr "ì—†ìŒ" msgid "Lightness" msgstr "ë°ê¸°" msgid "Luminance" msgstr "휘ë„" msgid "Value" msgstr "ê°’" msgid "Channel Mixer" msgstr "ì±„ë„ ë¯¹ì„œ" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "새 ê³¡ì„ ì„ ì €ìž¥í•  ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤." msgid "Load curve" msgstr "곡선 불러오기" msgid "All curve formats" msgstr "모든 곡선 í¬ë©§" msgid "UFRaw curve format" msgstr "UFRaw 곡선 í¬ë©§" msgid "Nikon curve format" msgstr "니콘 곡선 í¬ë©§" msgid "Save curve" msgstr "곡선 저장" msgid "No more room for new profiles." msgstr "새 프로파ì¼ì„ 저장할 ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤." msgid "Load color profile" msgstr "색 í”„ë¡œíŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸°" msgid "Color Profiles" msgstr "색 프로파ì¼" msgid "Luminosity (Y value)" msgstr "ì¡°ë„ (Y ê°’)" msgid "Adams' zone" msgstr "ì¡´ ì˜ì—­(Adam's zone)" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "사ì´ì¦ˆ %dx%d, 확대 %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "사ì´ì¦ˆ %dx%d, ìŠ¤ì¼€ì¼ 1/%d" msgid "Wavelet denoising" msgstr "ìž” ë…¸ì´ì¦ˆ 제거" msgid "Despeckling" msgstr "얼룩 제거" msgid "Interpolating" msgstr "보간법" msgid "Rendering" msgstr "ë Œë”ë§" msgid "Loading preview" msgstr "미리보기 불러오는 중" msgid "Saving image" msgstr "ì´ë¯¸ì§€ 저장 중" #, c-format msgid "Black point: %0.3lf" msgstr "암부: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "새 ë°ê¸° ì¡°ì •ì„ ì €ìž¥í•  ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤." msgid "Aspect ratio locked, click to unlock" msgstr "종횡비가 ê³ ì •ë˜ì—ˆìŒ. í´ë¦­í•˜ë©´ ê³ ì •ì„ í’‰ë‹ˆë‹¤" msgid "Aspect ratio unlocked, click to lock" msgstr "종횡비가 ê³ ì •ë˜ì§€ 않ìŒ. í´ë¦­í•˜ë©´ 고정합니다." msgid "Load dark frame" msgstr "다í¬í”„레임 불러오기" msgid "clip" msgstr "잘ë¼ë‚´ê¸°" msgid "restore in LCH space for soft details" msgstr "부드러운 디테ì¼ì„ 위해 LCH 색공간으로 부터 ë³µì›" msgid "restore in HSV space for sharp details" msgstr "날카로운 디테ì¼ì„ 위해 HSV 색공간으로 부터 ë³µì›" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "ì•”ë¶€ì˜ ë””í…Œì¼ ë³µì›í•˜ê¸°\n" "현재 ìƒíƒœ: %s" msgid "digital linear" msgstr "디지털 선형화" msgid "soft film like" msgstr "부드러운 필름 효과" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "명부ì—서 하ì´ë¼ì´íЏ 잘ë¼ë‚´ê¸°\n" "현재ìƒíƒœ: %s" #, c-format msgid "Filename: %s%s" msgstr "íŒŒì¼ ì´ë¦„: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "ID 파ì¼ì„ ê°™ì´ ë§Œë“¤ê¸°" msgid "" "\n" "Create only ID file" msgstr "" "\n" "ID 파ì¼ë§Œ 만들기" msgid "UFRaw options" msgstr "UFRaw 옵션들" msgid "Settings" msgstr "설정" msgid "Input color profiles" msgstr "ìž…ë ¥ 색 프로파ì¼" msgid "Output color profiles" msgstr "출력 색 프로파ì¼" msgid "Display color profiles" msgstr "화면 색 프로파ì¼" msgid "Base Curves" msgstr "기본 곡선" msgid "Luminosity Curves" msgstr "ê´‘ë„ ê³¡ì„ " #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "김프 호출 명령" msgid "Reset command to default" msgstr "명령 초기화" msgid "Blink Over/Underexposure Indicators" msgstr "노출 부족/과다 ì˜ì—­ 깜박임" msgid "Configuration" msgstr "설정" msgid "Save configuration" msgstr "설정 저장" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "ì„¤ì •ì„ ë¦¬ì†ŒìŠ¤ 파ì¼ë¡œ 저장 ($HOME/.ufrawrc)" msgid "Log" msgstr "로그" msgid "About" msgstr "ì •ë³´" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "선형" msgid "Logarithmic" msgstr "대수" msgid "Hot pixels: " msgstr "핫픽셀: " msgid "mark" msgstr "표시" msgid "Hot pixel sensitivity" msgstr "핫픽셀 ê°ë„" msgid "Reset hot pixel sensitivity" msgstr "핫픽셀 ê°ë„ 초기화" msgid "RGB histogram" msgstr "RGB 히스토그램" msgid "R+G+B histogram" msgstr "R+G+B 히스토그램" msgid "Luminosity histogram" msgstr "ì¡°ë„ ížˆìŠ¤í† ê·¸ëž¨" msgid "Value (maximum) histogram" msgstr "ê°’ (최대) 히스토그램" msgid "Saturation histogram" msgstr "ì±„ë„ ížˆìŠ¤í† ê·¸ëž¨" msgid "Average:" msgstr "í‰ê· :" msgid "Std. deviation:" msgstr "표준편차:" msgid "Overexposed:" msgstr "노출과다:" msgid "Indicate" msgstr "표시" msgid "Underexposed:" msgstr "노출부족:" msgid "White Balance" msgstr "í™”ì´íЏ 벨런스" msgid "Cannot use camera white balance." msgstr "ì¹´ë©”ë¼ì˜ í™”ì´íЏ 벨런스를 사용할 수 ì—†ìŒ." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "ì´ ì¹´ë©”ë¼ ëª¨ë¸ì˜ í™”ì´íЏ 벨런스 í”„ë¦¬ì…‹ì´ ì—†ìŠµë‹ˆë‹¤.\n" "UFRawì˜ ì›¹íŽ˜ì´ì§€ì—서 UFRawê°€ ì´ ì¹´ë©”ë¼ë¥¼ ì§€ì›í•˜ë ¤ë©´ 어떻게\n" "해야 하는지 확ì¸í•˜ì„¸ìš”." msgid "Reset white balance to initial value" msgstr "í™”ì´íЏ 벨런스 초기화" msgid "Temperature" msgstr "온ë„" msgid "White balance color temperature (K)" msgstr "í™”ì´íЏ 벨런스 색 ì˜¨ë„ (K)" msgid "Green" msgstr "녹색" msgid "Green component" msgstr "녹색 성분" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "스팟 í™”ì´íЏ 벨런스를 ì ìš©í•˜ê¸° 위해 미리보기 ì´ë¯¸ì§€ 중 스팟(부분)ì„ ì„ íƒí•˜ì„¸ìš”" msgid "Chan. multipliers:" msgstr "ìž¬ë„ ì¦í­:" msgid "Bayer pattern interpolation" msgstr "ë² ì´ì–´ 패턴 보간법" msgid "VNG four color interpolation" msgstr "VNG four color 보간법" msgid "Bilinear interpolation" msgstr "Bilinear 보간법" msgid "AHD interpolation" msgstr "AHD 보간법" msgid "VNG interpolation" msgstr "VNG 보간법" msgid "PPG interpolation" msgstr "PPG 보간법" msgid "No interpolation" msgstr "보간법 ì—†ìŒ" msgid "No Bayer pattern" msgstr "ë² ì´ì–´ íŒ¨í„´ì´ ì—†ìŒ" msgid "Apply color smoothing" msgstr "색 부드럽게 하기" msgid "Denoise" msgstr "ë…¸ì´ì¦ˆì œê±°" msgid "Threshold for wavelet denoising" msgstr "ìž” ë…¸ì´ì¦ˆ 제거를 위한 임계값" msgid "Reset denoise threshold to default" msgstr "ë…¸ì´ì¦ˆì œê±° 임계값 초기화" msgid "Dark Frame:" msgstr "다í¬í”„레임:" msgid "Reset dark frame" msgstr "다í¬í”„레임 초기화" msgid "Reset adjustment" msgstr "ì¡°ì • 초기화" msgid "Select a spot on the preview image to choose hue" msgstr "색조를 ì„ íƒí•˜ê¸° 위해 미리보기 ì´ë¯¸ì§€ 중 스팟(부분)ì„ ì„ íƒí•˜ì„¸ìš”" msgid "Remove adjustment" msgstr "ì¡°ì • 제거" msgid "Grayscale Mode:" msgstr "그레ì´ìŠ¤ì¼€ì¼ ëª¨ë“œ:" msgid "Reset channel mixer" msgstr "ì±„ë„ ë¯¹ì„œ 초기화" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "얼룩 제거는 ë†’ì€ ISOì— ë†’ì€ ì±„ë„ ë°°ìˆ˜ë¥¼ ì¡°í•©í•  때 즉, ì±„ë„ í•˜ë‚˜ì— ì‹ í˜¸ëŒ€ë¹„ ë…¸" "ì´ì¦ˆê°€ 매우 ë§Žì€ ê²½ìš° 유용합니다. ë…¸ì´ì¦ˆê°€ ë§Žì€ ì±„ë„ì— ì°½ í¬ê¸°, ìƒ‰ìƒ ë°”ëž¨, 회" "수를 50,0,5로 설정해 보세요. 채ë„ì´ ë…¸ì´ì¦ˆë¡œ ê°€ë“ ì°¬ 경우ì—는 1,0.6,1ì„ ì‚¬ìš©" "í•´ 보세요. \n" "ì°½ í¬ê¸°ì—나 íšŒìˆ˜ì— 0ì„ ë„£ìœ¼ë©´ 얼룩 ì œê±°ê¸°ëŠ¥ì„ ìˆ˜í–‰í•˜ì§€ 않습니다. 얼룩 제거 기" "ëŠ¥ì„ í™œì„±í™” 한 경우 ì°½ í¬ê¸°ì—는 회수보다 í° ê°’ì„ ìž…ë ¥í•´ì•¼ 합니다." msgid "Update channel parameters together" msgstr "ì±„ë„ íŒŒë¼ë¯¸í„°ë„ 함께 ì—…ë°ì´íЏ" msgid "Reset despeckle parameters" msgstr "얼룩제거 파ë¼ë¯¸í„° 초기화" #. channel to view msgid "View channel:" msgstr "ì±„ë„ ë³´ì´ê¸°:" #. Parameters msgid "Window size:" msgstr "ì°½ í¬ê¸°:" msgid "Color decay:" msgstr "ìƒ‰ìƒ ë°”ëž¨:" msgid "Passes:" msgstr "회수:" msgid "Load base curve" msgstr "기본 곡선 불러오기" msgid "Save base curve" msgstr "기본 곡선 저장하기" msgid "Reset base curve to default" msgstr "기본 곡선 초기화" msgid "Input ICC profile" msgstr "ìž…ë ¥ ICC 프로파ì¼" msgid "Output ICC profile" msgstr "출력 ICC 프로파ì¼" msgid "Display ICC profile" msgstr "화면 ICC 프로파ì¼" msgid "Gamma" msgstr "ê°ë§ˆ" msgid "Gamma correction for the input profile" msgstr "í”„ë¡œíŒŒì¼ ìž…ë ¥ì— ê°ë§ˆ ì¡°ì •" msgid "Reset gamma to default" msgstr "ê°ë§ˆ 초기화" msgid "Linearity" msgstr "선형ë„" msgid "Linear part of the gamma correction" msgstr "ê°ë§ˆ ì¡°ì •ê°’ 중 ì„ í˜•ì¸ ë¶€ë¶„" msgid "Reset linearity to default" msgstr "ì„ í˜•ë„ ì´ˆê¸°í™”" msgid "Output intent" msgstr "출력 ì˜ë„" msgid "Perceptual" msgstr "Perceptual" msgid "Relative colorimetric" msgstr "Relative colorimetric" msgid "Saturation" msgstr "채ë„" msgid "Absolute colorimetric" msgstr "Absolute colorimetric" msgid "Output bit depth" msgstr "출력 비트" msgid "Display intent" msgstr "화면 ì˜ë„" msgid "Disable soft proofing" msgstr "소프트 프루핑 í•´ì œ" msgid "Contrast" msgstr "대비" msgid "Global contrast adjustment" msgstr "ì „ì²´ 대비 ì¡°ì •" msgid "Reset global contrast to default" msgstr "ì „ì²´ 대비 초기화" msgid "Reset saturation to default" msgstr "ì±„ë„ ì´ˆê¸°í™”" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "곡선 ìžë™ ì¡°ì •\n" "(히스토그램 í‰íƒ„í™”)" msgid "Reset curve to default" msgstr "곡선 초기화" msgid "Reset black-point to default" msgstr "암부(black-point) 초기화" msgid "Auto adjust black-point" msgstr "암부 ìžë™ ì¡°ì •" #. Start of Crop controls msgid "Left:" msgstr "왼쪽:" msgid "Top:" msgstr "위:" msgid "Right:" msgstr "오른쪽:" msgid "Bottom:" msgstr "아래:" msgid "Auto fit crop area" msgstr "ìžë™ 맞춤 í¬ë¡­ ì˜ì—­" #, fuzzy msgid "Reset the crop area" msgstr "잘ë¼ë‚´ê¸° ì˜ì—­ì„ 초기화" msgid "Aspect ratio:" msgstr "종횡비:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "잘ë¼ë‚´ê¸° ì˜ì—­ 종횡비.\n" "ìˆ«ìž í˜•ì‹(1.273) í˜¹ì€ ë¹„ìœ¨ 형ì‹(14:11)\n" "으로 ìž…ë ¥ í•  수 있습니다" msgid "Shrink factor" msgstr "축소 ì¸ìž" msgid "Width" msgstr "너비" msgid "Height" msgstr "높ì´" msgid "Orientation:" msgstr "기준:" msgid "Rotation" msgstr "회전" msgid "Rotation angle" msgstr "회전 ê°" msgid "Reset rotation angle" msgstr "회전 ê° ì´ˆê¸°í™”" #. drawLines toggle button msgid "Grid lines" msgstr "안내 ì„ " msgid "Number of grid lines to overlay in the crop area" msgstr "í¬ë¡­ ì˜ì—­ì— 표시ë˜ëŠ” ì•ˆë‚´ì„ ì˜ ê°œìˆ˜" msgid "Path" msgstr "경로" msgid "Select output path" msgstr "출력 경로 ì„ íƒ" msgid "Filename" msgstr "íŒŒì¼ ì´ë¦„" msgid "JPEG compression level" msgstr "JPEG 압축률" msgid "JPEG progressive encoding" msgstr "JPEG 프로그래시브 ì¸ì½”딩" msgid "TIFF lossless Compress" msgstr "TIFF 무ì†ì‹¤ ì••ì¶•" msgid "Embed EXIF data in output" msgstr "ì¶œë ¥ì— EXIF ì •ë³´ í¬í•¨" msgid "Create ID file " msgstr "ID íŒŒì¼ ë§Œë“¤ê¸°" msgid "No" msgstr "만들지 않ìŒ" msgid "Also" msgstr "ì´ë¯¸ì§€ì™€ 함께" msgid "Only" msgstr "ID íŒŒì¼ ë§Œ" msgid "Save image defaults " msgstr "ì´ë¯¸ì§€ 기본값 저장" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "í˜„ìž¬ì˜ ì¡°ì • ê°’ë“¤ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 저장합니다.\n" "ì´ ìœˆë„ìš°ì˜ ì¶œë ¥ 파ë¼ë¯¸í„°ë“¤ì€ í•­ìƒ ì €ìž¥ë©ë‹ˆë‹¤." msgid "Never again" msgstr "다시 묻지 않ìŒ" msgid "Always" msgstr "í•­ìƒ" msgid "Just this once" msgstr "ì´ë²ˆ 한번 ë§Œ" msgid "Remember output path" msgstr "출력 경로 기억" msgid "Overwrite existing files without asking" msgstr "기존 파ì¼ì— ë®ì–´ì“°ê¸°" msgid "Tag" msgstr "태그" #. Fill table with EXIF tags msgid "Camera maker" msgstr "ì¹´ë©”ë¼ ë©”ì´ì»¤" msgid "Camera model" msgstr "ì¹´ë©”ë¼ ëª¨ë¸" msgid "Timestamp" msgstr "타임스탬프" msgid "Shutter time" msgstr "셔터 ì†ë„" msgid "Aperture" msgstr "조리개" msgid "ISO speed" msgstr "ISO ê°ë„" msgid "35mm focal length" msgstr "35mm 초첨 거리" msgid "Flash" msgstr "플레쉬" msgid "White balance" msgstr "í™”ì´íЏ 벨런스" #, c-format msgid "EXIF data read by %s" msgstr "'%s'(으)로 EXIF 정보를 ì½ìŒ" msgid "Warning: EXIF data will not be sent to output" msgstr "경고: EXIF ì •ë³´ê°€ ì¶œë ¥ì— í¬í•¨ë˜ì§€ ì•Šì„ ê²ƒìž…ë‹ˆë‹¤" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "스팟 ê°’:" msgid "Exposure compensation in EV" msgstr "EVì—서 노출 ë³´ì •" msgid "Auto adjust exposure" msgstr "ìžë™ 노출 ì¡°ì •" msgid "Reset exposure to default" msgstr "노출값 초기화" msgid "Grayscale" msgstr "그레ì´ìŠ¤ì¼€ì¼" #. Lens correction page msgid "Lens correction" msgstr "렌즈 ë³´ì •" msgid "Base curve" msgstr "기본 곡선" msgid "Color management" msgstr "색조 처리" msgid "Correct luminosity, saturation" msgstr "ì¡°ë„, ì±„ë„ ì¡°ì •" msgid "Lightness Adjustments" msgstr "ë°ê¸° ì¡°ì •" msgid "Crop and rotate" msgstr "잘ë¼ë‚´ê¸°ì™€ 회전" msgid "Save" msgstr "저장" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "확대 비율" msgid "Options" msgstr "옵션" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "ì‚­ì œ(_D)" msgid "Send image to _Gimp" msgstr "ì´ë¯¸ì§€ë¥¼ 김프로 전달(_G)" msgid "Fatal error setting C locale" msgstr "C 로캘 설정 중 치명ì ì¸ 오류" #, c-format msgid "Curve version is not supported" msgstr "ì§€ì›ë˜ì§€ 않는 곡선 버전" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "유효하지 ì•Šì€ ë‹ˆì½˜ 곡선 íŒŒì¼ '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "곡선 íŒŒì¼ '%s' 열기 오류: %s" #, c-format msgid "Error opening file '%s': %s" msgstr "íŒŒì¼ '%s' 열기 오류: %s" msgid "File exists" msgstr "파ì¼ì´ 존재함" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "'%s'파ì¼ì´ ì´ë¯¸ 존재합니다.\n" "ë®ì–´ì“¸ê¹Œìš”?" msgid "Error creating temporary file." msgstr "임시 íŒŒì¼ ë§Œë“¤ê¸° 실패." msgid "Error activating Gimp." msgstr "김프 실행 중 오류 ë°œìƒ." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "ì¹´ë©”ë¼ í™”ì´íЏ 벨런스를 사용할 수 없으므로, ìžë™ í™”ì´íЏ 벨런스로 ë˜ëŒë¦½ë‹ˆë‹¤.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "--temperature 와 --green ì˜µì…˜ì€ --wb=%s ì˜µì…˜ì„ ë®ì–´ì”니다." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s'ì€(는) 올바른 í™”ì´íЏ 벨런스 ì„¤ì •ì´ ì•„ë‹™ë‹ˆë‹¤." msgid "Remote URI is not supported" msgstr "ì›ê²© URI는 ì§€ì›í•˜ì§€ 않습니다" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "다í¬í”„레임 오류: %sì€(는) raw 파ì¼ì´ 아닙니다\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "다í¬í”„레임 '%s'ì„(를) 불러오는 중 오류 ë°œìƒ\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "다í¬í”„레임 '%s'ì€(는) ë©”ì¸ ì´ë¯¸ì§€ì™€ 호환ë˜ì§€ 않습니다." #, c-format msgid "using darkframe '%s'\n" msgstr "다í¬í”„레임 '%s' 사용\n" msgid "Error reading NEF curve" msgstr "NEF 곡선 ì½ê¸° 실패" #, c-format msgid "Can not downsize from %d to %d." msgstr "%dì—서 %d(으)로 í¬ê¸°ë¥¼ 축소할 수 없습니다." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "%s íŒŒì¼ ë§Œë“¤ê¸° 실패." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "íŒŒì¼ ë§Œë“¤ê¸° 실패." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "ì´ë¯¸ì§€ì˜ íŒŒì¼ ì´ë¦„ì€ ID íŒŒì¼ ì´ë¦„ '%s'와 ê°™ì„ ìˆ˜ 없습니다." #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "출력 í”„ë¡œíŒŒì¼ '%s'ì„(를) '%s'ì— í¬í•¨í•˜ëŠ”ë° ì‹¤íŒ¨í•˜ì˜€ìŠµë‹ˆë‹¤." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "비트 '%d'ì€(는) ì§€ì›í•˜ì§€ 않습니다." #, c-format msgid "Unknown file type %d." msgstr "알 수 없는 íŒŒì¼ íƒ€ìž… %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "ì¼ê´‘" #. Probably same as above: msgid "Direct sunlight" msgstr "ì§ íƒœì–‘ê´‘" msgid "Cloudy" msgstr "í린날" #. "Shadows" should be switched to this: msgid "Shade" msgstr "그림ìž" msgid "Incandescent" msgstr "백열등" msgid "Incandescent warm" msgstr "따뜻한 백열등" #. Same as "Incandescent": msgid "Tungsten" msgstr "텅스í…" msgid "Fluorescent" msgstr "형광등" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "강한 조명" msgid "Cool white fluorescent" msgstr "차가운 백색 형광등" msgid "Warm white fluorescent" msgstr "따뜻한 백색 형광등" msgid "Daylight fluorescent" msgstr "주광색 형광등" msgid "Neutral fluorescent" msgstr "ìžì—°ê´‘ 형광등" msgid "White fluorescent" msgstr "백색 형광등" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "ì†Œë“ í˜•ê´‘ë“±" msgid "Day white fluorescent" msgstr "주백색 형광등" msgid "High temp. mercury-vapor fluorescent" msgstr "고온(K)ì˜ ìˆ˜ì€ í˜•ê´‘ë“±" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "플래쉬 (ìžë™ 모드)" msgid "Evening sun" msgstr "ì„ì–‘" msgid "Underwater" msgstr "수중" msgid "Black & white" msgstr "í‘ë°±" msgid "Manual WB" msgstr "ìˆ˜ë™ í™”ë²¨" msgid "Camera WB" msgstr "ì¹´ë©”ë¼ í™”ë²¨" msgid "Auto WB" msgstr "ìžë™ 화벨" ufraw-0.19.2/po/da.po0000664000175000017500000012751712123734456011240 00000000000000# Danish translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Niels Kristian Bech Jensen , 2006-2013. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2013-03-10 19:30+0100\n" "Last-Translator: Niels Kristian Bech Jensen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Ã…bn navigationsvinduet" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Værdien %.*f er for stor, beskÃ¥ret til %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Værdien %.*f er for lille, beskÃ¥ret til %.*f." msgid "No input file, nothing to do." msgstr "Ingen inddatafil, ikke noget at lave." #, c-format msgid "Loaded %s %s" msgstr "%s %s indlæst" #, c-format msgid "Saved %s %s" msgstr "%s %s gemt" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "j" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: overskriv '%s'?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "Tilvalget --silent kan kun anvendes med 'ufraw-batch'" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "Tilvalget --embedded-image kan kun anvendes med 'ufraw-batch'" msgid "Raw images" msgstr "Raw-billeder" msgid "UFRaw ID files" msgstr "UFRaw ID-filer" msgid "Raw jpeg's" msgstr "Raw jpeg'er" msgid "Raw tiff's" msgstr "Raw tiff'er" msgid "All files" msgstr "Alle filer" msgid "Show hidden files" msgstr "Vis skjulte filer" msgid "Manual curve" msgstr "Manuel kurve" msgid "Linear curve" msgstr "Lineær kurve" msgid "Custom curve" msgstr "Brugerdefineret kurve" msgid "Camera curve" msgstr "Kamerakurve" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Ingen profil" msgid "Color matrix" msgstr "Farvematrice" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (indlejret)" msgid "System default" msgstr "Systemstandardværdi" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Prøver at konvertere .ufrawrc fra UFRaw-0.4 eller tidligere" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Prøver at konvertere .ufrawrc fra UFRaw-0.6 eller tidligere" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw-versionen i .ufrawrc er ikke understøttet" #, c-format msgid "Too many anchors for curve '%s'" msgstr "For mange ankerpunkter i kurve '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "For mange lysværdijusteringer i ID-filen, ignoreret\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID-fil %s er tilsyneladende ikke en regulær fil\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Kan ikke Ã¥bne ID-fil %s for indlæsning\n" "%s\n" #, c-format msgid "Error reading from file '%s'." msgstr "Fejl ved læsning fra filen '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Fejl ved fortolkning af '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Kan ikke Ã¥bne filen %s for skrivning\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "kan ikke --create-id til standarduddata" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Uidentificeret Flyvende Raw-konverter til digitalkamerabilleder.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Anvendelse: ufraw [ tilvalg ... ] [ raw-billed-filer ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ tilvalg ... ] [ raw-billed-filer ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ tilvalg ... ] [ standardmappe ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Normalt viser 'ufraw' et forhÃ¥ndsvisningsvindue for hvert raw-billede, der\n" "tillader brugeren at finjustere billedparametrene før billedet gemmes. " "UFRaw\n" "viser en filvalgsdialog, hvis der ikke er angivet nogen raw-billeder pÃ¥\n" "kommandolinien. Brug 'ufraw-batch' til at behandle billeder uden at skulle\n" "svare pÃ¥ spørgsmÃ¥l (og uden forhÃ¥ndsvisning).\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Inddatafilerne kan være enten raw-billeder eller ufraws ID-filer. ID-filer\n" "indeholder et raw-billedfilnavn og parametrene til behandling af billedet.\n" "Man kan ogsÃ¥ anvende en ID-fil med tilvalget:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-fil Brug parametrene i ID-fil pÃ¥ andre raw-billeder.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "De resterende tilvalg er delt i to grupper.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Tilvalgene, der er relateret til billedbehandling, er:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Hvidbalanceindstilling.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Farvetemperatur i Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GRØN Grøn farvenormalisering.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|KURVE\n" " Basistonekurvetype. KURVE kan være en hvilken som " "helst\n" " kurve, der har været indlæst i den grafiske " "brugerflade.\n" " (standardværdi camera hvis den findes, ellers " "linear).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=fil\n" " Brug basistonekurve fra den specificerede fil.\n" " Har forret for tilvalget --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|KURVE\n" " Lysstyrkekurvetype. KURVE kan være en hvilken som " "helst\n" " kurve, der har været indlæst i den grafiske " "brugerflade.\n" " (standardværdi linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=fil Brug lysstyrkekurve fra den specificerede fil.\n" " Har forret for tilvalget --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Gendan detaljer for negative LV.\n" " 'clip' gendanner intet - sikrer mod tab af detaljer.\n" " 'lch' gendanner i LCH-farverummet - giver bløde\n" " detaljer.\n" " 'hsv' gendanner i HSV-farverummet - giver skarpe\n" " detaljer. (standardværdi lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Klip højlys for positive LV.\n" " 'digital' lineær digitalsensorkurve.\n" " 'film' emulerer blød filmkurve. (standardværdi " "digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Gammajustering for basiskurven (standardværdi 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEARITET\n" " Linearitet af basiskurven (standardværdi 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=KONTRAST Kontrastjustering (standardværdi 1.0.\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=MÆTNING Farvemætingsjustering (standardværdi 1.0,\n" " 0 for sort & hvid uddata).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=TÆRSKELVÆRDI\n" " Wavelet støjreduktionstærskelværdi (standardværdi " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VÆRDI\n" " Følsomhed for detektion og reduktion af defekte pixels " "(standardværdi 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EKSPONERING\n" " Autoeksponering eller eksponeringskorrektion i LV\n" " (standardværdi 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|SORT\n" " Autosortpunkt eller sortpunktsværdi (standardværdi " "0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolationsalgoritme (standardværdi ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Anvend farveudjævning.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " GrÃ¥tonekonverteringsalgoritme (standardværdi none).\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=RØD,GRØN,BLÃ…\n" " GrÃ¥tonemikserværdier (standardværdier 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Tilvalgene, der er relateret til de endelige uddata, er:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FAKTOR Formindsk billedet med FAKTOR (standardværdi 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=STØRRELSE Formindsk maks(højde,bredde) til STØRRELSE.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Uddatafilformat (standardværdi ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Uddatabitdybde pr. kanal (standardværdi 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Dan ikke|ogsÃ¥|kun ID-fil (standardværdi ikke).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VÆRDI JPEG-komprimering (0-100, standardværdi 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Indlejr EXIF i uddata (standardværdi indlejr EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Vælg [fravælg] TIFF zip-komprimering\n" " (standardværdi fravælg).\n" msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Brug det i raw-filen indlejrede miniaturebillede\n" " i stedet for at konvertere raw-billedet. Dette " "tilvalg\n" " kan kun anvendes med 'ufraw-batch'.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|VINKEL|no\n" " Roter billedet efter kameraets indstilling, VINKEL\n" " grader med uret eller lad være med at rotere billedet\n" " (standardværdi camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PUNKTER\n" " Beskær uddata til det angivne antal punkter i forhold " "til\n" " raw-billedet efter rotation, men før skalering.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "--auto-crop Beskær uddata automatisk.\n" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" "--aspect-ratio X:Y Sæt sidelængdeforholdet for det beskÃ¥rne omrÃ¥de.\n" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Anvend ikke objektivkorrektion eller prøv at anvende\n" " korrektion ved at auto-detektere objektivet\n" " (standardværdi none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=STI STI for uddatafil (som standardværdi bruges\n" " inddatafilens sti).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FIL Uddatafilens navn, brug '-' for standarduddata.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=FIL Brug FIL til raw-sortbilledsubtraktion.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Overskriv eksisterende filer uden at spørge\n" " (standardværdi nej).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Tving vinduet til at være maksimeret.\n" msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Vis ingen meddelelser under konvertering. Dette\n" " tilvalg kan kun anvendes med 'ufraw-batch'.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw læser først indstillinger fra ressourcefilen $HOME/.ufrawrc.\n" "SÃ¥ læses indstillinger fra en ID-fil, hvis en sÃ¥dan er angivet. Dernæst\n" "tages indstillingerne fra --conf tilvalget, hvor inddata-/uddata-filnavne i\n" "ID-filen ignoreres. Til sidst anvendes tilvalg fra kommandolinien.\n" "I batch-modus indlæses den anden gruppe tilvalg IKKE fra ressourcefilen.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Sidst, men ikke mindst, viser --version versionsnummer og bygningstilvalg\n" "for ufraw, mens --help viser denne hjælpetekst og stopper programmet.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' er ikke en legal værdi for tilvalget --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw blev bygget uden ZIP-understøttelse." msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch er forældet. Anvend 'ufraw-batch' i stedet for." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt returnerede tegnkode 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "fejl ved indlæsning af kurve fra %s, for mange indlæste basiskurver" #, c-format msgid "failed to load curve from %s" msgstr "fejl ved indlæsning af kurve fra %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' er ikke et legalt basiskurvenavn." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "fejl ved indlæsning af kurve fra %s, for mange indlæste kurver" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' er ikke et legalt kurvenavn." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' er ikke et legalt interpolationstilvalg." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' er ikke et legalt grÃ¥tone-tilvalg." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' er ikke et legalt grÃ¥tonemiksertilvalg." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' er ikke et legalt gendannelsestilvalg." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' er ikke et legalt klipningstilvalg." msgid "you can not specify both --shrink and --size" msgstr "Du kan ikke anvende bÃ¥de --shrink og --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' er ikke en legal bitdybde." #, c-format msgid "Output type '%s' is deprecated" msgstr "Uddatatype '%s' er forældet" msgid "ufraw was build without TIFF support." msgstr "ufraw blev bygget uden TIFF-understøttelse." msgid "ufraw was build without JPEG support." msgstr "ufraw blev bygget uden JPEG-understøttelse." msgid "ufraw was build without PNG support." msgstr "ufraw blev bygget uden PNG-understøttelse." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' er ikke en legal uddatatype." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' er ikke en legal uddatatype for indlejrede billeder." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' er ikke en legal bitdybde for indlejrede billeder." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' er ikke et legalt rotate-tilvalg." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' er ikke et legalt create-id-tilvalg." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' er ikke en legal sti." msgid "cannot output more than one file to the same output" msgstr "kan ikke skrive mere end en fil til samme uddata" #, c-format msgid "Raw file '%s' missing." msgstr "Raw-fil '%s' findes ikke." msgid "Delete raw file" msgstr "Slet raw-fil" msgid "_Delete selected" msgstr "_Slet valgte" msgid "Delete _All" msgstr "Slet _alle" msgid "Select files to delete" msgstr "Vælg filer der skal slettes" #, c-format msgid "Error reading directory '%s'." msgstr "Fejl ved læsning af bibliotek '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Fejl ved sletning af '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Læsning af indlejret billede kræver libjpeg." msgid "No embedded image found" msgstr "Indlejret billede ikke fundet" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Originalstørrelsen (%d) er mindre end den valgte størrelse (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "Indlejret ppm forskellighed, højde %d, bredde %d, mens buffer %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Indlejret JPEG højde %d anderledes end forventet %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Indlejret JPEG bredde %d anderledes end forventet %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Fejl ved dannelse af filen '%s'.\n" "%s" msgid "No embedded image read" msgstr "Indlejret billede ikke læst" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Fejl ved dannelse af fil '%s'. Ukendt filtype %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Fejl ved dannelse af filen '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Fejl ved skrivning af '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Ikke-understøttet uddatatype (%d) for indlejret billede" #, c-format msgid "Loading raw file '%s'" msgstr "Indlæser raw-fil '%s'" msgid "Can't allocate new image." msgstr "Kan ikke allokere nyt billede." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Baggrund" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Fejl ved indlejring af uddataprofil '%s' i billede." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF-buffer længde %d, for lang, ignoreret." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Fabrikat:\t\t\t\t%s\n" "Model:\t\t\t\t%s%s\n" "Fatning:\t\t\t\t%s\n" "Forlængelsesfaktor:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Fabrikat:\t\t\t\t%s\n" "Model:\t\t\t\t%s\n" "BrændviddeomrÃ¥de:\t%s\n" "Blænde:\t\t\t\t%s\n" "Forlængelsesfaktor:\t%.1f\n" "Type:\t\t\t\t%s\n" "Fatninger:\t\t\t%s" msgid "Focal" msgstr "Brændvidde" msgid "Focal length" msgstr "Brændvidde" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-tal (Blænde)" msgid "Distance" msgstr "Afstand" msgid "Distance to subject in meters" msgstr "Afstand til motivet i meter" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "Matematisk model for kromatisk aberration" msgid "Parameters" msgstr "Parametre" msgid "Optical vignetting mathematical model" msgstr "Matematisk model for optisk vignettering" msgid "Lens distortion mathematical model" msgstr "Matematisk model for objektivforvrængning" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Objektivgeometri:" msgid "The geometry of the lens used to make the shot" msgstr "Geometrien i det objektiv, der blev brugt ved optagelsen" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Motivgeometri:" msgid "The target geometry for output image" msgstr "Den motivgeometry, der ønskes i det færdige billede" msgid "Camera" msgstr "Kamera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Søg efter kamera ved hjælp af et mønster\n" "Format: [Fabrikant, ][Model]" msgid "Choose camera from complete list" msgstr "Vælg kamera fra fuldstændig liste" msgid "Reset all lens correction settings" msgstr "Resæt alle objektivkorrektionsindstillinger" #. Lens selector msgid "Lens" msgstr "Objektiv" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Søg efter objektiv ved hjælp af et mønster\n" "Format: [Fabrikant, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Vælg objektiv fra liste over mulige varianter" msgid "Automatically find lens and set lens corrections" msgstr "Find objektiv og indstil objektivkorrektioner automatisk" msgid "Lateral chromatic aberration" msgstr "Lateral kromatisk aberration" msgid "Optical vignetting" msgstr "Optisk vignettering" msgid "Lens distortion" msgstr "Objektivforvrængning" msgid "Lens geometry" msgstr "Objektivgeometri" msgid "Raw histogram with conversion curves" msgstr "Raw-histogram med konverteringskurver" msgid "Live histogram" msgstr "Sandtidshistogram" #. No darkframe file msgid "None" msgstr "Ingen" msgid "Lightness" msgstr "Lysværdi" msgid "Luminance" msgstr "Luminans" msgid "Value" msgstr "Værdi" msgid "Channel Mixer" msgstr "Farvekanalmixer" msgid "UFRaw Message" msgstr "Besked fra UFRaw" msgid "No more room for new curves." msgstr "Ikke mere plads til nye kurver." msgid "Load curve" msgstr "Indlæser kurve" msgid "All curve formats" msgstr "Alle kurveformater" msgid "UFRaw curve format" msgstr "UFRaw kurveformat" msgid "Nikon curve format" msgstr "Nikon kurveformat" msgid "Save curve" msgstr "Gem kurve" msgid "No more room for new profiles." msgstr "Ikke mere plads til nye profiler." msgid "Load color profile" msgstr "Indlæs farveprofil" msgid "Color Profiles" msgstr "Farveprofiler" msgid "Luminosity (Y value)" msgstr "Lysstyrke (Y-værdi)" msgid "Adams' zone" msgstr "Adams' zone" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "størrelse %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "størrelse %dx%d, skala 1/%d" msgid "Wavelet denoising" msgstr "Wavelet-støjreduktion" msgid "Despeckling" msgstr "Afpletning" msgid "Interpolating" msgstr "Interpolerer" msgid "Rendering" msgstr "Renderer" msgid "Loading preview" msgstr "Indlæser forhÃ¥ndsvisning" msgid "Saving image" msgstr "Gemmer billede" #, c-format msgid "Black point: %0.3lf" msgstr "Sortpunkt: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Ikke mere plads til nye lysværdijusteringer." msgid "Aspect ratio locked, click to unlock" msgstr "Sidelængdeforholdet er lÃ¥st, klik for at lÃ¥se op" msgid "Aspect ratio unlocked, click to lock" msgstr "Sidelængdeforholdet er lÃ¥st op, klik for at lÃ¥se" msgid "Load dark frame" msgstr "Indlæs sortbillede" msgid "clip" msgstr "klip" msgid "restore in LCH space for soft details" msgstr "gendan i LCH-farverum for bløde detaljer" msgid "restore in HSV space for sharp details" msgstr "gendan i HSV-farverum for skarpe detaljer" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Gendan detaljer for negative LV\n" "Nuværende tilstand: %s" msgid "digital linear" msgstr "digital lineær" msgid "soft film like" msgstr "blød filmlignende" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Klip højlys for positive LV\n" "Nuværende tilstand: %s" #, c-format msgid "Filename: %s%s" msgstr "Filnavn: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Dan ogsÃ¥ ID-fil" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Dan kun ID-fil" msgid "UFRaw options" msgstr "UFRaw tilvalg" msgid "Settings" msgstr "Indstillinger" msgid "Input color profiles" msgstr "Inddatafarveprofiler" msgid "Output color profiles" msgstr "Uddatafarveprofiler" msgid "Display color profiles" msgstr "Monitorfarveprofiler" msgid "Base Curves" msgstr "Basiskurver" msgid "Luminosity Curves" msgstr "Lysstyrkekurver" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Ekstern Gimp kommando" msgid "Reset command to default" msgstr "Resæt kommando til standardværdi" msgid "Blink Over/Underexposure Indicators" msgstr "Blinkende over-/undereksponeringsindikatorer" msgid "Configuration" msgstr "Konfiguration" msgid "Save configuration" msgstr "Gem konfiguration" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Gem konfiguration i ressourcefil ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "Om" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Uidentificeret Flyvende Raw (UFRaw) er et " "program\n" "til at læse og behandle raw-billeder fra digitalkameraer.\n" "UFRaw anvender Digital Camera Raw (DCRaw)\n" "til den egentlige udkodning af raw-billeder.\n" "\n" "Programforfatter: Udi Fuchs\n" "Hjemmeside: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineær" msgid "Logarithmic" msgstr "Logaritmisk" msgid "Hot pixels: " msgstr "Defekte pixels: " msgid "mark" msgstr "marker" msgid "Hot pixel sensitivity" msgstr "Følsomhed for defekte pixels" msgid "Reset hot pixel sensitivity" msgstr "Resæt følsomhed for defekte pixels" msgid "RGB histogram" msgstr "RGB-histogram" msgid "R+G+B histogram" msgstr "R+G+B-histogram" msgid "Luminosity histogram" msgstr "Lysstyrkehistogram" msgid "Value (maximum) histogram" msgstr "Maksimumsværdihistogram" msgid "Saturation histogram" msgstr "Farvemætningshistogram" msgid "Average:" msgstr "Gennemsnit:" msgid "Std. deviation:" msgstr "Standardafvigelse:" msgid "Overexposed:" msgstr "Overeksponeret:" msgid "Indicate" msgstr "Vis" msgid "Underexposed:" msgstr "Undereksponeret:" msgid "White Balance" msgstr "Hvidbalance" msgid "Cannot use camera white balance." msgstr "Kamerahvidbalance kan ikke anvendes." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Der er ingen hvidbalanceforvalg til din kameramodel.\n" "Kig pÃ¥ UFRaws hjemmeside for information om, hvordan du\n" "fÃ¥r dit kamera understøttet." msgid "Reset white balance to initial value" msgstr "Resæt hvidbalance til startværdien" msgid "Temperature" msgstr "Temperatur" msgid "White balance color temperature (K)" msgstr "Hvidbalancefarvetemperatur (K)" msgid "Green" msgstr "Grøn" msgid "Green component" msgstr "Grøn komponent" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Vælg et punkt pÃ¥ forhÃ¥ndsvisningsbilledet for at anvende punkthvidbalance" msgid "Chan. multipliers:" msgstr "Kanalmultiplikatorer:" msgid "Bayer pattern interpolation" msgstr "Bayermønsterinterpolation" msgid "VNG four color interpolation" msgstr "VNG firfarveinterpolation" msgid "Bilinear interpolation" msgstr "Bilineær interpolation" msgid "AHD interpolation" msgstr "AHD-interpolation" msgid "VNG interpolation" msgstr "VNG-interpolation" msgid "PPG interpolation" msgstr "PPG-interpolation" msgid "No interpolation" msgstr "Ingen interpolation" msgid "No Bayer pattern" msgstr "Intet Bayermønster" msgid "Apply color smoothing" msgstr "Anvend farveudjævning" msgid "Denoise" msgstr "Støjreduktion" msgid "Threshold for wavelet denoising" msgstr "Tærskelværdi for wavelet-støjreduktion" msgid "Reset denoise threshold to default" msgstr "Resæt strøjreduktionstærskelværdi til standardværdi" msgid "Dark Frame:" msgstr "Sortbillede:" msgid "Reset dark frame" msgstr "Resæt sortbillede" msgid "Reset adjustment" msgstr "Resæt justering" msgid "Select a spot on the preview image to choose hue" msgstr "Vælg et punkt pÃ¥ forhÃ¥ndsvisningsbilledet for at vælge farvetone" msgid "Remove adjustment" msgstr "Fjern justering" msgid "Grayscale Mode:" msgstr "GrÃ¥toneskalamodus:" msgid "Reset channel mixer" msgstr "Resæt farvekanalmixer" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Afpletning er især brugbart ved kombinationen af en høj ISO-værdi med en høj " "kanalmultiplikator: nÃ¥r en kanal har et meget dÃ¥rligt signal/støj-forhold. " "Prøv at sætte vinduesstørrelse, farvehenfald og antal kørsler til 50,0,5 for " "den kanal. Prøv 1,0.6,1 nÃ¥r en kanal kun indeholder støj.\n" "Afpletning is slukket nÃ¥r vinduesstørrelse eller kørsler er nul. NÃ¥r den er " "i brug kan vinduesstørrelsen ikke være mindre end antal kørsler." msgid "Update channel parameters together" msgstr "Opdater kanalparametre sammen" msgid "Reset despeckle parameters" msgstr "Resæt afpletningsparametre" #. channel to view msgid "View channel:" msgstr "Se kanal:" #. Parameters msgid "Window size:" msgstr "Vinduesstørrelse:" msgid "Color decay:" msgstr "Farvehenfald:" msgid "Passes:" msgstr "Kørsler:" msgid "Load base curve" msgstr "Indlæs basiskurve" msgid "Save base curve" msgstr "Gem basiskurve" msgid "Reset base curve to default" msgstr "Resæt basiskurve til standardværdi" msgid "Input ICC profile" msgstr "Inddata-ICC-profil" msgid "Output ICC profile" msgstr "Uddata-ICC-profil" msgid "Display ICC profile" msgstr "Monitor-ICC-profil" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Gammakorrektion for inddataprofilen" msgid "Reset gamma to default" msgstr "Resæt gamma til standardværdi" msgid "Linearity" msgstr "Linearitet" msgid "Linear part of the gamma correction" msgstr "Lineær del af gammakorrektionen" msgid "Reset linearity to default" msgstr "Resæt linearitet til standardværdi" msgid "Output intent" msgstr "Uddatafarvegengivelse" msgid "Perceptual" msgstr "Som opfattet" msgid "Relative colorimetric" msgstr "Relativ kolorimetrisk" msgid "Saturation" msgstr "Farvemættet" msgid "Absolute colorimetric" msgstr "Absolut kolorimetrisk" msgid "Output bit depth" msgstr "Uddatabitdybde" msgid "Display intent" msgstr "Monitorfarvegengivelse" msgid "Disable soft proofing" msgstr "Fravælg softwarekorrektur" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Global kontrastjustering" msgid "Reset global contrast to default" msgstr "Resæt den globale kontrast til standardværdi" msgid "Reset saturation to default" msgstr "Resæt farvemætning til standardværdi" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automatisk kurveindstilling\n" "(Udjævn histogram)" msgid "Reset curve to default" msgstr "Resæt kurve til standardværdi" msgid "Reset black-point to default" msgstr "Resæt sortpunkt til standardværdi" msgid "Auto adjust black-point" msgstr "Automatisk sortpunktsindstilling" #. Start of Crop controls msgid "Left:" msgstr "Venstre:" msgid "Top:" msgstr "Top:" msgid "Right:" msgstr "Højre:" msgid "Bottom:" msgstr "Bund:" msgid "Auto fit crop area" msgstr "Tilpas beskæringsareal automatisk" msgid "Reset the crop area" msgstr "Resæt beskæringsareal" msgid "Aspect ratio:" msgstr "Sidelængdeforhold:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Sidelængdeforholdet for det beskÃ¥rne omrÃ¥de.\n" "Kan indtastes som decimaltal (1.273)\n" "eller som et forhold mellem to tal (14:11)" msgid "Shrink factor" msgstr "Formindskelsesfaktor" msgid "Width" msgstr "Bredde" msgid "Height" msgstr "Højde" msgid "Orientation:" msgstr "Orientering:" msgid "Rotation" msgstr "Rotation" msgid "Rotation angle" msgstr "Rotationsvinkel" msgid "Reset rotation angle" msgstr "Resæt rotationsvinkel" #. drawLines toggle button msgid "Grid lines" msgstr "Gitterlinjer" msgid "Number of grid lines to overlay in the crop area" msgstr "Antallet af gitterlinjer, der lægges over beskæringsomrÃ¥det" msgid "Path" msgstr "Sti" msgid "Select output path" msgstr "Vælg uddatasti" msgid "Filename" msgstr "Filnavn" msgid "JPEG compression level" msgstr "JPEG komprimeringsniveau" msgid "JPEG progressive encoding" msgstr "JPEG progressiv indkodning" msgid "TIFF lossless Compress" msgstr "TIFF tabsfri komprimering" msgid "Embed EXIF data in output" msgstr "Indlejr EXIF-data i uddata" msgid "Create ID file " msgstr "Dan ID-fil " msgid "No" msgstr "Ingen" msgid "Also" msgstr "OgsÃ¥" msgid "Only" msgstr "Kun" msgid "Save image defaults " msgstr "Gem billedstandardværdier " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Gem nuværende billedbehandlingsparametre som standardværdier.\n" "Uddataparametrene i dette vindue gemmes altid." msgid "Never again" msgstr "Aldrig igen" msgid "Always" msgstr "Altid" msgid "Just this once" msgstr "Kun denne ene gang" msgid "Remember output path" msgstr "Husk uddatasti" msgid "Overwrite existing files without asking" msgstr "Overskriv eksisterende filer uden at spørge" msgid "Tag" msgstr "Etiket" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Kamerafabrikant" msgid "Camera model" msgstr "Kameramodel" msgid "Timestamp" msgstr "Optagelsestidspunkt" msgid "Shutter time" msgstr "Lukkertid" msgid "Aperture" msgstr "Blænde" msgid "ISO speed" msgstr "ISO-følsomhed" msgid "35mm focal length" msgstr "35mm brændvidde" msgid "Flash" msgstr "Flash" msgid "White balance" msgstr "Hvidbalance" #, c-format msgid "EXIF data read by %s" msgstr "EXIF-data læst af %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Advarsel: EXIF-data vil ikke blive sendt til uddata" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Punktværdier:" msgid "Exposure compensation in EV" msgstr "Eksponeringskompensation i LV" msgid "Auto adjust exposure" msgstr "Automatisk eksponeringsindstilling" msgid "Reset exposure to default" msgstr "Resæt eksponering til standardværdi" msgid "Grayscale" msgstr "GrÃ¥toneskala" #. Lens correction page msgid "Lens correction" msgstr "Objektivkorrektion" msgid "Base curve" msgstr "Basiskurve" msgid "Color management" msgstr "Farvestyring" msgid "Correct luminosity, saturation" msgstr "Korriger lysstyrke, farvemætning" msgid "Lightness Adjustments" msgstr "Lysværdijusteringer" msgid "Crop and rotate" msgstr "Beskær og roter" msgid "Save" msgstr "Gem" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom-procent" msgid "Options" msgstr "Tilvalg" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Slet" msgid "Send image to _Gimp" msgstr "Send _billede til Gimp" msgid "Fatal error setting C locale" msgstr "Fatal fejl ved indstilling af C-lokalisering" #, c-format msgid "Curve version is not supported" msgstr "Kurveversion er ikke understøttet" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Ugyldig Nikon kurvefil '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Fejl ved Ã¥bning af kurvefil '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Fejl ved Ã¥bning af fil '%s': %s" msgid "File exists" msgstr "Filen findes" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Filen '%s' findes allerede.\n" "Overskriv?" msgid "Error creating temporary file." msgstr "Fejl ved dannelse af midlertidig fil." msgid "Error activating Gimp." msgstr "Fejl ved aktivering af Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Kamerahvidbalance kan ikke anvendes, skifter to automatisk hvidbalance.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "Tilvalgene --temperature og --green har forret for tilvalget --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' er ikke en legal hvidbalanceindstilling." msgid "Remote URI is not supported" msgstr "Ekstern URI er ikke understøttet" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "sortbilledfejl: %s er ikke en raw-fil\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "fejl i indlæsning af sortbillede '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Sortbillede '%s' er ikke kompatibelt med hovedbilledet" #, c-format msgid "using darkframe '%s'\n" msgstr "bruger sortbillede '%s'\n" msgid "Error reading NEF curve" msgstr "Fejl i indlæsning af NEF-kurve" #, c-format msgid "Can not downsize from %d to %d." msgstr "Kan ikke formindske fra %d til %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Fejl ved dannelse af fil '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Fejl ved dannelse af fil." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Billedfilnavnet kan ikke være det samme som ID-filnavnet '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Fejl ved indlejring af uddataprofil '%s' i '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Ikke-understøttet bitdybde '%d' ignoreret." #, c-format msgid "Unknown file type %d." msgstr "Ukendt filtype %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Dagslys" #. Probably same as above: msgid "Direct sunlight" msgstr "Direkte sollys" msgid "Cloudy" msgstr "Overskyet" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Skygge" msgid "Incandescent" msgstr "Glødelampe" msgid "Incandescent warm" msgstr "Varm glødelampe" #. Same as "Incandescent": msgid "Tungsten" msgstr "Glødelampe" msgid "Fluorescent" msgstr "Fluorescerende" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Højtemperatur fluorescerende" msgid "Cool white fluorescent" msgstr "Koldt, hvidt fluorescerende" msgid "Warm white fluorescent" msgstr "Varmt, hvidt fluorescerende" msgid "Daylight fluorescent" msgstr "Fluorescerende i dagslys" msgid "Neutral fluorescent" msgstr "Neutralt fluorescerende" msgid "White fluorescent" msgstr "Hvidt fluorescerende" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Natriumdamplampe" msgid "Day white fluorescent" msgstr "Hvidt fluorescerende i dagslys" msgid "High temp. mercury-vapor fluorescent" msgstr "Højtemperatur-kviksølvdamplampe" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flash (auto-modus)" msgid "Evening sun" msgstr "Aftensol" msgid "Underwater" msgstr "Under vandet" msgid "Black & white" msgstr "Sort/hvid" msgid "Manual WB" msgstr "Manuel HB" msgid "Camera WB" msgstr "Kamera-HB" msgid "Auto WB" msgstr "Automatisk HB" ufraw-0.19.2/po/sv.po0000664000175000017500000007625312123734456011304 00000000000000# Swedish translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Daniel Nylander , 2007, 2009. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2009-01-04 06:00+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Öppna navigatorfönstret" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "" msgid "No input file, nothing to do." msgstr "Ingen inmatningsfil, ingenting att göra." #, c-format msgid "Loaded %s %s" msgstr "Läste in %s %s" #, c-format msgid "Saved %s %s" msgstr "Sparade %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "j" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: skriv över \"%s\"?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "" msgid "Raw images" msgstr "RÃ¥bilder" msgid "UFRaw ID files" msgstr "" msgid "Raw jpeg's" msgstr "RÃ¥bilder" msgid "Raw tiff's" msgstr "RÃ¥bilder" msgid "All files" msgstr "Alla filer" msgid "Show hidden files" msgstr "Visa dolda filer" msgid "Manual curve" msgstr "Manuell kurva" msgid "Linear curve" msgstr "Linjär kurva" msgid "Custom curve" msgstr "Anpassad kurva" msgid "Camera curve" msgstr "Kamerakurva" #. profileIndex[], profileCount[] #. Profile data defaults #, fuzzy msgid "No profile" msgstr "Färgprofiler" #, fuzzy msgid "Color matrix" msgstr "Använd färgmatris" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "" msgid "System default" msgstr "Systemstandard" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw-version i .ufrawrc stöds inte" #, c-format msgid "Too many anchors for curve '%s'" msgstr "" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Fel när filen \"%s\" skapades." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Fel vid tolkning av \"%s\"\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Kan inte öppna filen %s för skrivning\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "kan inte --create-id med standard ut" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Användning: ufraw [ flaggor ... ] [ rÃ¥bildsfiler ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ flaggor ... ] [ rÃ¥a-bildfiler ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ flaggor ... ] [ standardkatalog ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" msgid "The rest of the options are separated into two groups.\n" msgstr "" msgid "The options which are related to the image manipulation are:\n" msgstr "" msgid "--wb=camera|auto White balance setting.\n" msgstr "" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "" msgid "--green=GREEN Green color normalization.\n" msgstr "" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" #, fuzzy msgid "--color-smoothing Apply color smoothing.\n" msgstr "Tillämpa färgutjämning" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" msgid "The options which are related to the final output are:\n" msgstr "" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Filformat för utmatning (standard är ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VÄRDE JPEG-komprimering (0-100, standard är 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" msgid "--maximize-window Force window to be maximized.\n" msgstr "" msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "\"%s\" är inte ett giltigt värde för flaggan --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw byggdes utan ZIP-stöd." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch är förÃ¥ldrad. använd ufraw-batch istället." #, c-format msgid "getopt returned character code 0%o ??" msgstr "" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" #, c-format msgid "failed to load curve from %s" msgstr "misslyckades med att läsa in kurva frÃ¥n %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "" "misslyckades med att läsa in kurva frÃ¥n %s, för mÃ¥nga konfigurerade kurvor" #, c-format msgid "'%s' is not a valid curve name." msgstr "\"%s\" är inte ett giltigt kurvnamn." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "" #, fuzzy, c-format msgid "'%s' is not a valid grayscale option." msgstr "\"%s\" är inte en giltig sökväg." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "\"%s\" är inte en giltig sökväg." #, c-format msgid "'%s' is not a valid restore option." msgstr "" #, c-format msgid "'%s' is not a valid clip option." msgstr "" msgid "you can not specify both --shrink and --size" msgstr "" #, fuzzy, c-format msgid "'%d' is not a valid bit depth." msgstr "\"%s\" är inte en giltig sökväg." #, c-format msgid "Output type '%s' is deprecated" msgstr "" msgid "ufraw was build without TIFF support." msgstr "ufraw byggdes utan TIFF-stöd." msgid "ufraw was build without JPEG support." msgstr "ufraw byggdes utan JPEG-stöd." msgid "ufraw was build without PNG support." msgstr "ufraw byggdes utan PNG-stöd." #, c-format msgid "'%s' is not a valid output type." msgstr "" #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "" #, fuzzy, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "\"%s\" är inte ett giltigt kurvnamn." #, fuzzy, c-format msgid "'%s' is not a valid rotate option." msgstr "\"%s\" är inte en giltig sökväg." #, c-format msgid "'%s' is not a valid create-id option." msgstr "" #, c-format msgid "'%s' is not a valid path." msgstr "\"%s\" är inte en giltig sökväg." msgid "cannot output more than one file to the same output" msgstr "" #, c-format msgid "Raw file '%s' missing." msgstr "RÃ¥filen \"%s\" saknas." msgid "Delete raw file" msgstr "Ta bort rÃ¥fil" msgid "_Delete selected" msgstr "_Ta bort markerade" msgid "Delete _All" msgstr "Ta bort _alla" msgid "Select files to delete" msgstr "Välj filer att ta bort" #, c-format msgid "Error reading directory '%s'." msgstr "Fel vid läsning av katalogen \"%s\"." #, c-format msgid "Error deleting '%s'" msgstr "Fel vid borttagning av \"%s\"" msgid "Reading embedded image requires libjpeg." msgstr "" msgid "No embedded image found" msgstr "" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Originalstorlek (%d) är mindre än begärd storlek (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "" #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Fel vid skapande av filen \"%s\".\n" "%s" msgid "No embedded image read" msgstr "" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Fel vid skapande av filen \"%s\". Okänd filtyp %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Fel vid skapande av filen \"%s\": %s" #, c-format msgid "Error writing '%s'" msgstr "Fel vid skrivning av \"%s\"" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "" #, c-format msgid "Loading raw file '%s'" msgstr "Läser in rÃ¥filen \"%s\"" msgid "Can't allocate new image." msgstr "Kan inte allokera ny bild." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Bakgrund" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" msgid "Focal" msgstr "" msgid "Focal length" msgstr "Brännvidd" msgid "F" msgstr "" msgid "F-number (Aperture)" msgstr "" msgid "Distance" msgstr "" msgid "Distance to subject in meters" msgstr "" #. Add the model combobox msgid "Model:" msgstr "" msgid "Chromatic Aberrations mathematical model" msgstr "" msgid "Parameters" msgstr "" msgid "Optical vignetting mathematical model" msgstr "" msgid "Lens distortion mathematical model" msgstr "" #. Lens geometry combobox msgid "Lens geometry:" msgstr "" msgid "The geometry of the lens used to make the shot" msgstr "" #. Target lens geometry combobox msgid "Target geometry:" msgstr "" msgid "The target geometry for output image" msgstr "" #, fuzzy msgid "Camera" msgstr "Kamera VB" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose camera from complete list" msgstr "" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "Lins" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose lens from list of possible variants" msgstr "" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "" msgid "Optical vignetting" msgstr "" msgid "Lens distortion" msgstr "" msgid "Lens geometry" msgstr "" msgid "Raw histogram with conversion curves" msgstr "" msgid "Live histogram" msgstr "Levande histogram" #. No darkframe file msgid "None" msgstr "Ingen" msgid "Lightness" msgstr "" msgid "Luminance" msgstr "" msgid "Value" msgstr "Värde" msgid "Channel Mixer" msgstr "" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Ingen plats för nya kurvor." msgid "Load curve" msgstr "Läs in kurva" msgid "All curve formats" msgstr "Alla kurvformat" msgid "UFRaw curve format" msgstr "UFRaw-kurvformat" msgid "Nikon curve format" msgstr "Nikon-kurvformat" msgid "Save curve" msgstr "Spara kurva" msgid "No more room for new profiles." msgstr "Ingen plats för nya profiler." msgid "Load color profile" msgstr "Läs in färgprofil" msgid "Color Profiles" msgstr "Färgprofiler" msgid "Luminosity (Y value)" msgstr "Luminans (Y-värde)" msgid "Adams' zone" msgstr "" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "storlek %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "storlek %dx%d, skala 1/%d" msgid "Wavelet denoising" msgstr "" msgid "Despeckling" msgstr "" #, fuzzy msgid "Interpolating" msgstr "VNG-interpolering" msgid "Rendering" msgstr "" msgid "Loading preview" msgstr "Läser in förhandsvisning" msgid "Saving image" msgstr "Sparar bild" #, c-format msgid "Black point: %0.3lf" msgstr "Svartpunkt: %0.3lf" #, fuzzy msgid "No more room for new lightness adjustments." msgstr "Ingen plats för nya kurvor." msgid "Aspect ratio locked, click to unlock" msgstr "" msgid "Aspect ratio unlocked, click to lock" msgstr "" msgid "Load dark frame" msgstr "" msgid "clip" msgstr "" msgid "restore in LCH space for soft details" msgstr "" msgid "restore in HSV space for sharp details" msgstr "" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" msgid "digital linear" msgstr "" msgid "soft film like" msgstr "" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" #, c-format msgid "Filename: %s%s" msgstr "Filnamn: %s%s" msgid "" "\n" "Create also ID file" msgstr "" msgid "" "\n" "Create only ID file" msgstr "" msgid "UFRaw options" msgstr "" msgid "Settings" msgstr "Inställningar" msgid "Input color profiles" msgstr "" msgid "Output color profiles" msgstr "" msgid "Display color profiles" msgstr "Visa färgprofiler" msgid "Base Curves" msgstr "Baskurvor" msgid "Luminosity Curves" msgstr "Luminanskurvor" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "" msgid "Reset command to default" msgstr "" msgid "Blink Over/Underexposure Indicators" msgstr "" msgid "Configuration" msgstr "Konfiguration" #, fuzzy msgid "Save configuration" msgstr "Spara fullständig konfiguration" #, fuzzy msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Spara resursfil ($HOME/.ufrawrc)" msgid "Log" msgstr "Logg" msgid "About" msgstr "Om" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Linjär" msgid "Logarithmic" msgstr "Logaritmisk" msgid "Hot pixels: " msgstr "" msgid "mark" msgstr "" msgid "Hot pixel sensitivity" msgstr "" msgid "Reset hot pixel sensitivity" msgstr "" msgid "RGB histogram" msgstr "RGB-histogram" msgid "R+G+B histogram" msgstr "R+G+B-histogram" msgid "Luminosity histogram" msgstr "Luminanshistogram" msgid "Value (maximum) histogram" msgstr "" msgid "Saturation histogram" msgstr "" msgid "Average:" msgstr "Genomsnitt:" msgid "Std. deviation:" msgstr "Std. avvikelse:" msgid "Overexposed:" msgstr "Överexponerad:" msgid "Indicate" msgstr "Indikera" msgid "Underexposed:" msgstr "Underexponerad:" msgid "White Balance" msgstr "Vitbalans" msgid "Cannot use camera white balance." msgstr "" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" msgid "Reset white balance to initial value" msgstr "Nollställ vitbalans till startvärde" msgid "Temperature" msgstr "Färgtemperatur" msgid "White balance color temperature (K)" msgstr "Färgtemperatur för vitbalans (K)" msgid "Green" msgstr "Grön" msgid "Green component" msgstr "" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" msgid "Chan. multipliers:" msgstr "" msgid "Bayer pattern interpolation" msgstr "" msgid "VNG four color interpolation" msgstr "" msgid "Bilinear interpolation" msgstr "Bilinjär interpolering" msgid "AHD interpolation" msgstr "AHD-interpolering" msgid "VNG interpolation" msgstr "VNG-interpolering" msgid "PPG interpolation" msgstr "PPG-interpolering" #, fuzzy msgid "No interpolation" msgstr "VNG-interpolering" msgid "No Bayer pattern" msgstr "Inget Bayer-mönster" msgid "Apply color smoothing" msgstr "Tillämpa färgutjämning" msgid "Denoise" msgstr "" msgid "Threshold for wavelet denoising" msgstr "" msgid "Reset denoise threshold to default" msgstr "" msgid "Dark Frame:" msgstr "" msgid "Reset dark frame" msgstr "" msgid "Reset adjustment" msgstr "" msgid "Select a spot on the preview image to choose hue" msgstr "" msgid "Remove adjustment" msgstr "" msgid "Grayscale Mode:" msgstr "" msgid "Reset channel mixer" msgstr "" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" msgid "Update channel parameters together" msgstr "" msgid "Reset despeckle parameters" msgstr "" #. channel to view msgid "View channel:" msgstr "" #. Parameters msgid "Window size:" msgstr "" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "" msgid "Load base curve" msgstr "Läs in baskurva" msgid "Save base curve" msgstr "Spara baskurva" msgid "Reset base curve to default" msgstr "" msgid "Input ICC profile" msgstr "" msgid "Output ICC profile" msgstr "" msgid "Display ICC profile" msgstr "" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "" msgid "Reset gamma to default" msgstr "Nollställ gamma till standardvärde" msgid "Linearity" msgstr "Linjäritet" msgid "Linear part of the gamma correction" msgstr "" msgid "Reset linearity to default" msgstr "" msgid "Output intent" msgstr "" msgid "Perceptual" msgstr "Perceptuell" msgid "Relative colorimetric" msgstr "" msgid "Saturation" msgstr "Färgmättnad" msgid "Absolute colorimetric" msgstr "" msgid "Output bit depth" msgstr "" msgid "Display intent" msgstr "" msgid "Disable soft proofing" msgstr "" msgid "Contrast" msgstr "" msgid "Global contrast adjustment" msgstr "" #, fuzzy msgid "Reset global contrast to default" msgstr "Nollställ svartpunkt till standard" msgid "Reset saturation to default" msgstr "" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" msgid "Reset curve to default" msgstr "Nollställ kurva till standard" msgid "Reset black-point to default" msgstr "Nollställ svartpunkt till standard" msgid "Auto adjust black-point" msgstr "" #. Start of Crop controls msgid "Left:" msgstr "Vänster:" msgid "Top:" msgstr "Överkant:" msgid "Right:" msgstr "Höger:" msgid "Bottom:" msgstr "Nederkant:" msgid "Auto fit crop area" msgstr "" msgid "Reset the crop area" msgstr "" msgid "Aspect ratio:" msgstr "BildförhÃ¥llande:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" msgid "Shrink factor" msgstr "" msgid "Width" msgstr "Bredd" msgid "Height" msgstr "Höjd" msgid "Orientation:" msgstr "Orientering:" #, fuzzy msgid "Rotation" msgstr "Färgmättnad" #, fuzzy msgid "Rotation angle" msgstr "Färgmättnad" #, fuzzy msgid "Reset rotation angle" msgstr "Färgmättnad" #. drawLines toggle button msgid "Grid lines" msgstr "" msgid "Number of grid lines to overlay in the crop area" msgstr "" msgid "Path" msgstr "" msgid "Select output path" msgstr "" #, fuzzy msgid "Filename" msgstr "Filnamn: %s%s" #, fuzzy msgid "JPEG compression level" msgstr "KomprimeringsnivÃ¥" #, fuzzy msgid "JPEG progressive encoding" msgstr "Progressiv kodning" msgid "TIFF lossless Compress" msgstr "" #, fuzzy msgid "Embed EXIF data in output" msgstr "Bädda in EXIF-data i JPEG eller PNG-filer" msgid "Create ID file " msgstr "Skapa ID-fil " msgid "No" msgstr "Nej" msgid "Also" msgstr "" msgid "Only" msgstr "Endast" msgid "Save image defaults " msgstr "Spara standardbildvärden" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" msgid "Never again" msgstr "Aldrig igen" msgid "Always" msgstr "Alltid" msgid "Just this once" msgstr "Bara denna gÃ¥ng" msgid "Remember output path" msgstr "" msgid "Overwrite existing files without asking" msgstr "Skriv över befintliga filer utan att frÃ¥ga" msgid "Tag" msgstr "Tagg" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Kameratillverkare" msgid "Camera model" msgstr "Kameramodell" msgid "Timestamp" msgstr "Tidsstämpel" #, fuzzy msgid "Shutter time" msgstr "Slutare: " msgid "Aperture" msgstr "Bländare" msgid "ISO speed" msgstr "ISO-hastighet" msgid "35mm focal length" msgstr "35mm brännvidd" msgid "Flash" msgstr "Blixt" msgid "White balance" msgstr "Vitbalans" #, c-format msgid "EXIF data read by %s" msgstr "" msgid "Warning: EXIF data will not be sent to output" msgstr "Varning: EXIF-data kommer inte att skickas ut utmatning" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "Punktvärden:" msgid "Exposure compensation in EV" msgstr "Exponeringskompensation i EV" msgid "Auto adjust exposure" msgstr "" msgid "Reset exposure to default" msgstr "Nollställ exponering till standardvärde" msgid "Grayscale" msgstr "" #. Lens correction page msgid "Lens correction" msgstr "" msgid "Base curve" msgstr "Baskurva" msgid "Color management" msgstr "Färghantering" msgid "Correct luminosity, saturation" msgstr "" msgid "Lightness Adjustments" msgstr "" msgid "Crop and rotate" msgstr "Beskär och rotera" #, fuzzy msgid "Save" msgstr "Spara s_om" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Zoom procentandel" msgid "Options" msgstr "Alternativ" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Ta bort" msgid "Send image to _Gimp" msgstr "Spara bild till _Gimp" msgid "Fatal error setting C locale" msgstr "" #, c-format msgid "Curve version is not supported" msgstr "" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Ogiltig Nikon-kurvfil \"%s\"" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "" #, c-format msgid "Error opening file '%s': %s" msgstr "Fel vid öppnade av filen \"%s\": %s" msgid "File exists" msgstr "Filen finns" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Filen \"%s\" finns redan.\n" "Skriv över?" msgid "Error creating temporary file." msgstr "Fel vid skapandet av temporärfil." msgid "Error activating Gimp." msgstr "Fel vid aktivering av Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "flaggorna --temperature och --green Ã¥sidosätter flaggan --wb=%s." #, fuzzy, c-format msgid "'%s' is not a valid white balance setting." msgstr "\"%s\" är inte en giltig sökväg." msgid "Remote URI is not supported" msgstr "" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "" #, c-format msgid "error loading darkframe '%s'\n" msgstr "" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "" #, c-format msgid "using darkframe '%s'\n" msgstr "" msgid "Error reading NEF curve" msgstr "Fel vid inläsning av NEF-kurva" #, c-format msgid "Can not downsize from %d to %d." msgstr "" #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Fel när filen \"%s\" skapades." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Fel vid skapande av fil." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "" #, c-format msgid "Unknown file type %d." msgstr "Okänd filtyp %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Dagsljus" #. Probably same as above: msgid "Direct sunlight" msgstr "Direkt solljus" msgid "Cloudy" msgstr "Molnigt" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Skugga" msgid "Incandescent" msgstr "Glödlampa" msgid "Incandescent warm" msgstr "Glödlampa (varm)" #. Same as "Incandescent": msgid "Tungsten" msgstr "Glödlampa" msgid "Fluorescent" msgstr "Ljusrör" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Ljusrör (hög)" msgid "Cool white fluorescent" msgstr "Kallvitt ljusrör" msgid "Warm white fluorescent" msgstr "Varmvitt ljusrör" msgid "Daylight fluorescent" msgstr "Ljusrör (dagsljus)" msgid "Neutral fluorescent" msgstr "Neutralt ljusrör" msgid "White fluorescent" msgstr "Vitt ljusrör" #. In some newer Nikon cameras: #, fuzzy msgid "Sodium-vapor fluorescent" msgstr "Neutralt ljusrör" #, fuzzy msgid "Day white fluorescent" msgstr "Varmvitt ljusrör" msgid "High temp. mercury-vapor fluorescent" msgstr "" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Blixt (automatiskt läge)" msgid "Evening sun" msgstr "Kvällssols" msgid "Underwater" msgstr "Undervatten" msgid "Black & white" msgstr "Svartvitt" msgid "Manual WB" msgstr "Manuell VB" msgid "Camera WB" msgstr "Kamera VB" msgid "Auto WB" msgstr "Automatisk VB" ufraw-0.19.2/po/ca.po0000664000175000017500000013412212123734456011225 00000000000000# Catalan translation for UFRaw. # Traducció al català de UFRaw Convertidor de Dades en Cru No Identificades per a imatges de càmeres digitals. # Copyright (C) 2008-2013 Udi Fuchs & Paco Rivière. # This file is distributed under the same license as the UFRaw package. # Paco Rivière http://pacoriviere.cat/, 2008, 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-04 21:05+0100\n" "Last-Translator: Paco Rivière \n" "Language-Team: http://pacoriviere.cat/ \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Catalan\n" "X-Poedit-Country: ANDORRA\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Obre la finestra de navegació" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "El valor %.*f és massa gran, s'ha truncat a %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "El valor %.*f és massa petit, s'ha truncat a %.*f." msgid "No input file, nothing to do." msgstr "No s'ha indicat cap fitxer, res a fer." #, c-format msgid "Loaded %s %s" msgstr "S'ha carregat %s %s" #, c-format msgid "Saved %s %s" msgstr "S'ha desat %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "s" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: voleu sobreescriure '%s'? " #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent aquesta opció només és vàlida al mode per lots" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent aquesta opció només és vàlida al mode per lots" msgid "Raw images" msgstr "Imatges en cru" msgid "UFRaw ID files" msgstr "Fitxers de identificació de UFRaw" msgid "Raw jpeg's" msgstr "JPEGs en cru" msgid "Raw tiff's" msgstr "TIFFs en cru" msgid "All files" msgstr "Tots els fitxers" msgid "Show hidden files" msgstr "Ukázat skryté soubory" msgid "Manual curve" msgstr "Corba manual" msgid "Linear curve" msgstr "Corba lineal" msgid "Custom curve" msgstr "Corba personalitzada" msgid "Camera curve" msgstr "Corba de la càmera" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "sense perfil" msgid "Color matrix" msgstr "Matriu de color" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (incrustat)" msgid "System default" msgstr "Valor per omissió del sistema" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "" "S'esta intentant convertir el fitxer .ufrawrc de la versió UFRaw-0.4 o " "anteriors" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "" "S'està intentant convertir el fitxer .ufrawrc de la versió UFRaw-0.6 o " "anteriors" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "Aquesta versió del fitxer de configuració .ufrawrc no està permesa" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Hi ha masses nanses per a la corba '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Hi ha massa ajustaments de lluminositat a l'arxiu ID, s'han ignorat\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Sembla que el fitxer %s no és un fitxer normal\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "No es pot obrir el fitxer de identificació %s per llegir-lo\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Error creant el fitxer %s'" #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "S'ha produït un error en analitzar '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "No es pot obrir el fitxer %s per escriure-hi\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "No es pot crear un identificador a la sortida" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Convertidor de Dades en Cru No Identificades per a imatges de càmeres " "digitals.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Ús: ufraw [ opcions ... ] [ fitxers d'imatge en cru ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opcions ... ] [ fitxers d'imatge en cru ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opcions ... ] [ directori-per-omissió ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Per omissió 'ufraw mostra una finestra de previsualització que permet\n" "a l'usuari jugar amb els paràmetres de la imatge abans de desar-la. Si no\n" "es donen imatges en cru a la línia d'ordres, UFRaw mostrarà un diàleg\n" "per triar fitxers. Per processar la imatge sense preguntes (ni previsua-\n" "lització, podeu fer servir 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Els fitxers d'entrada poden ser bé fitxers d'imatge en cru o fitxers de " "identificació de ufraw\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=FITXER-DE-IDENTIFICACIÓ Aplica els paràmetres del FITXER-DE-" "IDENTIFICACIÓ a les altres imatges en cru.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "La resta de les opcions es separen en dos grups.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Les opcions relacionades amb la manipulació de la imatge són:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Configuració de l'equilibri de blancs.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperatura=TEMP Temperature de color en graus Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=VERD Normalització del color verd.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CORBA\n" " Tipus de corba tonal base que es farà servir. CORBA " "pot ser\n" " qualsevol corba carregada prèviament a la interfície.\n" " (per omissió la de la càmera, si hi ha, sinó lineal).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=fitxer\n" " Fes servir la corba tonal base inclosa al fitxer " "indicat.\n" " Té prioritat sobre l'opció --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CORBA\n" " Tipus de corba de lluminositat que es farà servir. " "CORBA pot ser\n" " qualsevol corba carregada prèviament a la interfície.\n" " (per omissió lineal).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=fitxer Fes servir la corba de lluminositat inclosa al fitxer " "indicat.\n" " Té prioritat sobre l'opció --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Restaura els detalls pel negatiu EV.\n" " 'clip' no restaura res - l'opció segura.\n" " 'lch' restaura a l'espai LCH - permet obtenir detalls " "suaus.\n" " 'hsv' restaura a l'espai HSV - permet obtenir detalls " "nítids.\n" " (per omissió lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Marca pel EV positiu.\n" " 'digital' resposta lineal del sensor digital.\n" " 'film' emula la resposta d'una pel·lícula tradicional. " "(per omissió digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMA Configuració de gama de la corba base (per omissió " "0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEARITAT Linearitat de la corba base (per omissió 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Configuració del contrast (per omissió 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Configuració de la saturació (per omissió 1.0, 0 per " "la sortida en blanc i negre).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=LLINDAR\n" " Llindar del filtre de soroll per ondetes (per omissió " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALUE\n" " Sensitivitat per a detectar i eliminar píxels " "defectuosos (per omissió 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSICIÓ\n" " Exposició automàtica o correcció de l'exposició en EV " "(per omissió 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|NEGRE\n" " Punt negre automàtic o valor del punt negre (per " "omissió 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algoriisme d'interpolació que es farà servir (per " "omissió ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Aplica un suvitzat dels colors.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algorisme de conversió d'escala de grisos que es farà " "servir (per omissió none).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algorisme de conversió d'escala de grisos que es farà " "servir (per omissió none).\n" msgid "The options which are related to the final output are:\n" msgstr "Les opcions relacionades amb la sortida final són:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FACTOR Redueix la imatge en un FACTOR (per omissió 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=MIDA Redueix la màxima (alçada, amplada) a MIDA.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Format del fitxer de sortida (per omissió ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "--out-depth=8|16 Profunditat de bits per canal (per omissió 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " No creis|també|només l'arxiu d'identificació (per " "omissió no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALOR Compressió JPEG (0-100, per omissió 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Inclou les dades EXIF a la sortida JPEG o PNG (per " "omissió inclou les dades EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Habilita [inhabilita] la compressió zip als fitxers " "TIFF (per omissió nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " Gira la imatge a l'ajustament de la càmera,\n" " en ANGLE graus en sentit del rellotge, o bé\n" " no giris la imatge (per omissió camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Escapça el rang de píxels donats de la sortida, " "relatius a la\n" " imatge en cru després de girar-la, però abans " "d'escalar-la.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto No apliquis la correcció de la lent o bé intenta\n" " aplicar la correcció detectant la lent (per omissió " "cap).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=RUTA RUTA del fitxer de sortida (per omissió és la ruta del " "fitxer d'entrada).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FITXER Nom del fitxer de sortida, useu '-' per fer servir " "la sortida estàndard.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=FITXER Usa el FITXER per la substracció del marc fosc en " "cru.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Sobreescriu els fitxers sense confirmació (per omissió " "no).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Fés que la finestre sigui màxima.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent No mostris cap missatge durant la conversió per lots.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "Primer UFRaw llegeix la configuració de l'arxiu de recursos $HOME/.ufrawrc.\n" "Llavors, si s'indica un arxiu de identificació, es llegeix. Llavors es " "prenen\n" "les opcions de --conf, ignorant els noms dels arxius d'entrada i sortida de " "l'arxiu.\n" "de identificació. Finalment, es segueixen les opcions de la línia d'ordres. " "En mode per lots, el segon grup d'opcions, NO es llegeix del fitxer de " "recursos.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Finalment, --version mostra el número de versió i les opcions de compilació\n" "de ufraw i --help mostra aquest missatge d'ajuda i surt.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' no és valor correcte per l'opció --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw ha estat compilat sense suport ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "" "--batch Aquesta opció és obsoleta. En el seu lloc feu servir ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt() ha retornat 0%o com a codi de caràcter??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "no ha estat possible carregar la corba de %s, hi ha masses corbes base" #, c-format msgid "failed to load curve from %s" msgstr "No s'ha pogut carregar la corba de %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "Error: %s no és un nom de corba base vàlid." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "" "no ha estat possible carregar la corba de %s, hi ha masses corbes " "configurades" #, c-format msgid "'%s' is not a valid curve name." msgstr "%s no és un nom de corba vàlid." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "Error: L'opció %s no és una opció d'interpolació vàlida." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' no és una opció d'escala de grisos vàlida." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' no és una opció d'escala de grisos vàlida." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' no és una opció de restauració vàlida." #, c-format msgid "'%s' is not a valid clip option." msgstr "L'opció '%s' no és una opció de tall vàlida." msgid "you can not specify both --shrink and --size" msgstr "no podeu indicar ambdues --shrink i --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' no és una profunditat de bits vàlida." #, c-format msgid "Output type '%s' is deprecated" msgstr "El tipus de sortida '%s' és obsolet" msgid "ufraw was build without TIFF support." msgstr "ufraw s'ha compilat sense suport per a fitxers TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw s'ha compilat sense suport per a fitxers JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw s'ha compilat sense suport per a fitxers PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' no és un tipus de sortida vàlida." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' no és una sortida vàlida per la imatge incrustada." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' no és una profunditat de bits vàlida per la imatge incrustada." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' no és una opció de rotació vàlida." #, c-format msgid "'%s' is not a valid create-id option." msgstr "L'opció '%s' no és una opció de creació d'identificador vàlida." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' no és un camí vàlid." msgid "cannot output more than one file to the same output" msgstr "no es pot treure més d'una imatge a la mateixa sortida" #, c-format msgid "Raw file '%s' missing." msgstr "Manca el fitxer en cru '%s'." msgid "Delete raw file" msgstr "Suprimeix el fitxer en cru" msgid "_Delete selected" msgstr "Esborra la _selecció" msgid "Delete _All" msgstr "Suprimeix-ho _tot" msgid "Select files to delete" msgstr "Trieu els fitxers que voleu suprimir" #, c-format msgid "Error reading directory '%s'." msgstr "S'ha produït un error en llegir el directori '%s'" #, c-format msgid "Error deleting '%s'" msgstr "S'ha produït un error en eliminar '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Per llegir les imatges incrustades cal la llibreria libjpeg." msgid "No embedded image found" msgstr "No s'ha trobat cap imatge incrustada" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "" "La mida del fitxer original (%d) és més petita que la mida demanada (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "la miniatura ppm no correspon, alçada %d, amplada %d, mentre al buffer hi ha " "%d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "L'alçada %d de la miniatura JPEG és diferent de l'esperada %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "L'amplada %d de la miniatura JPEG és diferent de l'esperada %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "S'ha produït un error creant el fitxer '%s'.\n" "%s" msgid "No embedded image read" msgstr "No s'ha llegit cap imatge inclosa" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "No s'ha pogut desar l'arxiu '%s'. Tipus de fitxer desconegut %d." #, c-format msgid "Error creating file '%s': %s" msgstr "S'ha produït un error creant el fitxer '%s': %s'" #, c-format msgid "Error writing '%s'" msgstr "S'ha produït un error en escriure '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "E tipus d'imatge de la sortida (%d) no està permés" #, c-format msgid "Loading raw file '%s'" msgstr "S'està carregant el fitxer en cru '%s'" msgid "Can't allocate new image." msgstr "No es pot crear una imatge nova." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Fons" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "No ha estat possible incloure el perfil de sortida '%s' a la imatge." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "La longitud %d, del buffer EXIF és massa gran, s'ignorarà." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Marca:\t\t\t\t%s\n" "Model:\t\t\t\t%s%s\n" "Muntatge:\t\t\t%s\n" "Factor d'escapçament:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Marca:\t\t\t\t%s\n" "Model:\t\t\t\t%s\n" "Rang focal:\t\t\t%s\n" "Obertura:\t\t\t%s\n" "Factor d'escapçament:\t%.1f\n" "Tipus:\t\t\t\t%s\n" "Montures:\t\t\t%s" msgid "Focal" msgstr "Longitud focal" msgid "Focal length" msgstr "Longitud focal" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "Valor F de l'obertura" msgid "Distance" msgstr "Distància" msgid "Distance to subject in meters" msgstr "Distància fins al subjecte en metres" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "Model matemàtic d'Aberracions cromàtiques" msgid "Parameters" msgstr "Paràmetres" msgid "Optical vignetting mathematical model" msgstr "Model matemàtic del vinyetatge òptic" msgid "Lens distortion mathematical model" msgstr "Model matemàtic de la distorsió de la lent" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometria de la lent:" msgid "The geometry of the lens used to make the shot" msgstr "La geometria de la lent que s'ha fet servir per fer la foto" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Geometria desitjada:" msgid "The target geometry for output image" msgstr "La sortida desitjada per la d'imatge de la sortida" msgid "Camera" msgstr "Càmera" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Cerqueu la càmera amb un patró\n" "Format: [Marca, ][Model]" msgid "Choose camera from complete list" msgstr "Escolliu la càmera de la llista" msgid "Reset all lens correction settings" msgstr "Reinicia tots els paràmetres de correcció de la lent" #. Lens selector msgid "Lens" msgstr "Lent" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Cerqueu la lent amb un patró\n" "Format: [Marca, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Trieu la lent de la llista de possibles variant" msgid "Automatically find lens and set lens corrections" msgstr "Troba la lent i estableix les seves correccions de forma automàtica" msgid "Lateral chromatic aberration" msgstr "Aberració cromàtica lateral" msgid "Optical vignetting" msgstr "Vinyetatge òptic" msgid "Lens distortion" msgstr "Distorsió de la lent" msgid "Lens geometry" msgstr "Geometria de la lent" msgid "Raw histogram with conversion curves" msgstr "Histograma en cru amb corbes de conversió" msgid "Live histogram" msgstr "Histograma continu" #. No darkframe file msgid "None" msgstr "Cap" msgid "Lightness" msgstr "Lluminositat" msgid "Luminance" msgstr "Luminància" msgid "Value" msgstr "Valor" msgid "Channel Mixer" msgstr "Mesclador de canal" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "No hi ha espai per a més corbes." msgid "Load curve" msgstr "Carrega la corba" msgid "All curve formats" msgstr "Formats de les corbes" msgid "UFRaw curve format" msgstr "Forma de corba de UFRaw" msgid "Nikon curve format" msgstr "Forma de corba de Nikon" msgid "Save curve" msgstr "Desa la corba" msgid "No more room for new profiles." msgstr "No hi ha espai per a més perfils." msgid "Load color profile" msgstr "Carrega el perfil de color" msgid "Color Profiles" msgstr "Perfils de color" msgid "Luminosity (Y value)" msgstr "Lluminositat (valor Y)" msgid "Adams' zone" msgstr "Zona d'Adam" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "mida %dx%d, ampliació %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "mida %dx%d, escala 1/%d" msgid "Wavelet denoising" msgstr "Filtratge de soroll per ondetes" msgid "Despeckling" msgstr "S'esta netejant l'imatge" msgid "Interpolating" msgstr "S'està interpolant" msgid "Rendering" msgstr "S'està renderitzant" msgid "Loading preview" msgstr "S'està carregant la previsualització" msgid "Saving image" msgstr "S'està desant la imatge" #, c-format msgid "Black point: %0.3lf" msgstr "Punt negre: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "No hi ha espai per a més ajustaments de lluminositat." msgid "Aspect ratio locked, click to unlock" msgstr "La relació d'aspecte està blocada, cliqueu per desblocar-la" msgid "Aspect ratio unlocked, click to lock" msgstr "La relació d'aspecte està desblocada, cliqueu per blocar-la" msgid "Load dark frame" msgstr "Carrega el marc fosc" msgid "clip" msgstr "talla" msgid "restore in LCH space for soft details" msgstr "restaura a l'espai LCH per als detalls suaus" msgid "restore in HSV space for sharp details" msgstr "restaura a l'espai LCH per als detalls nítids" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Restaura el detalls pel negatiu EV\n" "Estat actual: %s" msgid "digital linear" msgstr "lineal digital" msgid "soft film like" msgstr "Com si fos una pel·lícula de programari" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Talla el que està marcat pel positiu EV\n" "Estat actual: %s" #, c-format msgid "Filename: %s%s" msgstr "Nom del fitxer: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Crea també el fitxer de identificació" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Crea sols el fitxer de identificació" msgid "UFRaw options" msgstr "Opcions del UFRaw" msgid "Settings" msgstr "Paràmetres" msgid "Input color profiles" msgstr "Perfils de color d'entrada" msgid "Output color profiles" msgstr "Perfils de color de sortida" msgid "Display color profiles" msgstr "Mostra els perfils de color" msgid "Base Curves" msgstr "Corbes de Base" msgid "Luminosity Curves" msgstr "Corbes de lluminositat" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Ordre Gimp remota" msgid "Reset command to default" msgstr "Reinicia l'ordre per omissió" msgid "Blink Over/Underexposure Indicators" msgstr "Indicadors parpallejants de sobre/infraexposició" msgid "Configuration" msgstr "Configuració" msgid "Save configuration" msgstr "Desa la configuració" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Desa la configuració a l'arxiu de recursos ($HOME/.ufrawrc)" msgid "Log" msgstr "Registre" msgid "About" msgstr "Quant a" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) és una eina per\n" "llegir i manipular imatges en cru de càmeres digitals.\n" "UFRaw fa servir Digital Camera Raw (DCRaw)\n" "per codificar les imatges en cru.\n" "\n" "Autor: Udi Fuchs\n" "Pàgina web: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineal" msgid "Logarithmic" msgstr "Logarítmic" msgid "Hot pixels: " msgstr "Píxels defectuosos:" msgid "mark" msgstr "marca" msgid "Hot pixel sensitivity" msgstr "Sensitivitat de píxels defectuosos" msgid "Reset hot pixel sensitivity" msgstr "rwinicia la sensitivitat de píxels defectuosos" msgid "RGB histogram" msgstr "Histograma RGB" msgid "R+G+B histogram" msgstr "Histograma R+G+B" msgid "Luminosity histogram" msgstr "Histograma de lluminositat" msgid "Value (maximum) histogram" msgstr "Valor (màxim) de l'histograma" msgid "Saturation histogram" msgstr "Histograma de saturació" msgid "Average:" msgstr "Mitjana:" msgid "Std. deviation:" msgstr "Desviació típica:" msgid "Overexposed:" msgstr "Sobreexposat:" msgid "Indicate" msgstr "Indica" msgid "Underexposed:" msgstr "Infraexoposat:" msgid "White Balance" msgstr "Equilibri de Blancs" msgid "Cannot use camera white balance." msgstr "No es pot fer servir l'equilibri de blancs de la càmera." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "No hi ha cap configuració d'equilibri de blancs pel vostre model\n" "de càmera. Veieu a la pàgina web de UFRaw com obtenir suport\n" "per la vostra càmera." msgid "Reset white balance to initial value" msgstr "Reinicia l'equilibri de blancs al valor inicial" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Equilibri de blancs de la temperatura de color (K)" msgid "Green" msgstr "Verd" msgid "Green component" msgstr "Component verd" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Trieu una zona de la imatge previsualitzada per aplicar l'equilibri de blancs" msgid "Chan. multipliers:" msgstr "Multiplicadors en cadena:" msgid "Bayer pattern interpolation" msgstr "Interpolació del model Bayer" msgid "VNG four color interpolation" msgstr "Interpolació VNG de quatre colors" msgid "Bilinear interpolation" msgstr "Interpolació bilineal" msgid "AHD interpolation" msgstr "Interpolació AHD" msgid "VNG interpolation" msgstr "Interpolació VNG" msgid "PPG interpolation" msgstr "Interpolació PPG" msgid "No interpolation" msgstr "Sense interpolació" msgid "No Bayer pattern" msgstr "No hi ha cap patró Bayer" msgid "Apply color smoothing" msgstr "Fes que els colors siguin suaus" msgid "Denoise" msgstr "Filtra el soroll" msgid "Threshold for wavelet denoising" msgstr "Llindar per al filtratge de soroll per ondetes" msgid "Reset denoise threshold to default" msgstr "Reinicia el llindar de soroll per omissió" msgid "Dark Frame:" msgstr "Marc Fosc:" msgid "Reset dark frame" msgstr "Reinicia el marc fosc" msgid "Reset adjustment" msgstr "Reinicia l'ajustament" msgid "Select a spot on the preview image to choose hue" msgstr "" "Trieu una zona de la imatge previsualitzada per aplicar l'equilibri de blancs" msgid "Remove adjustment" msgstr "Suprimeix l'ajust" msgid "Grayscale Mode:" msgstr "Mode escala de grisos:" msgid "Reset channel mixer" msgstr "Reinicia el canal de la mescla" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Neteja l'imatge és útil quan es combina un nombre de ISO alts amb un canal " "multiplicador alt: quan un canal té una senyal molt alta de ratio de soroll. " "Intenteu establir la mida de la finestra, la descomposició de color i el " "nombre de passades a 50,0,5 per a aquest canal. Quan un canal conté només " "soroll intenteu amb 1,0.6,1.\n" "Neteja de imatge està desactivada quan la mida de la finestra o les passes " "són zero. Quan està activada, llavors la mida de la finestra no pot ser " "menor que el nombre de passades." msgid "Update channel parameters together" msgstr "Actualitza els paràmeters del canal de forma conjunta" msgid "Reset despeckle parameters" msgstr "Reinicia els paràmetres per treure els punts" #. channel to view msgid "View channel:" msgstr "Vista de canal:" #. Parameters msgid "Window size:" msgstr "Mida de la finestra:" msgid "Color decay:" msgstr "Descomposició de color:" msgid "Passes:" msgstr "Passades:" msgid "Load base curve" msgstr "Carrega la corba base" msgid "Save base curve" msgstr "Desa la corba base" msgid "Reset base curve to default" msgstr "Reinicia la corba base per omissió" msgid "Input ICC profile" msgstr "Perfil de color ICC d'entrada" msgid "Output ICC profile" msgstr "Perfil de color ICC" msgid "Display ICC profile" msgstr "Mostra el perfil de color ICC" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Correcció de gama per al perfil d'entrada" msgid "Reset gamma to default" msgstr "Reinicia la gama per omissió" msgid "Linearity" msgstr "Linealitat" msgid "Linear part of the gamma correction" msgstr "Part lineal de la correcció gamma" msgid "Reset linearity to default" msgstr "Reinicia la linealitat per omissió" msgid "Output intent" msgstr "Prova de sortida" msgid "Perceptual" msgstr "Perceptual" msgid "Relative colorimetric" msgstr "Mètrica de color relativa" msgid "Saturation" msgstr "Saturació" msgid "Absolute colorimetric" msgstr "Mètrica de color absoluta" msgid "Output bit depth" msgstr "Profunditat dels bits de sortida" msgid "Display intent" msgstr "Prova de reproducció" msgid "Disable soft proofing" msgstr "Inhabilita les proves suaus" msgid "Contrast" msgstr "Contrast" msgid "Global contrast adjustment" msgstr "Ajustament global del contrast" msgid "Reset global contrast to default" msgstr "Reinicia el contrast global per omissió" msgid "Reset saturation to default" msgstr "Reinicia la saturació per omissió" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Ajustament automàtic de la corba\n" "(Histograma pla)" msgid "Reset curve to default" msgstr "Reinicia la corba per omissió" msgid "Reset black-point to default" msgstr "Reinicia el punt negre per omissió" msgid "Auto adjust black-point" msgstr "Ajustament automàtic del punt negre" #. Start of Crop controls msgid "Left:" msgstr "Esquerra:" msgid "Top:" msgstr "Superior:" msgid "Right:" msgstr "Dreta:" msgid "Bottom:" msgstr "Inferior:" msgid "Auto fit crop area" msgstr "Escapça l'àrea per encabir-la" #, fuzzy msgid "Reset the crop area" msgstr "Reinicia la zona de escapçament" msgid "Aspect ratio:" msgstr "Relació de l'aspecte" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Relació d'aspecte de l'àrea a escapça.\n" "Es pot escriure en notació decimal (1.273)\n" "o com a relació de dos nombres (14:11)" msgid "Shrink factor" msgstr "Factor de reducció" msgid "Width" msgstr "Amplada" msgid "Height" msgstr "Alçada" msgid "Orientation:" msgstr "Orientació:" msgid "Rotation" msgstr "Rotació" msgid "Rotation angle" msgstr "Angle de rotació" msgid "Reset rotation angle" msgstr "Reinicia l'angle de rotació" #. drawLines toggle button msgid "Grid lines" msgstr "Línies de la graella" msgid "Number of grid lines to overlay in the crop area" msgstr "Número de línies d'aliniament per a superposar a l'àrea que es retalla" msgid "Path" msgstr "Ruta" msgid "Select output path" msgstr "Selecciona el camí de sortida" msgid "Filename" msgstr "Nom del fitxer" msgid "JPEG compression level" msgstr "Nivell de compressió de JPEG" msgid "JPEG progressive encoding" msgstr "Codificació JPEG progressiva" msgid "TIFF lossless Compress" msgstr "Compressió TIFF sense pèrdua" msgid "Embed EXIF data in output" msgstr "Inclou les dades EXIF a la sortida" msgid "Create ID file " msgstr "Crea el fitxer de identificació" msgid "No" msgstr "No" msgid "Also" msgstr "Vegeu també" msgid "Only" msgstr "Només" msgid "Save image defaults " msgstr "Desa el paràmetres per omissió de la imatge" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Desa el paràmetres de manipulació de la imatge actual com per omissió.\n" "Sempre es desen els paràmetres de sortida d'aquesta finestra." msgid "Never again" msgstr "Mai més" msgid "Always" msgstr "Sempre" msgid "Just this once" msgstr "Només per a aquest cop" msgid "Remember output path" msgstr "Recorda el camí de sortida" msgid "Overwrite existing files without asking" msgstr "S'estant sobreescribint els fitxers sense confirmació" msgid "Tag" msgstr "Etiqueta" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Fabricant de la càmera" msgid "Camera model" msgstr "Model de la càmera" msgid "Timestamp" msgstr "Marca horària" msgid "Shutter time" msgstr "Temps de l'obturador" msgid "Aperture" msgstr "Obertura" msgid "ISO speed" msgstr "Velocitat ISO" msgid "35mm focal length" msgstr "Distància focal de l'ocular de 35mm" msgid "Flash" msgstr "Flaix" msgid "White balance" msgstr "Equilibri de blancs" #, c-format msgid "EXIF data read by %s" msgstr "%s ha llegit les dades EXIF" msgid "Warning: EXIF data will not be sent to output" msgstr "Avís: les dades EXIF no s'inclouran a la sortida" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Valors dels punts:" msgid "Exposure compensation in EV" msgstr "Compensació de l'exposició en EV" msgid "Auto adjust exposure" msgstr "Ajusta l'exposició de forma automàtica" msgid "Reset exposure to default" msgstr "Reinicia l'exposició per omissió" msgid "Grayscale" msgstr "Escala de grisos" #. Lens correction page msgid "Lens correction" msgstr "Correcció de la lent" msgid "Base curve" msgstr "Corba base" msgid "Color management" msgstr "Gestió del color" msgid "Correct luminosity, saturation" msgstr "Corregeix la lluminositat, saturació" msgid "Lightness Adjustments" msgstr "Ajustaments de lluminositat" msgid "Crop and rotate" msgstr "Retalla i gira" msgid "Save" msgstr "Desa" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Percentatge del zoom" msgid "Options" msgstr "Opcions" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Suprimeix" msgid "Send image to _Gimp" msgstr "Envia la imatge al _GIMP" msgid "Fatal error setting C locale" msgstr "S'ha produït un error al establir el locale C" #, c-format msgid "Curve version is not supported" msgstr "No es permet l'ús d'aquesta versió del fitxer de corba" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "El fitxer de corba Nikon '%s' és incorrecte" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "S'ha produït un error en obrir el fitxer de Corba '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "S'ha produït un error en obrir el fitxer '%s': %s" msgid "File exists" msgstr "El fitxer ja existeix" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "El fitxer '%s' ja existeix. \n" "Voleu sobreescriure'l?" msgid "Error creating temporary file." msgstr "S'ha produït un error en escriure el fitxer temporal." msgid "Error activating Gimp." msgstr "S'ha produït un error mentre s'activava el GIMP." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "No es pot fer servir l'equilibri de blancs de la càmera, es farà servir " "l'equilibri de blancs automàtic.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "" "les opcions --temperature i --green passen per davant de l'opció --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "" "'%s' no és una opció vàlida per la configuració de l'equilibri de blancs." msgid "Remote URI is not supported" msgstr "No se suporta l'esquema URI" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "" "S'ha produït un error del marc fosc: El fitxer %s no és un fitxer d'imatges " "en cru\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "S'ha produït un error en carregar el marc negre '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "El marc fosc '%s' no és compatible amb la imatge principal" #, c-format msgid "using darkframe '%s'\n" msgstr "S'està usant el marc fosc '%s'\n" msgid "Error reading NEF curve" msgstr "S'ha produït un error en llegir la corba NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "No s'ha pogut reduïr de %d a %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Error creant el fitxer %s'" #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Error creant el fitxer." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "El nom de la imatge no pot coincidir amb el del fitxer de identificació '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "No ha estat possible incloure el perfil '%s' a '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "S'ignorarà la profunditat de bits '%d' no suportada." #, c-format msgid "Unknown file type %d." msgstr "El tipus de fitxer %d és desconegut." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Llum de dia" #. Probably same as above: msgid "Direct sunlight" msgstr "Llum solar directe" msgid "Cloudy" msgstr "Nubolat" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Ombra" msgid "Incandescent" msgstr "Llum incandescent" msgid "Incandescent warm" msgstr "Llum incandescent càlida" #. Same as "Incandescent": msgid "Tungsten" msgstr "Llum de tungstè" msgid "Fluorescent" msgstr "Llum fluorescent" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Llum fluorescent alta" msgid "Cool white fluorescent" msgstr "Llum fluorescent de blanc fred" msgid "Warm white fluorescent" msgstr "Llum fluorescent de blanc càlid" msgid "Daylight fluorescent" msgstr "Fluorescent de llum de dia" msgid "Neutral fluorescent" msgstr "Llum fluorescent neutre" msgid "White fluorescent" msgstr "Llum fluorescent negre" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Llum fluorescent de vapor de sodi" msgid "Day white fluorescent" msgstr "Llum fluorescent de blanc de dia" msgid "High temp. mercury-vapor fluorescent" msgstr "Fluorescent de vapor de mercuri d'alta temperatura" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flaix (mode automàtic)" msgid "Evening sun" msgstr "Sol del capvespre" msgid "Underwater" msgstr "Sota de l'aigua" msgid "Black & white" msgstr "Blanc i negre" msgid "Manual WB" msgstr "Equilibri de blancs manual" msgid "Camera WB" msgstr "Equilibri de blancs de la càmera" msgid "Auto WB" msgstr "Equilibri de blancs automàtic" ufraw-0.19.2/po/ru.po0000664000175000017500000016265712123734456011306 00000000000000# Russian translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Alexey Voinov , 2006. # Alexander Rabtchevich , 2006, 2007, 2009. # Andrew Zabolotny , 2007, 2008. # Alexandre Prokoudine , 2009, 2010. # ÐлекÑандр Прокудин , 2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-21 22:24+0300\n" "Last-Translator: ÐлекÑандр Прокудин \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: UTF-8\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 10<=4 && (n%100<10 || n" "%100>=20) ? 1 : 2);\n" "X-Generator: KBabel 1.11.4\n" "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Открыть окно навигатора" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Значение %.*f Ñлишком велико, Ñокращено до %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Значение %.*f Ñлишком мало, повышено до %.*f." msgid "No input file, nothing to do." msgstr "Ðет файла на входе, нечего обрабатывать." #, c-format msgid "Loaded %s %s" msgstr "Загружен %s %s" #, c-format msgid "Saved %s %s" msgstr "Сохранен %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "д" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "н" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: перепиÑать '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "ключ --silent иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в пакетном режиме" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "ключ --silent иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в пакетном режиме" msgid "Raw images" msgstr "Снимки RAW" msgid "UFRaw ID files" msgstr "ID-файлы UFRaw" msgid "Raw jpeg's" msgstr "Raw JPEG" msgid "Raw tiff's" msgstr "Raw TIFF" msgid "All files" msgstr "Ð’Ñе файлы" msgid "Show hidden files" msgstr "Показывать Ñкрытые файлы" msgid "Manual curve" msgstr "Ð˜Ð·Ð¼ÐµÐ½Ñ‘Ð½Ð½Ð°Ñ ÐºÑ€Ð¸Ð²Ð°Ñ" msgid "Linear curve" msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ ÐºÑ€Ð¸Ð²Ð°Ñ" msgid "Custom curve" msgstr "Ð”Ñ€ÑƒÐ³Ð°Ñ ÐºÑ€Ð¸Ð²Ð°Ñ" msgid "Camera curve" msgstr "ÐšÑ€Ð¸Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Ðет профилÑ" msgid "Color matrix" msgstr "Матрица цвета" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (вÑтроенный)" msgid "System default" msgstr "СиÑтемный профиль" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Попытка преобразовать .ufrawrc из UFRaw-0.4 или более раннего" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Попытка преобразовать .ufrawrc из UFRaw-0.6 или более раннего" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "ВерÑÐ¸Ñ UFRaw в .ufrawrc не поддерживаетÑÑ" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Слишком много узлов Ð´Ð»Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹ '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Слишом много наÑтроек ÑркоÑти в ID файле, проигнорировано\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Файл %s не похож на обычный файл\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Ðевозможно открыть ID-файл %s Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Ошибка при Ñоздании файла '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Ошибка при разборе '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Ðевозможно открыть файл %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "не могу --create-id Ñ stdout" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw конвертор Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ Ñ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ñ‹Ñ… камер.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "ИÑпользование: ufraw [ ключи ... ] [ файлы-raw ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ ключи ... ] [ файлы-raw ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ ключи ... ] [ каталог-по-умолчанию ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "По умолчанию 'ufraw' отображает окно предоÑмотра Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾\n" "Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ RAW, позволÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ наÑтраивать параметры\n" "Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´ Ñохранением. ЕÑли командной Ñтроке не Ñообщены \n" "Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ RAW, UFRaw отобразит диалог выбора файла. Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸\n" "изображений без предоÑмотра и диалогов иÑпользуйте 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Входные файлы могут быть изображениÑми RAW или ID-файлами UFRaw. ID-файл\n" "Ñодержит Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ RAW и параметры обработки изображениÑ.\n" "Можно также иÑпользовать ID-файлы Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-file Применить параметры ID-файла к другим цифровым " "негативам.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "ОÑтальные ключи разделены на 2 группы.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Ключи, отноÑÑщиеÑÑ Ðº обработке изображениÑ:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Параметры баланÑа белого.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€Ð° в градуÑах Кельвина.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN ÐÐ¾Ñ€Ð¼Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð·ÐµÐ»Ñ‘Ð½Ð¾Ð³Ð¾ цвета.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|КРИВÐЯ\n" " ИÑпользуемый тип базовой тональной кривой. КРИВÐЯ — " "Ñто\n" " название любой кривой, предварительно заданной в\n" " графичеÑком интерфейÑе (по умолчанию — ÐºÑ€Ð¸Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹,\n" " еÑли еÑть; еÑли нет — линейнаÑ).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=file\n" " ИÑпользовать базовую тональную кривую, вÑтроенную\n" " в файл. Ðннулирует ключ --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|КРИВÐЯ\n" " Тип иÑпользуемой кривой оÑвещённоÑти. КРИВÐЯ — Ñто\n" " название любой кривой, предварительно заданной\n" " в графичеÑком интерфейÑе (по умолчанию — линейнаÑ).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=ФÐЙЛ ИÑпользовать кривую оÑвещённоÑти из файла.\n" " Ðннулирует ключ --curve .\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " ВоÑÑтановление деталей при отрицательной " "ÑкÑпокоррекции.\n" " 'clip' — ничего не воÑÑтанавливать, не даёт побочных\n" " Ñффектов но детали терÑÑŽÑ‚ÑÑ.\n" " 'lch' — воÑÑтанавливать в цветовом проÑтранÑтве LCH,\n" " Ð´Ð°Ð²Ð°Ñ Ð¼Ñгкие детали (по умолчанию)\n" " 'hsv' — воÑÑтанавливать в цветовом проÑтранÑтве HSV,\n" " Ð´Ð°Ð²Ð°Ñ Ñ€ÐµÐ·ÐºÐ¸Ðµ детали.\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Метод обработки переÑвеченных учаÑтков\n" " при положительной ÑкÑпокоррекции\n" " 'digital' (цифровой) — линейный отклик Ñ ÑенÑора\n" " камеры, переÑветы ÑрезаютÑÑ (по умолчанию)\n" " 'film' (плёночный) — Ð¸Ð¼Ð¸Ñ‚Ð°Ñ†Ð¸Ñ Ð¼Ñгкого отклика,\n" " характерного Ð´Ð»Ñ Ð¿Ð»Ñ‘Ð½ÐºÐ¸. \n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=ГÐММРГамма-ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð¹ кривой (по умолчанию = 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEARITY ЛинейноÑть базовой кривой (по умолчанию = 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=ЗÐÐЧЕÐИЕ ÐšÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð°Ñта (по умолчанию 1.0)\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=ЗÐÐЧЕÐИЕ ÐšÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð°ÑыщенноÑти (по умолчанию 1.0, 0 Ð´Ð»Ñ Ð§/Б)\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=ЗÐÐЧЕÐИЕ\n" " Порог ÑˆÑƒÐ¼Ð¾Ð¿Ð¾Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (по умолчанию 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=ЗÐÐЧЕÐИЕ\n" " чувÑтвительноÑть Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð³Ð¾Ñ€Ñчих " "пикÑелов (по умолчанию 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|ЭКСПОЗИЦИЯ\n" " ÐвтоÑкÑÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ (auto), либо ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ ÑкÑпозиции в EV\n" " (по умолчанию = 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|BLACK\n" " ÐвтоматичеÑкий уровень чёрного, либо значение точки\n" " чёрного (по умолчанию = 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " ИÑпользуемый алгоритм интерполÑции (по умолчанию — " "ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Применить цветовое Ñглаживание\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Ðлгоритм перевода в уровни Ñерого (по умолчанию - " "нет).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Ðлгоритм перевода в уровни Ñерого (по умолчанию - " "нет).\n" msgid "The options which are related to the final output are:\n" msgstr "Ключи, отноÑÑщиеÑÑ Ðº конечному результату:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=МÐОЖИТЕЛЬ Сжать изображение в МÐОЖИТЕЛЬ раз (по умолчанию — " "1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=РÐЗМЕР Уменьшить макÑимальный из размеров до РÐЗМЕР.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Формат выходного файла (по умолчанию — ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Бит на канал в выходном файле (по умолчанию 8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Создать нет|также|только файл ID (по умолчанию — " "нет).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=ЗÐÐЧ Ñжатие JPEG (0-100, по умолчанию — 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Ð’Ñтроить данные Exif в ÑохранÑемое изображение JPEG " "или PNG\n" " (по умолчанию — вÑтроить).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Включить [выключить] zip Ñжатие TIFF (по умолчанию " "нет).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Извлечь изображение JPEG, вÑтроенное в цифровой " "негатив, \n" " вмеÑто проÑвки цифрового негатива.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|УГОЛ|no\n" " Повернуть изображение отноÑительно уÑтановок камеры\n" " на УГОЛ градуÑов по чаÑовой Ñтрелке\n" " или не вращать (по умолчанию)\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" " Обрезать результат в заданный диапазон пикÑелей \n" " отноÑительно RAW (негатива) поÑле поворота, но перед " "маÑштабированием.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Ðе выполнÑть коррекцию иÑкажений, либо\n" " попытатьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки Ñкорректировать их (по " "умолчанию -- none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=ПУТЬ Каталог Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ файла (по умолчанию Ñовпадает Ñ\n" " каталогом входного файла).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=ФÐЙЛ Ð˜Ð¼Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ файла, задайте '-' Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° в stdout.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=ФÐЙЛ ВычеÑть заданный в ФÐЙЛе тёмный кадр из цифрового " "негатива.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite ПерезапиÑать ÑущеÑтвующие файлы без подтверждениÑ\n" " (по умолчанию — Ñпрашивать подтверждение).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Сделать окно развенутым.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "--silent Ðичего не выводить при пакетной обработке.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw Ñначала читает параметры из файла реÑурÑов $HOME/.ufrawrc.\n" "Затем, еÑли указан ID-файл, параметры читаютÑÑ Ð¸Ð· него. Далее берутÑÑ\n" "параметры из ключа --conf, причём входные/выходные имена файлов\n" "в ID-файле игнорируютÑÑ. Ðаконец, уÑтанавливаютÑÑ ÐºÐ»ÑŽÑ‡Ð¸ из командной " "Ñтроки.\n" "Ð’ пакетном режиме Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° ключей ÐЕ читаетÑÑ Ð¸Ð· файла реÑурÑов.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "И, наконец, Ð¾Ð¿Ñ†Ð¸Ñ --version отображает номер верÑии и ключи Ñборки\n" "ufraw, а --help отображает Ñто Ñообщение и прекращает выполнение программы.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' - некорректное значение Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° --%s ." msgid "ufraw was build without ZIP support." msgstr "ufraw был Ñобран без поддержки ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "ÐžÐ¿Ñ†Ð¸Ñ --batch уÑтарела. Взамен иÑпользуйте ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt вернул код Ñимвола 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" "не Ñмог загрузить кривую из %s, Ñлишком много базовых кривых в наÑтройках" #, c-format msgid "failed to load curve from %s" msgstr "не Ñмог загрузить кривую из %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' не ÑвлÑетÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ ÑущеÑтвующей базовой кривой." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "не Ñмог загрузить кривую из %s, Ñлишком много кривых в наÑтройках" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' не ÑвлÑетÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ ÑущеÑтвующей кривой." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' не ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼ идентификатором алгоритма интерполÑции." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "%s' не идентифицирует алгоритм перевода в оттенки Ñерого." #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "%s' не идентифицирует алгоритм перевода в оттенки Ñерого." #, c-format msgid "'%s' is not a valid restore option." msgstr "%s' не ÑвлÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼ ключом воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ½ÐµÐ¹." #, c-format msgid "'%s' is not a valid clip option." msgstr "%s' не ÑвлÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼ ключом Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÑветов." msgid "you can not specify both --shrink and --size" msgstr "Ð’Ñ‹ не можете одновременно указать --shrink и --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' бит на пикÑел не поддерживаетÑÑ." #, c-format msgid "Output type '%s' is deprecated" msgstr "Выходной формат '%s' уÑтарел" msgid "ufraw was build without TIFF support." msgstr "ufraw был Ñобран без поддержки TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw был Ñобран без поддержки JPEG." msgid "ufraw was build without PNG support." msgstr "UFRaw был Ñобран без поддержки JPEG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' не ÑвлÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼ типом выходного файла." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' не ÑвлÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼ типом вывода Ð´Ð»Ñ Ð²Ñтроенного изображениÑ." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' бит на пикÑель не поддерживаетÑÑ Ð´Ð»Ñ Ð²Ñтроенного изображениÑ." #, c-format msgid "'%s' is not a valid rotate option." msgstr "Режим Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ '%s' не поддерживаетÑÑ." #, c-format msgid "'%s' is not a valid create-id option." msgstr "%s' не ÑвлÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼ ключом create-id." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' не задаёт ÑущеÑтвующий каталог." msgid "cannot output more than one file to the same output" msgstr "невозможно вывеÑти более одного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² один и тот же файл" #, c-format msgid "Raw file '%s' missing." msgstr "RAW файл '%s' отÑутÑтвует." msgid "Delete raw file" msgstr "Создать файл RAW" msgid "_Delete selected" msgstr "Удалить выбранное" msgid "Delete _All" msgstr "Удалить _вÑе" msgid "Select files to delete" msgstr "Выбрать файлы Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ" #, c-format msgid "Error reading directory '%s'." msgstr "Ошибка при чтении каталога '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Ошибка при удалении '%s'." msgid "Reading embedded image requires libjpeg." msgstr "Ð”Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð²Ñтроенного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð° библиотека libjpeg." msgid "No embedded image found" msgstr "Ð’Ñтроенное изображение не найдено" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Первоначальный размер (%d) меньше запрашиваемого размера (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "неÑоответÑтвие PPM-ÑÑкиза, выÑота %d, ширина %d, при буфере %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "выÑота JPEG-ÑÑкиза %d отличаетÑÑ Ð¾Ñ‚ ожидаемой %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "ширина JPEG-ÑÑкиза %d отличаетÑÑ Ð¾Ñ‚ ожидаемой %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° '%s'.\n" "%s" msgid "No embedded image read" msgstr "Ðе прочитано вÑтроенное изображение" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° '%s'. ÐеизвеÑтный тип файла %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Ошибка запиÑи '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "" "Ðеподдерживаемый выходной формат файлов (%d) Ð´Ð»Ñ Ð²Ñтроенного изображениÑ" #, c-format msgid "Loading raw file '%s'" msgstr "Загрузка файла RAW '%s'" msgid "Can't allocate new image." msgstr "Ðевозможно Ñоздать новое изображение." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Фон" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Ðевозможно вÑтроить профиль вывода '%s' в изображение." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "Буфер EXIF длиной %d Ñлишком велик, проигнорирован." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Производитель:\t%s\n" "Модель:\t\t\t%s%s\n" "Крепление:\t\t%s\n" "Кроп фактор:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Производитель:\t%s\n" "Модель:\t\t\t%s\n" "Диапазон Ñ„.Ñ€:\t%s\n" "Диафрагма:\t\t%s\n" "Кроп-фактор:\t%.1f\n" "Тип:\t\t\t%s\n" "Крепление:\t\t%s" msgid "Focal" msgstr "ФокуÑ" msgid "Focal length" msgstr "ФокуÑное раÑÑтоÑние" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "Диафрагма (F)" msgid "Distance" msgstr "РаÑÑтоÑние" msgid "Distance to subject in meters" msgstr "РаÑÑтоÑние до объекта в метрах" #. Add the model combobox msgid "Model:" msgstr "Модель:" msgid "Chromatic Aberrations mathematical model" msgstr "МатематичеÑÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ хроматичеÑких аберраций" msgid "Parameters" msgstr "Параметры" msgid "Optical vignetting mathematical model" msgstr "МатематичеÑÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ виньетированиÑ" msgid "Lens distortion mathematical model" msgstr "МатематичеÑÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ оптичеÑких иÑкажений" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¸Ð²Ð°:" msgid "The geometry of the lens used to make the shot" msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¸Ð²Ð°, которым производилаÑÑŒ Ñъёмка" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ:" msgid "The target geometry for output image" msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ изображениÑ" msgid "Camera" msgstr "Камера" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "ПоиÑк камеры по ключевым Ñловам\n" "Формат: [Производитель, ][Модель]" msgid "Choose camera from complete list" msgstr "Выбрать камеру из полного ÑпиÑка" msgid "Reset all lens correction settings" msgstr "СброÑить вÑе параметры коррекции иÑкажений" #. Lens selector msgid "Lens" msgstr "Объектив" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "ПоиÑк объектива по ключевым Ñловам\n" "Формат: [Производитель, ][Модель]" msgid "Choose lens from list of possible variants" msgstr "Выбрать объектив из полного ÑпиÑка" msgid "Automatically find lens and set lens corrections" msgstr "ÐвтоматичеÑки определить объектив и подобрать коррекцию иÑкажений" msgid "Lateral chromatic aberration" msgstr "ХроматичеÑкие аберрации" msgid "Optical vignetting" msgstr "ОптичеÑкое виньетирование" msgid "Lens distortion" msgstr "ИÑÐºÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¸Ð²Ð°" msgid "Lens geometry" msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¸Ð²Ð°" msgid "Raw histogram with conversion curves" msgstr "ГиÑтограмма RAW Ñ ÐºÑ€Ð¸Ð²Ñ‹Ð¼Ð¸ преобразованиÑ" msgid "Live histogram" msgstr "ДинамичеÑÐºÐ°Ñ Ð³Ð¸Ñтограмма" #. No darkframe file msgid "None" msgstr "Ðет" msgid "Lightness" msgstr "ЯркоÑть" msgid "Luminance" msgstr "СветимоÑть" msgid "Value" msgstr "Значение" msgid "Channel Mixer" msgstr "Микшер каналов" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Ðе хватает меÑта Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… кривых." msgid "Load curve" msgstr "Загрузить кривую" msgid "All curve formats" msgstr "Ð’Ñе форматы кривых" msgid "UFRaw curve format" msgstr "Формат кривых UFRaw" msgid "Nikon curve format" msgstr "Формат кривых Nikon" msgid "Save curve" msgstr "Сохранить кривую" msgid "No more room for new profiles." msgstr "Ðе хватает меÑта Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… профилей." msgid "Load color profile" msgstr "Загрузить цветовой профиль" msgid "Color Profiles" msgstr "Цветовые профили" msgid "Luminosity (Y value)" msgstr "ОÑвещённоÑть (значение Y)" msgid "Adams' zone" msgstr "Зона ÐдамÑа" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "размер %dx%d, маÑштаб %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "размер %dx%d, маÑштаб 1/%d" msgid "Wavelet denoising" msgstr "ВыполнÑетÑÑ Ð²ÐµÐ¹Ð²Ð»ÐµÑ‚Ð½Ð¾Ðµ подавление шума" msgid "Despeckling" msgstr "ВыполнÑетÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ пÑтен" msgid "Interpolating" msgstr "ВыполнÑетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑциÑ" msgid "Rendering" msgstr "ВыполнÑетÑÑ Ð¾Ñ‚Ñ€Ð¸Ñовка" msgid "Loading preview" msgstr "ЗагружаетÑÑ Ð¿Ñ€ÐµÐ´Ð¾Ñмотр" msgid "Saving image" msgstr "СохранÑетÑÑ Ñнимок" #, c-format msgid "Black point: %0.3lf" msgstr "Ð§ÐµÑ€Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Ðе хватает меÑта Ð´Ð»Ñ Ð¿Ð¾Ñледующей коррекции Ñветлоты" msgid "Aspect ratio locked, click to unlock" msgstr "Соотношение Ñторон заблокировано, щёлкните Ð´Ð»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸" msgid "Aspect ratio unlocked, click to lock" msgstr "Соотношение Ñторон разблокировано, щёлкните Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸" msgid "Load dark frame" msgstr "Загрузить тёмный кадр" msgid "clip" msgstr "вырезаны" msgid "restore in LCH space for soft details" msgstr "ВоÑÑтановление в проÑтранÑтве LCH Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¼Ñгких деталей" msgid "restore in HSV space for sharp details" msgstr "ВоÑÑтановление в проÑтранÑтве HSV Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐºÐ¸Ñ… деталей" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "ВоÑÑтановление недоÑкÑпонированных деталей\n" "Текущее ÑоÑтоÑние: %s" msgid "digital linear" msgstr "Цифровое, линейное" msgid "soft film like" msgstr "МÑгкое, плёночного типа" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "ВоÑÑтановление переÑвеченных учаÑтков\n" "Текущее ÑоÑтоÑние: %s" #, c-format msgid "Filename: %s%s" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Дополнительно Ñоздать ID-файл" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Создать только ID-файл" msgid "UFRaw options" msgstr "Параметры UFRaw" msgid "Settings" msgstr "Параметры" msgid "Input color profiles" msgstr "Цветовые профили ввода" msgid "Output color profiles" msgstr "Цветовые профили вывода" msgid "Display color profiles" msgstr "Цветовые профили монитора" msgid "Base Curves" msgstr "Базовые кривые" msgid "Luminosity Curves" msgstr "Кривые ÑркоÑти" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Команда Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ GIMP" msgid "Reset command to default" msgstr "СброÑить значение до иÑходного" msgid "Blink Over/Underexposure Indicators" msgstr "Мигать индикацией пере/недоÑкÑпонированиÑ" msgid "Configuration" msgstr "ÐаÑтройка" msgid "Save configuration" msgstr "Сохранение конфигурации" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Сохранить конфигурацию в файл ($HOME/.ufrawrc)" msgid "Log" msgstr "Журнал" msgid "About" msgstr "О программе" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) – программа длÑ\n" "Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ коррекции изображений RAW от цифровых фотоаппаратов.\n" "UFRaw оÑнован на Digital Camera Raw (DCRaw)\n" "Ð´Ð»Ñ ÑобÑтвенно Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ RAW.\n" "\n" "Ðвтор: Udi Fuchs\n" "Сайт проекта: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Линейный маÑштаб" msgid "Logarithmic" msgstr "ЛогарифмичеÑкий маÑштаб" msgid "Hot pixels: " msgstr "ГорÑчие пикÑелы:" msgid "mark" msgstr "отметить" msgid "Hot pixel sensitivity" msgstr "ЧувÑтвительноÑть к горÑчим пикÑелам" msgid "Reset hot pixel sensitivity" msgstr "СброÑить чувÑтвительноÑть к горÑчим пикÑелам" msgid "RGB histogram" msgstr "ГиÑтограмма RGB" msgid "R+G+B histogram" msgstr "ГиÑтограмма R+G+B" msgid "Luminosity histogram" msgstr "ГиÑтограмма оÑвещенноÑти" msgid "Value (maximum) histogram" msgstr "ГиÑтограмма значений (макÑимума)" msgid "Saturation histogram" msgstr "ГиÑтограмма наÑыщенноÑти" msgid "Average:" msgstr "Среднее:" msgid "Std. deviation:" msgstr "Станд. отклонение:" msgid "Overexposed:" msgstr "ПереÑкÑпонировано:" msgid "Indicate" msgstr "Показать" msgid "Underexposed:" msgstr "ÐедоÑкÑпонировано:" msgid "White Balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾" msgid "Cannot use camera white balance." msgstr "Ðевозможно иÑпользовать Ð±Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾ камеры." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Ð”Ð»Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ вашей камеры нет предуÑтановленных значений баланÑа белого.\n" "Зайдите на Ñайт UFRaw, чтобы узнать, как Ñделать\n" "вашу камеру поддерживаемой." msgid "Reset white balance to initial value" msgstr "СброÑить значение баланÑа белого до иÑходного" msgid "Temperature" msgstr "Температура" msgid "White balance color temperature (K)" msgstr "Температура цвета в Кельвинах" msgid "Green" msgstr "Зелёный" msgid "Green component" msgstr "Зелёный компонент" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Выберите облаÑть на изображении Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ð°Ð»Ð°Ð½Ñа белого по облаÑти" msgid "Chan. multipliers:" msgstr "Множ. каналов:" msgid "Bayer pattern interpolation" msgstr "ИнтерполÑÑ†Ð¸Ñ Ð‘Ð°ÐµÐ¹ÐµÑ€Ð¾Ð²Ñкой Ñтруктуры" msgid "VNG four color interpolation" msgstr "ИнтерполÑÑ†Ð¸Ñ VNG Ð´Ð»Ñ 4-Ñ… цветов" msgid "Bilinear interpolation" msgstr "Ð‘Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑциÑ" msgid "AHD interpolation" msgstr "ИнтерполÑÑ†Ð¸Ñ AHD" msgid "VNG interpolation" msgstr "ИнтерполÑÑ†Ð¸Ñ VNG" msgid "PPG interpolation" msgstr "ИнтерполÑÑ†Ð¸Ñ PPG" msgid "No interpolation" msgstr "Без интерполÑции" msgid "No Bayer pattern" msgstr "Без баейеровÑкой Ñтруктуры" msgid "Apply color smoothing" msgstr "Применить цветовое Ñглаживание" msgid "Denoise" msgstr "Подавление шума:" msgid "Threshold for wavelet denoising" msgstr "Порог Ð´Ð»Ñ Ð²ÐµÐ¹Ð²Ð»ÐµÑ‚Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑˆÑƒÐ¼Ð°" msgid "Reset denoise threshold to default" msgstr "СброÑить порог шумоподавлениÑ" msgid "Dark Frame:" msgstr "Темный кадр:" msgid "Reset dark frame" msgstr "Обнулить тёмный кадр" msgid "Reset adjustment" msgstr "Обнулить коррекцию" msgid "Select a spot on the preview image to choose hue" msgstr "Выделите облаÑть изображениÑ, Ñодержащую нужный оттенок" msgid "Remove adjustment" msgstr "Удалить коррекцию" msgid "Grayscale Mode:" msgstr "Уровни Ñерого:" msgid "Reset channel mixer" msgstr "Ð¡Ð±Ñ€Ð¾Ñ ÑмеÑÐ¸Ñ‚ÐµÐ»Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð²" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Удаление пÑтен главным образом полезно в тех ÑлучаÑÑ…, когда выÑокому " "значению ISO ÑопутÑтвует выÑокое значение Ð¼Ð½Ð¾Ð¶Ð¸Ñ‚ÐµÐ»Ñ ÐºÐ°Ð½Ð°Ð»Ð°. Иными Ñловами, " "когда в одном из каналов очень много шума. Попробуйте уÑтановить Ð´Ð»Ñ Ñтого " "канала Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° окна, раÑпада цвета и количеÑтва проходов равным " "50,0,5 ÑоответÑтвенно. ЕÑли канал Ñодержит только шум, попробуйте " "комбинацию1,0.6,1.\n" "При значении размера окна или количеÑтва проходов равном нулю удаление пÑтен " "не выполнÑетÑÑ. Когда оно выполнÑетÑÑ, размер окна не может быть меньше " "чиÑла проходов." msgid "Update channel parameters together" msgstr "Синхронизировать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² каналах" msgid "Reset despeckle parameters" msgstr "СброÑить параметры ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñтен" #. channel to view msgid "View channel:" msgstr "ПроÑмотреть канал:" #. Parameters msgid "Window size:" msgstr "Размер окна:" msgid "Color decay:" msgstr "РаÑпад цвета:" msgid "Passes:" msgstr "Проходов:" msgid "Load base curve" msgstr "Загрузить базовую кривую" msgid "Save base curve" msgstr "Сохранить базовую кривую" msgid "Reset base curve to default" msgstr "СброÑить базовую кривую до иÑходной" msgid "Input ICC profile" msgstr "ICC-профиль уÑтройÑтва ввода" msgid "Output ICC profile" msgstr "ICC-профиль уÑтройÑтва вывода" msgid "Display ICC profile" msgstr "ICC-профиль монитора" msgid "Gamma" msgstr "Гамма" msgid "Gamma correction for the input profile" msgstr "Гамма-ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð²Ð²Ð¾Ð´Ð°" msgid "Reset gamma to default" msgstr "СброÑить значение гаммы до иÑходного" msgid "Linearity" msgstr "ЛинейноÑть" msgid "Linear part of the gamma correction" msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ‡Ð°Ñть гамма-коррекции" msgid "Reset linearity to default" msgstr "СброÑить значение линейноÑти до иÑходного" msgid "Output intent" msgstr "Вывод" msgid "Perceptual" msgstr "ВоÑпринимаемаÑ" msgid "Relative colorimetric" msgstr "Отн. колориметричеÑкаÑ" msgid "Saturation" msgstr "ÐаÑыщенноÑть" msgid "Absolute colorimetric" msgstr "ÐбÑ. колориметричеÑкаÑ" msgid "Output bit depth" msgstr "Глубина цвета" msgid "Display intent" msgstr "Монитор" msgid "Disable soft proofing" msgstr "Отключить Ñкранную цветопробу" msgid "Contrast" msgstr "КонтраÑÑ‚" msgid "Global contrast adjustment" msgstr "Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð°Ñта" msgid "Reset global contrast to default" msgstr "СброÑить глобальный контраÑÑ‚" msgid "Reset saturation to default" msgstr "СброÑить значение наÑыщенноÑти до иÑходного" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "ÐвтоматичеÑки Ñкорректировать кривую\n" "(ВыровнÑть гиÑтограмму)" msgid "Reset curve to default" msgstr "Вернуть кривую в иÑходное ÑоÑтоÑние" msgid "Reset black-point to default" msgstr "СброÑить значение чёрной точки до иÑходного" msgid "Auto adjust black-point" msgstr "ÐвтоматичеÑки Ñкорректировать чёрную точку" #. Start of Crop controls msgid "Left:" msgstr "Слева:" msgid "Top:" msgstr "Сверху:" msgid "Right:" msgstr "Справа:" msgid "Bottom:" msgstr "Снизу:" msgid "Auto fit crop area" msgstr "ÐвтоматичеÑки подобрать облаÑть кадрированиÑ" #, fuzzy msgid "Reset the crop area" msgstr "СброÑить облаÑть кадрированиÑ" msgid "Aspect ratio:" msgstr "Соотношение Ñторон:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Соотношение Ñторон при кадрировании.\n" "Может быть введено в деÑÑтичном виде (1.273)\n" "или как отношение двух чиÑел (14:11)" msgid "Shrink factor" msgstr "КоÑффициент маÑштаба" msgid "Width" msgstr "Ширина" msgid "Height" msgstr "Ð’Ñ‹Ñота" msgid "Orientation:" msgstr "ОриентациÑ:" msgid "Rotation" msgstr "Вращение" msgid "Rotation angle" msgstr "Угол вращениÑ" msgid "Reset rotation angle" msgstr "СброÑить угол вращениÑ" #. drawLines toggle button msgid "Grid lines" msgstr "Линий Ñетки" msgid "Number of grid lines to overlay in the crop area" msgstr "ЧиÑло линий Ñетки, лежащих на кадрируемой облаÑти" msgid "Path" msgstr "Путь" msgid "Select output path" msgstr "Выберите каталог результата" msgid "Filename" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" msgid "JPEG compression level" msgstr "Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ JPEG" msgid "JPEG progressive encoding" msgstr "ПрогреÑÑивное кодирование JPEG" msgid "TIFF lossless Compress" msgstr "Сжатие TIFF без потери качеÑтва" msgid "Embed EXIF data in output" msgstr "Ð’Ñтроить данные Exif" msgid "Create ID file " msgstr "Создать ID-файл " msgid "No" msgstr "Ðет" msgid "Also" msgstr "Также" msgid "Only" msgstr "Только" msgid "Save image defaults " msgstr "СохранÑть параметры Ñнимков" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Сохранить текущие параметры Ñнимка как иÑходные.\n" "Параметры ÑкÑпорта в Ñтом окне вÑегда будут ÑохранÑтьÑÑ." msgid "Never again" msgstr "Ðикогда больше" msgid "Always" msgstr "Ð’Ñегда" msgid "Just this once" msgstr "Только в Ñтот раз" msgid "Remember output path" msgstr "Запомнить каталог результата" msgid "Overwrite existing files without asking" msgstr "ПерезапиÑать ÑущеÑтвующие файлы без подтверждениÑ" msgid "Tag" msgstr "Тег" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Производитель" msgid "Camera model" msgstr "Модель камеры" msgid "Timestamp" msgstr "Дата и времÑ" msgid "Shutter time" msgstr "Выдержка" msgid "Aperture" msgstr "Диафрагма" msgid "ISO speed" msgstr "ЧувÑтвительноÑть ISO" msgid "35mm focal length" msgstr "Эквивалент 35мм" msgid "Flash" msgstr "Ð’Ñпышка" msgid "White balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾" #, c-format msgid "EXIF data read by %s" msgstr "Данные EXIF прочитаны %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Предупреждение: данные EXIF не будут поÑланы в вывод" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² точке:" msgid "Exposure compensation in EV" msgstr "КомпенÑÐ°Ñ†Ð¸Ñ ÑкÑпозиции в EV" msgid "Auto adjust exposure" msgstr "ÐвтоматичеÑки Ñкорректировать ÑкÑпозицию" msgid "Reset exposure to default" msgstr "СброÑить значение ÑкÑпозиции до иÑходного" msgid "Grayscale" msgstr "Уровни Ñерого" #. Lens correction page msgid "Lens correction" msgstr "ÐšÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð´ÐµÑ„ÐµÐºÑ‚Ð¾Ð² объектива" msgid "Base curve" msgstr "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ ÐºÑ€Ð¸Ð²Ð°Ñ" msgid "Color management" msgstr "Управление цветом" msgid "Correct luminosity, saturation" msgstr "Изменить оÑвещенноÑть, наÑыщенноÑть" msgid "Lightness Adjustments" msgstr "Ð˜Ð·Ð±Ð¸Ñ€Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ñветлоты" msgid "Crop and rotate" msgstr "Кадрирование и вращение" msgid "Save" msgstr "Сохранить" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "МаÑштаб в процентах" msgid "Options" msgstr "Параметры" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Удалить" msgid "Send image to _Gimp" msgstr "Открыть изображение в _GIMP" msgid "Fatal error setting C locale" msgstr "КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при уÑтановке локали С" #, c-format msgid "Curve version is not supported" msgstr "ВерÑÐ¸Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹ не поддерживаетÑÑ" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Ðеправильный файл кривой Nikon '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° кривой '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° '%s': %s" msgid "File exists" msgstr "Такой файл уже еÑть" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Файл '%s' уже ÑущеÑтвует.\n" "ПерезапиÑать его?" msgid "Error creating temporary file." msgstr "Ошибка при Ñоздании временного файла." msgid "Error activating Gimp." msgstr "Ошибка при запуÑке GIMP." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Ðевозможно иÑпользовать Ð±Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾ камеры,\n" "возврат к автоматичеÑкому баланÑу белого\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "" "ключи --temperature (температура) и --green (зеленый) аннулируют ключ --wb=" "%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' не ÑвлÑетÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ ÑущеÑтвующей наÑтройки баланÑа белого." msgid "Remote URI is not supported" msgstr "Удалённый URI не поддерживаетÑÑ" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "Ошибка тёмного кадра: %s не ÑвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ RAW\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "Ошибка при загрузке тёмного кадра '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Тёмный кадр '%s' не ÑовмеÑтим Ñ Ð¾Ñновным изображением" #, c-format msgid "using darkframe '%s'\n" msgstr "ИÑпользуетÑÑ Ñ‚ÐµÐ¼Ð½Ñ‹Ð¹ кадр '%s'\n" msgid "Error reading NEF curve" msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹ NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "Ðевозможно уменьшить размер из %d в %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Ошибка при Ñоздании файла '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Ошибка при Ñоздании файла." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ID-файла '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Ðе удалоÑÑŒ вÑтроить профиль вывода '%s' в '%s'" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "ИгнорируетÑÑ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð° цвета '%d'." #, c-format msgid "Unknown file type %d." msgstr "ÐеизвеÑтный тип данных %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Дневной Ñвет" #. Probably same as above: msgid "Direct sunlight" msgstr "ПрÑмой Ñолнечный Ñвет" msgid "Cloudy" msgstr "Облачно" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Тень" msgid "Incandescent" msgstr "Лампа накаливаниÑ" msgid "Incandescent warm" msgstr "Теплый ламп накаливаниÑ" #. Same as "Incandescent": msgid "Tungsten" msgstr "Лампа Ð½Ð°ÐºÐ°Ð»Ð¸Ð²Ð°Ð½Ð¸Ñ (вольфрам)" msgid "Fluorescent" msgstr "ФлюореÑÑ†ÐµÐ½Ñ‚Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð°" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Ð’Ñ‹Ñоко флюореÑцентные" msgid "Cool white fluorescent" msgstr "Холодный белый флюореÑцентный" msgid "Warm white fluorescent" msgstr "Теплый белый флюореÑцентный" msgid "Daylight fluorescent" msgstr "ФлюореÑцентный дневного Ñвета" msgid "Neutral fluorescent" msgstr "Ðейтральный флюореÑцентный" msgid "White fluorescent" msgstr "Белый флюореÑцентный" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Ðатриевый флюореÑцентный" msgid "Day white fluorescent" msgstr "ФлюореÑцентный дневного Ñвета" msgid "High temp. mercury-vapor fluorescent" msgstr "Ð’Ñ‹Ñокотемпературный ртутный флюореÑцентный" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Ð’Ñпышка (в режиме авто)" msgid "Evening sun" msgstr "Вечернее Ñолнце" msgid "Underwater" msgstr "Под водой" msgid "Black & white" msgstr "Чёрно-белый" msgid "Manual WB" msgstr "Другой ББ" msgid "Camera WB" msgstr "ББ камеры" msgid "Auto WB" msgstr "ÐвтоматичеÑкий ББ" ufraw-0.19.2/po/ufraw.pot0000664000175000017500000006521712123734456012162 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "" #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "" msgid "No input file, nothing to do." msgstr "" #, c-format msgid "Loaded %s %s" msgstr "" #, c-format msgid "Saved %s %s" msgstr "" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "" #, c-format msgid "%s: overwrite '%s'?" msgstr "" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "" msgid "Raw images" msgstr "" msgid "UFRaw ID files" msgstr "" msgid "Raw jpeg's" msgstr "" msgid "Raw tiff's" msgstr "" msgid "All files" msgstr "" msgid "Show hidden files" msgstr "" msgid "Manual curve" msgstr "" msgid "Linear curve" msgstr "" msgid "Custom curve" msgstr "" msgid "Camera curve" msgstr "" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "" msgid "Color matrix" msgstr "" msgid "sRGB" msgstr "" msgid "sRGB (embedded)" msgstr "" msgid "System default" msgstr "" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "" #, c-format msgid "Too many anchors for curve '%s'" msgstr "" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" #, c-format msgid "Error reading from file '%s'." msgstr "" #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" msgid "cannot --create-id with stdout" msgstr "" msgid "UFRaw " msgstr "" msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr "" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr "" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" msgid "The rest of the options are separated into two groups.\n" msgstr "" msgid "The options which are related to the image manipulation are:\n" msgstr "" msgid "--wb=camera|auto White balance setting.\n" msgstr "" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "" msgid "--green=GREEN Green color normalization.\n" msgstr "" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" msgid "--color-smoothing Apply color smoothing.\n" msgstr "" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" msgid "The options which are related to the final output are:\n" msgstr "" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" msgid "--maximize-window Force window to be maximized.\n" msgstr "" msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "" msgid "ufraw was build without ZIP support." msgstr "" msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "" #, c-format msgid "getopt returned character code 0%o ??" msgstr "" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" #, c-format msgid "failed to load curve from %s" msgstr "" #, c-format msgid "'%s' is not a valid base curve name." msgstr "" #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "" #, c-format msgid "'%s' is not a valid curve name." msgstr "" #, c-format msgid "'%s' is not a valid interpolation option." msgstr "" #, c-format msgid "'%s' is not a valid grayscale option." msgstr "" #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "" #, c-format msgid "'%s' is not a valid restore option." msgstr "" #, c-format msgid "'%s' is not a valid clip option." msgstr "" msgid "you can not specify both --shrink and --size" msgstr "" #, c-format msgid "'%d' is not a valid bit depth." msgstr "" #, c-format msgid "Output type '%s' is deprecated" msgstr "" msgid "ufraw was build without TIFF support." msgstr "" msgid "ufraw was build without JPEG support." msgstr "" msgid "ufraw was build without PNG support." msgstr "" #, c-format msgid "'%s' is not a valid output type." msgstr "" #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "" #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "" #, c-format msgid "'%s' is not a valid rotate option." msgstr "" #, c-format msgid "'%s' is not a valid create-id option." msgstr "" #, c-format msgid "'%s' is not a valid path." msgstr "" msgid "cannot output more than one file to the same output" msgstr "" #, c-format msgid "Raw file '%s' missing." msgstr "" msgid "Delete raw file" msgstr "" msgid "_Delete selected" msgstr "" msgid "Delete _All" msgstr "" msgid "Select files to delete" msgstr "" #, c-format msgid "Error reading directory '%s'." msgstr "" #, c-format msgid "Error deleting '%s'" msgstr "" msgid "Reading embedded image requires libjpeg." msgstr "" msgid "No embedded image found" msgstr "" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "" #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" msgid "No embedded image read" msgstr "" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "" #, c-format msgid "Error creating file '%s': %s" msgstr "" #, c-format msgid "Error writing '%s'" msgstr "" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "" #, c-format msgid "Loading raw file '%s'" msgstr "" msgid "Can't allocate new image." msgstr "" #. Create the "background" layer to hold the image... msgid "Background" msgstr "" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" msgid "Focal" msgstr "" msgid "Focal length" msgstr "" msgid "F" msgstr "" msgid "F-number (Aperture)" msgstr "" msgid "Distance" msgstr "" msgid "Distance to subject in meters" msgstr "" #. Add the model combobox msgid "Model:" msgstr "" msgid "Chromatic Aberrations mathematical model" msgstr "" msgid "Parameters" msgstr "" msgid "Optical vignetting mathematical model" msgstr "" msgid "Lens distortion mathematical model" msgstr "" #. Lens geometry combobox msgid "Lens geometry:" msgstr "" msgid "The geometry of the lens used to make the shot" msgstr "" #. Target lens geometry combobox msgid "Target geometry:" msgstr "" msgid "The target geometry for output image" msgstr "" msgid "Camera" msgstr "" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose camera from complete list" msgstr "" msgid "Reset all lens correction settings" msgstr "" #. Lens selector msgid "Lens" msgstr "" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" msgid "Choose lens from list of possible variants" msgstr "" msgid "Automatically find lens and set lens corrections" msgstr "" msgid "Lateral chromatic aberration" msgstr "" msgid "Optical vignetting" msgstr "" msgid "Lens distortion" msgstr "" msgid "Lens geometry" msgstr "" msgid "Raw histogram with conversion curves" msgstr "" msgid "Live histogram" msgstr "" #. No darkframe file msgid "None" msgstr "" msgid "Lightness" msgstr "" msgid "Luminance" msgstr "" msgid "Value" msgstr "" msgid "Channel Mixer" msgstr "" msgid "UFRaw Message" msgstr "" msgid "No more room for new curves." msgstr "" msgid "Load curve" msgstr "" msgid "All curve formats" msgstr "" msgid "UFRaw curve format" msgstr "" msgid "Nikon curve format" msgstr "" msgid "Save curve" msgstr "" msgid "No more room for new profiles." msgstr "" msgid "Load color profile" msgstr "" msgid "Color Profiles" msgstr "" msgid "Luminosity (Y value)" msgstr "" msgid "Adams' zone" msgstr "" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "" msgid "Wavelet denoising" msgstr "" msgid "Despeckling" msgstr "" msgid "Interpolating" msgstr "" msgid "Rendering" msgstr "" msgid "Loading preview" msgstr "" msgid "Saving image" msgstr "" #, c-format msgid "Black point: %0.3lf" msgstr "" msgid "No more room for new lightness adjustments." msgstr "" msgid "Aspect ratio locked, click to unlock" msgstr "" msgid "Aspect ratio unlocked, click to lock" msgstr "" msgid "Load dark frame" msgstr "" msgid "clip" msgstr "" msgid "restore in LCH space for soft details" msgstr "" msgid "restore in HSV space for sharp details" msgstr "" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" msgid "digital linear" msgstr "" msgid "soft film like" msgstr "" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" #, c-format msgid "Filename: %s%s" msgstr "" msgid "" "\n" "Create also ID file" msgstr "" msgid "" "\n" "Create only ID file" msgstr "" msgid "UFRaw options" msgstr "" msgid "Settings" msgstr "" msgid "Input color profiles" msgstr "" msgid "Output color profiles" msgstr "" msgid "Display color profiles" msgstr "" msgid "Base Curves" msgstr "" msgid "Luminosity Curves" msgstr "" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "" msgid "Reset command to default" msgstr "" msgid "Blink Over/Underexposure Indicators" msgstr "" msgid "Configuration" msgstr "" msgid "Save configuration" msgstr "" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "" msgid "Log" msgstr "" msgid "About" msgstr "" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" #, c-format msgid "%s%s (Alt-%s)" msgstr "" msgid "Linear" msgstr "" msgid "Logarithmic" msgstr "" msgid "Hot pixels: " msgstr "" msgid "mark" msgstr "" msgid "Hot pixel sensitivity" msgstr "" msgid "Reset hot pixel sensitivity" msgstr "" msgid "RGB histogram" msgstr "" msgid "R+G+B histogram" msgstr "" msgid "Luminosity histogram" msgstr "" msgid "Value (maximum) histogram" msgstr "" msgid "Saturation histogram" msgstr "" msgid "Average:" msgstr "" msgid "Std. deviation:" msgstr "" msgid "Overexposed:" msgstr "" msgid "Indicate" msgstr "" msgid "Underexposed:" msgstr "" msgid "White Balance" msgstr "" msgid "Cannot use camera white balance." msgstr "" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" msgid "Reset white balance to initial value" msgstr "" msgid "Temperature" msgstr "" msgid "White balance color temperature (K)" msgstr "" msgid "Green" msgstr "" msgid "Green component" msgstr "" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" msgid "Chan. multipliers:" msgstr "" msgid "Bayer pattern interpolation" msgstr "" msgid "VNG four color interpolation" msgstr "" msgid "Bilinear interpolation" msgstr "" msgid "AHD interpolation" msgstr "" msgid "VNG interpolation" msgstr "" msgid "PPG interpolation" msgstr "" msgid "No interpolation" msgstr "" msgid "No Bayer pattern" msgstr "" msgid "Apply color smoothing" msgstr "" msgid "Denoise" msgstr "" msgid "Threshold for wavelet denoising" msgstr "" msgid "Reset denoise threshold to default" msgstr "" msgid "Dark Frame:" msgstr "" msgid "Reset dark frame" msgstr "" msgid "Reset adjustment" msgstr "" msgid "Select a spot on the preview image to choose hue" msgstr "" msgid "Remove adjustment" msgstr "" msgid "Grayscale Mode:" msgstr "" msgid "Reset channel mixer" msgstr "" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" msgid "Update channel parameters together" msgstr "" msgid "Reset despeckle parameters" msgstr "" #. channel to view msgid "View channel:" msgstr "" #. Parameters msgid "Window size:" msgstr "" msgid "Color decay:" msgstr "" msgid "Passes:" msgstr "" msgid "Load base curve" msgstr "" msgid "Save base curve" msgstr "" msgid "Reset base curve to default" msgstr "" msgid "Input ICC profile" msgstr "" msgid "Output ICC profile" msgstr "" msgid "Display ICC profile" msgstr "" msgid "Gamma" msgstr "" msgid "Gamma correction for the input profile" msgstr "" msgid "Reset gamma to default" msgstr "" msgid "Linearity" msgstr "" msgid "Linear part of the gamma correction" msgstr "" msgid "Reset linearity to default" msgstr "" msgid "Output intent" msgstr "" msgid "Perceptual" msgstr "" msgid "Relative colorimetric" msgstr "" msgid "Saturation" msgstr "" msgid "Absolute colorimetric" msgstr "" msgid "Output bit depth" msgstr "" msgid "Display intent" msgstr "" msgid "Disable soft proofing" msgstr "" msgid "Contrast" msgstr "" msgid "Global contrast adjustment" msgstr "" msgid "Reset global contrast to default" msgstr "" msgid "Reset saturation to default" msgstr "" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" msgid "Reset curve to default" msgstr "" msgid "Reset black-point to default" msgstr "" msgid "Auto adjust black-point" msgstr "" #. Start of Crop controls msgid "Left:" msgstr "" msgid "Top:" msgstr "" msgid "Right:" msgstr "" msgid "Bottom:" msgstr "" msgid "Auto fit crop area" msgstr "" msgid "Reset the crop area" msgstr "" msgid "Aspect ratio:" msgstr "" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" msgid "Shrink factor" msgstr "" msgid "Width" msgstr "" msgid "Height" msgstr "" msgid "Orientation:" msgstr "" msgid "Rotation" msgstr "" msgid "Rotation angle" msgstr "" msgid "Reset rotation angle" msgstr "" #. drawLines toggle button msgid "Grid lines" msgstr "" msgid "Number of grid lines to overlay in the crop area" msgstr "" msgid "Path" msgstr "" msgid "Select output path" msgstr "" msgid "Filename" msgstr "" msgid "JPEG compression level" msgstr "" msgid "JPEG progressive encoding" msgstr "" msgid "TIFF lossless Compress" msgstr "" msgid "Embed EXIF data in output" msgstr "" msgid "Create ID file " msgstr "" msgid "No" msgstr "" msgid "Also" msgstr "" msgid "Only" msgstr "" msgid "Save image defaults " msgstr "" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" msgid "Never again" msgstr "" msgid "Always" msgstr "" msgid "Just this once" msgstr "" msgid "Remember output path" msgstr "" msgid "Overwrite existing files without asking" msgstr "" msgid "Tag" msgstr "" #. Fill table with EXIF tags msgid "Camera maker" msgstr "" msgid "Camera model" msgstr "" msgid "Timestamp" msgstr "" msgid "Shutter time" msgstr "" msgid "Aperture" msgstr "" msgid "ISO speed" msgstr "" msgid "35mm focal length" msgstr "" msgid "Flash" msgstr "" msgid "White balance" msgstr "" #, c-format msgid "EXIF data read by %s" msgstr "" msgid "Warning: EXIF data will not be sent to output" msgstr "" #, c-format msgid "%s - UFRaw" msgstr "" msgid "Spot values:" msgstr "" msgid "Exposure compensation in EV" msgstr "" msgid "Auto adjust exposure" msgstr "" msgid "Reset exposure to default" msgstr "" msgid "Grayscale" msgstr "" #. Lens correction page msgid "Lens correction" msgstr "" msgid "Base curve" msgstr "" msgid "Color management" msgstr "" msgid "Correct luminosity, saturation" msgstr "" msgid "Lightness Adjustments" msgstr "" msgid "Crop and rotate" msgstr "" msgid "Save" msgstr "" msgid "EXIF" msgstr "" msgid "Zoom percentage" msgstr "" msgid "Options" msgstr "" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "" msgid "Send image to _Gimp" msgstr "" msgid "Fatal error setting C locale" msgstr "" #, c-format msgid "Curve version is not supported" msgstr "" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "" #, c-format msgid "Error opening file '%s': %s" msgstr "" msgid "File exists" msgstr "" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" msgid "Error creating temporary file." msgstr "" msgid "Error activating Gimp." msgstr "" msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "" #, c-format msgid "'%s' is not a valid white balance setting." msgstr "" msgid "Remote URI is not supported" msgstr "" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "" #, c-format msgid "error loading darkframe '%s'\n" msgstr "" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "" #, c-format msgid "using darkframe '%s'\n" msgstr "" msgid "Error reading NEF curve" msgstr "" #, c-format msgid "Can not downsize from %d to %d." msgstr "" #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "" #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "" #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "" #, c-format msgid "Unknown file type %d." msgstr "" #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "" #. Probably same as above: msgid "Direct sunlight" msgstr "" msgid "Cloudy" msgstr "" #. "Shadows" should be switched to this: msgid "Shade" msgstr "" msgid "Incandescent" msgstr "" msgid "Incandescent warm" msgstr "" #. Same as "Incandescent": msgid "Tungsten" msgstr "" msgid "Fluorescent" msgstr "" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "" msgid "Cool white fluorescent" msgstr "" msgid "Warm white fluorescent" msgstr "" msgid "Daylight fluorescent" msgstr "" msgid "Neutral fluorescent" msgstr "" msgid "White fluorescent" msgstr "" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "" msgid "Day white fluorescent" msgstr "" msgid "High temp. mercury-vapor fluorescent" msgstr "" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "" msgid "Evening sun" msgstr "" msgid "Underwater" msgstr "" msgid "Black & white" msgstr "" msgid "Manual WB" msgstr "" msgid "Camera WB" msgstr "" msgid "Auto WB" msgstr "" ufraw-0.19.2/po/fr.po0000664000175000017500000013365112123734456011257 00000000000000# French translation for UFRaw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2013-03-24 01:50+0100\n" "Last-Translator: Gaëtan PERRIER \n" "Language-Team: Gaëtan PERRIER \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Ouvrir la fenêtre de navigation" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Valeur %.*f trop grande, tronquée à %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Valeur %.*f trop petite, tronquée à %.*f." msgid "No input file, nothing to do." msgstr "Pas de fichier en entrée, rien à faire." #, c-format msgid "Loaded %s %s" msgstr "Chargée %s %s" #, c-format msgid "Saved %s %s" msgstr "Sauvé %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "o" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: écraser '%s'?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "" "L'option --silent n'est valable qu'en mode de traitement par lot ('ufraw-" "batch')" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "" "L'option --embedded-image n'est valable qu'en mode de traitement par lot " "('ufraw-batch')" msgid "Raw images" msgstr "Images brutes (raw)" msgid "UFRaw ID files" msgstr "Fichiers ID UFRaw" msgid "Raw jpeg's" msgstr ".jpg Raw" msgid "Raw tiff's" msgstr ".tif Raw" msgid "All files" msgstr "Tous les fichiers" msgid "Show hidden files" msgstr "Voir fichiers cachés" msgid "Manual curve" msgstr "Courbe manuelle" msgid "Linear curve" msgstr "Courbe linéaire" msgid "Custom curve" msgstr "Courbe personnalisée" msgid "Camera curve" msgstr "Courbe de l'appareil" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Pas de profil" msgid "Color matrix" msgstr "Matrice de couleurs" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (embarqué)" msgid "System default" msgstr "Système par défaut" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Essaie de convertir .ufrawrc depuis UFRaw-0.4 ou plus récent" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Essaie de convertir .ufrawrc depuis UFRaw-0.6 ou plus récent" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "La version d'UFRaw de .ufrawrc n'est pas supporté" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Trop de points pour la courbe '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Trop d'ajustement de clarté dans le fichier ID, ignorés\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "Le fichier ID %s n'est pas un fichier régulier\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Ne peut ouvrir le fichier ID %s en lecture\n" "%s\n" #, c-format msgid "Error reading from file '%s'." msgstr "Erreur en lisant le fichier '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Erreur d'analyse '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Ne peut ouvrir le fichier %s en écriture\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "--create-id impossible avec stdout" msgid "UFRaw " msgstr "UFRaw" msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw convertisseur pour images brutes\n" " d'appareils numériques.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Utilisation: ufraw [ options ... ][ fichier-image-raw ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ options ... ] [ fichiers-image-raw ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ options ... ] [ répertoire-par-défaut ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Par défaut 'ufraw' affiche une fenêtre de pré-visualisation pour chaque\n" "image brute (raw), autorisant l'utilisateur à modifier les paramètres de " "l'image\n" "avant sauvegarde. Si aucun fichier brut (raw) n'est donné sur la ligne de\n" "commande, UFRaw affichera un sélecteur de fichier.\n" "Pour traiter les images sans questions (et sans pré-visualisation),\n" "utiliser 'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Les fichiers en entrée peuvent-être des images brutes (raw) ou des\n" "fichiers ID ufraw.\n" "Les fichiers ID contiennent le nom d'un fichier image brute et les " "paramètres\n" "pour traiter cette image.\n" "On peut également utiliser un fichier ID avec les options:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=fichier-ID Applique les paramètres du fichier-ID aux autres\n" " images brutes (raw).\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Les options restantes sont séparées en deux groupes.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Les options qui sont liées à la manipulation des images sont:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Réglage de la balance des blancs.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Température de couleur en Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=VERT Normalisation du vert.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type de la courbe de tonalité de base à utiliser.\n" " CURVE peut-être choisie parmi les courbes\n" " précédemment chargées dans l'environnement\n" " graphique.\n" " (par défaut c'est la courbe boîtier ('camera'),\n" " si elle existe, sinon la courbe 'linear').\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=fichier\n" " Utilise la courbe de tonalité de base contenue\n" " dans le fichier spécifié.\n" " Supplante l'option --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVE\n" " Type de la courbe de luminosité à utiliser. CURVE\n" " peut-être choisi parmi les courbes précédemment\n" " chargées dans l'environnement graphique.\n" " (par défaut linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=fichier\n" " Utilise la courbe de luminosité incluse dans\n" " le fichier spécifié.\n" " Supplante l'option --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Restaure les détails pour les EV negatifs.\n" " 'clip' ne restaure rien - à l'abri des artefacts.\n" " 'lch' restaure dans l'espace LCH - donne des détails " "mous.\n" " 'hsv' restaure dans l'espace HSV - donne des détails\n" " piqués.\n" " (par défaut lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Écrétage hautes lumières pour les EV positifs.\n" " 'digital' réponse numérique linéaire du capteur.\n" " 'film' émuler la réponse douce d'un film.\n" " (par défaut digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Ajustement du gamma de la courbe de base (défaut " "0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINÉARITÉ Linéarité de la courbe de base (défaut 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Ajustement du contraste (défaut 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Ajustement de la saturation (défaut 1.0, 0 pour \n" " sortie N&B).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=SEUIL\n" " Seuil débruitage par vaguelette (défaut 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALEUR\n" " Sensibilité de détection et égalisation des pixels " "chauds\n" " (défaut 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSURE\n" " Exposition Auto ou correction d'exposition en EV\n" " (défaut 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|NOIR\n" " Point noir Auto ou valeur du point noir (défaut 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algorithme d'interpolation à utiliser (défaut ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Appliquer le lissage des couleurs.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--greyscale=none|lightness|luminance|value|mixer\n" " Algorithme de conversion en niveaux de gris à " "utiliser\n" " (défaut none).\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=ROUGE,VERT,BLEU\n" " Valeurs du mixeur de niveau de gris à utiliser\n" " (défaut 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Les options concernant la sortie finale sont:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FACTEUR FACTEUR de réduction de l'image (défaut 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "" "--size=TAILLE Réduit la dimension max(hauteur,largeur) à TAILLE.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Format du fichier de sortie (défaut ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Profondeur de couleur par canal de la sortie (défaut " "8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Crée non|aussi|seulement un fichier ID (défaut no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALUE Compression JPEG (0-100, défaut 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Copie les exif dans le fichier de sortie (défaut " "exif).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Active [désactive] compression zip du TIFF (défaut " "nozip).\n" msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extrait l'imagette contenue dans le fichier brut " "(raw)\n" " plutôt que de convertir l'image brute. Cette option\n" " n'est valable qu'en traitement par lot 'ufraw-batch'.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " Pivote l'image selon le réglage boîtier, par ANGLE " "degrés\n" " horaire ou pas de rotation (défaut camera).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Découpe la sortie selon la plage indiquée, relatif à\n" " l'image brute après rotation mais avant mise à " "l'échelle.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "--auto-crop Découpe la sortie automatiquement.\n" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" "--aspect-ratio X:Y Définit le ratio d'aspect de la zone de découpe.\n" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Ne pas appliquer les corrections optiques ou essayer\n" " d'appliquer les corrections en auto-détectant " "l'optique (défaut none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=CHEMIN CHEMIN pour le fichier de sortie (défaut utilise \n" " le chemin en entrée).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=FICHIER Nom du fichier de sortie, utiliser '-' pour \n" " sortir vers stdout.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=FICHIER Utilise FICHIER comme image brute de bruit de " "référence.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Écraser les fichiers existants sans demander (défaut " "no).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Force la fenêtre maximisée.\n" msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent N'afficher aucun message durant le traitement par " "lot.\n" " Cette option n'est valable uniquement avec 'ufraw-" "batch'.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw lit en premier les paramètres depuis le fichier ressource $HOME/." "ufrawrc.\n" "Ensuite, si un fichier ID est spécifié, ses paramètres sont lus. Puis les\n" "paramètres de l'option --conf sont utilisées, ignorant les noms de fichiers\n" "entrée/sortie du fichier ID. Enfin, les options de la ligne de commande " "sont\n" "positionnées.\n" "En mode traitement par lot, le second groupe d'option N'EST PAS lu depuis\n" "le fichier ressource.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "En dernier, mais pas les moindres, --version affiche le numéro de version " "et\n" "les options de compilation pour ufraw et --help affiche ce message d'aide\n" "et quitte.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' n'est pas une valeur valide pour l'option --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw a été compilé sans le support du ZIP." msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch est obsolète. Utiliser 'ufraw-batch' à la place." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt retourne le code de caractère 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" "N'a pas chargé la courbe depuis %s, trop de courbes de bases configurées" #, c-format msgid "failed to load curve from %s" msgstr "N'a pas chargé la courbe depuis %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' n'est pas un nom de courbe de base valide." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "N'a pas chargé la courbe depuis %s, trop de courbes configurées" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' n'est pas un nom de courbe valide." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' n'est pas une option d'interpolation valide." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' n'est pas une option valide pour niveaux de gris." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' n'est pas une option valide pour '--grayscale-mixer'." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' n'est pas une option valide pour '--restore'." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' n'est pas une option valide pour '--clip'." msgid "you can not specify both --shrink and --size" msgstr "Vous ne pouvez pas utiliser --shrink et --size en même temps" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' n'est pas une profondeur de couleur valide." #, c-format msgid "Output type '%s' is deprecated" msgstr "Le type de sortie '%s' est déprécié" msgid "ufraw was build without TIFF support." msgstr "ufraw a été généré sans le support du TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw a été compilé sans le support du JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw a été compilé sans le support du PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' n'est pas un type de sortie valide." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' n'est pas un type de sortie valide pour l'image incluse." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' n'est pas une profondeur de couleur valide pour l'image incluse." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' n'est pas une option valide pour '--rotate'." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' n'est pas une option valide pour '--create-id'." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' n'est pas un chemin valide." msgid "cannot output more than one file to the same output" msgstr "Impossible d'écrire plus d'un fichier sur la même sortie" #, c-format msgid "Raw file '%s' missing." msgstr "Fichier brut '%s' est manquant." msgid "Delete raw file" msgstr "Effacer des fichiers brut (raw)" msgid "_Delete selected" msgstr "_Effacer la sélection" msgid "Delete _All" msgstr "Effacer _Tout" msgid "Select files to delete" msgstr "Sélectionner les fichiers à effacer" #, c-format msgid "Error reading directory '%s'." msgstr "Erreur en lisant le répertoire '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Erreur en effaçant '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Lire l'image incluse nécessite libjpeg" msgid "No embedded image found" msgstr "Pas d'image incluse trouvée" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "La taille d'origine (%d) est plus petite que la taille demandée (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "L'imagette ppm est incohérente, hauteur %d, largeur %d, tandis que le tampon " "%d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "La hauteur de l'imagette JPEG %d est différente de celle attendue %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "La largeur de l'imagette JPEG %d est différente de celle attendue %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Erreur en créant le fichier '%s'.\n" "%s" msgid "No embedded image read" msgstr "Pas d'image incluse lue" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Erreur en créant le fichier '%s'. Type de fichier %d inconnu." #, c-format msgid "Error creating file '%s': %s" msgstr "Erreur en créant le fichier '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Erreur en écrivant '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Type de sortie (%d) non supporté pour l'image incluse." #, c-format msgid "Loading raw file '%s'" msgstr "Charge le fichier brut (raw) '%s'" msgid "Can't allocate new image." msgstr "Ne peut allouer une nouvelle image." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Fond" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Échec lors de la copie du profil de sortie '%s' dans l'image." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "Longueur du tampon EXIF %d, trop longue, ignorée." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Fabricant:\t\t\t%s\n" "Modèle:\t\t\t\t%s%s\n" "Monture:\t\t\t\t%s\n" "Facteur re-cadrage:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Fabricant:\t\t%s\n" "Modèle:\t\t\t%s\n" "Plage focales:\t\t%s\n" "Ouverture:\t\t%s\n" "Facteur recadrage:\t%.1f\n" "Type:\t\t\t%s\n" "Monture:\t\t\t%s" msgid "Focal" msgstr "Focale" msgid "Focal length" msgstr "Focale" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "nombre F (ouverture)" msgid "Distance" msgstr "Distance" msgid "Distance to subject in meters" msgstr "Distance au sujet en mètres" #. Add the model combobox msgid "Model:" msgstr "Modèle:" msgid "Chromatic Aberrations mathematical model" msgstr "Modèle mathématique des aberrations chromatiques" msgid "Parameters" msgstr "Paramètres" msgid "Optical vignetting mathematical model" msgstr "Modèle mathématique du vignettage optique" msgid "Lens distortion mathematical model" msgstr "Modèle mathématique de la distortion de l'objectif" #. Lens geometry combobox msgid "Lens geometry:" msgstr "" "Géométrie\n" "de l'objectif:" msgid "The geometry of the lens used to make the shot" msgstr "Géométrie de l'objectif utilisé lors de la prise de vue" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Géométrie cible:" msgid "The target geometry for output image" msgstr "Géométrie cible pour l'image de sortie" msgid "Camera" msgstr "Boîtier" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Recherche d'un boîtier par motif\n" "Format: [Fabricant, ][Modèle]" msgid "Choose camera from complete list" msgstr "Choisir le boîtier depuis la liste complète" msgid "Reset all lens correction settings" msgstr "RàZ de tous les paramètres de correction d'objectif" #. Lens selector msgid "Lens" msgstr "Objectif" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Recherche d'un objectif par motif\n" "Format: [Fabricant, ][Modèle]" msgid "Choose lens from list of possible variants" msgstr "Choisir l'objectif depuis une liste de variantes possibles" msgid "Automatically find lens and set lens corrections" msgstr "Recherche automatique de l'objectif et application des corrections" msgid "Lateral chromatic aberration" msgstr "Aberration chromatiques latérales" msgid "Optical vignetting" msgstr "Vignettage optique" msgid "Lens distortion" msgstr "Distortion de l'objectif" msgid "Lens geometry" msgstr "Géométrie de l'objectif" msgid "Raw histogram with conversion curves" msgstr "Histogramme brut avec courbes de conversion" msgid "Live histogram" msgstr "Histogramme dynamique" #. No darkframe file msgid "None" msgstr "Aucun" msgid "Lightness" msgstr "Clarté" msgid "Luminance" msgstr "Luminance" msgid "Value" msgstr "Valeur" msgid "Channel Mixer" msgstr "Mélangeur de couches" msgid "UFRaw Message" msgstr "Message UFRaw" msgid "No more room for new curves." msgstr "Plus de place pour de nouvelles courbes." msgid "Load curve" msgstr "Charger courbe" msgid "All curve formats" msgstr "Tous les formats de courbes" msgid "UFRaw curve format" msgstr "Format de courbe UFRaw" msgid "Nikon curve format" msgstr "Format de courbe Nikon" msgid "Save curve" msgstr "Sauver courbe" msgid "No more room for new profiles." msgstr "Plus de place pour de nouveaux profils." msgid "Load color profile" msgstr "Charger un profil couleur" msgid "Color Profiles" msgstr "Profils couleur" msgid "Luminosity (Y value)" msgstr "Luminosité (valeur Y)" msgid "Adams' zone" msgstr "zone système Adams" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "taille %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "taille %dx%d, échelle 1/%d" msgid "Wavelet denoising" msgstr "Débruitage par vaguelette" msgid "Despeckling" msgstr "Suppression des tachetures" msgid "Interpolating" msgstr "Interpolation" msgid "Rendering" msgstr "Rendu" msgid "Loading preview" msgstr "Charge la pré-visualisation" msgid "Saving image" msgstr "Sauver l'image" #, c-format msgid "Black point: %0.3lf" msgstr "Point noir: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Plus de place pour de nouveaux ajustements de clarté." msgid "Aspect ratio locked, click to unlock" msgstr "Ratio d'aspect verrouillé, cliquer pour déverrouiller" msgid "Aspect ratio unlocked, click to lock" msgstr "Ratio d'aspect déverrouillé, cliquer pour verrouiller" msgid "Load dark frame" msgstr "Charger bruit de référence" msgid "clip" msgstr "écrêtées" msgid "restore in LCH space for soft details" msgstr "restaurer dans l'espace LCH pour des détails doux" msgid "restore in HSV space for sharp details" msgstr "restaurer dans l'espace HSV pour des détails piqués" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Restaure les détails pour les EV négatifs\n" "État actuel: %s" msgid "digital linear" msgstr "linéaire numérique" msgid "soft film like" msgstr "rendu film doux" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Écrêtage hautes lumières pour les EV positifs\n" "État courant: %s" #, c-format msgid "Filename: %s%s" msgstr "Fichier: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "Créer aussi un fichier ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Créer seulement un fichier ID" msgid "UFRaw options" msgstr "Options d'UFRaw" msgid "Settings" msgstr "Paramètres" msgid "Input color profiles" msgstr "Profils couleurs d'entrée" msgid "Output color profiles" msgstr "Profils couleurs de sortie" msgid "Display color profiles" msgstr "Profils couleurs d'affichage" msgid "Base Curves" msgstr "Courbes de base" msgid "Luminosity Curves" msgstr "Courbes de luminosité" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Commande distante pour Gimp" msgid "Reset command to default" msgstr "Retour à la commande par défaut" msgid "Blink Over/Underexposure Indicators" msgstr "Clignotement des indicateurs Sur/Sous-exposition" msgid "Configuration" msgstr "Configuration" msgid "Save configuration" msgstr "Sauver la configuration" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Sauver la configuration dans le fichier ressource ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "À propos" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "The Unidentified Flying Raw (UFRaw) est un " "utilitaire\n" "pour lire et manipuler les images brutes (raw) des\n" "appareils numériques.\n" "UFRaw se base sur Digital Camera Raw (DCRaw)\n" "pour le décodage des images brutes.\n" "\n" "Auteur: Udi Fuchs\n" "Page web: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Linéaire" msgid "Logarithmic" msgstr "Logarithmique" msgid "Hot pixels: " msgstr "Pixels chauds:" msgid "mark" msgstr "marquer" msgid "Hot pixel sensitivity" msgstr "Sensibilité pixel chaud" msgid "Reset hot pixel sensitivity" msgstr "RàZ sensibilité pixel chaud" msgid "RGB histogram" msgstr "Histogramme RGB" msgid "R+G+B histogram" msgstr "Histogramme R+G+B" msgid "Luminosity histogram" msgstr "Histogramme de luminosité" msgid "Value (maximum) histogram" msgstr "Histogramme par valeurs (maximum)" msgid "Saturation histogram" msgstr "Histogramme de saturation" msgid "Average:" msgstr "Moyenne:" msgid "Std. deviation:" msgstr "Déviation std.:" msgid "Overexposed:" msgstr "Sur-exposé:" msgid "Indicate" msgstr "Indiquer" msgid "Underexposed:" msgstr "Sous-exposé:" msgid "White Balance" msgstr "Balance des Blancs" msgid "Cannot use camera white balance." msgstr "Balance des blancs boiter inutilisable." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Il n'y a pas de pré-réglages de balance des blancs pour ce boîtier.\n" "Consulter le site web d'UFRaw pour savoir que faire pour que votre\n" " boîtier soit supporté." msgid "Reset white balance to initial value" msgstr "RàZ de la balance des blancs" msgid "Temperature" msgstr "Température" msgid "White balance color temperature (K)" msgstr "Température de la couleur (K)" msgid "Green" msgstr "Vert" msgid "Green component" msgstr "Composante verte" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Sélectionner un point, sur la pré-visualisation, à utiliser comme balance " "des blancs" msgid "Chan. multipliers:" msgstr "" "Multiplicateurs\n" "de canaux:" msgid "Bayer pattern interpolation" msgstr "Interpolation matrice de Bayer" msgid "VNG four color interpolation" msgstr "Interpolation VNG 4 couleurs" msgid "Bilinear interpolation" msgstr "Interpolation bilinéaire" msgid "AHD interpolation" msgstr "Interpolation AHD" msgid "VNG interpolation" msgstr "Interpolation VNG" msgid "PPG interpolation" msgstr "Interpolation PPG" msgid "No interpolation" msgstr "Pas d'interpolation" msgid "No Bayer pattern" msgstr "Pas de matrice de Bayer" msgid "Apply color smoothing" msgstr "Appliquer le lissage des couleurs" msgid "Denoise" msgstr "Antibruit" msgid "Threshold for wavelet denoising" msgstr "Seuil pour le débruitage par vaguelette" msgid "Reset denoise threshold to default" msgstr "RàZ du seuil de débruitage" msgid "Dark Frame:" msgstr "Bruit de référence:" msgid "Reset dark frame" msgstr "RàZ du bruit de référence" msgid "Reset adjustment" msgstr "R-à-Z Ajustement" msgid "Select a spot on the preview image to choose hue" msgstr "" "Sélectionner un point sur la pré-visualisation pour choisir la tonalité" msgid "Remove adjustment" msgstr "Retirer le réglage" msgid "Grayscale Mode:" msgstr "" "Mode\n" "niveaux de gris:" msgid "Reset channel mixer" msgstr "RàZ Mélangeur de couches" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "Suppression des tachetures est principalement utile quand on combine un " "nombre d'ISO élevé avec un multiplicateur de canal élevé: quand un canal a " "un très mauvais rapport signal/bruit. Essayer de paramétrer la taille de " "fenêtre, la décomposition des couleurs et le nombre de passes à 50,0,5 pour " "ce canal. Quand un canal contient seulement du bruit alors essayer 1,0.6,1.\n" "Suppression des tachetures est inactif quand la taille de fenêtre ou le " "nombre de passes sont égaux à zéro. Quand actif alors la taille de fenêtre " "ne peut pas être plus petite que le nombre de passes." msgid "Update channel parameters together" msgstr "Lier les canaux" msgid "Reset despeckle parameters" msgstr "RàZ des paramètres de retrait des tachetures" #. channel to view msgid "View channel:" msgstr "Voir canal:" #. Parameters msgid "Window size:" msgstr "Taille fenêtre:" msgid "Color decay:" msgstr "" "Décomposition\n" "couleur:" msgid "Passes:" msgstr "Passes:" msgid "Load base curve" msgstr "Charger courbe de base" msgid "Save base curve" msgstr "Sauver courbe de base" msgid "Reset base curve to default" msgstr "RàZ de la courbe de base" msgid "Input ICC profile" msgstr "Profil ICC d'entrée" msgid "Output ICC profile" msgstr "Profil ICC de sortie" msgid "Display ICC profile" msgstr "Afficher le profil ICC" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Correction gamma pour le profil d'entrée" msgid "Reset gamma to default" msgstr "RàZ du gamma" msgid "Linearity" msgstr "Linéarité" msgid "Linear part of the gamma correction" msgstr "Partie linéaire de la correction gamma" msgid "Reset linearity to default" msgstr "RàZ de la linéarité" msgid "Output intent" msgstr "" "Rendu\n" "de sortie" msgid "Perceptual" msgstr "Perceptuel" msgid "Relative colorimetric" msgstr "Colorimétrie relative" msgid "Saturation" msgstr "Saturation" msgid "Absolute colorimetric" msgstr "Colorimétrie absolue" msgid "Output bit depth" msgstr "" "Profondeur de \n" "couleur de sortie" msgid "Display intent" msgstr "" "Rendu\n" "d'affichage" msgid "Disable soft proofing" msgstr "Pas de pré-vue du rendu" msgid "Contrast" msgstr "Contraste" msgid "Global contrast adjustment" msgstr "Ajustement du contraste global" msgid "Reset global contrast to default" msgstr "RàZ du contraste global" msgid "Reset saturation to default" msgstr "RàZ saturation" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Ajustement auto de la courbe\n" "(aplatir l'histogramme)" msgid "Reset curve to default" msgstr "RàZ de la courbe" msgid "Reset black-point to default" msgstr "RàZ du point noir" msgid "Auto adjust black-point" msgstr "Ajustement automatique du point noir" #. Start of Crop controls msgid "Left:" msgstr "Gauche:" msgid "Top:" msgstr "Haut:" msgid "Right:" msgstr "Droite:" msgid "Bottom:" msgstr "Bas:" msgid "Auto fit crop area" msgstr "Sélection automatique du recadrage" msgid "Reset the crop area" msgstr "RàZ de la zone de découpe" msgid "Aspect ratio:" msgstr "Proportions:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Proportions de la zone de découpe.\n" "Peuvent être saisies soient en notation décimale (1.273)\n" "soient comme une fraction (14:11)" msgid "Shrink factor" msgstr "" "Facteur de\n" "réduction" msgid "Width" msgstr "Largeur" msgid "Height" msgstr "Hauteur" msgid "Orientation:" msgstr "Orientation:" msgid "Rotation" msgstr "Rotation" msgid "Rotation angle" msgstr "Angle de rotation" msgid "Reset rotation angle" msgstr "RàZ de l'angle de rotation" #. drawLines toggle button msgid "Grid lines" msgstr "Lignes de grille" msgid "Number of grid lines to overlay in the crop area" msgstr "Nombre de lignes d'alignement en surimpression de la zone de découpe" msgid "Path" msgstr "Chemin" msgid "Select output path" msgstr "Sélectionner le chemin de sortie" msgid "Filename" msgstr "" "Nom du\n" "fichier" msgid "JPEG compression level" msgstr "Niveau compression JPEG" msgid "JPEG progressive encoding" msgstr "Encodage progressif JPEG" msgid "TIFF lossless Compress" msgstr "Compression sans perte TIFF" msgid "Embed EXIF data in output" msgstr "Inclure les données EXIF dans la sortie" msgid "Create ID file " msgstr "Créer un fichier ID " msgid "No" msgstr "Non" msgid "Also" msgstr "Aussi" msgid "Only" msgstr "Seulement" msgid "Save image defaults " msgstr "" "Sauver réglages \n" "image par défaut " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Sauve les réglages courant de l'image comme paramètres par défaut.\n" "Les paramètres de sortie dans cette fenêtre sont toujours sauvés." msgid "Never again" msgstr "Plus jamais" msgid "Always" msgstr "Toujours" msgid "Just this once" msgstr "Juste cette fois" msgid "Remember output path" msgstr "Mémoriser le chemin de sortie" msgid "Overwrite existing files without asking" msgstr "Écraser les fichiers existants sans demander" msgid "Tag" msgstr "Marqueur" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Fabricant" msgid "Camera model" msgstr "Modèle" msgid "Timestamp" msgstr "Horodatage" msgid "Shutter time" msgstr "Vitesse" msgid "Aperture" msgstr "Ouverture" msgid "ISO speed" msgstr "Sensibilité" msgid "35mm focal length" msgstr "Focale 35mm" msgid "Flash" msgstr "Flash" msgid "White balance" msgstr "Balance des Blancs" #, c-format msgid "EXIF data read by %s" msgstr "Données EXIF lues par %s" msgid "Warning: EXIF data will not be sent to output" msgstr "" "Avertissement: les données EXIF ne seront pas\n" " envoyées vers la sortie" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Valeurs spot:" msgid "Exposure compensation in EV" msgstr "Compensation d'exposition en EV" msgid "Auto adjust exposure" msgstr "Ajustement auto de l'exposition" msgid "Reset exposure to default" msgstr "RàZ de l'exposition" msgid "Grayscale" msgstr "Niveaux de gris" #. Lens correction page msgid "Lens correction" msgstr "Corrections de l'objectif" msgid "Base curve" msgstr "Courbe de base" msgid "Color management" msgstr "Gestion des couleurs" msgid "Correct luminosity, saturation" msgstr "Corrections luminosité, saturation" msgid "Lightness Adjustments" msgstr "Ajustement Clarté" msgid "Crop and rotate" msgstr "Découpe et rotation" msgid "Save" msgstr "Sauver" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Pourcentage du Zoom" msgid "Options" msgstr "Options" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Effacer" msgid "Send image to _Gimp" msgstr "Envoyer l'image à _Gimp" msgid "Fatal error setting C locale" msgstr "Erreur fatale en positionnant la locale C" #, c-format msgid "Curve version is not supported" msgstr "Cette version de courbe n'est pas supporté" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Fichier de courbe Nikon invalide '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Erreur en ouvrant la courbe '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Erreur à l'ouverture du fichier '%s': %s" msgid "File exists" msgstr "Le fichier existe" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Le fichier '%s' existe déjà.\n" "Écraser?" msgid "Error creating temporary file." msgstr "Erreur en créant le fichier temporaire." msgid "Error activating Gimp." msgstr "Erreur à l'activation de Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "Balance des blancs boiter non utilisable, retour à la balance auto.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "Les options --temperature et --green supplantent l'option --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' n'est pas un paramètre de balance des blancs valide." msgid "Remote URI is not supported" msgstr "URI distante non supportée" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "Erreur bruit de référence: %s n'est pas un fichier brut (raw)\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "erreur de chargement du bruit de référence '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "Le bruit de référence '%s' est incompatible avec l'image principale." #, c-format msgid "using darkframe '%s'\n" msgstr "utiliser le bruit de référence '%s'\n" msgid "Error reading NEF curve" msgstr "Erreur en lisant la courbe NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "Ne peux pas réduire la taille de %d à %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Erreur en créant le fichier '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Erreur en créant le fichier." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "Le nom de fichier de l'image ne peut pas être le même que celui du fichier " "d'ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Échoue à inclure le profil de sortie '%s' dans '%s'" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "La profondeur de couleur '%d' est ignorée." #, c-format msgid "Unknown file type %d." msgstr "Type de fichier %d inconnu." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Lumière du jour" #. Probably same as above: msgid "Direct sunlight" msgstr "Soleil direct" msgid "Cloudy" msgstr "Nuageux" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Ombre" msgid "Incandescent" msgstr "Incandescent" msgid "Incandescent warm" msgstr "Incandescent chaud" #. Same as "Incandescent": msgid "Tungsten" msgstr "Tungstène" msgid "Fluorescent" msgstr "Fluorescent" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluorescent \"haut\"" msgid "Cool white fluorescent" msgstr "Fluorescent blanc froid" msgid "Warm white fluorescent" msgstr "Fluorescent blanc chaud" msgid "Daylight fluorescent" msgstr "Fluorescent lumière du jour" msgid "Neutral fluorescent" msgstr "Fluorescent neutre" msgid "White fluorescent" msgstr "Fluorescent blanc" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Fluorescent vapeur de sodium" msgid "Day white fluorescent" msgstr "Fluorescent blanc jour" msgid "High temp. mercury-vapor fluorescent" msgstr "Fluorescent vapeur de mercure haute temp." #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flash (mode auto)" msgid "Evening sun" msgstr "Soleil couchant" msgid "Underwater" msgstr "Sous-marin" msgid "Black & white" msgstr "Noir & Blanc" msgid "Manual WB" msgstr "Bal. du Blanc Manuelle" msgid "Camera WB" msgstr "Bal. du Blanc Boitier" msgid "Auto WB" msgstr "Bal. du Blanc Auto" ufraw-0.19.2/po/cs.po0000664000175000017500000013071512123734456011253 00000000000000# Czech translation for UFRaw package. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Milan Knizek , 2007-2011. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2011-08-12 05:57+0100\n" "Last-Translator: Milan Knížek \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Czech\n" "X-Poedit-Country: CZECH REPUBLIC\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Otevřít okno navigátoru" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "PříliÅ¡ velká hodnota %.*f, upravena na %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "PříliÅ¡ malá hodnota %.*f, upravena na %.*f." msgid "No input file, nothing to do." msgstr "Žádný vstupní soubor, nic ke zpracování." #, c-format msgid "Loaded %s %s" msgstr "NaÄteno %s %s" #, c-format msgid "Saved %s %s" msgstr "Uloženo %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "a" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: pÅ™epsat '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "--silent volba je platná pouze v dávkovém režimu" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "--silent volba je platná pouze v dávkovém režimu" msgid "Raw images" msgstr "Raw snímky" msgid "UFRaw ID files" msgstr "UFRaw ID soubory" msgid "Raw jpeg's" msgstr "Raw JPEGy" msgid "Raw tiff's" msgstr "Raw TIFFy" msgid "All files" msgstr "VÅ¡echny soubory" msgid "Show hidden files" msgstr "Ukázat skryté soubory" msgid "Manual curve" msgstr "RuÄní kÅ™ivka" msgid "Linear curve" msgstr "Lineární kÅ™ivka" msgid "Custom curve" msgstr "Upravená kÅ™ivka" msgid "Camera curve" msgstr "KÅ™ivka fotoaparátu" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Žádný profil" msgid "Color matrix" msgstr "Matice barev" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (vložený)" msgid "System default" msgstr "Standardní ze systému" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Zkouší se konverze .ufrawrc z UFRaw-0.4 nebo staršího" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Zkouší se konverze .ufrawrc z UFRaw-0.6 nebo staršího" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "UFRaw verze v .ufrawrc není podporována" #, c-format msgid "Too many anchors for curve '%s'" msgstr "PříliÅ¡ mnoho kotev pro kÅ™ivku '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "PříliÅ¡ mnoho úprav svÄ›tlosti v ID souboru, ignorováno\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "ID soubor %s nevypadá jako platný soubor\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "Nelze otevřít ID soubor %s pro Ätení\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Chyba pÅ™i vytváření souboru '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Chyba pÅ™i analýze '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "Nelze otevřít soubor %s pro zápis\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "nelze použít --create-id pro stdout" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr " - Unidentified Flying Raw konvertor pro digitální snímky.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Použití: ufraw [ volby ... ] [ raw-snímky ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ volby ... ] [ raw-snímky ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ volby ... ] [ standardní-adresář ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "StandardnÄ› 'ufraw' zobrazí okno náhledu pro každý raw snímek a umožní\n" "uživateli mÄ›nit parametry snímku pÅ™ed uložením. Pokud na příkazové řádce\n" "nejsou zadány žádné raw snímky, UFRaw zobrazí dialog pro výbÄ›r souboru.\n" "Pro zpracování snímků bez dalších otázek (a bez náhledu) lze použít\n" "'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Vstupní soubory mohou být buÄ raw snímky nebo ID soubory ufraw. ID soubory\n" "obsahují jméno raw snímku a parametry pro nakládání se snímkem.\n" "Lze též použít ID soubor pomocí volby:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=ID-soubor Použít parametry v ID-souboru pro ostatní raw " "snímky.\n" msgid "The rest of the options are separated into two groups.\n" msgstr "Ostatní volby jsou oddÄ›leny do dvou skupin.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Volby, které se týkají manipulace se snímkem, jsou:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Nastavení vyvážení bílé.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEPLOTA Barevná teplota v Kelvinech.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=GREEN Normalizace zelené barvy.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|KŘIVKA\n" " Typ základní tónové kÅ™ivky. KŘIVKA může být jakákoliv\n" " kÅ™ivka, která byla dříve naÄtena v GUI (uživatelském " "rozhraní).\n" " (standardnÄ› 'camera', pokud existuje, jinak " "'linear'.)\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=soubor\n" " Použít základní tónovou kÅ™ivku uloženou v uvedeném " "souboru.\n" " PotlaÄí volbu --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|KŘIVKA\n" " Typ jasové kÅ™ivky. KŘIVKA může být jakákoliv kÅ™ivka,\n" " která byla dříve naÄtena v GUI (uživatelském " "rozhraní).\n" " (StandardnÄ› 'linear'.)\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=soubor Použít jasovou kÅ™ivku uloženou v uvedeném souboru.\n" " PotlaÄí volbu --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Obnovit detaily pro záporné EV.\n" " 'clip' neobnoví nic - zabrání artefaktům.\n" " 'lch' obnoví v LCH prostoru - pro jemné detaily.\n" " 'hsv' obnoví v HSV prostoru - pro ostré detaily.\n" " (StandardnÄ› lch.)\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Oříznout svÄ›tla pro kladné EV.\n" " 'digital' lineární odezva digitálního senzoru.\n" " 'film' napodobit charakteristickou kÅ™ivku filmu. " "(StandardnÄ› 'digital'.)\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "--gamma=GAMA Korekce GAMA základní kÅ™ivky (standardnÄ› 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "--linearity=LINEARITA Linearita základní kÅ™ivky (standardnÄ› 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=KONT Korekce KONTrastu (standardnÄ› 1.0).\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Korekce SATurace (standardnÄ› 1.0, 0 pro ÄŒB výstup).\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=PRÃH\n" " Práh metody vlnkového odstranÄ›ní Å¡umu (standardnÄ› " "0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=HODNOTA\n" " Citlivost pro detekci a odstranÄ›ní hot pixels " "(standardní 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOZICE\n" " Automatická expozice nebo korekce expozice v EV " "(standardnÄ› 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|ÄŒERNÃ\n" " Automatické nastavení Äerného bodu nebo hodnota " "Äerného bodu (standardnÄ› 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " InterpolaÄní algoritmus (standardnÄ› ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Použít vyhlazení barev.\n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmus pro pÅ™evod do Å¡edé Å¡kály (standardnÄ› " "none).\n" " none - žádný, lightness - svÄ›tlost,\n" " luminance - jas, mixer - mixér kanálů.\n" msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Hodnoty Äervené, zelené a modré pro mixér kanálů " "(standardnÄ› 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Volby, které se týkají koneÄného výstupu, jsou:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FAKTOR ZmenÅ¡it snímek o FAKTOR (standardnÄ› 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=VELIKOST ZmenÅ¡it maximum(výška, šířka) na VELIKOST.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|fits\n" " Formát výstupního souboru (standardnÄ› ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Výstupní bitová hloubka pro každý kanál (standardnÄ› " "8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " VytvoÅ™it žádný|také|pouze ID soubor (standardnÄ› " "žádný).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=HODNOTA JPEG komprese (0-100, standardnÄ› 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif [Ne]vložit EXIF do výstupního souboru (standardnÄ› " "vložit EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip [Ne]aktivní zip komprese TIFF (standardnÄ› neaktivní).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extrahovat náhled snímku vloženého v raw souboru\n" " místo konvertování raw souboru.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ÚHEL|no\n" " OtoÄit snímek podle nastavení fotoaparátu (camera),\n" " podle ÚHLU ve stupních ve smÄ›ru hod. ruÄiÄek nebo\n" " neotáÄet (no) snímek (standardnÄ› dle fotoaparátu).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELY\n" " Oříznout výstup dle urÄených parametrů, relativnÄ› k\n" " raw snímku po rotaci, ale pÅ™ed zmÄ›nou velikosti.\n" " left - vlevo, right - vpravo, top - nahoÅ™e, bottom - " "dole\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto Nebude použita korekce objektivu nebo se zkusí použít\n" " korekce dle automaticky detekovaného objektivu " "(výchozí: none).\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=CESTA CESTA pro výstupní soubor (standardnÄ› cesta dle " "vstupního souboru).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=SOUBOR Jméno výstupního SOUBORU, použít '-' pro standardní " "výstup (stdout).\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=SOUBOR Použít SOUBOR pro odeÄtení Äerného snímku z raw.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite PÅ™epsat existující soubory bez vyzvání (standardnÄ› " "nepÅ™episovat).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Vnutit maximální velikost okna.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent Nezobrazovat žádné zprávy bÄ›hem dávkové konverze.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "Nejprve jsou Ätena nastavení z konfiguraÄního souboru $HOME/.ufrawrc.\n" "Poté, pokud je specifikován ID soubor, jsou pÅ™eÄtena jeho nastavení. Dále\n" "je použito nastavení z volby --conf (vstupní/výstupní jména souborů z ID " "souboru jsou ignorována).\n" "Nakonec jsou nastaveny volby z příkazové řádky. V dávkovém režimu druhá " "skupina voleb\n" "NENà Ätena z konfiguraÄního souboru.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Poslední, neménÄ› důležité, --version zobrazí Äíslo verze a kompilaÄní volby\n" "pro ufraw a --help zobrazí tuto nápovÄ›du a ukonÄí program.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' není platná hodnota pro volbu --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw byl kompilován bez podpory ZIP." #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch je zastaralá volba. Použijte ufraw-batch." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt vrátil znakový kód 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "chyba pÅ™i Ätení kÅ™ivky z %s, příliÅ¡ mnoho základních kÅ™ivek" #, c-format msgid "failed to load curve from %s" msgstr "chyba pÅ™i Ätení kÅ™ivky z %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' není platné jméno základní kÅ™ivky." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "chyba pÅ™i Ätení kÅ™ivky z %s, příliÅ¡ mnoho kÅ™ivek" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' není platné jméno kÅ™ivky." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' není platná volba interpolace." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' není platné pro volbu grayscale." #, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' není platná volba pro mixér kanálů." #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' není platná volba rekonstrukce svÄ›tel." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' není platná volba oříznutí svÄ›tel." msgid "you can not specify both --shrink and --size" msgstr "nemůžete použít souÄasnÄ› --shrink a --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' není platná bitová hloubka." #, c-format msgid "Output type '%s' is deprecated" msgstr "Výstupní typ '%s' je již nepoužívaný" msgid "ufraw was build without TIFF support." msgstr "ufraw byl kompilován bez podpory TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw byl kompilován bez podpory JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw byl kompilován bez podpory PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' není platný výstupní typ." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' není platný výstupní typ pro vložený snímek." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' není platná bitová hloubka pro vložený snímek." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' není platné pro volbu rotate." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' není platné pro volbu create-id." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' není platná cesta." msgid "cannot output more than one file to the same output" msgstr "nemohu vytvoÅ™it více než jeden soubor pro stejný výstup" #, c-format msgid "Raw file '%s' missing." msgstr "Chybí '%s' soubor raw." msgid "Delete raw file" msgstr "Smazat soubor raw" msgid "_Delete selected" msgstr "_Smazat vybrané" msgid "Delete _All" msgstr "Smazat _VÅ¡e" msgid "Select files to delete" msgstr "Vybrat soubory ke smazání" #, c-format msgid "Error reading directory '%s'." msgstr "Chyba pÅ™i Ätení adresáře '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Chyba pÅ™i mazání '%s'" msgid "Reading embedded image requires libjpeg." msgstr "ÄŒtení vloženého snímku vyžaduje libjpeg." msgid "No embedded image found" msgstr "Nenalezen vložený snímek." #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "Původní velikost (%d) je menší než požadovaná velikost (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "Nesoulad náhledu ppm, výška %d, šířka %d, zatímco buffer %d." #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "Výška %d náhledu JPEG jiná než oÄekávaná %d." #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "Šířka %d náhledu JPEG jiná než oÄekávaná %d." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Chyba pÅ™i vytváření souboru '%s'.\n" "%s" msgid "No embedded image read" msgstr "NepÅ™eÄten žádný vložený snímek" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Chyba pÅ™i vytváření souboru '%s'. Neznámý typ souboru %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Chyba pÅ™i vytváření souboru '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Chyba pÅ™i zápisu '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Nepodporovaný výstupní typ (%d) pro vložený snímek" #, c-format msgid "Loading raw file '%s'" msgstr "NaÄítám soubor raw '%s'" msgid "Can't allocate new image." msgstr "Nemohu nalézt nový snímek." #. Create the "background" layer to hold the image... msgid "Background" msgstr "Pozadí" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Selhalo vložení výstupního profilu'%s' do snímku." #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "Délka %d bufferu EXIF příliÅ¡ dlouhá, ignorováno." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Výrobce:\t\t%s\n" "Model:\t\t%s%s\n" "Bajonet:\t\t%s\n" "Faktor oÅ™ezu:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Výrobce:\t\t\t%s\n" "Model:\t\t\t%s\n" "Rozsah ohnisek:\t%s\n" "Clona:\t\t\t%s\n" "Faktor oÅ™ezu:\t\t%.1f\n" "Typ:\t\t\t\t%s\n" "Bajonety:\t\t%s" msgid "Focal" msgstr "Ohnisko" msgid "Focal length" msgstr "Ohnisková vzdálenost" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "F-Äíslo (clona)" msgid "Distance" msgstr "Vzdálenost" msgid "Distance to subject in meters" msgstr "Vzdálenost k pÅ™edmÄ›tu v metrech" #. Add the model combobox msgid "Model:" msgstr "Model:" msgid "Chromatic Aberrations mathematical model" msgstr "Matematický model pro chromatickou vadu" msgid "Parameters" msgstr "Parametry" msgid "Optical vignetting mathematical model" msgstr "Matematický model pro optickou vinÄ›taci" msgid "Lens distortion mathematical model" msgstr "Matematický model pro zkreslení objektivu" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Projekce objektivu:" msgid "The geometry of the lens used to make the shot" msgstr "Projekce (zobrazení) objektivu použitého pro vyfocení snímku" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Cílová projekce:" msgid "The target geometry for output image" msgstr "Cílová projekce pro výstupní snímek" msgid "Camera" msgstr "Fotoaparát" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Hledat fotoaparát pomocí dotazu\n" "Formát: [Výrobce, ][Model]" msgid "Choose camera from complete list" msgstr "Vybrat fotoaparát z úplného seznamu" msgid "Reset all lens correction settings" msgstr "Obnovit výchozí nastavení korekce objektivu" #. Lens selector msgid "Lens" msgstr "Objektiv" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Hledat objektiv pomocí dotazu\n" "Formát: [Výrobce, ][Model]" msgid "Choose lens from list of possible variants" msgstr "Vybrat objektiv ze seznamu možných variant" msgid "Automatically find lens and set lens corrections" msgstr "Automaticky nalézt objektiv a nastavit korekci objektivu" msgid "Lateral chromatic aberration" msgstr "Postranní chromatická vada" msgid "Optical vignetting" msgstr "Optická vinÄ›tace" msgid "Lens distortion" msgstr "Zkreslení objektivu" msgid "Lens geometry" msgstr "Projekce objektivu" msgid "Raw histogram with conversion curves" msgstr "Histogram raw s konverzními kÅ™ivkami" msgid "Live histogram" msgstr "Aktuální histogram" #. No darkframe file msgid "None" msgstr "Žádný" msgid "Lightness" msgstr "SvÄ›tlost" msgid "Luminance" msgstr "Jas" msgid "Value" msgstr "Hodnota" msgid "Channel Mixer" msgstr "Mixér kanálů" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "Není více místa pro nové kÅ™ivky." msgid "Load curve" msgstr "NaÄíst kÅ™ivku" msgid "All curve formats" msgstr "VÅ¡echny formáty kÅ™ivek" msgid "UFRaw curve format" msgstr "Formát kÅ™ivek UFRaw" msgid "Nikon curve format" msgstr "Formát kÅ™ivek Nikon" msgid "Save curve" msgstr "Uložit kÅ™ivku" msgid "No more room for new profiles." msgstr "Není více místa pro nové profily." msgid "Load color profile" msgstr "NaÄíst barvové profily" msgid "Color Profiles" msgstr "Barvové profily" msgid "Luminosity (Y value)" msgstr "Jas (Y hodnota)" msgid "Adams' zone" msgstr "Zóna dle Adamse" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "velikost %dx%d, pÅ™iblížení %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "velikost %dx%d, měřítko 1/%d" msgid "Wavelet denoising" msgstr "Vlnkové odstranÄ›ní Å¡umu" msgid "Despeckling" msgstr "OdstranÄ›ní Å¡umu" msgid "Interpolating" msgstr "Interpoluji" msgid "Rendering" msgstr "Vykresluji" msgid "Loading preview" msgstr "NaÄítání náhledu" msgid "Saving image" msgstr "Ukládání snímku" #, c-format msgid "Black point: %0.3lf" msgstr "ÄŒerný bod: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "Není více místa pro nové úpravy svÄ›tlosti." msgid "Aspect ratio locked, click to unlock" msgstr "PomÄ›r stran je fixní, kliknÄ›te, aby byl uvolnÄ›n." msgid "Aspect ratio unlocked, click to lock" msgstr "PomÄ›r stran je volný, kliknÄ›te, aby byl fixní." msgid "Load dark frame" msgstr "NaÄíst Äerný snímek" msgid "clip" msgstr "oříznout" msgid "restore in LCH space for soft details" msgstr "obnovit v LCH prostoru pro jemné detaily" msgid "restore in HSV space for sharp details" msgstr "obnovit v HSV prostoru pro ostré detaily" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Obnovit detaily pro záporné EV\n" "SouÄasný stav: %s" msgid "digital linear" msgstr "digitální lineární" msgid "soft film like" msgstr "mÄ›kká jako u filmu" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Oříznout svÄ›tla pro kladná EV\n" "SouÄasný stav: %s" #, c-format msgid "Filename: %s%s" msgstr "Jméno souboru: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "VytvoÅ™it také soubor ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "VytvoÅ™it pouze soubor ID" msgid "UFRaw options" msgstr "Volby UFRaw" msgid "Settings" msgstr "Nastavení" msgid "Input color profiles" msgstr "Vstupní barvové profily" msgid "Output color profiles" msgstr "Výstupní barvové profily" msgid "Display color profiles" msgstr "Barvové profily monitoru" msgid "Base Curves" msgstr "Základní kÅ™ivky" msgid "Luminosity Curves" msgstr "Jasové kÅ™ivky" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Příkaz pro 'remote Gimp'" msgid "Reset command to default" msgstr "Obnovení standardních hodnot" msgid "Blink Over/Underexposure Indicators" msgstr "Blikat indikátory pÅ™e/podexpozice" msgid "Configuration" msgstr "Konfigurace" msgid "Save configuration" msgstr "Uložit konfiguraci" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Uložit nastavení do konfiguraÄního souboru ($HOME/.ufrawrc)" msgid "Log" msgstr "Log" msgid "About" msgstr "O programu" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "Unidentified Flying Raw (UFRaw) je nástroj ke\n" "Ätení a manipulaci raw snímků z digitálních fotoaparátů.\n" "UFRaw spoléhá na Digital Camera Raw (DCRaw)\n" "pÅ™i kódování raw snímků.\n" "\n" "Autor: Udi Fuchs\n" "Domovská stránka: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineární" msgid "Logarithmic" msgstr "Logaritmické" msgid "Hot pixels: " msgstr "Hot pixels: " msgid "mark" msgstr "znaÄka" msgid "Hot pixel sensitivity" msgstr "Citlivost hot pixels" msgid "Reset hot pixel sensitivity" msgstr "Obnovit citlivost pro hot pixels" msgid "RGB histogram" msgstr "Histogram dle RGB" msgid "R+G+B histogram" msgstr "Histogram dle R+G+B" msgid "Luminosity histogram" msgstr "Histogram dle jasu" msgid "Value (maximum) histogram" msgstr "Histogram dle hodnoty (maximum)" msgid "Saturation histogram" msgstr "Histogram dle sytosti barev" msgid "Average:" msgstr "PrůmÄ›r:" msgid "Std. deviation:" msgstr "Std. odch.:" msgid "Overexposed:" msgstr "PÅ™eexp.:" msgid "Indicate" msgstr "Ukázat" msgid "Underexposed:" msgstr "Podexp.:" msgid "White Balance" msgstr "Vyvážení bílé" msgid "Cannot use camera white balance." msgstr "Nelze použít nastavení vyvážení bílé dle fotoaparátu." msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "Neexistují žádná pÅ™ednastavená vyvážení bílé pro Váš typ fotoaparátu.\n" "Zkontrolujte webovou stránku UFRaw ohlednÄ› informace jak získat\n" "podporu pro Váš typ fotoaparátu." msgid "Reset white balance to initial value" msgstr "Nastavit vyvážení bílé na poÄáteÄní hodnotu" msgid "Temperature" msgstr "Teplota" msgid "White balance color temperature (K)" msgstr "Barevná teplota vyvážení bílé (K)" msgid "Green" msgstr "Zelená" msgid "Green component" msgstr "Zelená složka" msgid "Select a spot on the preview image to apply spot white balance" msgstr "PÅ™ed nastavením bodového vyvážení bílé zvolte bod na snímku náhledu" msgid "Chan. multipliers:" msgstr "Násobitele kanálů:" msgid "Bayer pattern interpolation" msgstr "Interpolace Bayerovy matice" msgid "VNG four color interpolation" msgstr "VNG Interpolace ÄtyÅ™ barev" msgid "Bilinear interpolation" msgstr "Bilineární interpolace" msgid "AHD interpolation" msgstr "AHD interpolace" msgid "VNG interpolation" msgstr "VNG interpolace" msgid "PPG interpolation" msgstr "PPG interpolace" msgid "No interpolation" msgstr "Žádná interpolace" msgid "No Bayer pattern" msgstr "Žádná Baeyrova matice" msgid "Apply color smoothing" msgstr "Použít vyhlazení barev" msgid "Denoise" msgstr "Odstranit Å¡um" msgid "Threshold for wavelet denoising" msgstr "Práh pro vlnkové odstranÄ›ní Å¡umu" msgid "Reset denoise threshold to default" msgstr "Nastavit práh odstranÄ›ní Å¡umu na standardní" msgid "Dark Frame:" msgstr "ÄŒerný snímek:" msgid "Reset dark frame" msgstr "Odstranit Äerný snímek" msgid "Reset adjustment" msgstr "Obnovit nastavení" msgid "Select a spot on the preview image to choose hue" msgstr "PÅ™ed nastavením odstínu zvolte bod na snímku náhledu" msgid "Remove adjustment" msgstr "Odstranit úpravy" msgid "Grayscale Mode:" msgstr "Režim Å¡edé Å¡kály:" msgid "Reset channel mixer" msgstr "Obnovit mixér kanálů" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "OdstranÄ›ní Å¡umu pomocí filtru despeckle je užiteÄné pÅ™edevším pÅ™i kombinaci " "vysoké citlivosti ISO a vysokého násobitele kanálu (tj. když je velmi Å¡patný " "odstup Å¡umu od signálu u daného kanálu). Zkuste nastavit velikost okna, " "slábnutí barev a poÄet průchodů na 50, 0, 5 pro daný kanál. Pokud kanál " "obsahuje pouze Å¡um, zkuste 1, 0.6, 1.\n" "OdstranÄ›ní Å¡umu je vypnuto pokud je velikost okna nebo poÄet průchodů roven " "nule. UpozornÄ›ní: velikost okna nemůže být menší než je poÄet průchodů." msgid "Update channel parameters together" msgstr "Upravit spoleÄnÄ› parametry vÅ¡ech kanálů" msgid "Reset despeckle parameters" msgstr "Obnovit parametry odstranÄ›ní Å¡umu" #. channel to view msgid "View channel:" msgstr "Zobrazit kanál:" #. Parameters msgid "Window size:" msgstr " Velikost okna: " msgid "Color decay:" msgstr "Slábnutí barev:" msgid "Passes:" msgstr "Průchody:" msgid "Load base curve" msgstr "NaÄíst základní kÅ™ivku" msgid "Save base curve" msgstr "Uložit základní kÅ™ivku" msgid "Reset base curve to default" msgstr "Nastavit základní kÅ™ivku na standardní" msgid "Input ICC profile" msgstr "Vstupní profil ICC" msgid "Output ICC profile" msgstr "Výstupní profil ICC" msgid "Display ICC profile" msgstr "Profil ICC monitoru" msgid "Gamma" msgstr "Gama" msgid "Gamma correction for the input profile" msgstr "Korekce gama pro vstupní profil" msgid "Reset gamma to default" msgstr "Nastavit gama na standardní" msgid "Linearity" msgstr "Linearita" msgid "Linear part of the gamma correction" msgstr "Lineární Äást korekce gama" msgid "Reset linearity to default" msgstr "Nastavit linearitu na implicitní" msgid "Output intent" msgstr "Výstupní zámÄ›r" msgid "Perceptual" msgstr "Perceptuální" msgid "Relative colorimetric" msgstr "Relativní kolorimetrický" msgid "Saturation" msgstr "Sytost" msgid "Absolute colorimetric" msgstr "Absolutní kolorimetrický" msgid "Output bit depth" msgstr "Výstupní bitová hloubka" msgid "Display intent" msgstr "ZámÄ›r monitoru" msgid "Disable soft proofing" msgstr "Bez náhledu výst. prostoru" msgid "Contrast" msgstr "Kontrast" msgid "Global contrast adjustment" msgstr "Globální úprava kontrastu" msgid "Reset global contrast to default" msgstr "Nastavit globální kontrast na standardní" msgid "Reset saturation to default" msgstr "Nastavit sytost na standardní" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Automaticky upravit kÅ™ivku\n" "(zploÅ¡tit histogram)" msgid "Reset curve to default" msgstr "Nastavit kÅ™ivku na standardní" msgid "Reset black-point to default" msgstr "Nastavit Äerný bod na standardní" msgid "Auto adjust black-point" msgstr "Automaticky upravit Äerný bod" #. Start of Crop controls msgid "Left:" msgstr "Vlevo:" msgid "Top:" msgstr "NahoÅ™e:" msgid "Right:" msgstr "Vpravo:" msgid "Bottom:" msgstr "Dole:" msgid "Auto fit crop area" msgstr "Automaticky vyplnit oblastí oÅ™ezu." #, fuzzy msgid "Reset the crop area" msgstr "Obnovit původní oÅ™ez" msgid "Aspect ratio:" msgstr "PomÄ›r stran:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "PomÄ›r stran oÅ™ezu.\n" "Může být vložen v desetiné notaci (1.273)\n" "nebo jako pomÄ›r dvou Äísel (14:11)" msgid "Shrink factor" msgstr "Faktor zmenÅ¡ení" msgid "Width" msgstr "Šířka" msgid "Height" msgstr "Výška" msgid "Orientation:" msgstr "Orientace:" msgid "Rotation" msgstr "OtoÄení" msgid "Rotation angle" msgstr "Úhel otoÄení:" msgid "Reset rotation angle" msgstr "Obnovit úhel otoÄení" #. drawLines toggle button msgid "Grid lines" msgstr "Mřížka rastru" msgid "Number of grid lines to overlay in the crop area" msgstr "PoÄet Äar mřížky, které mají být zobrazeny pÅ™es oblast výřezu" msgid "Path" msgstr "Cesta" msgid "Select output path" msgstr "Zvolit výstupní cestu" msgid "Filename" msgstr "Jméno souboru" msgid "JPEG compression level" msgstr "Úroveň komprese JPEG" msgid "JPEG progressive encoding" msgstr "Progresívní kódování JPEG" msgid "TIFF lossless Compress" msgstr "Bezztrátová komprese TIFF" msgid "Embed EXIF data in output" msgstr "Vložit údaje EXIF do výstupního souboru" msgid "Create ID file " msgstr "VytvoÅ™it soubor ID" msgid "No" msgstr "Žádný" msgid "Also" msgstr "Také" msgid "Only" msgstr "Pouze" msgid "Save image defaults " msgstr "Uložit konfiguraci UFRaw " msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Uložit parametry úprav stávajícího snímku jako standardní.\n" "Výstupní parametry v tomto oknÄ› jsou vždy uloženy." msgid "Never again" msgstr "Nikdy více" msgid "Always" msgstr "Vždy" msgid "Just this once" msgstr "Pouze tentokrát" msgid "Remember output path" msgstr "Pamatovat si výstupní cestu" msgid "Overwrite existing files without asking" msgstr "PÅ™epsat existující soubory bez vyzvání" msgid "Tag" msgstr "Å títek" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Výrobce" msgid "Camera model" msgstr "Model" msgid "Timestamp" msgstr "ÄŒasový otisk" msgid "Shutter time" msgstr "ZávÄ›rka" msgid "Aperture" msgstr "Clona" msgid "ISO speed" msgstr "ISO" msgid "35mm focal length" msgstr "35mm ohnisková vzdálenost" msgid "Flash" msgstr "Blesk" msgid "White balance" msgstr "Vyvážení bílé" #, c-format msgid "EXIF data read by %s" msgstr "Údaje EXIF pÅ™eÄteny %s" msgid "Warning: EXIF data will not be sent to output" msgstr "UpozornÄ›ní: údaje EXIF nebudou pÅ™edány na výstup" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw" msgid "Spot values:" msgstr "Bodové hodnoty:" msgid "Exposure compensation in EV" msgstr "Kompenzace expozice v EV" msgid "Auto adjust exposure" msgstr "Automaticky upravit expozici" msgid "Reset exposure to default" msgstr "Nastavit expozici na standardní" msgid "Grayscale" msgstr "Å edá Å¡kála" #. Lens correction page msgid "Lens correction" msgstr "Korekce objektivu" msgid "Base curve" msgstr "Základní kÅ™ivka" msgid "Color management" msgstr "Správa barev" msgid "Correct luminosity, saturation" msgstr "Upravit jas, sytost" msgid "Lightness Adjustments" msgstr "Úpravy tonality" msgid "Crop and rotate" msgstr "OÅ™ez a otoÄení" msgid "Save" msgstr "Uložit" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Procento pÅ™iblížení" msgid "Options" msgstr "Volby" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Smazat" msgid "Send image to _Gimp" msgstr "Odeslat do _Gimpu" msgid "Fatal error setting C locale" msgstr "Fatální chyba nastavení C locale" #, c-format msgid "Curve version is not supported" msgstr "Verze kÅ™ivky není podporována" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Neplatný soubor kÅ™ivek Nikon '%s'" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Chyba pÅ™i otevírání souboru kÅ™ivek '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Chyba pÅ™i otevírání souboru '%s': %s" msgid "File exists" msgstr "Soubor existuje" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "Soubor '%s' již existuje.\n" "PÅ™epsat?" msgid "Error creating temporary file." msgstr "Chyba pÅ™i vytváření doÄasného souboru." msgid "Error activating Gimp." msgstr "Chyba pÅ™i spouÅ¡tÄ›ní Gimpu." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "Nelze použít nastavení bílé dle fotoaparátu, nastaveno automatické vyvážení " "bílé.\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "volby --temperature a --green potlaÄí volbu --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' není platné nastavení vyvážení bílé." msgid "Remote URI is not supported" msgstr "Vzdálený URI není podporován" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "chyba Äerného snímku: %s není raw soubor\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "chyba pÅ™i Ätení Äerného snímku '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "ÄŒerný snímek '%s' je nekompatibilní s hlavním snímkem" #, c-format msgid "using darkframe '%s'\n" msgstr "je použit Äerný snímek '%s'\n" msgid "Error reading NEF curve" msgstr "Chyba pÅ™i Ätení NEF kÅ™ivky" #, c-format msgid "Can not downsize from %d to %d." msgstr "Nelze zmenÅ¡it velikost z %d na %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Chyba pÅ™i vytváření souboru '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Chyba pÅ™i vytváření souboru." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "Jméno souboru snímku nemůže být shodné se jménem souboru ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Selhalo vložení výstupního profilu '%s' v '%s'." #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Nepodporovaná bitová hloubka '%d' ignorována." #, c-format msgid "Unknown file type %d." msgstr "Neznámý typ souboru %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Denní svÄ›tlo" #. Probably same as above: msgid "Direct sunlight" msgstr "Přímé sluneÄní svÄ›tlo" msgid "Cloudy" msgstr "Zataženo" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Stín" msgid "Incandescent" msgstr "Žárovka" msgid "Incandescent warm" msgstr "Teplá žárovka" #. Same as "Incandescent": msgid "Tungsten" msgstr "Žárovka" msgid "Fluorescent" msgstr "Zářivka" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Zářivka vysoká" msgid "Cool white fluorescent" msgstr "Chladná bílá zářivka" msgid "Warm white fluorescent" msgstr "Teplá bílá zářivka" msgid "Daylight fluorescent" msgstr "Denní zářivka" msgid "Neutral fluorescent" msgstr "Neutrální zářivka" msgid "White fluorescent" msgstr "Bílá zářivka" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Sodíková výbojka" msgid "Day white fluorescent" msgstr "Denní bílá zářivka" msgid "High temp. mercury-vapor fluorescent" msgstr "Vysoká tep. rtuÅ¥ové výbojky" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Blesk (auto režim)" msgid "Evening sun" msgstr "VeÄerní slunce" msgid "Underwater" msgstr "Pod vodou" msgid "Black & white" msgstr "ÄŒernobílá" msgid "Manual WB" msgstr "RuÄní vyvážení" msgid "Camera WB" msgstr "Dle fotoaparátu" msgid "Auto WB" msgstr "Automatické" ufraw-0.19.2/po/es.po0000664000175000017500000013170712123734456011257 00000000000000# Spanish translation of ufraw. # Copyright (C) 2006-2013 Udi Fuchs. # This file is distributed under the same license as the ufraw package. # Enrique Jorreto , 2007-2009, 2010. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-24 08:30+0100\n" "PO-Revision-Date: 2010-03-18 08:33+0100\n" "Last-Translator: Enrique Jorreto \n" "Language-Team: Spanish/Spain \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-15\n" "Content-Transfer-Encoding: 8bit\n" #. Translate text message from GtkImageView: msgid "Open the navigator window" msgstr "Abrir la ventana del navegador" #, c-format msgid "Value %.*f too large, truncated to %.*f." msgstr "Valor %.*f demasiado grande, truncado a %.*f." #, c-format msgid "Value %.*f too small, truncated to %.*f." msgstr "Valor %.*f demasiado pequeño, truncado a %.*f." msgid "No input file, nothing to do." msgstr "No hay archivo de entrada, nada que hacer." #, c-format msgid "Loaded %s %s" msgstr "cargado %s %s" #, c-format msgid "Saved %s %s" msgstr "Guardado %s %s" #. First letter of the word 'yes' for the y/n question msgid "y" msgstr "s" #. First letter of the word 'no' for the y/n question msgid "n" msgstr "n" #, c-format msgid "%s: overwrite '%s'?" msgstr "%s: ¿sobreescribir '%s'?" #, fuzzy msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "la opcion --silent solo es válida en modo por lotes" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "la opcion --silent solo es válida en modo por lotes" msgid "Raw images" msgstr "Imágenes RAW" msgid "UFRaw ID files" msgstr "Archivos ID de UFRaw" msgid "Raw jpeg's" msgstr "jpeg RAW" msgid "Raw tiff's" msgstr "tiff RAW" msgid "All files" msgstr "Todos los archivos" msgid "Show hidden files" msgstr "Mostrar archivos ocultos" msgid "Manual curve" msgstr "Curva manual" msgid "Linear curve" msgstr "Curva lineal" msgid "Custom curve" msgstr "Curva personalizada" msgid "Camera curve" msgstr "Curva de la cámara" #. profileIndex[], profileCount[] #. Profile data defaults msgid "No profile" msgstr "Sin perfil" msgid "Color matrix" msgstr "Matriz de color" msgid "sRGB" msgstr "sRGB" msgid "sRGB (embedded)" msgstr "sRGB (incrustado)" msgid "System default" msgstr "Valor por defecto del sistema" msgid "Trying to convert .ufrawrc from UFRaw-0.4 or earlier" msgstr "Tratando de convertir .ufrawrc desde UFRaw-0.4 o anterior" msgid "Trying to convert .ufrawrc from UFRaw-0.6 or earlier" msgstr "Tratando de convertir .ufrawrc desde UFRaw-0.6 o anterior" #, c-format msgid "UFRaw version in .ufrawrc is not supported" msgstr "la versión de UFRaw en .ufrawrc no está soportada" #, c-format msgid "Too many anchors for curve '%s'" msgstr "Demasiados anclajes para la curva '%s'" msgid "Too many lightness adjustments in the ID file, ignored\n" msgstr "Demasiados ajustes de iluminación en el archivo ID, ignorado\n" #, c-format msgid "" "ID file %s does not appear to be a regular file\n" "%s\n" msgstr "" "El archivo ID %s no parece ser un archivo normal\n" "%s\n" #, c-format msgid "" "Can't open ID file %s for reading\n" "%s\n" msgstr "" "No se puede abrir el archivo ID %s para lectura\n" "%s\n" #, fuzzy, c-format msgid "Error reading from file '%s'." msgstr "Error al crear el archivo '%s'." #, c-format msgid "" "Error parsing '%s'\n" "%s" msgstr "" "Error interpretando '%s'\n" "%s" #, c-format msgid "" "Can't open file %s for writing\n" "%s\n" msgstr "" "No se puede abrir el archivo %s para escribir\n" "%s\n" msgid "cannot --create-id with stdout" msgstr "no se puede utilizar --create-id con la salida estándar" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw conversor para imágenes de cámara digital.\n" msgid "Usage: ufraw [ options ... ] [ raw-image-files ... ]\n" msgstr "Uso: ufraw [ opciones ... ] [ archivos-de-imagen-RAW ... ]\n" msgid " ufraw-batch [ options ... ] [ raw-image-files ... ]\n" msgstr " ufraw-batch [ opciones ... ] [ archivos-de-imagen-RAW ... ]\n" msgid " ufraw [ options ... ] [ default-directory ]\n" msgstr " ufraw [ opciones ... ] [ directorio-por-defecto ]\n" msgid "" "By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n" msgstr "" "Por defecto, 'ufraw' muestra una previsualización para cada imagen RAW\n" "permitiendo al usuario ajustar los parámetros de la imagen antes de " "guardar.\n" "Si no se pasan imágenes RAW en la línea de comando, UFRaw mostrará\n" "un diálogo de seleccion de archivos.\n" "Para procesar las imágenes sin preguntas (y sin previsualización) utilice\n" "'ufraw-batch'.\n" msgid "" "The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n" msgstr "" "Los archivos de entrada pueden ser tanto imágenes RAW como\n" "archivos ID de ufraw. Los archivos ID contienen el nombre de archivo\n" "de una imagen RAW y los parámetros para manejar la imagen.\n" "Se puede utilizar también un archivo ID con la opción:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=archivo-ID Aplicar los parámetros del archivo ID a otras\n" " imágenes RAW\n" msgid "The rest of the options are separated into two groups.\n" msgstr "El resto de opciones están separadas en dos grupos.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Las opciones relacionadas con la manipulación de la imagen son:\n" msgid "--wb=camera|auto White balance setting.\n" msgstr "--wb=camera|auto Ajuste de balance de blancos.\n" msgid "--temperature=TEMP Color temperature in Kelvin.\n" msgstr "--temperature=TEMP Temperatura de color en Kelvin.\n" msgid "--green=GREEN Green color normalization.\n" msgstr "--green=VERDE Normalización del color verde.\n" msgid "" "--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n" msgstr "" "--base-curve=manual|linear|camera|custom|CURVA\n" " Tipo de curva tonal de base para usar. CURVA puede " "ser\n" " cualquier curva previamente cargada en el GUI.\n" " (la de por defecto de la cámara, si existe, lineal en\n" " otro caso).\n" msgid "" "--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n" msgstr "" "--base-curve-file=ARCHIVO\n" " Utilizar curva tonal base incluida en el archivo\n" " especificado. Anula la opción --base-curve.\n" msgid "" "--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n" msgstr "" "--curve=manual|linear|CURVA\n" " Tipo de curva de luminosidad a usar. CURVA puede ser\n" " cualquier curva previamente cargada en el GUI.\n" " (por defecto: linear).\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=ARCHIVO Utilizar la curva de luminosidad incluida en ARCHIVO.\n" " Anula la opción --curve.\n" msgid "" "--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n" msgstr "" "--restore=clip|lch|hsv\n" " Restaurar detalles para EV negativo.\n" " 'clip' no restaura nada, a salvo de artefactos.\n" " 'lch' restaura en espacio LCH, ofreciendo detalles " "suaves.\n" " 'hsv' restaura en espacio HSV, ofreciendo detalles\n" " definidos.\n" " (por defecto: lch).\n" msgid "" "--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n" msgstr "" "--clip=digital|film Recorta las luces altas para EV positivo.\n" " 'digital' respuesta lineal del sensor digital.\n" " 'film' emula la respuesta suave de película.\n" " (por defecto: digital).\n" msgid "" "--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n" msgstr "" "--gamma=GAMMA Ajuste de gamma de la curva base (por defecto: 0.45).\n" msgid "--linearity=LINEARITY Linearity of the base curve (default 0.10).\n" msgstr "" "--linearity=LINEAL. Linealidad de la curva base (por defecto 0.10).\n" msgid "--contrast=CONT Contrast adjustment (default 1.0).\n" msgstr "--contrast=CONT Ajuste de contraste (por defecto: 1.0)\n" msgid "" "--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W " "output).\n" msgstr "" "--saturation=SAT Ajuste de saturación (por defecto: 1.0, 0 para salida\n" " en B&N)\n" msgid "" "--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n" msgstr "" "--wavelet-denoising-threshold=UMBRAL\n" " Umbral de reducción de ruido (por defecto 0.0).\n" msgid "" "--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels " "(default 0.0).\n" msgstr "" "--hotpixel-sensitivity=VALOR\n" " Sensibilidad para detectar y eliminar píxeles " "calientes (por defecto 0.0).\n" msgid "" "--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default " "0).\n" msgstr "" "--exposure=auto|EXPOSICION\n" " Exposición automática o corrección de la exposición en " "EV.\n" " (por defecto: 0).\n" msgid "" "--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n" msgstr "" "--black-point=auto|NEGRO\n" " Punto negro automático o valor de punto negro.\n" " (por defecto: 0).\n" msgid "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n" msgstr "" "--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Algoritmo de interpolación a usar (por defecto: ahd).\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing Aplicar suavizado de color \n" msgid "" "--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo de conversión a escala de grises (por " "defecto ninguno).\n" #, fuzzy msgid "" "--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n" msgstr "" "--grayscale=none|lightness|luminance|value|mixer\n" " Algoritmo de conversión a escala de grises (por " "defecto ninguno).\n" msgid "The options which are related to the final output are:\n" msgstr "Las opciones relacionadas con la salida final son:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "" "--shrink=FACTOR Encoger la imagen según FACTOR (por defecto 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=TAMAÑO Reduce el tamaño max(alto, ancho) a TAMAÑO.\n" msgid "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n" msgstr "" "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Formato del archivo de salida (por defecto ppm).\n" msgid "--out-depth=8|16 Output bit depth per channel (default 8).\n" msgstr "" "--out-depth=8|16 Profundidad de bits de salida por canal (por defecto " "8).\n" msgid "" "--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n" msgstr "" "--create-id=no|also|only\n" " Crear archivo ID: no|también|solo (por defecto: no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALOR compresión JPEG (0-100, por defecto 85).\n" msgid "--[no]exif Embed EXIF in output (default embed EXIF).\n" msgstr "" "--[no]exif Incrustar EXIF en el archivo de salida.\n" " (por defecto: incrustar EXIF).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip Activar [desactivar] compresión zip para TIFF.\n" " (por defecto: nozip).\n" #, fuzzy msgid "" "--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n" msgstr "" "--embedded-image Extraer la previsualización incrustada en el archivo " "RAW\n" " en vez de convertir la imagen RAW.\n" msgid "" "--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default " "camera).\n" msgstr "" "--rotate=camera|ANGLE|no\n" " Rotar la imagen según el ajuste de la cámara, ANGLE " "grados\n" " en sentido horario, o no rotar la imagen (por defecto " "usar ajuste de cámara).\n" msgid "" "--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to " "the\n" " raw image after rotation but before any scaling.\n" msgstr "" "--crop-(left|right|top|bottom)=PIXELS\n" " Recortar la salida por el lado seleccionado, respecto\n" " a la imagen raw despues de la rotación, pero antes del " "escalado.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" msgid "" "--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n" msgstr "" "--lensfun=none|auto No aplicar corrección de lente o intentar\n" " aplicar la corrección autodetectando la lente (por " "defecto, no aplicar)\n" msgid "" "--out-path=PATH PATH for output file (default use input file's path).\n" msgstr "" "--out-path=RUTA RUTA para el archivo de salida.\n" " (por defecto utiliza la ruta del archivo de entrada).\n" msgid "--output=FILE Output file name, use '-' to output to stdout.\n" msgstr "" "--output=ARCHIVO Nombre del archivo de salida,\n" " utiliza '-' para utilizar la salida estándar.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=ARCHIVO Utilizar ARCHIVO para substracción de \"darkframe\" " "RAW.\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite Sobreescribir archivos existentes sin preguntar.\n" " (por defecto: no).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window Forzar que la ventana sea maximizada.\n" #, fuzzy msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent No mostrar ningún mensaje durante el procesado por " "lotes.\n" msgid "" "UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting " "from\n" "the --conf option are taken, ignoring input/output filenames in the ID " "file.\n" "Lastly, the options from the command line are set. In batch mode, the " "second\n" "group of options is NOT read from the resource file.\n" msgstr "" "UFRaw primero lee los ajustes desde el archivo de configuración $HOME/." "ufrawrc.\n" "Después, si se ha especificado un archivo ID, se leen sus ajustes. " "Seguidamente,\n" "se utilizan los ajustes de la opción --conf, ignorando loa archivos de\n" "entrada/salida del archivo ID.\n" "Finalmente se utilizan las opciones de la línea de comandos. En modo por " "lotes,\n" "el segundo grupo de opciones NO se lee del archivo de configuración.\n" msgid "" "Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n" msgstr "" "Por último, --version muestra el número de versión y las opciones de\n" "compilación para ufraw, y --help muestra este mensaje de ayuda y termina.\n" #, c-format msgid "'%s' is not a valid value for the --%s option." msgstr "'%s' no es un valor válido para la opción --%s." msgid "ufraw was build without ZIP support." msgstr "ufraw fue compilado sin soporte para ZIP" #, fuzzy msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch está obsoleta. Utilice ufraw-batch en su lugar." #, c-format msgid "getopt returned character code 0%o ??" msgstr "getopt devolvió el código de caracter 0%o ??" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "fallo al cargar la curva desde %s, demasiadas curvas base configuradas" #, c-format msgid "failed to load curve from %s" msgstr "fallo al cargar la curva desde %s" #, c-format msgid "'%s' is not a valid base curve name." msgstr "'%s' no es un nombre válido para una curva base." #, c-format msgid "failed to load curve from %s, too many configured curves" msgstr "fallo al cargar la curva desde %s, demasiadas curvas configuradas" #, c-format msgid "'%s' is not a valid curve name." msgstr "'%s' no es un nombre válido para una curva." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' no es una opción válida de interpolación." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' no es una opción válida para escala de grises" #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' no es una opción válida para escala de grises" #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' no es una opción válida de restauración." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' no es una opción válida de recorte." msgid "you can not specify both --shrink and --size" msgstr "no puedes especificar a la vez --shrink y --size" #, c-format msgid "'%d' is not a valid bit depth." msgstr "'%d' no es una profundidad de bits válida." #, c-format msgid "Output type '%s' is deprecated" msgstr "El tipo de salida '%s' está obsoleto" msgid "ufraw was build without TIFF support." msgstr "ufraw se compiló sin soporte para TIFF." msgid "ufraw was build without JPEG support." msgstr "ufraw se compiló sin soporte para JPEG." msgid "ufraw was build without PNG support." msgstr "ufraw se compiló sin soporte para PNG." #, c-format msgid "'%s' is not a valid output type." msgstr "'%s' no es un tipo de salida válido." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' no es un tipo de salida válido para la imagen incrustada." #, c-format msgid "'%d' is not a valid bit depth for embedded image." msgstr "'%d' no es una profundidad de bits válida para la imagen incrustada." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' no es una opción válida para rotar." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' no es una opción válida para 'create-id'." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' no es una ruta válida." msgid "cannot output more than one file to the same output" msgstr "no se puede sacar más de un archivo a la misma salida" #, c-format msgid "Raw file '%s' missing." msgstr "El archivo raw '%s' no se encuentra." msgid "Delete raw file" msgstr "Borrar archivo raw" msgid "_Delete selected" msgstr "_Borrar el seleccionado." msgid "Delete _All" msgstr "Borrar _Todos" msgid "Select files to delete" msgstr "Selecciona archivos para borrar" #, c-format msgid "Error reading directory '%s'." msgstr "Error al leer el directorio '%s'." #, c-format msgid "Error deleting '%s'" msgstr "Error al borrar '%s'" msgid "Reading embedded image requires libjpeg." msgstr "Leer la imagen incrustada requiere libjpeg." msgid "No embedded image found" msgstr "Imagen incrustada no encontrada" #, c-format msgid "Original size (%d) is smaller than the requested size (%d)" msgstr "El tamaño original (%d) es más pequeño que el solicitado (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "desajuste en tamaño de la miniatura ppm, alto %d, ancho %d, mientras el " "buffer %d" #, c-format msgid "JPEG thumb height %d different than expected %d." msgstr "altura %d de la miniatura JPEG distinta de lo esperado %d" #, c-format msgid "JPEG thumb width %d different than expected %d." msgstr "ancho de la miniatura JPEG (%d) diferente de lo esperado (%d)." #, c-format msgid "" "Error creating file '%s'.\n" "%s" msgstr "" "Error al crear el archivo '%s'.\n" "%s" msgid "No embedded image read" msgstr "No leida ninguna imagen incrustada" #, c-format msgid "Error creating file '%s'. Unknown file type %d." msgstr "Error creando el archivo '%s'. Tipo de archivo desconocido %d." #, c-format msgid "Error creating file '%s': %s" msgstr "Error creando el archivo '%s': %s" #, c-format msgid "Error writing '%s'" msgstr "Error escribiendo '%s'" #, c-format msgid "Unsupported output type (%d) for embedded image" msgstr "Tipo de salida no soportado (%d) para la imagen incrustada" #, c-format msgid "Loading raw file '%s'" msgstr "Cargando archivo raw '%s'" msgid "Can't allocate new image." msgstr "No se puede crear una nueva imagen" #. Create the "background" layer to hold the image... msgid "Background" msgstr "Fondo" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Fallo al incrustar el perfil de salida '%s' en la imagen" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "longitud del buffer EXIF %d, demasiado grande, ignorado." #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f" msgstr "" "Fabricante:\t\t%s\n" "Modelo:\t\t\t%s%s\n" "Montura:\t\t\t%s\n" "Factor de recorte:\t%.1f" #, c-format msgid "" "Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s" msgstr "" "Fabricante:\t\t%s\n" "Modelo:\t\t\t%s\n" "Rango focal:\t\t%s\n" "Apertura:\t\t\t%s\n" "Factor de recorte:\t%.1f\n" "Tipo:\t\t\t%s\n" "Monturas:\t\t%s" msgid "Focal" msgstr "Focal" msgid "Focal length" msgstr "Distancia focal" msgid "F" msgstr "F" msgid "F-number (Aperture)" msgstr "Número F (Apertura)" msgid "Distance" msgstr "Distancia" msgid "Distance to subject in meters" msgstr "Distancia al sujeto en metros" #. Add the model combobox msgid "Model:" msgstr "Modelo:" msgid "Chromatic Aberrations mathematical model" msgstr "Modelo matemático de aberraciones cromáticas" msgid "Parameters" msgstr "Parámetros" msgid "Optical vignetting mathematical model" msgstr "Modelo matemático de viñeteo óptico" msgid "Lens distortion mathematical model" msgstr "Modelo matemático de distorsión de lente" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometría de lente:" msgid "The geometry of the lens used to make the shot" msgstr "La geometría de la lente utilizada para tomar la captura" #. Target lens geometry combobox msgid "Target geometry:" msgstr "Geometria destino:" msgid "The target geometry for output image" msgstr "La geometría destino para la imagen de salida" msgid "Camera" msgstr "Cámara" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Buscar una cámara usando un patrón\n" "Formato: [Fabricante, ][Modelo]" msgid "Choose camera from complete list" msgstr "Elegir cámara de una lista completa" msgid "Reset all lens correction settings" msgstr "Restaurar los ajustes de corrección de lente" #. Lens selector msgid "Lens" msgstr "Lente" msgid "" "Search for lens using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Buscar una lente utilizando un patrón\n" "Formato: [Fabricante, ][Modelo]" msgid "Choose lens from list of possible variants" msgstr "Elegir una lente de una lista de posibles variantes" msgid "Automatically find lens and set lens corrections" msgstr "Encontrar lente y ajustar correcciones automáticamente" msgid "Lateral chromatic aberration" msgstr "Aberración cromática lateral" msgid "Optical vignetting" msgstr "Viñeteo óptico" msgid "Lens distortion" msgstr "Distorsion de lente" msgid "Lens geometry" msgstr "Geometría de lente" msgid "Raw histogram with conversion curves" msgstr "Histograma raw con curvas de conversion" msgid "Live histogram" msgstr "Histograma de salida" #. No darkframe file msgid "None" msgstr "Ninguno" msgid "Lightness" msgstr "Luminosidad" msgid "Luminance" msgstr "Luminancia" msgid "Value" msgstr "Valor" msgid "Channel Mixer" msgstr "Mezclador de canales" #, fuzzy msgid "UFRaw Message" msgstr "UFRaw " msgid "No more room for new curves." msgstr "No hay más espacio para nuevas curvas" msgid "Load curve" msgstr "Cargar curva" msgid "All curve formats" msgstr "Todos los formatos de curvas" msgid "UFRaw curve format" msgstr "Formato de curva de UFRaw" msgid "Nikon curve format" msgstr "Formato de curva de Nikon" msgid "Save curve" msgstr "Guardar curva" msgid "No more room for new profiles." msgstr "No hay más espacio para nuevos perfiles" msgid "Load color profile" msgstr "Cargar perfil de color" msgid "Color Profiles" msgstr "Perfiles de color" msgid "Luminosity (Y value)" msgstr "Luminosidad (valor Y)" msgid "Adams' zone" msgstr "Zona de Adams" #, c-format msgid "size %dx%d, zoom %2.f%%" msgstr "tamaño %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "tamaño %dx%d, escala 1/%d" msgid "Wavelet denoising" msgstr "Reducción de ruido" msgid "Despeckling" msgstr "Desparasitado" msgid "Interpolating" msgstr "Interpolando" msgid "Rendering" msgstr "Renderizado" msgid "Loading preview" msgstr "Cargando previsualización" msgid "Saving image" msgstr "Guardando imagen" #, c-format msgid "Black point: %0.3lf" msgstr "Punto negro: %0.3lf" msgid "No more room for new lightness adjustments." msgstr "No hay más espacio para nuevos ajustes de luminosidad" msgid "Aspect ratio locked, click to unlock" msgstr "Relación de aspecto bloqueada, pincha para desbloquear" msgid "Aspect ratio unlocked, click to lock" msgstr "Relación de aspecto desbloqueada, pincha para bloquear" msgid "Load dark frame" msgstr "Cargar dark frame" msgid "clip" msgstr "recortar" msgid "restore in LCH space for soft details" msgstr "restaurar en el espacio LCH para detalles suaves" msgid "restore in HSV space for sharp details" msgstr "restaurar en el espacio HSV para detalles definidos" #, c-format msgid "" "Restore details for negative EV\n" "Current state: %s" msgstr "" "Restaurar detalles para EV negativo\n" "Estado actual: %s" msgid "digital linear" msgstr "digital lineal" msgid "soft film like" msgstr "similar a película suave" #, c-format msgid "" "Clip highlights for positive EV\n" "Current state: %s" msgstr "" "Recortar las luces altas para EV positivo\n" "Estado actual: %s" #, c-format msgid "Filename: %s%s" msgstr "Archivo: %s%s" msgid "" "\n" "Create also ID file" msgstr "" "\n" "También crear archivo ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Sólo crear archivo ID" msgid "UFRaw options" msgstr "Opciones de UFRaw" msgid "Settings" msgstr "Ajustes" msgid "Input color profiles" msgstr "Perfiles de color de entrada" msgid "Output color profiles" msgstr "Perfiles de color de salida" msgid "Display color profiles" msgstr "Mostrar perfiles de color" msgid "Base Curves" msgstr "Curvas base" msgid "Luminosity Curves" msgstr "Curvas de luminosidad" #. Remote Gimp command entry msgid "Remote Gimp command" msgstr "Comando de gimp remoto" msgid "Reset command to default" msgstr "Reiniciar comando a valor por defecto" msgid "Blink Over/Underexposure Indicators" msgstr "Indicadores parpadeantes de Sobre/Subexposición" msgid "Configuration" msgstr "Configuración" msgid "Save configuration" msgstr "Guardar configuración" msgid "Save configuration to resource file ($HOME/.ufrawrc)" msgstr "Guardar archivo de ajustes ($HOME/.ufrawrc)" msgid "Log" msgstr "Registro" msgid "About" msgstr "Acerca de" msgid "" "The Unidentified Flying Raw (UFRaw) is a utility " "to\n" "read and manipulate raw images from digital cameras.\n" "UFRaw relies on Digital Camera Raw (DCRaw)\n" "for the actual encoding of the raw images.\n" "\n" "Author: Udi Fuchs\n" "Homepage: http://ufraw.sourceforge.net/\n" "\n" msgstr "" "El Unidentified Flying Raw (UFRaw) es una " "utilidad para\n" "leer y manipular archivos RAW de cámaras digitales.\n" "UFRaw se apoya en Digital Camera Raw (DCRaw)\n" "para el codificado de las imágenes RAW.\n" "\n" "Autor: Udi Fuchs\n" "Página web: http://ufraw.sourceforge.net/\n" "\n" #, c-format msgid "%s%s (Alt-%s)" msgstr "%s%s (Alt-%s)" msgid "Linear" msgstr "Lineal" msgid "Logarithmic" msgstr "Logarítmica" msgid "Hot pixels: " msgstr "Píxeles calientes: " msgid "mark" msgstr "marca" msgid "Hot pixel sensitivity" msgstr "Sensibilidad a píxeles calientes" msgid "Reset hot pixel sensitivity" msgstr "Reiniciar sensibilidad a píxeles calientes" msgid "RGB histogram" msgstr "Histograma RGB" msgid "R+G+B histogram" msgstr "Histograma R+G+B" msgid "Luminosity histogram" msgstr "Histograma de luminosidad" msgid "Value (maximum) histogram" msgstr "Histograma de valor (máximo)" msgid "Saturation histogram" msgstr "Histograma de saturación" msgid "Average:" msgstr "Media:" msgid "Std. deviation:" msgstr "Desv. estándar:" msgid "Overexposed:" msgstr "Sobreexpuesto:" msgid "Indicate" msgstr "Indicar" msgid "Underexposed:" msgstr "Subexpuesto:" msgid "White Balance" msgstr "Balance de blancos" msgid "Cannot use camera white balance." msgstr "No puedo usar el balance de blancos de la cámara" msgid "" "There are no white balance presets for your camera model.\n" "Check UFRaw's webpage for information on how to get your\n" "camera supported." msgstr "" "No hay ajustes predefinidos para el balance de blancos para tu modelo de " "cámara.\n" "Comprueba la página web de UFRaw para más información sobre cómo conseguir " "que tu cámara esté soportada" msgid "Reset white balance to initial value" msgstr "Restaurar el balance de blancos a su valor inicial" msgid "Temperature" msgstr "Temperatura" msgid "White balance color temperature (K)" msgstr "Temperatura de color de balance de blancos (K)" msgid "Green" msgstr "Verde" msgid "Green component" msgstr "Componente verde" msgid "Select a spot on the preview image to apply spot white balance" msgstr "" "Selecciona un punto en la previsualización para aplicar balance de blancos " "puntual" msgid "Chan. multipliers:" msgstr "Multiplic. de canal:" msgid "Bayer pattern interpolation" msgstr "Interpolación de patrón Bayer" msgid "VNG four color interpolation" msgstr "Interpolación VNG de cuatro colores" msgid "Bilinear interpolation" msgstr "Interpolación bilineal" msgid "AHD interpolation" msgstr "Interpolación AHD" msgid "VNG interpolation" msgstr "Interpolación VNG" msgid "PPG interpolation" msgstr "Interpolación PPG" msgid "No interpolation" msgstr "Sin interpolación" msgid "No Bayer pattern" msgstr "Sin patrón Bayer" msgid "Apply color smoothing" msgstr "Aplicar suavizado de color" msgid "Denoise" msgstr "Reducción de ruido" msgid "Threshold for wavelet denoising" msgstr "Umbral para reducción de ruido" msgid "Reset denoise threshold to default" msgstr "Reiniciar umbral de reducción de ruido por defecto" msgid "Dark Frame:" msgstr "Dark Frame:" msgid "Reset dark frame" msgstr "Reiniciar dark frame" msgid "Reset adjustment" msgstr "Reiniciar ajuste" msgid "Select a spot on the preview image to choose hue" msgstr "Selecciona un punto en la previsualización para elegir tono" msgid "Remove adjustment" msgstr "Quitar ajustes" msgid "Grayscale Mode:" msgstr "Modo de escala de grises:" msgid "Reset channel mixer" msgstr "Resetear mezclador de canales" msgid "" "Despeckling is mainly useful when combining a high ISO number with a high " "channel multiplier: when one channel has a very bad signal to noise ratio. " "Try setting window size, color decay and number of passes to 50,0,5 for that " "channel. When a channel contains only noise then try 1,0.6,1.\n" "Despeckling is off when window size or passes equals zero. When on then " "window size cannot be smaller than the number of passes." msgstr "" "El desparasitado es principalmente útil cuando se combina un valor ISO alto " "con un multiplicador de canal alto: cuando un canal tiene una muy mala " "proporcion señal/ruido. Intente ajustar el tamaño de ventana, degradación " "de color y número de pases a 50,0,5 para ese canal. Cuando un canal " "contiene sólo ruido intente 1,0.6,1.\n" "El desparasitado se desconecta cuando el tamaño de ventana o los pases son " "0. Para estar activado el tamaño de ventana no puede ser menor que el " "número de pases." msgid "Update channel parameters together" msgstr "Actualizar los parámetros del canal juntos" msgid "Reset despeckle parameters" msgstr "Restaurar parámetros de desparasitado" #. channel to view msgid "View channel:" msgstr "Ver canal:" #. Parameters msgid "Window size:" msgstr "Tamaño de ventana:" msgid "Color decay:" msgstr "Degradación de color" msgid "Passes:" msgstr "Pases:" msgid "Load base curve" msgstr "Cargar curva base" msgid "Save base curve" msgstr "Guardar curva base" msgid "Reset base curve to default" msgstr "Restaurar a curva base por defecto" msgid "Input ICC profile" msgstr "Perfil ICC de entrada" msgid "Output ICC profile" msgstr "Perfil ICC de salida" msgid "Display ICC profile" msgstr "Perfil ICC de la pantalla" msgid "Gamma" msgstr "Gamma" msgid "Gamma correction for the input profile" msgstr "Corrección de gamma para el perfil de entrada" msgid "Reset gamma to default" msgstr "Reiniciar a gamma por defecto" msgid "Linearity" msgstr "Linealidad" msgid "Linear part of the gamma correction" msgstr "Parte lineal de la corrección de gamma" msgid "Reset linearity to default" msgstr "Restaurar linealidad a valor por defecto" msgid "Output intent" msgstr "Conv. de salida" msgid "Perceptual" msgstr "Perceptual" msgid "Relative colorimetric" msgstr "Colorimétrico relativo" msgid "Saturation" msgstr "Saturación" msgid "Absolute colorimetric" msgstr "Colorimétrico absoluto" msgid "Output bit depth" msgstr "Profundidad de bits de salida" msgid "Display intent" msgstr "Conv. de pantalla" msgid "Disable soft proofing" msgstr "Desact. \"soft proofing\"" msgid "Contrast" msgstr "Contraste" msgid "Global contrast adjustment" msgstr "Ajuste global del contraste" msgid "Reset global contrast to default" msgstr "Restaurar contraste global al valor por defecto" msgid "Reset saturation to default" msgstr "Restaurar saturación al valor por defecto" msgid "" "Auto adjust curve\n" "(Flatten histogram)" msgstr "" "Auto ajustar curva\n" "(Aplanar histograma)" msgid "Reset curve to default" msgstr "Restaurar curva al valor por defecto" msgid "Reset black-point to default" msgstr "Restaurar punto negro al valor por defecto" msgid "Auto adjust black-point" msgstr "Auto ajustar punto negro" #. Start of Crop controls msgid "Left:" msgstr "Izquierda:" msgid "Top:" msgstr "Arriba:" msgid "Right:" msgstr "Derecha:" msgid "Bottom:" msgstr "Abajo:" msgid "Auto fit crop area" msgstr "Auto encajar área recortada" #, fuzzy msgid "Reset the crop area" msgstr "Restaurar la región de recorte" msgid "Aspect ratio:" msgstr "Razón de aspecto:" msgid "" "Crop area aspect ratio.\n" "Can be entered in decimal notation (1.273)\n" "or as a ratio of two numbers (14:11)" msgstr "" "Razón de aspecto de area de recorte.\n" "Se puede introducir en notación decimal (1.273)\n" "o como razón de aspecto de dos números (14:11)" msgid "Shrink factor" msgstr "Factor de encogido" msgid "Width" msgstr "Ancho" msgid "Height" msgstr "Alto" msgid "Orientation:" msgstr "Orientación:" msgid "Rotation" msgstr "Rotación" msgid "Rotation angle" msgstr "Ãngulo de rotación" msgid "Reset rotation angle" msgstr "Restaurar ángulo de rotación" #. drawLines toggle button msgid "Grid lines" msgstr "Líneas de cuadrícula" msgid "Number of grid lines to overlay in the crop area" msgstr "Número de líneas de cuadrícula a superponer en el área recortada" msgid "Path" msgstr "Ruta" msgid "Select output path" msgstr "Seleccionar ruta de salida" msgid "Filename" msgstr "Nombre de archivo" msgid "JPEG compression level" msgstr "Nivel de compresión JPEG" msgid "JPEG progressive encoding" msgstr "Codificado progresivo JPEG" msgid "TIFF lossless Compress" msgstr "TIFF comprimido sin pérdida" msgid "Embed EXIF data in output" msgstr "Incrustar datos EXIF en archivo de salida" msgid "Create ID file " msgstr "Crear archivo ID" msgid "No" msgstr "No" msgid "Also" msgstr "También" msgid "Only" msgstr "Solo" msgid "Save image defaults " msgstr "Guardar valores por defecto para imágenes" msgid "" "Save current image manipulation parameters as defaults.\n" "The output parameters in this window are always saved." msgstr "" "Guardar los ajustes de la imagen actual como valores por defecto.\n" "Los parámetros de salida en esta ventana son siempre guardados." msgid "Never again" msgstr "Nunca más" msgid "Always" msgstr "Siempre" msgid "Just this once" msgstr "Sólo esta vez" msgid "Remember output path" msgstr "Recordar ruta de salida" msgid "Overwrite existing files without asking" msgstr "Sobreescribir archivos existentes sin preguntar" msgid "Tag" msgstr "Etiqueta" #. Fill table with EXIF tags msgid "Camera maker" msgstr "Fabricante de la cámara" msgid "Camera model" msgstr "Modelo de la cámara" msgid "Timestamp" msgstr "Marca de tiempo" msgid "Shutter time" msgstr "Tiempo de exposición" msgid "Aperture" msgstr "Apertura" msgid "ISO speed" msgstr "Velocidad ISO" msgid "35mm focal length" msgstr "Distancia focal equiv. 35mm" msgid "Flash" msgstr "Flash" msgid "White balance" msgstr "Balance de blancos" #, c-format msgid "EXIF data read by %s" msgstr "Datos EXIF leidos por %s" msgid "Warning: EXIF data will not be sent to output" msgstr "Atención: Los datos EXIF no se enviarán a la salida" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "Valores de punto:" msgid "Exposure compensation in EV" msgstr "Compensación de la exposición en EV" msgid "Auto adjust exposure" msgstr "Auto ajustar exposición" msgid "Reset exposure to default" msgstr "Restaurar exposición al valor por defecto" msgid "Grayscale" msgstr "Escala de grises" #. Lens correction page msgid "Lens correction" msgstr "Corrección de lente" msgid "Base curve" msgstr "Curva base" msgid "Color management" msgstr "Gestión de color" msgid "Correct luminosity, saturation" msgstr "Corregir luminosidad, saturación" msgid "Lightness Adjustments" msgstr "Ajustes de Luminosidad" msgid "Crop and rotate" msgstr "Recortar y rotar" msgid "Save" msgstr "Guardar" msgid "EXIF" msgstr "EXIF" msgid "Zoom percentage" msgstr "Porcentaje de zoom" msgid "Options" msgstr "Opciones" #. Comment to translator: All control buttons #. "_Delete", "_Cancel", "_Save", "Save _As", "Send to _Gimp" #. should have unique mnemonics. #. Delete button: msgid "_Delete" msgstr "_Borrar" msgid "Send image to _Gimp" msgstr "Enviar imagen a _Gimp" msgid "Fatal error setting C locale" msgstr "Error fatal al poner la codificación C" #, c-format msgid "Curve version is not supported" msgstr "Versión de la curva no soportada" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Archivo de curva Nikon '%s' no válido" #, c-format msgid "Error opening Curve file '%s': %s" msgstr "Error al abrir el archivo de curva '%s': %s" #, c-format msgid "Error opening file '%s': %s" msgstr "Error al abrir el archivo '%s': %s" msgid "File exists" msgstr "El archivo existe" #, c-format msgid "" "File '%s' already exists.\n" "Overwrite?" msgstr "" "El archivo '%s' existe.\n" "¿Sobreescribir?" msgid "Error creating temporary file." msgstr "Error al crear el archivo temporal." msgid "Error activating Gimp." msgstr "Error activando Gimp." msgid "Cannot use camera white balance, reverting to auto white balance.\n" msgstr "" "No puedo usar el balance de blancos de la cámara, usando balance de blancos " "automático\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "las opciones --temperature y --green anulan la opción --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' no es un valor válido para el balance de blancos." msgid "Remote URI is not supported" msgstr "URI remotos no están soportados" #, c-format msgid "darkframe error: %s is not a raw file\n" msgstr "error en el \"darkframe\": %s no es un archivo RAW\n" #, c-format msgid "error loading darkframe '%s'\n" msgstr "error cargando \"darkframe\" '%s'\n" #, c-format msgid "Darkframe '%s' is incompatible with main image" msgstr "\"Darkframe\" '%s' es incompatible con la imagen principal" #, c-format msgid "using darkframe '%s'\n" msgstr "utilizando \"darkframe\" '%s'\n" msgid "Error reading NEF curve" msgstr "Error leyendo curva NEF" #, c-format msgid "Can not downsize from %d to %d." msgstr "No puedo bajar el tamaño de %d a %d." #. Error was not already set before #, c-format msgid "Error creating file '%s'." msgstr "Error al crear el archivo '%s'." #. 'errno' does seem to contain useful information #. Error was not already set before msgid "Error creating file." msgstr "Error al crear el archivo." #, c-format msgid "Image filename can not be the same as ID filename '%s'" msgstr "" "El nombre de archivo de la imagen no puede ser el mismo que el del archivo " "ID '%s'" #, c-format msgid "Failed to embed output profile '%s' in '%s'." msgstr "Fallo al incrustar perfil de salida '%s' en '%s'" #, c-format msgid "Unsupported bit depth '%d' ignored." msgstr "Profundidad de bits no soportada '%d' ignorada." #, c-format msgid "Unknown file type %d." msgstr "Tipo de archivo desconocido %d." #. Column 1 - "make" of the camera. #. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). #. * Column 3 - WB name. #. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. #. * It is enough to give only the extreme values, the other values #. * will be interpolated. #. * Column 5 - Channel multipliers. #. * #. * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. #. * #. * WB name is standardized to one of the following: #. "Sunlight" and other variation should be switched to this: msgid "Daylight" msgstr "Luz de día" #. Probably same as above: msgid "Direct sunlight" msgstr "Luz directa del sol" msgid "Cloudy" msgstr "Nublado" #. "Shadows" should be switched to this: msgid "Shade" msgstr "Sombra" msgid "Incandescent" msgstr "Incandescente" msgid "Incandescent warm" msgstr "Incandescente cálido" #. Same as "Incandescent": msgid "Tungsten" msgstr "Tungsteno" msgid "Fluorescent" msgstr "Fluorescente" #. In Canon cameras and some newer Nikon cameras: msgid "Fluorescent high" msgstr "Fluorescente alto" msgid "Cool white fluorescent" msgstr "Fluorescente blanco frío" msgid "Warm white fluorescent" msgstr "Fluorescente blanco cálido" msgid "Daylight fluorescent" msgstr "Fluorescente de luz de día" msgid "Neutral fluorescent" msgstr "Fluorescente neutral" msgid "White fluorescent" msgstr "Fluorescente blanco" #. In some newer Nikon cameras: msgid "Sodium-vapor fluorescent" msgstr "Fluorescente de vapor de sodio" msgid "Day white fluorescent" msgstr "Fluorescente blanco" msgid "High temp. mercury-vapor fluorescent" msgstr "Fluorescente de vapor de mercurio de alta temperatura" #. For Olympus with no real "Flash" preset: msgid "Flash (auto mode)" msgstr "Flash (modo automático)" msgid "Evening sun" msgstr "Sol del atardecer" msgid "Underwater" msgstr "Bajo el agua" msgid "Black & white" msgstr "Blanco y negro" msgid "Manual WB" msgstr "Balance manual" msgid "Camera WB" msgstr "Balance de la cámara" msgid "Auto WB" msgstr "Balance automático" ufraw-0.19.2/ufraw_icon.rc0000644000175000017500000000003611335731650012335 00000000000000AppIcon ICON "ufraw_icon.ico" ufraw-0.19.2/config.h.in0000664000175000017500000000715312123734501011701 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* 'None' interpolation enabled */ #undef ENABLE_INTERP_NONE /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* disable deprecated gdk features */ #undef GDK_DISABLE_DEPRECATED /* disable deprecated gdk headers */ #undef GDK_PIXBUF_DISABLE_SINGLE_INCLUDES /* disable deprecated gtk+ features */ #undef GTK_DISABLE_DEPRECATED /* disable deprecated gtk headers */ #undef GTK_DISABLE_SINGLE_INCLUDES /* disable deprecated glib features */ #undef G_DISABLE_DEPRECATED /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `canonicalize_file_name' function. */ #undef HAVE_CANONICALIZE_FILE_NAME /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* have the exiv2 library */ #undef HAVE_EXIV2 /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* have Gimp 2.4 or later */ #undef HAVE_GIMP_2_4 /* have Gimp 2.9 or later */ #undef HAVE_GIMP_2_9 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* have the lensfun library */ #undef HAVE_LENSFUN /* Define to 1 if you have the `bz2' library (-lbz2). */ #undef HAVE_LIBBZ2 /* have the cfitsio library */ #undef HAVE_LIBCFITSIO /* Define to 1 if you have the `jasper' library (-ljasper). */ #undef HAVE_LIBJASPER /* Define to 1 if you have the `jpeg' library (-ljpeg). */ #undef HAVE_LIBJPEG /* have the png library */ #undef HAVE_LIBPNG /* Define to 1 if you have the `tiff' library (-ltiff). */ #undef HAVE_LIBTIFF /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the `memmem' function. */ #undef HAVE_MEMMEM /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* DST correction enabled */ #undef LOCALTIME /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Contrast setting option enabled */ #undef UFRAW_CONTRAST /* Debugging with valgrind enabled */ #undef UFRAW_VALGRIND /* FUJIFILM 'X-Trans' sensor support enabled */ #undef UFRAW_X_TRANS /* Version number of package */ #undef VERSION /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE ufraw-0.19.2/ufraw.pod0000664000175000017500000002526112115264507011513 00000000000000=pod =head1 NAME UFRaw - Convert camera RAW images to standard image files. =head1 SYNOPSIS =over 4 =item ufraw [OPTIONS] =item ufraw-batch [OPTIONS] =back =head1 DESCRIPTION The Unidentified Flying Raw (UFRaw) is a utility to read and manipulate raw images from digital cameras. It reads raw images using Dave Coffin's raw conversion utility - DCRaw. UFRaw supports basic color management using Little CMS, allowing the user to apply color profiles. For Nikon users UFRaw has the advantage that it can read the camera's tone curves. Even if you don't own a Nikon, you can still apply a Nikon curve to your images. By default 'ufraw' displays a preview window for each raw image allowing the user to tweak the image parameters before saving. If no raw images are given at the command line, UFRaw will display a file chooser dialog. To process the images with no questions asked (and no preview) use the command 'ufraw-batch'. The input files can be either raw images or UFRaw ID-files. ID-files contain a raw image filename and the parameters for handling the image. UFRaw can also work as a GIMP plug-in. To activate it simply open a raw image or a UFRaw ID-file in the GIMP. =head1 OPTIONS The options supplied on the command-line decide the starting-values for the GUI. The GUI will then allow you to tweak these values before saving the final image. =head2 General Options =over 4 =item --version Display the version of UFRaw and exit. =item --help Display a brief description of how to use UFRaw and exit. =item --silent Do not display any messages during conversion. This option is only valid with 'ufraw-batch'. =item --conf= Load all parameters from an ID-file. This feature can be used to tweak the parameters for one file using the GUI and using those parameters as the starting point for other images as well. =back =head2 Image Manipulation Options These command-line options override settings from the default configuration of UFRaw and from any loaded ID-file. The best way to learn about how these parameters work is to experiment with the GUI. All parameters correspond exactly to a setting available in the GUI. Not all parameters in the GUI have corresponding command-line options. =over 4 =item --wb=camera|auto White balance setting. "camera" means that UFRaw tries to read the color-temperature and green color component that the camera recorded in the meta-information in the raw-file. This does not work for all cameras. If UFRaw fails to read the white-balance information from the meta-information, it falls back to "auto". "auto" means that UFRaw calculates the color-temperature and green color component automatically from the image data. The white-balance can also be set manually with the --temperature and --green options. =item --temperature=TEMP Manually set the color temperature in Kelvin. =item --green=GREEN Green color component. Range 0.20 to 2.50. =item --gamma=GAMMA Gamma adjustment of the base curve. Range 0.10 to 1.00. Default 0.45. =item --linearity=LINEARITY Linearity of the base curve. Range 0.00 to 1.00. Default 0.10. =item --exposure=auto|EXPOSURE Auto exposure or exposure correction in EV. Range -3.00 to 3.00. Default 0. =item --restore=clip|lch|hsv Control how highlights are restored when applying negative EV. 'clip' restores nothing and is therefore safe from any artifacts. 'lch' restores in LCH space, resulting in restored highlights with soft details (good for clouds). 'hsv' restores in HSV space, resulting in restored highlights with sharp details. The default is 'lch'. =item --clip=digital|film Control how highlights are clipped when applying positive EV. 'digital' corresponds to using a linear response, emulating the harsh behaviour of the digital sensor. 'film' emulate the soft film response. The default is 'digital'. =item --saturation=SAT Adjust the color saturation. Range 0.00 to 8.00. Default 1.0, use 0 for black & white output. =item --wavelet-denoising-threshold=THRESHOLD Wavelet denoising threshold (default 0.0). =item --base-curve=manual|linear|custom|camera|CURVE Type of tone curve to use. The base curve is a combination of the gamma curve corrected by the curve specified here. The base curve is applied to each channel of the raw data after the white balance and color matrix, but before the ICC transformation. "manual" means that a manual tone curve is used. This is probably not very useful as a command-line option, since there is no way to specify what the curve should look like. "linear" means that no tone curve corrections is performed. "custom" means that UFRaw shall use the curve supplied by the camera in the meta-information in the raw-file. "camera" means that UFRaw shall use the "custom" curve only if the camera was set to use it (according to the meta-information). Otherwise the "linear" curve is used. CURVE can be the filename (without path) of any curve that was previously loaded in the GUI. The default is "camera" if such a curve exists, linear otherwise. =item --base-curve-file= Load the base curve from a file. The curve file format can be either UFRaw's XML format or Nikon's NTC/NCV format. =item --curve=manual|linear|CURVE Type of luminosity curve to use. This curve is applied in HSV space and therefore hue and saturation should not be effected by it. "manual" means that a manual luminosity curve is used. This is probably not very useful as a command-line option, since there is no way to specify what the curve should look like. "linear" means that no luminosity correction is performed. CURVE can be the filename (without path) of any curve that was previously loaded in the GUI. The default is "linear". =item --curve-file= Load the luminosity curve from a file. The curve file format can be either UFRaw's XML format or Nikon's NTC/NCV format. =item --black-point=auto|BLACK Black-point value. Range 0.0 to 1.0, default 0.0. =item --interpolation=ahd|vng|four-color|ppg|bilinear Interpolation algorithm to use when converting from the Bayer-pattern to normal RGB values. AHD (Adaptive Homogeneity Directed) interpolation is the best, but also the slowest. VNG (Variable Number Gradients) is second best and a bit faster. Bilinear is the simplest yet fastest interpolation. "four-color" is a variation of the VNG interpolation that should only be used if you see strange square patterns in the VNG interpolation, See L. AHD is the default interpolation. AHD interpolation is not supported for cameras with four color filters, such as the Sony-828 RGBE filter. In such cases, VNG interpolation will be used instead. =item --color-smoothing Apply color smoothing. =item --grayscale=none|lightness|luminance|value|mixer Grayscale conversion algorithm to use (default none). =item --darkframe=FILE Use FILE for raw darkframe subtraction. =back =head2 Output Options The options which are related to the final output are: =over 4 =item --shrink=FACTOR Shrink the image by FACTOR (default 1). =item --size=SIZE Downsize max(height,width) to SIZE. =item --rotate=camera|ANGLE|no Rotate image to camera's setting, by ANGLE degrees clockwise, or do not rotate the image (default camera) =item --crop-(left|right|top|bottom)=PIXELS Crop the output to the given pixel range, relative to the raw image after rotation but before any scaling. =item --out-type=ppm|tiff|tif|png|jpeg|jpg|fits Output file-format to use. The default output file-format is ppm. =item --out-depth=8|16 Output bit depth per channel. ppm, tiff, png and fits output formats can uses either 8 bits or 16 bits to encode each of the Red, Green and Blue components of each pixel. The jpeg format only allows for 8 bits for each color component. The raw-files contain more than eight bits of information for each color component. This means that by using an eight bit format, you are actually discarding some of the information supplied by the camera. This is not a problem if you only plan to view the image on screen. For prints you should consider a 16 bits workflow. =item --compression=VALUE JPEG quality factor. Range 0-100 with a higher number giving a higher quality at the cost of a larger file. Default 85. The --compression parameter is only relevant if the output file-format is jpeg. =item --[no]exif Embed exif in output. Default embed exif. Exif is currently embedded in JPEG, PNG and TIFF output. =item --[no]zip Enable [disable] TIFF zip compression. The zip-compression is loss-less. Default nozip. The --zip parameter is only relevant if the output file-format if tiff8 or tiff16. =item --out-path=PATH PATH for output file. In batch mode by default, output-files are placed in the same directory as the input-files. In interactive mode UFRaw tries to ''guess'' if you have a favorite output directory. =item --output=FILE Output file name to use. This is only relevant if a single raw-file is supplied on the command-line. . Use '-' to output to stdout. The default is to name the output-file the same as the input-file but with the extension given by the output file-format. =item --overwrite Overwrite existing files without asking. Default is to ask before deleting an existing file. =item --create-id=no|also|only Control whether UFRaw ID files are created for the output image. (Default is no). =item --embedded-image Extract the preview image embedded in the raw file instead of converting the raw image. This option is only valid with 'ufraw-batch'. =back =head1 Conversion Setting Priority Conversion settings are applied in the following priority order: =over 2 =item 1. Command-line options =item 2. Settings from the configuration file specified with --conf= (ignoring any filenames in the ID-file). =item 3. Settings from an ID-file supplied as an input-file. =item 4. Settings from $HOME/.ufrawrc =item 5. UFRaw's default settings. =back This means that an option supplied on the command-line always takes precedence over all other options. The conversion settings can be changed in the GUI before the resulting image is saved. =for comment In batch mode, the output options are NOT read from the resource file. =head1 FILES $HOME/.ufrawrc - UFRaw resource file containing the user default settings. This is an XML file that can be modified with any text editor. Still, it is recommended not to edit this file. This file is updated from the GUI when you save an image, or when you explicitly ask to save this file in the 'Options' menu. $HOME/.ufraw-gtkrc - An optional file for setting up a specific GTK theme for UFRaw. =head1 ONLINE RESOURCES =over 4 =item UFRaw homepage: L =item DCRaw homepage: L =back =head1 SEE ALSO =over 4 =item The GIMP homepage: L =back ufraw-0.19.2/ufraw_routines.c0000664000175000017500000004726712122217612013106 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_routines.c - general routines * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #if defined(HAVE_CANONICALIZE_FILE_NAME) && !defined(_GNU_SOURCE) #define _GNU_SOURCE /* needed for canonicalize_file_name() */ #endif #include "ufraw.h" #include #include #include #include /* needed for canonicalize_file_name() */ #include /* we start by some general purpose functions that mostly take care of * making the rest of the code platform independ */ const char *uf_get_home_dir() { const char *hd = g_get_home_dir(); if (hd == NULL) #ifdef _WIN32 hd = "C:\\"; #else hd = "/"; #endif return hd; } void uf_init_locale(const char *exename) { const char *locale = setlocale(LC_ALL, ""); /* Disable the Hebrew and Arabic locale, since the right-to-left setting * does not go well with the preview window. */ if (locale != NULL && (!strncmp(locale, "he", 2) || !strncmp(locale, "iw", 2) || !strncmp(locale, "ar", 2) || !strncmp(locale, "Hebrew", 6) || !strncmp(locale, "Arabic", 6))) { /* I'm not sure why the following doesn't work (on Windows at least) */ /* locale = setlocale(LC_ALL, "C"); * gtk_disable_setlocale(); */ /* so I'm using setenv */ g_setenv("LC_ALL", "C", TRUE); } /* Try getting the localedir from the environment */ char *localedir = g_strconcat(g_getenv("UFRAW_LOCALEDIR"), NULL); if (localedir == NULL) { /* If that fails, there are two defaults: */ #ifdef _WIN32 /* In Windows the localedir is found relative to the exe file. * The exact location here should match ufraw-setup.iss.in */ char *basename = g_path_get_basename(exename); if (strcasecmp(basename, "ufraw-gimp.exe") == 0) { localedir = g_strconcat(g_path_get_dirname(exename), "/../../../locale", NULL); } else { localedir = g_strconcat(g_path_get_dirname(exename), "/../lib/locale", NULL); } g_free(basename); #else exename = exename; /* suppress warning */ /* In other environments localedir is set at compile time */ localedir = g_strconcat(UFRAW_LOCALEDIR, NULL); #endif } bindtextdomain("ufraw", localedir); g_free(localedir); bind_textdomain_codeset("ufraw", "UTF-8"); textdomain("ufraw"); } char *uf_file_set_type(const char *filename, const char *type) { char *infile = (char *)filename, *outfile, *tmpfile = NULL, *dotPosition; if ((dotPosition = strrchr(infile, '.')) == NULL) { outfile = g_strconcat(infile, type, NULL); return outfile; } if (strcasecmp(dotPosition, ".gz") == 0 || strcasecmp(dotPosition, ".bz2") == 0) { char *tmpfile = g_strndup(infile, dotPosition - infile); if ((dotPosition = strrchr(tmpfile, '.')) == NULL) { outfile = g_strconcat(tmpfile, type, NULL); g_free(tmpfile); return outfile; } infile = tmpfile; } outfile = g_new(char, dotPosition - infile + strlen(type) + 1); g_strlcpy(outfile, infile, dotPosition - infile + 1); g_strlcpy(outfile + (dotPosition - infile), type, strlen(type) + 1); g_free(tmpfile); return outfile; } /* Make sure filename has asolute path */ char *uf_file_set_absolute(const char *filename) { if (g_path_is_absolute(filename)) { return g_strdup(filename); } else { #ifdef HAVE_CANONICALIZE_FILE_NAME // canonicalize_file_name() requires the file to exist. // This is why we need to split 'filename' to dirname and basename. char *path = g_path_get_dirname(filename); char *canon = canonicalize_file_name(path); if (canon == NULL) { // We should never reach this code g_message("Error in canonicalize_file_name(""%s""): %s", path, strerror(errno)); g_free(path); return g_strdup(filename); } // If filename ends with a separator there is no basename if (strlen(path) == strlen(filename) - 1) { g_free(path); return canon; } g_free(path); char *base = g_path_get_basename(filename); char *abs = g_build_filename(canon, base, NULL); g_free(base); g_free(canon); return abs; #else // We could use realpath(filename, NULL) // if we add a check that it is not buggy // This code does not remove '/./' or '/../' char *cd = g_get_current_dir(); char *fn = g_build_filename(cd, filename, NULL); g_free(cd); return fn; #endif } } char *uf_markup_buf(char *buffer, const char *format, ...) { va_list ap; va_start(ap, format); char *line = g_markup_vprintf_escaped(format, ap); va_end(ap); if (buffer == NULL) { return line; } else { char *buf; buf = g_strconcat(buffer, line, NULL); g_free(line); g_free(buffer); return buf; } } const char raw_ext[] = "3fr,ari,arw,cap,cine,cr2,crw,cs1,dc2,dcr,dng,erf,fff," "hdr,ia,iiq,jpeg,jpg,k25,kc2,kdc,mdc,mef,mos,mrw,nef," "nrw,orf,pef,pxn,qtk,r3d,raf,raw,rdc,rw2,rwl,sr2,srf," "srw,sti,tif,tiff,ufraw,x3f"; const char *file_type[] = { ".ppm", ".ppm", ".tif", ".tif", ".jpg", ".png", ".png", ".embedded.jpg", ".embedded.png", ".fits" }; /* Set locale of LC_NUMERIC to "C" to make sure that printf behaves correctly.*/ char *uf_set_locale_C() { char *locale = NULL; char *test = g_markup_printf_escaped("%.1f", 1234.5); if (strcmp(test, "1234.5") != 0) { locale = setlocale(LC_NUMERIC, NULL); if (locale != NULL) { locale = g_strdup(locale); } else { ufraw_message(UFRAW_ERROR, _("Fatal error setting C locale")); } setlocale(LC_NUMERIC, "C"); g_free(test); test = g_markup_printf_escaped("%.1f", 1234.5); if (strcmp(test, "1234.5") != 0) { ufraw_message(UFRAW_ERROR, _("Fatal error setting C locale")); if (locale != NULL) { setlocale(LC_NUMERIC, locale); g_free(locale); locale = NULL; } } } g_free(test); return locale; } void uf_reset_locale(char *locale) { if (locale == NULL) return; setlocale(LC_NUMERIC, locale); g_free(locale); } double profile_default_linear(profile_data *p) { if (!strcmp(p->name, "No profile") || !strcmp(p->name, "Color matrix")) return 0.1; else return 0.0; } double profile_default_gamma(profile_data *p) { if (!strcmp(p->name, "No profile") || !strcmp(p->name, "Color matrix") || !strncmp(p->productName, "Nikon D", 7) || !strncmp(p->productName, "Adobe RGB (1998)", 16)) return 0.45; else return 1.0; } /* Convert between Temperature and RGB. * Base on information from http://www.brucelindbloom.com/ * The fit for D-illuminant between 4000K and 23000K are from CIE * The generalization to 2000K < T < 4000K and the blackbody fits * are my own and should be taken with a grain of salt. */ static const double XYZ_to_RGB[3][3] = { { 3.24071, -0.969258, 0.0556352 }, { -1.53726, 1.87599, -0.203996 }, { -0.498571, 0.0415557, 1.05707 } }; void Temperature_to_RGB(double T, double RGB[3]) { int c; double xD, yD, X, Y, Z, max; // Fit for CIE Daylight illuminant if (T <= 4000) { xD = 0.27475e9 / (T * T * T) - 0.98598e6 / (T * T) + 1.17444e3 / T + 0.145986; } else if (T <= 7000) { xD = -4.6070e9 / (T * T * T) + 2.9678e6 / (T * T) + 0.09911e3 / T + 0.244063; } else { xD = -2.0064e9 / (T * T * T) + 1.9018e6 / (T * T) + 0.24748e3 / T + 0.237040; } yD = -3 * xD * xD + 2.87 * xD - 0.275; // Fit for Blackbody using CIE standard observer function at 2 degrees //xD = -1.8596e9/(T*T*T) + 1.37686e6/(T*T) + 0.360496e3/T + 0.232632; //yD = -2.6046*xD*xD + 2.6106*xD - 0.239156; // Fit for Blackbody using CIE standard observer function at 10 degrees //xD = -1.98883e9/(T*T*T) + 1.45155e6/(T*T) + 0.364774e3/T + 0.231136; //yD = -2.35563*xD*xD + 2.39688*xD - 0.196035; X = xD / yD; Y = 1; Z = (1 - xD - yD) / yD; max = 0; for (c = 0; c < 3; c++) { RGB[c] = X * XYZ_to_RGB[0][c] + Y * XYZ_to_RGB[1][c] + Z * XYZ_to_RGB[2][c]; if (RGB[c] > max) max = RGB[c]; } for (c = 0; c < 3; c++) RGB[c] = RGB[c] / max; } void RGB_to_Temperature(double RGB[3], double *T, double *Green) { double Tmax, Tmin, testRGB[3]; Tmin = 2000; Tmax = 23000; for (*T = (Tmax + Tmin) / 2; Tmax - Tmin > 0.1; *T = (Tmax + Tmin) / 2) { Temperature_to_RGB(*T, testRGB); if (testRGB[2] / testRGB[0] > RGB[2] / RGB[0]) Tmax = *T; else Tmin = *T; } *Green = (testRGB[1] / testRGB[0]) / (RGB[1] / RGB[0]); if (*Green < 0.2) *Green = 0.2; if (*Green > 2.5) *Green = 2.5; } static void curve_parse_start(GMarkupParseContext *context, const gchar *element, const gchar **names, const gchar **values, gpointer user, GError **error) { CurveData *c = user; int int_value; GQuark ufrawQuark = g_quark_from_static_string("UFRaw"); context = context; while (*names != NULL) { sscanf(*values, "%d", &int_value); if (!strcmp(element, "Curve") && !strcmp(*names, "Version")) { /* We never changed the curve format so we support all * previous versions */ if (int_value > conf_default.version) g_set_error(error, ufrawQuark, UFRAW_RC_VERSION, _("Curve version is not supported")); } names++; values++; } if (!strcmp("Curve", element)) { /* m_gamma==-1 marks that we are inside a XML Curve block. * This is ok since we never set m_gamma. */ c->m_gamma = -1.0; /* m_numAnchors==0 marks that no anchors where read from the XML */ c->m_numAnchors = 0; } } static void curve_parse_end(GMarkupParseContext *context, const gchar *element, gpointer user, GError **error) { CurveData *c = user; context = context; error = error; if (!strcmp("Curve", element)) { c->m_gamma = conf_default.curve[0].m_gamma; if (c->m_numAnchors == 0) c->m_numAnchors = conf_default.curve[0].m_numAnchors; } } static void curve_parse_text(GMarkupParseContext *context, const gchar *text, gsize len, gpointer user, GError **error) { CurveData *c = user; const gchar *element = g_markup_parse_context_get_element(context); char temp[max_path]; error = error; for (; len > 0 && g_ascii_isspace(*text); len--, text++); for (; len > 0 && g_ascii_isspace(text[len - 1]); len--); if (len == 0) return; if (len > max_path - 1) len = max_path - 1; strncpy(temp, text, len); temp[len] = '\0'; if (!strcmp("Curve", element)) { g_strlcpy(c->name, temp, max_name); } /* A negative gamma marks that we are in a Curve XML block */ if (c->m_gamma < 0) { if (!strcmp("MinXY", element)) { sscanf(temp, "%lf %lf", &c->m_min_x, &c->m_min_y); c->m_min_x = LIM(c->m_min_x, 0, 1); c->m_min_y = LIM(c->m_min_y, 0, 1); } if (!strcmp("MaxXY", element)) { sscanf(temp, "%lf %lf", &c->m_max_x, &c->m_max_y); c->m_max_x = LIM(c->m_max_x, 0, 1); c->m_max_y = LIM(c->m_max_y, 0, 1); } if (!strcmp("AnchorXY", element)) { /* If one anchor is supplied then all anchors should be supplied */ sscanf(temp, "%lf %lf", &c->m_anchors[c->m_numAnchors].x, &c->m_anchors[c->m_numAnchors].y); c->m_anchors[c->m_numAnchors].x = LIM(c->m_anchors[c->m_numAnchors].x, 0, 1); c->m_anchors[c->m_numAnchors].y = LIM(c->m_anchors[c->m_numAnchors].y, 0, 1); c->m_numAnchors++; } } } int curve_load(CurveData *cp, char *filename) { NikonData data; if (!strcasecmp(filename + strlen(filename) - 4, ".ntc") || !strcasecmp(filename + strlen(filename) - 4, ".ncv")) { /* Try loading ntc/ncv files */ if (LoadNikonData(filename, &data) != UFRAW_SUCCESS) { ufraw_message(UFRAW_ERROR, _("Invalid Nikon curve file '%s'"), filename); return UFRAW_ERROR; } *cp = data.curves[TONE_CURVE]; } else { /* Load UFRaw's curve file format */ char line[max_path], *locale; FILE *in; GMarkupParser parser = {&curve_parse_start, &curve_parse_end, &curve_parse_text, NULL, NULL }; GMarkupParseContext *context; GError *err = NULL; *cp = conf_default.curve[0]; if ((in = g_fopen(filename, "r")) == NULL) { ufraw_message(UFRAW_ERROR, _("Error opening Curve file '%s': %s"), filename, strerror(errno)); return UFRAW_ERROR; } locale = uf_set_locale_C(); context = g_markup_parse_context_new(&parser, 0, cp, NULL); line[max_path - 1] = '\0'; if (fgets(line, max_path - 1, in) == NULL && !feof(in)) { ufraw_message(UFRAW_ERROR, _("Error reading from file '%s'."), filename); uf_reset_locale(locale); fclose(in); return UFRAW_ERROR; } while (!feof(in)) { if (!g_markup_parse_context_parse(context, line, strlen(line), &err)) { ufraw_message(UFRAW_ERROR, _("Error parsing '%s'\n%s"), filename, err->message); g_markup_parse_context_free(context); uf_reset_locale(locale); fclose(in); g_error_free(err); return UFRAW_ERROR; } if (fgets(line, max_path, in) == NULL && !feof(in)) { ufraw_message(UFRAW_ERROR, _("Error reading from file '%s'."), filename); uf_reset_locale(locale); fclose(in); return UFRAW_ERROR; } } g_markup_parse_context_end_parse(context, NULL); g_markup_parse_context_free(context); uf_reset_locale(locale); fclose(in); } char *base = g_path_get_basename(filename); char *name = uf_file_set_type(base, ""); char *utf8 = g_filename_display_name(name); g_strlcpy(cp->name, utf8, max_name); g_free(utf8); g_free(name); g_free(base); return UFRAW_SUCCESS; } int curve_save(CurveData *cp, char *filename) { int nikon_file_type = -1; /* Try saving ntc/ncv format */ if (!strcasecmp(filename + strlen(filename) - 4, ".ntc")) nikon_file_type = NTC_FILE; else if (!strcasecmp(filename + strlen(filename) - 4, ".ncv")) nikon_file_type = NCV_FILE; //if it's ntc or ncv if (nikon_file_type != -1) { NikonData data; //clear it out memset(&data, 0, sizeof(NikonData)); data.curves[TONE_CURVE] = *cp; if (SaveNikonDataFile(&data, filename, nikon_file_type) != UFRAW_SUCCESS) { ufraw_message(UFRAW_ERROR, _("Invalid Nikon curve file '%s'"), filename); return UFRAW_ERROR; } } else { /* Save UFRaw's curve format */ FILE *out; if ((out = g_fopen(filename, "w")) == NULL) { ufraw_message(UFRAW_ERROR, _("Error opening file '%s': %s"), filename, g_strerror(errno)); return UFRAW_ERROR; } char *locale = uf_set_locale_C(); fprintf(out, "\n"); char *base = g_path_get_basename(filename); char *name = uf_file_set_type(base, ""); char *utf8 = g_filename_display_name(name); fprintf(out, "%s\n", conf_default.version, utf8); g_free(utf8); g_free(name); g_free(base); char *buf = curve_buffer(cp); if (buf != NULL) fprintf(out, "%s", buf); g_free(buf); fprintf(out, "\n"); uf_reset_locale(locale); fclose(out); } return UFRAW_SUCCESS; } char *curve_buffer(CurveData *c) { char *buf = NULL; int i; if (c->m_min_x != conf_default.curve[0].m_min_x || c->m_min_y != conf_default.curve[0].m_min_y || c->m_max_x != conf_default.curve[0].m_max_x || c->m_max_y != conf_default.curve[0].m_max_y) { buf = uf_markup_buf(buf, "\t%lf %lf\n", c->m_min_x, c->m_min_y); buf = uf_markup_buf(buf, "\t%lf %lf\n", c->m_max_x, c->m_max_y); } if (c->m_numAnchors != conf_default.curve[0].m_numAnchors || c->m_anchors[0].x != conf_default.curve[0].m_anchors[0].x || c->m_anchors[0].y != conf_default.curve[0].m_anchors[0].y || c->m_anchors[1].x != conf_default.curve[0].m_anchors[1].x || c->m_anchors[1].y != conf_default.curve[0].m_anchors[1].y) { for (i = 0; i < c->m_numAnchors; i++) buf = uf_markup_buf(buf, "\t%lf %lf\n", c->m_anchors[i].x, c->m_anchors[i].y); } return buf; } int ptr_array_insert_sorted( GPtrArray *array, const void *item, GCompareFunc compare) { int length = array->len; g_ptr_array_set_size(array, length + 1); const void **root = (const void **)array->pdata; int m = 0, l = 0, r = length - 1; // Skip trailing NULL, if any if (l <= r && !root [r]) r--; while (l <= r) { m = (l + r) / 2; int cmp = compare(root [m], item); if (cmp == 0) { ++m; goto done; } else if (cmp < 0) l = m + 1; else r = m - 1; } if (r == m) m++; done: memmove(root + m + 1, root + m, (length - m) * sizeof(void *)); root [m] = item; return m; } int ptr_array_find_sorted( const GPtrArray *array, const void *item, GCompareFunc compare) { int length = array->len; void **root = array->pdata; int l = 0, r = length - 1; int m = 0, cmp = 0; if (!length) return -1; // Skip trailing NULL, if any if (!root [r]) r--; while (l <= r) { m = (l + r) / 2; cmp = compare(root [m], item); if (cmp == 0) return m; else if (cmp < 0) l = m + 1; else r = m - 1; } return -1; } void ptr_array_insert_index( GPtrArray *array, const void *item, int index) { const void **root; int length = array->len; g_ptr_array_set_size(array, length + 1); root = (const void **)array->pdata; memmove(root + index + 1, root + index, (length - index) * sizeof(void *)); root [index] = item; } ufraw-0.19.2/ufraw.10000644000175000017500000004167312115265017011071 00000000000000.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "UFRAW 1" .TH UFRAW 1 "2013-03-04" "UFRAW" "" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" UFRaw \- Convert camera RAW images to standard image files. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .IP "ufraw [\s-1OPTIONS\s0] " 4 .IX Item "ufraw [OPTIONS] " .PD 0 .IP "ufraw-batch [\s-1OPTIONS\s0] " 4 .IX Item "ufraw-batch [OPTIONS] " .PD .SH "DESCRIPTION" .IX Header "DESCRIPTION" The Unidentified Flying Raw (UFRaw) is a utility to read and manipulate raw images from digital cameras. It reads raw images using Dave Coffin's raw conversion utility \- DCRaw. UFRaw supports basic color management using Little \s-1CMS\s0, allowing the user to apply color profiles. For Nikon users UFRaw has the advantage that it can read the camera's tone curves. Even if you don't own a Nikon, you can still apply a Nikon curve to your images. .PP By default 'ufraw' displays a preview window for each raw image allowing the user to tweak the image parameters before saving. If no raw images are given at the command line, UFRaw will display a file chooser dialog. To process the images with no questions asked (and no preview) use the command 'ufraw\-batch'. .PP The input files can be either raw images or UFRaw ID-files. ID-files contain a raw image filename and the parameters for handling the image. .PP UFRaw can also work as a \s-1GIMP\s0 plug-in. To activate it simply open a raw image or a UFRaw ID-file in the \s-1GIMP\s0. .SH "OPTIONS" .IX Header "OPTIONS" The options supplied on the command-line decide the starting-values for the \s-1GUI\s0. The \s-1GUI\s0 will then allow you to tweak these values before saving the final image. .SS "General Options" .IX Subsection "General Options" .IP "\-\-version" 4 .IX Item "--version" Display the version of UFRaw and exit. .IP "\-\-help" 4 .IX Item "--help" Display a brief description of how to use UFRaw and exit. .IP "\-\-silent" 4 .IX Item "--silent" Do not display any messages during conversion. This option is only valid with 'ufraw\-batch'. .IP "\-\-conf=" 4 .IX Item "--conf=" Load all parameters from an ID-file. This feature can be used to tweak the parameters for one file using the \s-1GUI\s0 and using those parameters as the starting point for other images as well. .SS "Image Manipulation Options" .IX Subsection "Image Manipulation Options" These command-line options override settings from the default configuration of UFRaw and from any loaded ID-file. The best way to learn about how these parameters work is to experiment with the \s-1GUI\s0. All parameters correspond exactly to a setting available in the \s-1GUI\s0. Not all parameters in the \s-1GUI\s0 have corresponding command-line options. .IP "\-\-wb=camera|auto" 4 .IX Item "--wb=camera|auto" White balance setting. \*(L"camera\*(R" means that UFRaw tries to read the color-temperature and green color component that the camera recorded in the meta-information in the raw-file. This does not work for all cameras. If UFRaw fails to read the white-balance information from the meta-information, it falls back to \*(L"auto\*(R". .Sp \&\*(L"auto\*(R" means that UFRaw calculates the color-temperature and green color component automatically from the image data. .Sp The white-balance can also be set manually with the \-\-temperature and \-\-green options. .IP "\-\-temperature=TEMP" 4 .IX Item "--temperature=TEMP" Manually set the color temperature in Kelvin. .IP "\-\-green=GREEN" 4 .IX Item "--green=GREEN" Green color component. Range 0.20 to 2.50. .IP "\-\-gamma=GAMMA" 4 .IX Item "--gamma=GAMMA" Gamma adjustment of the base curve. Range 0.10 to 1.00. Default 0.45. .IP "\-\-linearity=LINEARITY" 4 .IX Item "--linearity=LINEARITY" Linearity of the base curve. Range 0.00 to 1.00. Default 0.10. .IP "\-\-exposure=auto|EXPOSURE" 4 .IX Item "--exposure=auto|EXPOSURE" Auto exposure or exposure correction in \s-1EV\s0. Range \-3.00 to 3.00. Default 0. .IP "\-\-restore=clip|lch|hsv" 4 .IX Item "--restore=clip|lch|hsv" Control how highlights are restored when applying negative \s-1EV\s0. \&'clip' restores nothing and is therefore safe from any artifacts. \&'lch' restores in \s-1LCH\s0 space, resulting in restored highlights with soft details (good for clouds). \&'hsv' restores in \s-1HSV\s0 space, resulting in restored highlights with sharp details. The default is 'lch'. .IP "\-\-clip=digital|film" 4 .IX Item "--clip=digital|film" Control how highlights are clipped when applying positive \s-1EV\s0. \&'digital' corresponds to using a linear response, emulating the harsh behaviour of the digital sensor. \&'film' emulate the soft film response. The default is 'digital'. .IP "\-\-saturation=SAT" 4 .IX Item "--saturation=SAT" Adjust the color saturation. Range 0.00 to 8.00. Default 1.0, use 0 for black & white output. .IP "\-\-wavelet\-denoising\-threshold=THRESHOLD" 4 .IX Item "--wavelet-denoising-threshold=THRESHOLD" Wavelet denoising threshold (default 0.0). .IP "\-\-base\-curve=manual|linear|custom|camera|CURVE" 4 .IX Item "--base-curve=manual|linear|custom|camera|CURVE" Type of tone curve to use. The base curve is a combination of the gamma curve corrected by the curve specified here. The base curve is applied to each channel of the raw data after the white balance and color matrix, but before the \s-1ICC\s0 transformation. .Sp \&\*(L"manual\*(R" means that a manual tone curve is used. This is probably not very useful as a command-line option, since there is no way to specify what the curve should look like. .Sp \&\*(L"linear\*(R" means that no tone curve corrections is performed. .Sp \&\*(L"custom\*(R" means that UFRaw shall use the curve supplied by the camera in the meta-information in the raw-file. .Sp \&\*(L"camera\*(R" means that UFRaw shall use the \*(L"custom\*(R" curve only if the camera was set to use it (according to the meta-information). Otherwise the \*(L"linear\*(R" curve is used. .Sp \&\s-1CURVE\s0 can be the filename (without path) of any curve that was previously loaded in the \s-1GUI\s0. .Sp The default is \*(L"camera\*(R" if such a curve exists, linear otherwise. .IP "\-\-base\-curve\-file=" 4 .IX Item "--base-curve-file=" Load the base curve from a file. The curve file format can be either UFRaw's \s-1XML\s0 format or Nikon's \s-1NTC/NCV\s0 format. .IP "\-\-curve=manual|linear|CURVE" 4 .IX Item "--curve=manual|linear|CURVE" Type of luminosity curve to use. This curve is applied in \s-1HSV\s0 space and therefore hue and saturation should not be effected by it. .Sp \&\*(L"manual\*(R" means that a manual luminosity curve is used. This is probably not very useful as a command-line option, since there is no way to specify what the curve should look like. .Sp \&\*(L"linear\*(R" means that no luminosity correction is performed. .Sp \&\s-1CURVE\s0 can be the filename (without path) of any curve that was previously loaded in the \s-1GUI\s0. .Sp The default is \*(L"linear\*(R". .IP "\-\-curve\-file=" 4 .IX Item "--curve-file=" Load the luminosity curve from a file. The curve file format can be either UFRaw's \s-1XML\s0 format or Nikon's \s-1NTC/NCV\s0 format. .IP "\-\-black\-point=auto|BLACK" 4 .IX Item "--black-point=auto|BLACK" Black-point value. Range 0.0 to 1.0, default 0.0. .IP "\-\-interpolation=ahd|vng|four\-color|ppg|bilinear" 4 .IX Item "--interpolation=ahd|vng|four-color|ppg|bilinear" Interpolation algorithm to use when converting from the Bayer-pattern to normal \s-1RGB\s0 values. \s-1AHD\s0 (Adaptive Homogeneity Directed) interpolation is the best, but also the slowest. \s-1VNG\s0 (Variable Number Gradients) is second best and a bit faster. Bilinear is the simplest yet fastest interpolation. .Sp \&\*(L"four-color\*(R" is a variation of the \s-1VNG\s0 interpolation that should only be used if you see strange square patterns in the \s-1VNG\s0 interpolation, See . .Sp \&\s-1AHD\s0 is the default interpolation. \&\s-1AHD\s0 interpolation is not supported for cameras with four color filters, such as the Sony\-828 \s-1RGBE\s0 filter. In such cases, \s-1VNG\s0 interpolation will be used instead. .IP "\-\-color\-smoothing" 4 .IX Item "--color-smoothing" Apply color smoothing. .IP "\-\-grayscale=none|lightness|luminance|value|mixer" 4 .IX Item "--grayscale=none|lightness|luminance|value|mixer" Grayscale conversion algorithm to use (default none). .IP "\-\-darkframe=FILE" 4 .IX Item "--darkframe=FILE" Use \s-1FILE\s0 for raw darkframe subtraction. .SS "Output Options" .IX Subsection "Output Options" The options which are related to the final output are: .IP "\-\-shrink=FACTOR" 4 .IX Item "--shrink=FACTOR" Shrink the image by \s-1FACTOR\s0 (default 1). .IP "\-\-size=SIZE" 4 .IX Item "--size=SIZE" Downsize max(height,width) to \s-1SIZE\s0. .IP "\-\-rotate=camera|ANGLE|no" 4 .IX Item "--rotate=camera|ANGLE|no" Rotate image to camera's setting, by \s-1ANGLE\s0 degrees clockwise, or do not rotate the image (default camera) .IP "\-\-crop\-(left|right|top|bottom)=PIXELS" 4 .IX Item "--crop-(left|right|top|bottom)=PIXELS" Crop the output to the given pixel range, relative to the raw image after rotation but before any scaling. .IP "\-\-out\-type=ppm|tiff|tif|png|jpeg|jpg|fits" 4 .IX Item "--out-type=ppm|tiff|tif|png|jpeg|jpg|fits" Output file-format to use. The default output file-format is ppm. .IP "\-\-out\-depth=8|16" 4 .IX Item "--out-depth=8|16" Output bit depth per channel. ppm, tiff, png and fits output formats can uses either 8 bits or 16 bits to encode each of the Red, Green and Blue components of each pixel. The jpeg format only allows for 8 bits for each color component. .Sp The raw-files contain more than eight bits of information for each color component. This means that by using an eight bit format, you are actually discarding some of the information supplied by the camera. This is not a problem if you only plan to view the image on screen. For prints you should consider a 16 bits workflow. .IP "\-\-compression=VALUE" 4 .IX Item "--compression=VALUE" \&\s-1JPEG\s0 quality factor. Range 0\-100 with a higher number giving a higher quality at the cost of a larger file. Default 85. The \-\-compression parameter is only relevant if the output file-format is jpeg. .IP "\-\-[no]exif" 4 .IX Item "--[no]exif" Embed exif in output. Default embed exif. Exif is currently embedded in \s-1JPEG\s0, \&\s-1PNG\s0 and \s-1TIFF\s0 output. .IP "\-\-[no]zip" 4 .IX Item "--[no]zip" Enable [disable] \s-1TIFF\s0 zip compression. The zip-compression is loss-less. Default nozip. The \-\-zip parameter is only relevant if the output file-format if tiff8 or tiff16. .IP "\-\-out\-path=PATH" 4 .IX Item "--out-path=PATH" \&\s-1PATH\s0 for output file. In batch mode by default, output-files are placed in the same directory as the input-files. In interactive mode UFRaw tries to \&''guess'' if you have a favorite output directory. .IP "\-\-output=FILE" 4 .IX Item "--output=FILE" Output file name to use. This is only relevant if a single raw-file is supplied on the command-line. . Use '\-' to output to stdout. The default is to name the output-file the same as the input-file but with the extension given by the output file-format. .IP "\-\-overwrite" 4 .IX Item "--overwrite" Overwrite existing files without asking. Default is to ask before deleting an existing file. .IP "\-\-create\-id=no|also|only" 4 .IX Item "--create-id=no|also|only" Control whether UFRaw \s-1ID\s0 files are created for the output image. (Default is no). .IP "\-\-embedded\-image" 4 .IX Item "--embedded-image" Extract the preview image embedded in the raw file instead of converting the raw image. This option is only valid with 'ufraw\-batch'. .SH "Conversion Setting Priority" .IX Header "Conversion Setting Priority" Conversion settings are applied in the following priority order: .IP "1. Command-line options" 2 .IX Item "1. Command-line options" .PD 0 .IP "2. Settings from the configuration file specified with \-\-conf= (ignoring any filenames in the ID-file)." 2 .IX Item "2. Settings from the configuration file specified with --conf= (ignoring any filenames in the ID-file)." .IP "3. Settings from an ID-file supplied as an input-file." 2 .IX Item "3. Settings from an ID-file supplied as an input-file." .ie n .IP "4. Settings from $HOME/.ufrawrc" 2 .el .IP "4. Settings from \f(CW$HOME\fR/.ufrawrc" 2 .IX Item "4. Settings from $HOME/.ufrawrc" .IP "5. UFRaw's default settings." 2 .IX Item "5. UFRaw's default settings." .PD .PP This means that an option supplied on the command-line always takes precedence over all other options. .PP The conversion settings can be changed in the \s-1GUI\s0 before the resulting image is saved. .SH "FILES" .IX Header "FILES" \&\f(CW$HOME\fR/.ufrawrc \- UFRaw resource file containing the user default settings. This is an \s-1XML\s0 file that can be modified with any text editor. Still, it is recommended not to edit this file. This file is updated from the \s-1GUI\s0 when you save an image, or when you explicitly ask to save this file in the \&'Options' menu. .PP \&\f(CW$HOME\fR/.ufraw\-gtkrc \- An optional file for setting up a specific \s-1GTK\s0 theme for UFRaw. .SH "ONLINE RESOURCES" .IX Header "ONLINE RESOURCES" .IP "UFRaw homepage: " 4 .IX Item "UFRaw homepage: " .PD 0 .IP "DCRaw homepage: " 4 .IX Item "DCRaw homepage: " .PD .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "The \s-1GIMP\s0 homepage: " 4 .IX Item "The GIMP homepage: " ufraw-0.19.2/wb_presets.c0000664000175000017500000147212312115264507012210 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * wb_presets.c - White balance preset values for various cameras * Copyright 2004-2013 by Udi Fuchs * * Thanks goes for all the people who sent in the preset values * for their cameras. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include /* Column 1 - "make" of the camera. * Column 2 - "model" (use the "make" and "model" as provided by DCRaw). * Column 3 - WB name. * Column 4 - Fine tuning. MUST be in increasing order. 0 for no fine tuning. * It is enough to give only the extreme values, the other values * will be interpolated. * Column 5 - Channel multipliers. * * Minolta's ALPHA and MAXXUM models are treated as the DYNAX model. * * WB name is standardized to one of the following: */ // "Sunlight" and other variation should be switched to this: static const char Daylight[] = N_("Daylight"); // Probably same as above: static const char DirectSunlight[] = N_("Direct sunlight"); static const char Cloudy[] = N_("Cloudy"); // "Shadows" should be switched to this: static const char Shade[] = N_("Shade"); static const char Incandescent[] = N_("Incandescent"); static const char IncandescentWarm[] = N_("Incandescent warm"); // Same as "Incandescent": static const char Tungsten[] = N_("Tungsten"); static const char Fluorescent[] = N_("Fluorescent"); // In Canon cameras and some newer Nikon cameras: static const char FluorescentHigh[] = N_("Fluorescent high"); static const char CoolWhiteFluorescent[] = N_("Cool white fluorescent"); static const char WarmWhiteFluorescent[] = N_("Warm white fluorescent"); static const char DaylightFluorescent[] = N_("Daylight fluorescent"); static const char NeutralFluorescent[] = N_("Neutral fluorescent"); static const char WhiteFluorescent[] = N_("White fluorescent"); // In some newer Nikon cameras: static const char SodiumVaporFluorescent[] = N_("Sodium-vapor fluorescent"); static const char DayWhiteFluorescent[] = N_("Day white fluorescent"); static const char HighTempMercuryVaporFluorescent[] = N_("High temp. mercury-vapor fluorescent"); static const char Flash[] = N_("Flash"); // For Olympus with no real "Flash" preset: static const char FlashAuto[] = N_("Flash (auto mode)"); static const char EveningSun[] = N_("Evening sun"); static const char Underwater[] = N_("Underwater"); static const char BlackNWhite[] = N_("Black & white"); const char uf_spot_wb[] = "Spot WB"; const char uf_manual_wb[] = N_("Manual WB"); const char uf_camera_wb[] = N_("Camera WB"); const char uf_auto_wb[] = N_("Auto WB"); const wb_data wb_preset[] = { { "", "", uf_camera_wb, 0, { 0, 0, 0, 0 } }, { "", "", uf_manual_wb, 0, { 0, 0, 0, 0 } }, { "", "", uf_auto_wb, 0, { 0, 0, 0, 0 } }, { "Canon", "PowerShot A630", Daylight, 0, { 1.831422, 1, 1.245671, 0 } }, { "Canon", "PowerShot A630", Cloudy, 0, { 1.669924, 1, 1.326299, 0 } }, { "Canon", "PowerShot A630", Tungsten, 0, { 1.696768, 1, 1.268658, 0 } }, { "Canon", "PowerShot A630", Fluorescent, 0, { 1.869859, 1, 1.209110, 0 } }, { "Canon", "PowerShot A630", FluorescentHigh, 0, { 1.855491, 1, 1.206855, 0 } }, { "Canon", "PowerShot A710 IS", Daylight, 0, { 1.683007, 1, 1.893246, 0 } }, { "Canon", "PowerShot A710 IS", Cloudy, 0, { 1.871320, 1, 1.718648, 0 } }, { "Canon", "PowerShot A710 IS", Tungsten, 0, { 1.268692, 1, 2.707944, 0 } }, { "Canon", "PowerShot A710 IS", Fluorescent, 0, { 1.589857, 1, 2.051819, 0 } }, { "Canon", "PowerShot A710 IS", DaylightFluorescent, 0, { 1.820287, 1, 1.820287, 0 } }, { "Canon", "PowerShot A710 IS", Underwater, 0, { 2.926108, 1, 1.376847, 0 } }, /* These presets were extracted from CHDK-generated DNG files. */ { "Canon", "PowerShot A720 IS", Daylight, 0, { 2.059371, 1, 1.975553, 0 } }, { "Canon", "PowerShot A720 IS", Cloudy, 0, { 2.262722, 1, 1.818935, 0 } }, { "Canon", "PowerShot A720 IS", Tungsten, 0, { 1.632258, 1, 2.974194, 0 } }, { "Canon", "PowerShot A720 IS", Fluorescent, 0, { 1.902728, 1, 2.365362, 0 } }, { "Canon", "PowerShot A720 IS", FluorescentHigh, 0, { 2.243961, 1, 1.935990, 0 } }, { "Canon", "PowerShot A720 IS", Underwater, 0, { 2.303465, 1, 1.882915, 0 } }, { "Canon", "PowerShot A720 IS", Flash, 0, { 2.151586, 1, 1.864865, 0 } }, { "Canon", "PowerShot G2", Daylight, 0, { 2.011483, 1, 1.299522, 0 } }, { "Canon", "PowerShot G2", Cloudy, 0, { 2.032505, 1, 1.285851, 0 } }, { "Canon", "PowerShot G2", Tungsten, 0, { 1.976008, 1, 1.332054, 0 } }, { "Canon", "PowerShot G2", Fluorescent, 0, { 2.022010, 1, 1.295694, 0 } }, { "Canon", "PowerShot G2", FluorescentHigh, 0, { 2.029637, 1, 1.286807, 0 } }, { "Canon", "PowerShot G2", Flash, 0, { 2.153576, 1, 1.140680, 0 } }, { "Canon", "PowerShot G3", Daylight, 0, { 1.858513, 1, 1.387290, 0 } }, { "Canon", "PowerShot G3", Cloudy, 0, { 1.951132, 1, 1.305125, 0 } }, { "Canon", "PowerShot G3", Tungsten, 0, { 1.128386, 1, 2.313310, 0 } }, { "Canon", "PowerShot G3", Fluorescent, 0, { 1.715573, 1, 2.194337, 0 } }, { "Canon", "PowerShot G3", FluorescentHigh, 0, { 2.580563, 1, 1.496164, 0 } }, { "Canon", "PowerShot G3", Flash, 0, { 2.293173, 1, 1.187416, 0 } }, { "Canon", "PowerShot G5", Daylight, 0, { 1.639521, 1, 1.528144, 0 } }, { "Canon", "PowerShot G5", Cloudy, 0, { 1.702153, 1, 1.462919, 0 } }, { "Canon", "PowerShot G5", Tungsten, 0, { 1.135071, 1, 2.374408, 0 } }, { "Canon", "PowerShot G5", Fluorescent, 0, { 1.660281, 1, 2.186462, 0 } }, { "Canon", "PowerShot G5", FluorescentHigh, 0, { 1.463297, 1, 1.764140, 0 } }, { "Canon", "PowerShot G5", Flash, 0, { 1.603593, 1, 1.562874, 0 } }, { "Canon", "PowerShot G6", Daylight, 0, { 1.769704, 1, 1.637931, 0 } }, { "Canon", "PowerShot G6", Cloudy, 0, { 2.062731, 1, 1.442804, 0 } }, { "Canon", "PowerShot G6", Tungsten, 0, { 1.077106, 1, 2.721234, 0 } }, { "Canon", "PowerShot G6", Fluorescent, 0, { 1.914922, 1, 2.142670, 0 } }, { "Canon", "PowerShot G6", FluorescentHigh, 0, { 2.543677, 1, 1.650587, 0 } }, { "Canon", "PowerShot G6", Flash, 0, { 2.285322, 1, 1.333333, 0 } }, { "Canon", "PowerShot G9", Daylight, 0, { 2.089552, 1, 1.786452, 0 } }, { "Canon", "PowerShot G9", Cloudy, 0, { 2.208716, 1, 1.660550, 0 } }, { "Canon", "PowerShot G9", Tungsten, 0, { 1.533493, 1, 2.586124, 0 } }, { "Canon", "PowerShot G9", Fluorescent, 0, { 2.065668, 1, 1.829493, 0 } }, { "Canon", "PowerShot G9", FluorescentHigh, 0, { 2.237601, 1, 1.668974, 0 } }, { "Canon", "PowerShot G9", Flash, 0, { 2.461538, 1, 1.498834, 0 } }, { "Canon", "PowerShot G9", Underwater, 0, { 2.237327, 1, 1.661290, 0 } }, /* Does the Canon PowerShot G10 support native WB presets? Please test. */ { "Canon", "PowerShot G10", Daylight, 0, { 1.598980, 1, 1.830612, 0 } }, { "Canon", "PowerShot G10", Cloudy, 0, { 1.738120, 1, 1.722281, 0 } }, { "Canon", "PowerShot G10", Tungsten, 0, { 1, 1.035550, 3.569954, 0 } }, { "Canon", "PowerShot G10", Fluorescent, 0, { 1.341633, 1, 2.434263, 0 } }, { "Canon", "PowerShot G10", FluorescentHigh, 0, { 1.749171, 1, 1.907182, 0 } }, { "Canon", "PowerShot G10", Flash, 0, { 1.926829, 1, 1.501591, 0 } }, { "Canon", "PowerShot G10", Underwater, 0, { 1.822314, 1, 1.841942, 0 } }, { "Canon", "PowerShot G11", Daylight, 0, { 1.721591, 1, 2.097727, 0 } }, { "Canon", "PowerShot G11", Cloudy, 0, { 1.910936, 1, 1.856821, 0 } }, { "Canon", "PowerShot G11", Tungsten, 0, { 1.380435, 1, 3.576087, 0 } }, { "Canon", "PowerShot G11", Fluorescent, 0, { 1.649143, 1, 2.693714, 0 } }, { "Canon", "PowerShot G11", FluorescentHigh, 0, { 2.008168, 1, 1.961494, 0 } }, { "Canon", "PowerShot G11", Flash, 0, { 1.985556, 1, 1.703333, 0 } }, { "Canon", "PowerShot G11", Underwater, 0, { 2.225624, 1, 1.577098, 0 } }, { "Canon", "PowerShot G12", Daylight, 0, { 1.785877, 1, 2.042141, 0 } }, { "Canon", "PowerShot G12", Cloudy, 0, { 1.804323, 1, 2.021615, 0 } }, { "Canon", "PowerShot G12", Tungsten, 0, { 1.310127, 1, 3.170886, 0 } }, { "Canon", "PowerShot G12", Fluorescent, 0, { 1.771139, 1, 2.064262, 0 } }, { "Canon", "PowerShot G12", FluorescentHigh, 0, { 1.806122, 1, 2.032880, 0 } }, { "Canon", "PowerShot G12", Flash, 0, { 2.102157, 1, 1.706016, 0 } }, { "Canon", "PowerShot G12", Underwater, 0, { 1.807650, 1, 2.112568, 0 } }, /* Canon PowerShot S3 IS does not support native WB presets. These are made as custom WB presets. */ { "Canon", "PowerShot S3 IS", Daylight, 0, { 1.627271, 1, 1.823491, 0 } }, { "Canon", "PowerShot S3 IS", Cloudy, 0, { 1.794382, 1, 1.618412, 0 } }, { "Canon", "PowerShot S3 IS", Tungsten, 0, { 1, 1.192243, 4.546950, 0 } }, { "Canon", "PowerShot S3 IS", Flash, 0, { 1.884691, 1, 1.553869, 0 } }, { "Canon", "PowerShot S30", Daylight, 0, { 1.741088, 1, 1.318949, 0 } }, { "Canon", "PowerShot S30", Cloudy, 0, { 1.766635, 1, 1.298969, 0 } }, { "Canon", "PowerShot S30", Tungsten, 0, { 1.498106, 1, 1.576705, 0 } }, { "Canon", "PowerShot S30", Fluorescent, 0, { 1.660075, 1, 1.394539, 0 } }, { "Canon", "PowerShot S30", FluorescentHigh, 0, { 1.753515, 1, 1.306467, 0 } }, { "Canon", "PowerShot S30", Flash, 0, { 2.141705, 1, 1.097926, 0 } }, { "Canon", "PowerShot S45", Daylight, 0, { 2.325175, 1, 1.080420, 0 } }, { "Canon", "PowerShot S45", Cloudy, 0, { 2.145047, 1, 1.173349, 0 } }, { "Canon", "PowerShot S45", Tungsten, 0, { 1.213018, 1, 2.087574, 0 } }, { "Canon", "PowerShot S45", Fluorescent, 0, { 1.888183, 1, 1.822109, 0 } }, { "Canon", "PowerShot S45", FluorescentHigh, 0, { 2.964422, 1, 1.354511, 0 } }, { "Canon", "PowerShot S45", Flash, 0, { 2.534884, 1, 1.065663, 0 } }, { "Canon", "PowerShot S50", Daylight, 0, { 1.772506, 1, 1.536496, 0 } }, { "Canon", "PowerShot S50", Cloudy, 0, { 1.831311, 1, 1.484223, 0 } }, { "Canon", "PowerShot S50", Tungsten, 0, { 1.185542, 1, 2.480723, 0 } }, { "Canon", "PowerShot S50", Fluorescent, 0, { 1.706410, 1, 2.160256, 0 } }, { "Canon", "PowerShot S50", FluorescentHigh, 0, { 1.562500, 1, 1.817402, 0 } }, { "Canon", "PowerShot S50", Flash, 0, { 1.776156, 1, 1.531630, 0 } }, { "Canon", "PowerShot S60", Daylight, 0, { 1.759169, 1, 1.590465, 0 } }, { "Canon", "PowerShot S60", Cloudy, 0, { 1.903659, 1, 1.467073, 0 } }, { "Canon", "PowerShot S60", Tungsten, 0, { 1.138554, 1, 2.704819, 0 } }, { "Canon", "PowerShot S60", Fluorescent, 0, { 1.720721, 1, 2.185328, 0 } }, { "Canon", "PowerShot S60", FluorescentHigh, 0, { 2.877095, 1, 2.216480, 0 } }, { "Canon", "PowerShot S60", Flash, 0, { 2.182540, 1, 1.236773, 0 } }, { "Canon", "PowerShot S60", Underwater, 0, { 2.725369, 1, 1.240148, 0 } }, { "Canon", "PowerShot S70", Daylight, 0, { 1.943834, 1, 1.456654, 0 } }, { "Canon", "PowerShot S70", Cloudy, 0, { 2.049939, 1, 1.382460, 0 } }, { "Canon", "PowerShot S70", Tungsten, 0, { 1.169492, 1, 2.654964, 0 } }, { "Canon", "PowerShot S70", Fluorescent, 0, { 1.993456, 1, 2.056283, 0 } }, { "Canon", "PowerShot S70", FluorescentHigh, 0, { 2.645914, 1, 1.565499, 0 } }, { "Canon", "PowerShot S70", Flash, 0, { 2.389189, 1, 1.147297, 0 } }, { "Canon", "PowerShot S70", Underwater, 0, { 3.110565, 1, 1.162162, 0 } }, { "Canon", "PowerShot S90", Daylight, 0, { 1.955056, 1, 1.797753, 0 } }, { "Canon", "PowerShot S90", Cloudy, 0, { 1.945067, 1, 1.795964, 0 } }, { "Canon", "PowerShot S90", Tungsten, 0, { 2.000000, 1, 1.828018, 0 } }, { "Canon", "PowerShot S90", Fluorescent, 0, { 2.019473, 1, 1.841924, 0 } }, { "Canon", "PowerShot S90", FluorescentHigh, 0, { 2.009143, 1, 1.840000, 0 } }, { "Canon", "PowerShot S90", Flash, 0, { 2.045784, 1, 1.671692, 0 } }, { "Canon", "PowerShot S90", Underwater, 0, { 2.022297, 1, 1.830546, 0 } }, { "Canon", "PowerShot S95", Daylight, 0, { 1.6182, 1, 2.1430, 0 } }, { "Canon", "PowerShot S95", Cloudy, 0, { 1.6920, 1, 2.0179, 0 } }, { "Canon", "PowerShot S95", Tungsten, 0, { 1.2314, 1, 3.1015, 0 } }, { "Canon", "PowerShot S95", Fluorescent, 0, { 1.6593, 1, 2.0940, 0 } }, { "Canon", "PowerShot S95", FluorescentHigh, 0, { 1.7272, 1, 1.9811, 0 } }, { "Canon", "PowerShot S95", Flash, 0, { 1.9955, 1, 1.7768, 0 } }, { "Canon", "PowerShot S95", Underwater, 0, { 1.7607, 1, 2.1224, 0 } }, { "Canon", "PowerShot S100", Daylight, 0, { 2.077707, 1, 2.551592, 0 } }, { "Canon", "PowerShot S100", Cloudy, 0, { 2.276402, 1, 2.393742, 0 } }, { "Canon", "PowerShot S100", Tungsten, 0, { 1.267936, 1, 4.224012, 0 } }, { "Canon", "PowerShot S100", Fluorescent, 0, { 1.815115, 1, 3.093117, 0 } }, { "Canon", "PowerShot S100", FluorescentHigh, 0, { 2.398148, 1, 2.374339, 0 } }, { "Canon", "PowerShot S100", Flash, 0, { 2.615783, 1, 2.001294, 0 } }, { "Canon", "PowerShot S100", Underwater, 0, { 2.248391, 1, 2.338481, 0 } }, { "Canon", "PowerShot Pro1", Daylight, 0, { 1.829238, 1, 1.571253, 0 } }, { "Canon", "PowerShot Pro1", Cloudy, 0, { 1.194139, 1, 2.755800, 0 } }, { "Canon", "PowerShot Pro1", Tungsten, 0, { 1.701416, 1, 2.218790, 0 } }, { "Canon", "PowerShot Pro1", Fluorescent, 0, { 2.014066, 1, 1.776215, 0 } }, { "Canon", "PowerShot Pro1", FluorescentHigh, 0, { 2.248663, 1, 1.227273, 0 } }, { "Canon", "PowerShot Pro1", Flash, 0, { 2.130081, 1, 1.422764, 0 } }, { "Canon", "PowerShot SX1 IS", Daylight, 0, { 1.574586, 1, 2.114917, 0 } }, { "Canon", "PowerShot SX1 IS", Cloudy, 0, { 1.682628, 1, 2.015590, 0 } }, { "Canon", "PowerShot SX1 IS", Tungsten, 0, { 1.088836, 1, 3.056423, 0 } }, { "Canon", "PowerShot SX1 IS", Fluorescent, 0, { 1.398259, 1, 2.414581, 0 } }, { "Canon", "PowerShot SX1 IS", FluorescentHigh, 0, { 1.687500, 1, 2.025670, 0 } }, { "Canon", "PowerShot SX1 IS", Flash, 0, { 1.909699, 1, 1.795987, 0 } }, { "Canon", "EOS D60", Daylight, 0, { 2.472594, 1, 1.225335, 0 } }, { "Canon", "EOS D60", Cloudy, 0, { 2.723926, 1, 1.137423, 0 } }, { "Canon", "EOS D60", Tungsten, 0, { 1.543054, 1, 1.907003, 0 } }, { "Canon", "EOS D60", Fluorescent, 0, { 1.957346, 1, 1.662322, 0 } }, { "Canon", "EOS D60", Flash, 0, { 2.829840, 1, 1.108508, 0 } }, { "Canon", "EOS 5D", Flash, 0, { 2.211914, 1, 1.260742, 0 } }, /*6550K*/ { "Canon", "EOS 5D", Fluorescent, 0, { 1.726054, 1, 2.088123, 0 } }, /*3850K*/ { "Canon", "EOS 5D", Tungsten, 0, { 1.373285, 1, 2.301006, 0 } }, /*3250K*/ { "Canon", "EOS 5D", Cloudy, 0, { 2.151367, 1, 1.321289, 0 } }, /*6100K*/ { "Canon", "EOS 5D", Shade, 0, { 2.300781, 1, 1.208008, 0 } }, /*7200K*/ { "Canon", "EOS 5D", Daylight, 0, { 1.988281, 1, 1.457031, 0 } }, /*5250K*/ /* Canon EOS 5D Mark II firmware 2.0.7 */ { "Canon", "EOS 5D Mark II", Daylight, -9, { 1.954102, 1, 1.984375, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -8, { 1.976563, 1, 1.954102, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -7, { 2.003906, 1, 1.917969, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -6, { 2.032227, 1, 1.885742, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -5, { 2.060547, 1, 1.851563, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -4, { 2.093750, 1, 1.818359, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -3, { 2.120117, 1, 1.787109, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -2, { 2.151367, 1, 1.756836, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, -1, { 2.183594, 1, 1.723633, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 0, { 2.216797, 1, 1.689453, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 1, { 2.250977, 1, 1.659180, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 2, { 2.291016, 1, 1.627930, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 3, { 2.327148, 1, 1.594727, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 4, { 2.359375, 1, 1.563477, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 5, { 2.392578, 1, 1.528320, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 6, { 2.420898, 1, 1.503906, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 7, { 2.450195, 1, 1.477539, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 8, { 2.485352, 1, 1.450195, 0 } }, { "Canon", "EOS 5D Mark II", Daylight, 9, { 2.528320, 1, 1.421875, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -9, { 2.250977, 1, 1.662109, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -8, { 2.286133, 1, 1.630859, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -7, { 2.322266, 1, 1.599609, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -6, { 2.354492, 1, 1.565430, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -5, { 2.386719, 1, 1.533203, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -4, { 2.415039, 1, 1.505859, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -3, { 2.450195, 1, 1.479492, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -2, { 2.485352, 1, 1.452148, 0 } }, { "Canon", "EOS 5D Mark II", Shade, -1, { 2.522461, 1, 1.425781, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 0, { 2.559570, 1, 1.397461, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 1, { 2.585938, 1, 1.383789, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 2, { 2.605469, 1, 1.371094, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 3, { 2.632813, 1, 1.354492, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 4, { 2.660156, 1, 1.338867, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 5, { 2.687500, 1, 1.316406, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 6, { 2.723633, 1, 1.290039, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 7, { 2.767578, 1, 1.260742, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 8, { 2.821289, 1, 1.232422, 0 } }, { "Canon", "EOS 5D Mark II", Shade, 9, { 2.868164, 1, 1.203125, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -9, { 2.098633, 1, 1.812500, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -8, { 2.124023, 1, 1.784180, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -7, { 2.156250, 1, 1.750000, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -6, { 2.188477, 1, 1.717773, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -5, { 2.221680, 1, 1.686523, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -4, { 2.255859, 1, 1.657227, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -3, { 2.295898, 1, 1.623047, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -2, { 2.333008, 1, 1.592773, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, -1, { 2.359375, 1, 1.558594, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 0, { 2.392578, 1, 1.523438, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 1, { 2.426758, 1, 1.499023, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 2, { 2.456055, 1, 1.473633, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 3, { 2.491211, 1, 1.446289, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 4, { 2.528320, 1, 1.419922, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 5, { 2.566406, 1, 1.395508, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 6, { 2.585938, 1, 1.379883, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 7, { 2.612305, 1, 1.367188, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 8, { 2.639648, 1, 1.350586, 0 } }, { "Canon", "EOS 5D Mark II", Cloudy, 9, { 2.660156, 1, 1.334961, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -9, { 1.383128, 1, 3.084359, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -8, { 1.399119, 1, 3.026432, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -7, { 1.419098, 1, 2.984085, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -6, { 1.439219, 1, 2.935226, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -5, { 1.460374, 1, 2.886910, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -4, { 1.484361, 1, 2.840036, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -3, { 1.503139, 1, 2.787444, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -2, { 1.527027, 1, 2.740541, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, -1, { 1.550226, 1, 2.695023, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 0, { 1.573115, 1, 2.646685, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 1, { 1.594891, 1, 2.596715, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 2, { 1.615949, 1, 2.549038, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 3, { 1.638710, 1, 2.494009, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 4, { 1.661111, 1, 2.443519, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 5, { 1.689013, 1, 2.391993, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 6, { 1.712816, 1, 2.349860, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 7, { 1.736595, 1, 2.305738, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 8, { 1.760417, 1, 2.266098, 0 } }, { "Canon", "EOS 5D Mark II", Tungsten, 9, { 1.787417, 1, 2.222116, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -9, { 1.669691, 1, 2.900181, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -8, { 1.695533, 1, 2.849590, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -7, { 1.717033, 1, 2.806777, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -6, { 1.740809, 1, 2.761029, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -5, { 1.765683, 1, 2.716790, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -4, { 1.794063, 1, 2.667904, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -3, { 1.820298, 1, 2.619181, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -2, { 1.841760, 1, 2.567416, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, -1, { 1.870056, 1, 2.516949, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 0, { 1.895833, 1, 2.461174, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 1, { 1.928503, 1, 2.416587, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 2, { 1.956772, 1, 2.365994, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 3, { 1.978744, 1, 2.320773, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 4, { 2.009718, 1, 2.281827, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 5, { 2.036133, 1, 2.240234, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 6, { 2.068359, 1, 2.197266, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 7, { 2.098633, 1, 2.160156, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 8, { 2.128906, 1, 2.120117, 0 } }, { "Canon", "EOS 5D Mark II", Fluorescent, 9, { 2.156250, 1, 2.081055, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -9, { 2.111328, 1, 1.792969, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -8, { 2.142578, 1, 1.762695, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -7, { 2.173828, 1, 1.732422, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -6, { 2.207031, 1, 1.698242, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -5, { 2.240234, 1, 1.667969, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -4, { 2.280273, 1, 1.635742, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -3, { 2.316406, 1, 1.602539, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -2, { 2.348633, 1, 1.570313, 0 } }, { "Canon", "EOS 5D Mark II", Flash, -1, { 2.381836, 1, 1.537109, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 0, { 2.409180, 1, 1.507813, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 1, { 2.444336, 1, 1.484375, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 2, { 2.479492, 1, 1.457031, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 3, { 2.515625, 1, 1.429688, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 4, { 2.553711, 1, 1.402344, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 5, { 2.579102, 1, 1.385742, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 6, { 2.598633, 1, 1.373047, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 7, { 2.625977, 1, 1.356445, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 8, { 2.653320, 1, 1.339844, 0 } }, { "Canon", "EOS 5D Mark II", Flash, 9, { 2.680664, 1, 1.321289, 0 } }, /* Canon EOS 5D Mark III Firmware Version 1.1.3 */ /* Fine-tuning is the camera's Amber-Blue bracketing. */ { "Canon", "EOS 5D Mark III", Daylight, -9, { 1.784180, 1, 1.907227, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -8, { 1.805664, 1, 1.878906, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -7, { 1.828125, 1, 1.848633, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -6, { 1.855469, 1, 1.818359, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -5, { 1.882813, 1, 1.790039, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -4, { 1.910156, 1, 1.759766, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -3, { 1.931641, 1, 1.726563, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -2, { 1.958008, 1, 1.695313, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, -1, { 1.980469, 1, 1.665039, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 0, { 2.007813, 1, 1.630859, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 1, { 2.036133, 1, 1.607422, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 2, { 2.064453, 1, 1.583008, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 3, { 2.093750, 1, 1.556641, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 4, { 2.124023, 1, 1.533203, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 5, { 2.160156, 1, 1.507813, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 6, { 2.183594, 1, 1.486328, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 7, { 2.211914, 1, 1.462891, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 8, { 2.240234, 1, 1.440430, 0 } }, { "Canon", "EOS 5D Mark III", Daylight, 9, { 2.275391, 1, 1.416016, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -9, { 2.032227, 1, 1.610352, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -8, { 2.060547, 1, 1.584961, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -7, { 2.089844, 1, 1.558594, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -6, { 2.120117, 1, 1.535156, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -5, { 2.156250, 1, 1.510742, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -4, { 2.183594, 1, 1.488281, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -3, { 2.211914, 1, 1.464844, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -2, { 2.240234, 1, 1.442383, 0 } }, { "Canon", "EOS 5D Mark III", Shade, -1, { 2.270508, 1, 1.417969, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 0, { 2.306641, 1, 1.393555, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 1, { 2.337891, 1, 1.374023, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 2, { 2.370117, 1, 1.352539, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 3, { 2.403320, 1, 1.332031, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 4, { 2.444336, 1, 1.307617, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 5, { 2.479492, 1, 1.286133, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 6, { 2.509766, 1, 1.267578, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 7, { 2.541016, 1, 1.246094, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 8, { 2.579102, 1, 1.224609, 0 } }, { "Canon", "EOS 5D Mark III", Shade, 9, { 2.612305, 1, 1.203125, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -9, { 1.914063, 1, 1.753906, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -8, { 1.935547, 1, 1.723633, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -7, { 1.958008, 1, 1.692383, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -6, { 1.984375, 1, 1.659180, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -5, { 2.011719, 1, 1.627930, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -4, { 2.040039, 1, 1.605469, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -3, { 2.068359, 1, 1.578125, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -2, { 2.098633, 1, 1.553711, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, -1, { 2.128906, 1, 1.528320, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 0, { 2.160156, 1, 1.503906, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 1, { 2.188477, 1, 1.484375, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 2, { 2.216797, 1, 1.460938, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 3, { 2.246094, 1, 1.436523, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 4, { 2.280273, 1, 1.412109, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 5, { 2.316406, 1, 1.389648, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 6, { 2.342773, 1, 1.369141, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 7, { 2.375977, 1, 1.347656, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 8, { 2.415039, 1, 1.326172, 0 } }, { "Canon", "EOS 5D Mark III", Cloudy, 9, { 2.456055, 1, 1.302734, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -9, { 1.283203, 1, 2.782227, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -8, { 1.297852, 1, 2.752930, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -7, { 1.314453, 1, 2.723633, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -6, { 1.333008, 1, 2.694336, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -5, { 1.350586, 1, 2.666992, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -4, { 1.371094, 1, 2.632813, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -3, { 1.387695, 1, 2.579102, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -2, { 1.404297, 1, 2.528320, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, -1, { 1.423828, 1, 2.479492, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 0, { 1.442383, 1, 2.426758, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 1, { 1.460938, 1, 2.392578, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 2, { 1.479492, 1, 2.354492, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 3, { 1.501953, 1, 2.316406, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 4, { 1.523438, 1, 2.280273, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 5, { 1.546875, 1, 2.240234, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 6, { 1.568359, 1, 2.207031, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 7, { 1.587891, 1, 2.169922, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 8, { 1.610352, 1, 2.133789, 0 } }, { "Canon", "EOS 5D Mark III", Tungsten, 9, { 1.632813, 1, 2.098633, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -9, { 1.551758, 1, 2.702148, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -8, { 1.573242, 1, 2.673828, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -7, { 1.592773, 1, 2.645508, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -6, { 1.615234, 1, 2.592773, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -5, { 1.638672, 1, 2.541016, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -4, { 1.662109, 1, 2.491211, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -3, { 1.684570, 1, 2.438477, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -2, { 1.709961, 1, 2.398438, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, -1, { 1.732422, 1, 2.365234, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 0, { 1.759766, 1, 2.322266, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 1, { 1.787109, 1, 2.286133, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 2, { 1.809570, 1, 2.250977, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 3, { 1.832031, 1, 2.211914, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 4, { 1.858398, 1, 2.178711, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 5, { 1.885742, 1, 2.142578, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 6, { 1.914063, 1, 2.107422, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 7, { 1.935547, 1, 2.068359, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 8, { 1.961914, 1, 2.040039, 0 } }, { "Canon", "EOS 5D Mark III", WhiteFluorescent, 9, { 1.988281, 1, 2.007813, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -9, { 1.976563, 1, 1.717773, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -8, { 2.003906, 1, 1.686523, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -7, { 2.032227, 1, 1.654297, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -6, { 2.060547, 1, 1.623047, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -5, { 2.089844, 1, 1.599609, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -4, { 2.120117, 1, 1.573242, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -3, { 2.151367, 1, 1.548828, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -2, { 2.178711, 1, 1.523438, 0 } }, { "Canon", "EOS 5D Mark III", Flash, -1, { 2.207031, 1, 1.501953, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 0, { 2.235352, 1, 1.477539, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 1, { 2.270508, 1, 1.457031, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 2, { 2.306641, 1, 1.432617, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 3, { 2.337891, 1, 1.408203, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 4, { 2.370117, 1, 1.385742, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 5, { 2.403320, 1, 1.365234, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 6, { 2.444336, 1, 1.343750, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 7, { 2.479492, 1, 1.321289, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 8, { 2.509766, 1, 1.297852, 0 } }, { "Canon", "EOS 5D Mark III", Flash, 9, { 2.541016, 1, 1.278320, 0 } }, /* Canon EOS 6D Firmware Version 1.0.9 */ { "Canon", "EOS 6D", Daylight, 0, { 1.976562, 1, 1.635742, 0 } }, { "Canon", "EOS 6D", Shade, 0, { 2.265625, 1, 1.371094, 0 } }, { "Canon", "EOS 6D", Cloudy, 0, { 2.128906, 1, 1.497070, 0 } }, { "Canon", "EOS 6D", Tungsten, 0, { 1.412109, 1, 2.473633, 0 } }, { "Canon", "EOS 6D", Fluorescent, 0, { 1.726562, 1, 2.337891, 0 } }, { "Canon", "EOS 6D", Flash, 0, { 2.192383, 1, 1.458984, 0 } }, /* Canon EOS 7D Firmware Version 2.0.3 */ /* Fine-tuning for the 7D are the camera's Amber-Blue bracketing. */ { "Canon", "EOS 7D", Daylight, -9, { 1.8281, 1, 1.8281, 0 } }, { "Canon", "EOS 7D", Daylight, -8, { 1.8516, 1, 1.7969, 0 } }, { "Canon", "EOS 7D", Daylight, -7, { 1.8750, 1, 1.7656, 0 } }, { "Canon", "EOS 7D", Daylight, -6, { 1.9033, 1, 1.7354, 0 } }, { "Canon", "EOS 7D", Daylight, -5, { 1.9316, 1, 1.7041, 0 } }, { "Canon", "EOS 7D", Daylight, -4, { 1.9619, 1, 1.6729, 0 } }, { "Canon", "EOS 7D", Daylight, -3, { 1.9844, 1, 1.6406, 0 } }, { "Canon", "EOS 7D", Daylight, -2, { 2.0117, 1, 1.6123, 0 } }, { "Canon", "EOS 7D", Daylight, -1, { 2.0361, 1, 1.5801, 0 } }, { "Canon", "EOS 7D", Daylight, 0, { 2.0645, 1, 1.5488, 0 } }, { "Canon", "EOS 7D", Daylight, 1, { 2.0938, 1, 1.5234, 0 } }, { "Canon", "EOS 7D", Daylight, 2, { 2.1289, 1, 1.4990, 0 } }, { "Canon", "EOS 7D", Daylight, 3, { 2.1602, 1, 1.4736, 0 } }, { "Canon", "EOS 7D", Daylight, 4, { 2.1924, 1, 1.4482, 0 } }, { "Canon", "EOS 7D", Daylight, 5, { 2.2266, 1, 1.4219, 0 } }, { "Canon", "EOS 7D", Daylight, 6, { 2.2559, 1, 1.4004, 0 } }, { "Canon", "EOS 7D", Daylight, 7, { 2.2910, 1, 1.3779, 0 } }, { "Canon", "EOS 7D", Daylight, 8, { 2.3271, 1, 1.3545, 0 } }, { "Canon", "EOS 7D", Daylight, 9, { 2.3652, 1, 1.3301, 0 } }, { "Canon", "EOS 7D", Shade, -9, { 2.0938, 1, 1.5283, 0 } }, { "Canon", "EOS 7D", Shade, -8, { 2.1240, 1, 1.5020, 0 } }, { "Canon", "EOS 7D", Shade, -7, { 2.1562, 1, 1.4756, 0 } }, { "Canon", "EOS 7D", Shade, -6, { 2.1885, 1, 1.4502, 0 } }, { "Canon", "EOS 7D", Shade, -5, { 2.2217, 1, 1.4258, 0 } }, { "Canon", "EOS 7D", Shade, -4, { 2.2510, 1, 1.4023, 0 } }, { "Canon", "EOS 7D", Shade, -3, { 2.2861, 1, 1.3799, 0 } }, { "Canon", "EOS 7D", Shade, -2, { 2.3223, 1, 1.3564, 0 } }, { "Canon", "EOS 7D", Shade, -1, { 2.3594, 1, 1.3330, 0 } }, { "Canon", "EOS 7D", Shade, 0, { 2.4033, 1, 1.3076, 0 } }, { "Canon", "EOS 7D", Shade, 1, { 2.4326, 1, 1.2930, 0 } }, { "Canon", "EOS 7D", Shade, 2, { 2.4678, 1, 1.2754, 0 } }, { "Canon", "EOS 7D", Shade, 3, { 2.4980, 1, 1.2568, 0 } }, { "Canon", "EOS 7D", Shade, 4, { 2.5342, 1, 1.2383, 0 } }, { "Canon", "EOS 7D", Shade, 5, { 2.5664, 1, 1.2188, 0 } }, { "Canon", "EOS 7D", Shade, 6, { 2.5928, 1, 1.2021, 0 } }, { "Canon", "EOS 7D", Shade, 7, { 2.6260, 1, 1.1826, 0 } }, { "Canon", "EOS 7D", Shade, 8, { 2.6602, 1, 1.1641, 0 } }, { "Canon", "EOS 7D", Shade, 9, { 2.6943, 1, 1.1416, 0 } }, { "Canon", "EOS 7D", Cloudy, -9, { 1.9658, 1, 1.6680, 0 } }, { "Canon", "EOS 7D", Cloudy, -8, { 1.9883, 1, 1.6387, 0 } }, { "Canon", "EOS 7D", Cloudy, -7, { 2.0117, 1, 1.6074, 0 } }, { "Canon", "EOS 7D", Cloudy, -6, { 2.0400, 1, 1.5781, 0 } }, { "Canon", "EOS 7D", Cloudy, -5, { 2.0684, 1, 1.5469, 0 } }, { "Canon", "EOS 7D", Cloudy, -4, { 2.0986, 1, 1.5215, 0 } }, { "Canon", "EOS 7D", Cloudy, -3, { 2.1338, 1, 1.4951, 0 } }, { "Canon", "EOS 7D", Cloudy, -2, { 2.1650, 1, 1.4687, 0 } }, { "Canon", "EOS 7D", Cloudy, -1, { 2.1924, 1, 1.4443, 0 } }, { "Canon", "EOS 7D", Cloudy, 0, { 2.2266, 1, 1.4180, 0 } }, { "Canon", "EOS 7D", Cloudy, 1, { 2.2607, 1, 1.3975, 0 } }, { "Canon", "EOS 7D", Cloudy, 2, { 2.2959, 1, 1.3740, 0 } }, { "Canon", "EOS 7D", Cloudy, 3, { 2.3330, 1, 1.3506, 0 } }, { "Canon", "EOS 7D", Cloudy, 4, { 2.3701, 1, 1.3281, 0 } }, { "Canon", "EOS 7D", Cloudy, 5, { 2.4150, 1, 1.3047, 0 } }, { "Canon", "EOS 7D", Cloudy, 6, { 2.4443, 1, 1.2881, 0 } }, { "Canon", "EOS 7D", Cloudy, 7, { 2.4736, 1, 1.2705, 0 } }, { "Canon", "EOS 7D", Cloudy, 8, { 2.5098, 1, 1.2520, 0 } }, { "Canon", "EOS 7D", Cloudy, 9, { 2.5469, 1, 1.2334, 0 } }, { "Canon", "EOS 7D", Tungsten, -9, { 1.2686, 1, 2.7158, 0 } }, { "Canon", "EOS 7D", Tungsten, -8, { 1.2861, 1, 2.6807, 0 } }, { "Canon", "EOS 7D", Tungsten, -7, { 1.3047, 1, 2.6533, 0 } }, { "Canon", "EOS 7D", Tungsten, -6, { 1.3232, 1, 2.6191, 0 } }, { "Canon", "EOS 7D", Tungsten, -5, { 1.3418, 1, 2.5859, 0 } }, { "Canon", "EOS 7D", Tungsten, -4, { 1.3633, 1, 2.5469, 0 } }, { "Canon", "EOS 7D", Tungsten, -3, { 1.3838, 1, 2.4980, 0 } }, { "Canon", "EOS 7D", Tungsten, -2, { 1.4023, 1, 2.4502, 0 } }, { "Canon", "EOS 7D", Tungsten, -1, { 1.4258, 1, 2.3984, 0 } }, { "Canon", "EOS 7D", Tungsten, 0, { 1.4482, 1, 2.3486, 0 } }, { "Canon", "EOS 7D", Tungsten, 1, { 1.4687, 1, 2.3115, 0 } }, { "Canon", "EOS 7D", Tungsten, 2, { 1.4902, 1, 2.2754, 0 } }, { "Canon", "EOS 7D", Tungsten, 3, { 1.5127, 1, 2.2354, 0 } }, { "Canon", "EOS 7D", Tungsten, 4, { 1.5352, 1, 2.1973, 0 } }, { "Canon", "EOS 7D", Tungsten, 5, { 1.5605, 1, 2.1602, 0 } }, { "Canon", "EOS 7D", Tungsten, 6, { 1.5850, 1, 2.1240, 0 } }, { "Canon", "EOS 7D", Tungsten, 7, { 1.6104, 1, 2.0859, 0 } }, { "Canon", "EOS 7D", Tungsten, 8, { 1.6328, 1, 2.0518, 0 } }, { "Canon", "EOS 7D", Tungsten, 9, { 1.6592, 1, 2.0156, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -9, { 1.5850, 1, 2.5859, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -8, { 1.6104, 1, 2.5469, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -7, { 1.6328, 1, 2.4980, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -6, { 1.6621, 1, 2.4502, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -5, { 1.6895, 1, 2.3984, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -4, { 1.7119, 1, 2.3486, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -3, { 1.7383, 1, 2.3115, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -2, { 1.7656, 1, 2.2754, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, -1, { 1.7969, 1, 2.2354, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 0, { 1.8252, 1, 2.1924, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 1, { 1.8486, 1, 2.1562, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 2, { 1.8750, 1, 2.1201, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 3, { 1.9033, 1, 2.0859, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 4, { 1.9316, 1, 2.0518, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 5, { 1.9619, 1, 2.0156, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 6, { 1.9844, 1, 1.9805, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 7, { 2.0078, 1, 1.9502, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 8, { 2.0361, 1, 1.9209, 0 } }, { "Canon", "EOS 7D", WhiteFluorescent, 9, { 2.0645, 1, 1.8896, 0 } }, { "Canon", "EOS 7D", Flash, -9, { 2.0039, 1, 1.6572, 0 } }, { "Canon", "EOS 7D", Flash, -8, { 2.0322, 1, 1.6279, 0 } }, { "Canon", "EOS 7D", Flash, -7, { 2.0605, 1, 1.5977, 0 } }, { "Canon", "EOS 7D", Flash, -6, { 2.0898, 1, 1.5654, 0 } }, { "Canon", "EOS 7D", Flash, -5, { 2.1201, 1, 1.5371, 0 } }, { "Canon", "EOS 7D", Flash, -4, { 2.1562, 1, 1.5127, 0 } }, { "Canon", "EOS 7D", Flash, -3, { 2.1836, 1, 1.4863, 0 } }, { "Canon", "EOS 7D", Flash, -2, { 2.2168, 1, 1.4609, 0 } }, { "Canon", "EOS 7D", Flash, -1, { 2.2510, 1, 1.4365, 0 } }, { "Canon", "EOS 7D", Flash, 0, { 2.2803, 1, 1.4102, 0 } }, { "Canon", "EOS 7D", Flash, 1, { 2.3164, 1, 1.3896, 0 } }, { "Canon", "EOS 7D", Flash, 2, { 2.3594, 1, 1.3672, 0 } }, { "Canon", "EOS 7D", Flash, 3, { 2.4033, 1, 1.3438, 0 } }, { "Canon", "EOS 7D", Flash, 4, { 2.4326, 1, 1.3184, 0 } }, { "Canon", "EOS 7D", Flash, 5, { 2.4619, 1, 1.2998, 0 } }, { "Canon", "EOS 7D", Flash, 6, { 2.4980, 1, 1.2812, 0 } }, { "Canon", "EOS 7D", Flash, 7, { 2.5342, 1, 1.2646, 0 } }, { "Canon", "EOS 7D", Flash, 8, { 2.5664, 1, 1.2461, 0 } }, { "Canon", "EOS 7D", Flash, 9, { 2.5928, 1, 1.2266, 0 } }, { "Canon", "EOS 10D", Daylight, 0, { 2.159856, 1, 1.218750, 0 } }, { "Canon", "EOS 10D", Shade, 0, { 2.533654, 1, 1.036058, 0 } }, { "Canon", "EOS 10D", Cloudy, 0, { 2.348558, 1, 1.116587, 0 } }, { "Canon", "EOS 10D", Tungsten, 0, { 1.431544, 1, 1.851040, 0 } }, { "Canon", "EOS 10D", Fluorescent, 0, { 1.891509, 1, 1.647406, 0 } }, { "Canon", "EOS 10D", Flash, 0, { 2.385817, 1, 1.115385, 0 } }, { "Canon", "EOS 20D", Daylight, 0, { 1.954680, 1, 1.478818, 0 } }, { "Canon", "EOS 20D", Shade, 0, { 2.248276, 1, 1.227586, 0 } }, { "Canon", "EOS 20D", Cloudy, 0, { 2.115271, 1, 1.336946, 0 } }, { "Canon", "EOS 20D", Tungsten, 0, { 1.368087, 1, 2.417044, 0 } }, { "Canon", "EOS 20D", Fluorescent, 0, { 1.752709, 1, 2.060098, 0 } }, { "Canon", "EOS 20D", Flash, 0, { 2.145813, 1, 1.293596, 0 } }, { "Canon", "EOS 30D", Daylight, 0, { 2.032227, 1, 1.537109, 0 } }, { "Canon", "EOS 30D", Shade, 0, { 2.354492, 1, 1.264648, 0 } }, { "Canon", "EOS 30D", Cloudy, 0, { 2.197266, 1, 1.389648, 0 } }, { "Canon", "EOS 30D", Tungsten, 0, { 1.411084, 1, 2.447477, 0 } }, { "Canon", "EOS 30D", Fluorescent, 0, { 1.761601, 1, 2.303913, 0 } }, { "Canon", "EOS 30D", Flash, 0, { 2.226562, 1, 1.347656, 0 } }, { "Canon", "EOS 40D", Daylight, 0, { 2.197266, 1, 1.438477, 0 } }, { "Canon", "EOS 40D", Shade, 0, { 2.546875, 1, 1.185547, 0 } }, { "Canon", "EOS 40D", Cloudy, 0, { 2.370117, 1, 1.290039, 0 } }, { "Canon", "EOS 40D", Tungsten, 0, { 1.510563, 1, 2.235915, 0 } }, { "Canon", "EOS 40D", Fluorescent, 0, { 2.019084, 1, 2.129771, 0 } }, { "Canon", "EOS 40D", Flash, 0, { 2.409180, 1, 1.260742, 0 } }, // Canon EOS 50D (firmware 1.0.3) { "Canon", "EOS 50D", Daylight, -9, { 1.865234, 1, 1.599609, 0 } }, { "Canon", "EOS 50D", Daylight, -8, { 1.889648, 1, 1.580078, 0 } }, { "Canon", "EOS 50D", Daylight, -7, { 1.910156, 1, 1.556641, 0 } }, { "Canon", "EOS 50D", Daylight, -6, { 1.935547, 1, 1.535156, 0 } }, { "Canon", "EOS 50D", Daylight, -5, { 1.965820, 1, 1.512695, 0 } }, { "Canon", "EOS 50D", Daylight, -4, { 1.992188, 1, 1.490234, 0 } }, { "Canon", "EOS 50D", Daylight, -3, { 2.015625, 1, 1.468750, 0 } }, { "Canon", "EOS 50D", Daylight, -2, { 2.043945, 1, 1.448242, 0 } }, { "Canon", "EOS 50D", Daylight, -1, { 2.068359, 1, 1.425781, 0 } }, { "Canon", "EOS 50D", Daylight, 0, { 2.098633, 1, 1.402344, 0 } }, { "Canon", "EOS 50D", Daylight, 1, { 2.124023, 1, 1.381836, 0 } }, { "Canon", "EOS 50D", Daylight, 2, { 2.156250, 1, 1.358398, 0 } }, { "Canon", "EOS 50D", Daylight, 3, { 2.183594, 1, 1.334961, 0 } }, { "Canon", "EOS 50D", Daylight, 4, { 2.211914, 1, 1.312500, 0 } }, { "Canon", "EOS 50D", Daylight, 5, { 2.240234, 1, 1.288086, 0 } }, { "Canon", "EOS 50D", Daylight, 6, { 2.265625, 1, 1.270508, 0 } }, { "Canon", "EOS 50D", Daylight, 7, { 2.291016, 1, 1.251953, 0 } }, { "Canon", "EOS 50D", Daylight, 8, { 2.322266, 1, 1.233398, 0 } }, { "Canon", "EOS 50D", Daylight, 9, { 2.359375, 1, 1.214844, 0 } }, { "Canon", "EOS 50D", Shade, -9, { 2.124023, 1, 1.383789, 0 } }, { "Canon", "EOS 50D", Shade, -8, { 2.151367, 1, 1.361328, 0 } }, { "Canon", "EOS 50D", Shade, -7, { 2.178711, 1, 1.338867, 0 } }, { "Canon", "EOS 50D", Shade, -6, { 2.207031, 1, 1.314453, 0 } }, { "Canon", "EOS 50D", Shade, -5, { 2.235352, 1, 1.291016, 0 } }, { "Canon", "EOS 50D", Shade, -4, { 2.260742, 1, 1.272461, 0 } }, { "Canon", "EOS 50D", Shade, -3, { 2.291016, 1, 1.254883, 0 } }, { "Canon", "EOS 50D", Shade, -2, { 2.322266, 1, 1.236328, 0 } }, { "Canon", "EOS 50D", Shade, -1, { 2.354492, 1, 1.215820, 0 } }, { "Canon", "EOS 50D", Shade, 0, { 2.386719, 1, 1.196289, 0 } }, { "Canon", "EOS 50D", Shade, 1, { 2.403320, 1, 1.186523, 0 } }, { "Canon", "EOS 50D", Shade, 2, { 2.420898, 1, 1.175781, 0 } }, { "Canon", "EOS 50D", Shade, 3, { 2.438477, 1, 1.165039, 0 } }, { "Canon", "EOS 50D", Shade, 4, { 2.461914, 1, 1.152344, 0 } }, { "Canon", "EOS 50D", Shade, 5, { 2.485352, 1, 1.136719, 0 } }, { "Canon", "EOS 50D", Shade, 6, { 2.522461, 1, 1.115234, 0 } }, { "Canon", "EOS 50D", Shade, 7, { 2.559570, 1, 1.094727, 0 } }, { "Canon", "EOS 50D", Shade, 8, { 2.598633, 1, 1.072266, 0 } }, { "Canon", "EOS 50D", Shade, 9, { 2.645508, 1, 1.051758, 0 } }, { "Canon", "EOS 50D", Cloudy, -9, { 1.996094, 1, 1.486328, 0 } }, { "Canon", "EOS 50D", Cloudy, -8, { 2.019531, 1, 1.466797, 0 } }, { "Canon", "EOS 50D", Cloudy, -7, { 2.043945, 1, 1.444336, 0 } }, { "Canon", "EOS 50D", Cloudy, -6, { 2.073242, 1, 1.421875, 0 } }, { "Canon", "EOS 50D", Cloudy, -5, { 2.102539, 1, 1.400391, 0 } }, { "Canon", "EOS 50D", Cloudy, -4, { 2.128906, 1, 1.377930, 0 } }, { "Canon", "EOS 50D", Cloudy, -3, { 2.156250, 1, 1.356445, 0 } }, { "Canon", "EOS 50D", Cloudy, -2, { 2.188477, 1, 1.333008, 0 } }, { "Canon", "EOS 50D", Cloudy, -1, { 2.211914, 1, 1.309570, 0 } }, { "Canon", "EOS 50D", Cloudy, 0, { 2.240234, 1, 1.285156, 0 } }, { "Canon", "EOS 50D", Cloudy, 1, { 2.270508, 1, 1.268555, 0 } }, { "Canon", "EOS 50D", Cloudy, 2, { 2.295898, 1, 1.250000, 0 } }, { "Canon", "EOS 50D", Cloudy, 3, { 2.327148, 1, 1.232422, 0 } }, { "Canon", "EOS 50D", Cloudy, 4, { 2.359375, 1, 1.211914, 0 } }, { "Canon", "EOS 50D", Cloudy, 5, { 2.392578, 1, 1.195313, 0 } }, { "Canon", "EOS 50D", Cloudy, 6, { 2.409180, 1, 1.183594, 0 } }, { "Canon", "EOS 50D", Cloudy, 7, { 2.426758, 1, 1.172852, 0 } }, { "Canon", "EOS 50D", Cloudy, 8, { 2.444336, 1, 1.161133, 0 } }, { "Canon", "EOS 50D", Cloudy, 9, { 2.467773, 1, 1.149414, 0 } }, { "Canon", "EOS 50D", Tungsten, -9, { 1.379189, 1, 2.206349, 0 } }, { "Canon", "EOS 50D", Tungsten, -8, { 1.394690, 1, 2.176991, 0 } }, { "Canon", "EOS 50D", Tungsten, -7, { 1.412600, 1, 2.155280, 0 } }, { "Canon", "EOS 50D", Tungsten, -6, { 1.428317, 1, 2.127337, 0 } }, { "Canon", "EOS 50D", Tungsten, -5, { 1.448122, 1, 2.101073, 0 } }, { "Canon", "EOS 50D", Tungsten, -4, { 1.467684, 1, 2.078097, 0 } }, { "Canon", "EOS 50D", Tungsten, -3, { 1.484220, 1, 2.054103, 0 } }, { "Canon", "EOS 50D", Tungsten, -2, { 1.501357, 1, 2.027149, 0 } }, { "Canon", "EOS 50D", Tungsten, -1, { 1.521818, 1, 2.003636, 0 } }, { "Canon", "EOS 50D", Tungsten, 0, { 1.542466, 1, 1.976256, 0 } }, { "Canon", "EOS 50D", Tungsten, 1, { 1.561468, 1, 1.949541, 0 } }, { "Canon", "EOS 50D", Tungsten, 2, { 1.581567, 1, 1.923502, 0 } }, { "Canon", "EOS 50D", Tungsten, 3, { 1.602778, 1, 1.894444, 0 } }, { "Canon", "EOS 50D", Tungsten, 4, { 1.624767, 1, 1.867784, 0 } }, { "Canon", "EOS 50D", Tungsten, 5, { 1.647940, 1, 1.841760, 0 } }, { "Canon", "EOS 50D", Tungsten, 6, { 1.669492, 1, 1.815443, 0 } }, { "Canon", "EOS 50D", Tungsten, 7, { 1.686553, 1, 1.789773, 0 } }, { "Canon", "EOS 50D", Tungsten, 8, { 1.708294, 1, 1.766444, 0 } }, { "Canon", "EOS 50D", Tungsten, 9, { 1.729626, 1, 1.738255, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -9, { 1.683196, 1, 2.110193, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -8, { 1.704797, 1, 2.084871, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -7, { 1.727778, 1, 2.061111, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -6, { 1.747907, 1, 2.036279, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -5, { 1.767507, 1, 2.013072, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -4, { 1.791745, 1, 1.988743, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -3, { 1.812264, 1, 1.963208, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -2, { 1.834758, 1, 1.932574, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, -1, { 1.863419, 1, 1.907354, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 0, { 1.882805, 1, 1.876081, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 1, { 1.908124, 1, 1.852998, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 2, { 1.931774, 1, 1.822612, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 3, { 1.958008, 1, 1.799805, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 4, { 1.988281, 1, 1.771484, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 5, { 2.011719, 1, 1.747070, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 6, { 2.036133, 1, 1.720703, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 7, { 2.064453, 1, 1.698242, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 8, { 2.093750, 1, 1.678711, 0 } }, { "Canon", "EOS 50D", WhiteFluorescent, 9, { 2.120117, 1, 1.654297, 0 } }, { "Canon", "EOS 50D", Flash, -9, { 2.027344, 1, 1.466797, 0 } }, { "Canon", "EOS 50D", Flash, -8, { 2.056641, 1, 1.446289, 0 } }, { "Canon", "EOS 50D", Flash, -7, { 2.085938, 1, 1.423828, 0 } }, { "Canon", "EOS 50D", Flash, -6, { 2.111328, 1, 1.402344, 0 } }, { "Canon", "EOS 50D", Flash, -5, { 2.137695, 1, 1.379883, 0 } }, { "Canon", "EOS 50D", Flash, -4, { 2.169922, 1, 1.358398, 0 } }, { "Canon", "EOS 50D", Flash, -3, { 2.192383, 1, 1.334961, 0 } }, { "Canon", "EOS 50D", Flash, -2, { 2.221680, 1, 1.311523, 0 } }, { "Canon", "EOS 50D", Flash, -1, { 2.250977, 1, 1.288086, 0 } }, { "Canon", "EOS 50D", Flash, 0, { 2.275391, 1, 1.268555, 0 } }, { "Canon", "EOS 50D", Flash, 1, { 2.306641, 1, 1.251953, 0 } }, { "Canon", "EOS 50D", Flash, 2, { 2.337891, 1, 1.233398, 0 } }, { "Canon", "EOS 50D", Flash, 3, { 2.375977, 1, 1.212891, 0 } }, { "Canon", "EOS 50D", Flash, 4, { 2.398438, 1, 1.195313, 0 } }, { "Canon", "EOS 50D", Flash, 5, { 2.415039, 1, 1.185547, 0 } }, { "Canon", "EOS 50D", Flash, 6, { 2.432617, 1, 1.173828, 0 } }, { "Canon", "EOS 50D", Flash, 7, { 2.450195, 1, 1.162109, 0 } }, { "Canon", "EOS 50D", Flash, 8, { 2.473633, 1, 1.150391, 0 } }, { "Canon", "EOS 50D", Flash, 9, { 2.503906, 1, 1.132813, 0 } }, { "Canon", "EOS 50D", "5000K", 0, { 2.056641, 1, 1.438477, 0 } }, { "Canon", "EOS 50D", "6500K", 0, { 2.311523, 1, 1.239258, 0 } }, { "Canon", "EOS 60D", Daylight, 0, { 2.1514, 1, 1.5420, 0 } }, { "Canon", "EOS 60D", Shade, 0, { 2.5039, 1, 1.3057, 0 } }, { "Canon", "EOS 60D", Cloudy, 0, { 2.3223, 1, 1.4160, 0 } }, { "Canon", "EOS 60D", Tungsten, 0, { 1.5215, 1, 2.3486, 0 } }, { "Canon", "EOS 60D", Fluorescent, 0, { 1.9248, 1, 2.1836, 0 } }, { "Canon", "EOS 60D", Flash, 0, { 2.1514, 1, 1.5420, 0 } }, { "Canon", "EOS 300D DIGITAL", Daylight, 0, { 2.072115, 1, 1.217548, 0 } }, { "Canon", "EOS 300D DIGITAL", Shade, 0, { 2.455529, 1, 1.026442, 0 } }, { "Canon", "EOS 300D DIGITAL", Cloudy, 0, { 2.254808, 1, 1.108173, 0 } }, { "Canon", "EOS 300D DIGITAL", Tungsten, 0, { 1.349057, 1, 1.896226, 0 } }, { "Canon", "EOS 300D DIGITAL", Fluorescent, 0, { 1.794664, 1, 1.711137, 0 } }, { "Canon", "EOS 300D DIGITAL", Flash, 0, { 2.326923, 1, 1.098558, 0 } }, { "Canon", "EOS DIGITAL REBEL", Daylight, 0, { 2.072115, 1, 1.217548, 0 } }, { "Canon", "EOS DIGITAL REBEL", Shade, 0, { 2.455529, 1, 1.026442, 0 } }, { "Canon", "EOS DIGITAL REBEL", Cloudy, 0, { 2.254808, 1, 1.108173, 0 } }, { "Canon", "EOS DIGITAL REBEL", Tungsten, 0, { 1.349057, 1, 1.896226, 0 } }, { "Canon", "EOS DIGITAL REBEL", Fluorescent, 0, { 1.794664, 1, 1.711137, 0 } }, { "Canon", "EOS DIGITAL REBEL", Flash, 0, { 2.326923, 1, 1.098558, 0 } }, { "Canon", "EOS Kiss Digital", Daylight, 0, { 2.072115, 1, 1.217548, 0 } }, { "Canon", "EOS Kiss Digital", Shade, 0, { 2.455529, 1, 1.026442, 0 } }, { "Canon", "EOS Kiss Digital", Cloudy, 0, { 2.254808, 1, 1.108173, 0 } }, { "Canon", "EOS Kiss Digital", Tungsten, 0, { 1.349057, 1, 1.896226, 0 } }, { "Canon", "EOS Kiss Digital", Fluorescent, 0, { 1.794664, 1, 1.711137, 0 } }, { "Canon", "EOS Kiss Digital", Flash, 0, { 2.326923, 1, 1.098558, 0 } }, // Firmware version 1.0.3. Fine tuning is from A9 to B9 on amber-blue. { "Canon", "EOS 350D DIGITAL", Daylight, -9, { 2.7436, 1, 1.2240, 0 } }, { "Canon", "EOS 350D DIGITAL", Daylight, 0, { 2.3605, 1, 1.4450, 0 } }, { "Canon", "EOS 350D DIGITAL", Daylight, 9, { 2.0138, 1, 1.7151, 0 } }, { "Canon", "EOS 350D DIGITAL", Shade, -9, { 3.1857, 1, 1.0285, 0 } }, { "Canon", "EOS 350D DIGITAL", Shade, 0, { 2.7888, 1, 1.2024, 0 } }, { "Canon", "EOS 350D DIGITAL", Shade, 9, { 2.3988, 1, 1.4214, 0 } }, { "Canon", "EOS 350D DIGITAL", Cloudy, -9, { 2.9912, 1, 1.1169, 0 } }, { "Canon", "EOS 350D DIGITAL", Cloudy, 0, { 2.5727, 1, 1.3075, 0 } }, { "Canon", "EOS 350D DIGITAL", Cloudy, 9, { 2.2033, 1, 1.5589, 0 } }, { "Canon", "EOS 350D DIGITAL", Tungsten, -9, { 1.5589, 1, 1.9205, 0 } }, { "Canon", "EOS 350D DIGITAL", Tungsten, 0, { 1.5343, 1, 2.2880, 0 } }, { "Canon", "EOS 350D DIGITAL", Tungsten, 9, { 1.3145, 1, 2.6873, 0 } }, { "Canon", "EOS 350D DIGITAL", Fluorescent, -9, { 2.3124, 1, 1.6356, 0 } }, { "Canon", "EOS 350D DIGITAL", Fluorescent, 0, { 1.9754, 1, 1.9303, 0 } }, { "Canon", "EOS 350D DIGITAL", Fluorescent, 9, { 1.6657, 1, 2.3034, 0 } }, { "Canon", "EOS 350D DIGITAL", Flash, -9, { 3.0904, 1, 1.0756, 0 } }, { "Canon", "EOS 350D DIGITAL", Flash, 0, { 2.6729, 1, 1.2613, 0 } }, { "Canon", "EOS 350D DIGITAL", Flash, 9, { 2.3026, 1, 1.4961, 0 } }, // Firmware version 1.0.3. Fine tuning is from A9 to B9 on amber-blue. { "Canon", "EOS DIGITAL REBEL XT", Daylight, -9, { 2.7436, 1, 1.2240, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Daylight, 0, { 2.3605, 1, 1.4450, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Daylight, 9, { 2.0138, 1, 1.7151, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Shade, -9, { 3.1857, 1, 1.0285, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Shade, 0, { 2.7888, 1, 1.2024, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Shade, 9, { 2.3988, 1, 1.4214, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Cloudy, -9, { 2.9912, 1, 1.1169, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Cloudy, 0, { 2.5727, 1, 1.3075, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Cloudy, 9, { 2.2033, 1, 1.5589, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Tungsten, -9, { 1.5589, 1, 1.9205, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Tungsten, 0, { 1.5343, 1, 2.2880, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Tungsten, 9, { 1.3145, 1, 2.6873, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Fluorescent, -9, { 2.3124, 1, 1.6356, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Fluorescent, 0, { 1.9754, 1, 1.9303, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Fluorescent, 9, { 1.6657, 1, 2.3034, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Flash, -9, { 3.0904, 1, 1.0756, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Flash, 0, { 2.6729, 1, 1.2613, 0 } }, { "Canon", "EOS DIGITAL REBEL XT", Flash, 9, { 2.3026, 1, 1.4961, 0 } }, // Firmware version 1.0.3. Fine tuning is from A9 to B9 on amber-blue. { "Canon", "EOS Kiss Digital N", Daylight, -9, { 2.7436, 1, 1.2240, 0 } }, { "Canon", "EOS Kiss Digital N", Daylight, 0, { 2.3605, 1, 1.4450, 0 } }, { "Canon", "EOS Kiss Digital N", Daylight, 9, { 2.0138, 1, 1.7151, 0 } }, { "Canon", "EOS Kiss Digital N", Shade, -9, { 3.1857, 1, 1.0285, 0 } }, { "Canon", "EOS Kiss Digital N", Shade, 0, { 2.7888, 1, 1.2024, 0 } }, { "Canon", "EOS Kiss Digital N", Shade, 9, { 2.3988, 1, 1.4214, 0 } }, { "Canon", "EOS Kiss Digital N", Cloudy, -9, { 2.9912, 1, 1.1169, 0 } }, { "Canon", "EOS Kiss Digital N", Cloudy, 0, { 2.5727, 1, 1.3075, 0 } }, { "Canon", "EOS Kiss Digital N", Cloudy, 9, { 2.2033, 1, 1.5589, 0 } }, { "Canon", "EOS Kiss Digital N", Tungsten, -9, { 1.5589, 1, 1.9205, 0 } }, { "Canon", "EOS Kiss Digital N", Tungsten, 0, { 1.5343, 1, 2.2880, 0 } }, { "Canon", "EOS Kiss Digital N", Tungsten, 9, { 1.3145, 1, 2.6873, 0 } }, { "Canon", "EOS Kiss Digital N", Fluorescent, -9, { 2.3124, 1, 1.6356, 0 } }, { "Canon", "EOS Kiss Digital N", Fluorescent, 0, { 1.9754, 1, 1.9303, 0 } }, { "Canon", "EOS Kiss Digital N", Fluorescent, 9, { 1.6657, 1, 2.3034, 0 } }, { "Canon", "EOS Kiss Digital N", Flash, -9, { 3.0904, 1, 1.0756, 0 } }, { "Canon", "EOS Kiss Digital N", Flash, 0, { 2.6729, 1, 1.2613, 0 } }, { "Canon", "EOS Kiss Digital N", Flash, 9, { 2.3026, 1, 1.4961, 0 } }, // Canon EOS 400D (firmware 1.1.1) white balance presets, 5 mireds per step { "Canon", "EOS 400D DIGITAL", Daylight, -9, { 1.972656, 1, 1.735352, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -8, { 2.003906, 1, 1.707031, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -7, { 2.036133, 1, 1.675781, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -6, { 2.073242, 1, 1.646484, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -5, { 2.111328, 1, 1.615234, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -4, { 2.151367, 1, 1.583008, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -3, { 2.183594, 1, 1.553711, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -2, { 2.221680, 1, 1.523438, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, -1, { 2.260742, 1, 1.495117, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 0, { 2.300781, 1, 1.462891, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 1, { 2.337891, 1, 1.436523, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 2, { 2.375977, 1, 1.408203, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 3, { 2.415039, 1, 1.379883, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 4, { 2.461914, 1, 1.354492, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 5, { 2.503906, 1, 1.328125, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 6, { 2.541016, 1, 1.304688, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 7, { 2.579102, 1, 1.280273, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 8, { 2.619141, 1, 1.256836, 0 } }, { "Canon", "EOS 400D DIGITAL", Daylight, 9, { 2.666992, 1, 1.232422, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -9, { 2.333008, 1, 1.440430, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -8, { 2.370117, 1, 1.410156, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -7, { 2.409180, 1, 1.383789, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -6, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -5, { 2.503906, 1, 1.330078, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -4, { 2.541016, 1, 1.305664, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -3, { 2.579102, 1, 1.283203, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -2, { 2.619141, 1, 1.259766, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, -1, { 2.660156, 1, 1.235352, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 0, { 2.708984, 1, 1.208984, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 1, { 2.745117, 1, 1.189453, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 2, { 2.782227, 1, 1.168945, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 3, { 2.829102, 1, 1.148438, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 4, { 2.875977, 1, 1.125000, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 5, { 2.916992, 1, 1.105469, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 6, { 2.951172, 1, 1.087891, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 7, { 2.994141, 1, 1.069336, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 8, { 3.039063, 1, 1.048828, 0 } }, { "Canon", "EOS 400D DIGITAL", Shade, 9, { 3.083984, 1, 1.030273, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -9, { 2.156250, 1, 1.580078, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -8, { 2.188477, 1, 1.551758, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -7, { 2.226563, 1, 1.521484, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -6, { 2.265625, 1, 1.490234, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -5, { 2.306641, 1, 1.460938, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -4, { 2.342773, 1, 1.432617, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -3, { 2.381836, 1, 1.404297, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -2, { 2.420898, 1, 1.375977, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, -1, { 2.467773, 1, 1.350586, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 0, { 2.509766, 1, 1.323242, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 1, { 2.546875, 1, 1.300781, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 2, { 2.585938, 1, 1.278320, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 3, { 2.625977, 1, 1.252930, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 4, { 2.673828, 1, 1.229492, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 5, { 2.723633, 1, 1.205078, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 6, { 2.752930, 1, 1.185547, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 7, { 2.790039, 1, 1.165039, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 8, { 2.836914, 1, 1.142578, 0 } }, { "Canon", "EOS 400D DIGITAL", Cloudy, 9, { 2.884766, 1, 1.120117, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -9, { 1.320106, 1, 2.752205, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -8, { 1.340708, 1, 2.703540, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -7, { 1.359680, 1, 2.655417, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -6, { 1.381802, 1, 2.606601, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -5, { 1.406446, 1, 2.555953, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -4, { 1.428957, 1, 2.504496, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -3, { 1.452575, 1, 2.459801, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -2, { 1.475931, 1, 2.419619, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, -1, { 1.501825, 1, 2.377737, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 0, { 1.526123, 1, 2.330889, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 1, { 1.548893, 1, 2.286900, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 2, { 1.572753, 1, 2.238184, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 3, { 1.599254, 1, 2.198509, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 4, { 1.624765, 1, 2.149156, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 5, { 1.653774, 1, 2.102830, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 6, { 1.681861, 1, 2.064577, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 7, { 1.709369, 1, 2.022945, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 8, { 1.737247, 1, 1.982676, 0 } }, { "Canon", "EOS 400D DIGITAL", Tungsten, 9, { 1.770349, 1, 1.946705, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -9, { 1.638122, 1, 2.485267, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -8, { 1.667900, 1, 2.445883, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -7, { 1.695814, 1, 2.404651, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -6, { 1.723364, 1, 2.361682, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -5, { 1.752820, 1, 2.317669, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -4, { 1.788079, 1, 2.263009, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -3, { 1.815414, 1, 2.221694, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -2, { 1.844828, 1, 2.175287, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, -1, { 1.880309, 1, 2.127413, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 0, { 1.910506, 1, 2.080739, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 1, { 1.950195, 1, 2.043945, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 2, { 1.984375, 1, 2.007813, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 3, { 2.015625, 1, 1.968750, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 4, { 2.047852, 1, 1.928711, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 5, { 2.085938, 1, 1.892578, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 6, { 2.124023, 1, 1.858398, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 7, { 2.165039, 1, 1.825195, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 8, { 2.197266, 1, 1.790039, 0 } }, { "Canon", "EOS 400D DIGITAL", WhiteFluorescent, 9, { 2.235352, 1, 1.756836, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -9, { 2.398438, 1, 1.432617, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -8, { 2.438477, 1, 1.402344, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -7, { 2.485352, 1, 1.375977, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -6, { 2.528320, 1, 1.349609, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -5, { 2.566406, 1, 1.323242, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -4, { 2.605469, 1, 1.299805, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -3, { 2.645508, 1, 1.276367, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -2, { 2.694336, 1, 1.251953, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, -1, { 2.738281, 1, 1.227539, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 0, { 2.767578, 1, 1.203125, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 1, { 2.813477, 1, 1.183594, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 2, { 2.860352, 1, 1.164063, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 3, { 2.900391, 1, 1.141602, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 4, { 2.942383, 1, 1.118164, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 5, { 2.976563, 1, 1.101563, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 6, { 3.020508, 1, 1.082031, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 7, { 3.065430, 1, 1.063477, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 8, { 3.122070, 1, 1.041992, 0 } }, { "Canon", "EOS 400D DIGITAL", Flash, 9, { 3.169922, 1, 1.024414, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -9, { 1.972656, 1, 1.735352, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -8, { 2.003906, 1, 1.707031, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -7, { 2.036133, 1, 1.675781, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -6, { 2.073242, 1, 1.646484, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -5, { 2.111328, 1, 1.615234, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -4, { 2.151367, 1, 1.583008, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -3, { 2.183594, 1, 1.553711, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -2, { 2.221680, 1, 1.523438, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, -1, { 2.260742, 1, 1.495117, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 0, { 2.300781, 1, 1.462891, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 1, { 2.337891, 1, 1.436523, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 2, { 2.375977, 1, 1.408203, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 3, { 2.415039, 1, 1.379883, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 4, { 2.461914, 1, 1.354492, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 5, { 2.503906, 1, 1.328125, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 6, { 2.541016, 1, 1.304688, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 7, { 2.579102, 1, 1.280273, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 8, { 2.619141, 1, 1.256836, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Daylight, 9, { 2.666992, 1, 1.232422, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -9, { 2.333008, 1, 1.440430, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -8, { 2.370117, 1, 1.410156, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -7, { 2.409180, 1, 1.383789, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -6, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -5, { 2.503906, 1, 1.330078, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -4, { 2.541016, 1, 1.305664, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -3, { 2.579102, 1, 1.283203, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -2, { 2.619141, 1, 1.259766, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, -1, { 2.660156, 1, 1.235352, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 0, { 2.708984, 1, 1.208984, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 1, { 2.745117, 1, 1.189453, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 2, { 2.782227, 1, 1.168945, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 3, { 2.829102, 1, 1.148438, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 4, { 2.875977, 1, 1.125000, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 5, { 2.916992, 1, 1.105469, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 6, { 2.951172, 1, 1.087891, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 7, { 2.994141, 1, 1.069336, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 8, { 3.039063, 1, 1.048828, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Shade, 9, { 3.083984, 1, 1.030273, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -9, { 2.156250, 1, 1.580078, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -8, { 2.188477, 1, 1.551758, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -7, { 2.226563, 1, 1.521484, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -6, { 2.265625, 1, 1.490234, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -5, { 2.306641, 1, 1.460938, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -4, { 2.342773, 1, 1.432617, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -3, { 2.381836, 1, 1.404297, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -2, { 2.420898, 1, 1.375977, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, -1, { 2.467773, 1, 1.350586, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 0, { 2.509766, 1, 1.323242, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 1, { 2.546875, 1, 1.300781, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 2, { 2.585938, 1, 1.278320, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 3, { 2.625977, 1, 1.252930, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 4, { 2.673828, 1, 1.229492, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 5, { 2.723633, 1, 1.205078, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 6, { 2.752930, 1, 1.185547, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 7, { 2.790039, 1, 1.165039, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 8, { 2.836914, 1, 1.142578, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Cloudy, 9, { 2.884766, 1, 1.120117, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -9, { 1.320106, 1, 2.752205, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -8, { 1.340708, 1, 2.703540, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -7, { 1.359680, 1, 2.655417, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -6, { 1.381802, 1, 2.606601, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -5, { 1.406446, 1, 2.555953, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -4, { 1.428957, 1, 2.504496, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -3, { 1.452575, 1, 2.459801, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -2, { 1.475931, 1, 2.419619, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, -1, { 1.501825, 1, 2.377737, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 0, { 1.526123, 1, 2.330889, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 1, { 1.548893, 1, 2.286900, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 2, { 1.572753, 1, 2.238184, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 3, { 1.599254, 1, 2.198509, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 4, { 1.624765, 1, 2.149156, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 5, { 1.653774, 1, 2.102830, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 6, { 1.681861, 1, 2.064577, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 7, { 1.709369, 1, 2.022945, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 8, { 1.737247, 1, 1.982676, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Tungsten, 9, { 1.770349, 1, 1.946705, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -9, { 1.638122, 1, 2.485267, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -8, { 1.667900, 1, 2.445883, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -7, { 1.695814, 1, 2.404651, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -6, { 1.723364, 1, 2.361682, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -5, { 1.752820, 1, 2.317669, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -4, { 1.788079, 1, 2.263009, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -3, { 1.815414, 1, 2.221694, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -2, { 1.844828, 1, 2.175287, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, -1, { 1.880309, 1, 2.127413, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 0, { 1.910506, 1, 2.080739, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 1, { 1.950195, 1, 2.043945, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 2, { 1.984375, 1, 2.007813, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 3, { 2.015625, 1, 1.968750, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 4, { 2.047852, 1, 1.928711, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 5, { 2.085938, 1, 1.892578, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 6, { 2.124023, 1, 1.858398, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 7, { 2.165039, 1, 1.825195, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 8, { 2.197266, 1, 1.790039, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", WhiteFluorescent, 9, { 2.235352, 1, 1.756836, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -9, { 2.398438, 1, 1.432617, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -8, { 2.438477, 1, 1.402344, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -7, { 2.485352, 1, 1.375977, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -6, { 2.528320, 1, 1.349609, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -5, { 2.566406, 1, 1.323242, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -4, { 2.605469, 1, 1.299805, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -3, { 2.645508, 1, 1.276367, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -2, { 2.694336, 1, 1.251953, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, -1, { 2.738281, 1, 1.227539, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 0, { 2.767578, 1, 1.203125, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 1, { 2.813477, 1, 1.183594, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 2, { 2.860352, 1, 1.164063, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 3, { 2.900391, 1, 1.141602, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 4, { 2.942383, 1, 1.118164, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 5, { 2.976563, 1, 1.101563, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 6, { 3.020508, 1, 1.082031, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 7, { 3.065430, 1, 1.063477, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 8, { 3.122070, 1, 1.041992, 0 } }, { "Canon", "EOS DIGITAL REBEL XTi", Flash, 9, { 3.169922, 1, 1.024414, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -9, { 1.972656, 1, 1.735352, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -8, { 2.003906, 1, 1.707031, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -7, { 2.036133, 1, 1.675781, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -6, { 2.073242, 1, 1.646484, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -5, { 2.111328, 1, 1.615234, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -4, { 2.151367, 1, 1.583008, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -3, { 2.183594, 1, 1.553711, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -2, { 2.221680, 1, 1.523438, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, -1, { 2.260742, 1, 1.495117, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 0, { 2.300781, 1, 1.462891, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 1, { 2.337891, 1, 1.436523, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 2, { 2.375977, 1, 1.408203, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 3, { 2.415039, 1, 1.379883, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 4, { 2.461914, 1, 1.354492, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 5, { 2.503906, 1, 1.328125, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 6, { 2.541016, 1, 1.304688, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 7, { 2.579102, 1, 1.280273, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 8, { 2.619141, 1, 1.256836, 0 } }, { "Canon", "EOS Kiss Digital X", Daylight, 9, { 2.666992, 1, 1.232422, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -9, { 2.333008, 1, 1.440430, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -8, { 2.370117, 1, 1.410156, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -7, { 2.409180, 1, 1.383789, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -6, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -5, { 2.503906, 1, 1.330078, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -4, { 2.541016, 1, 1.305664, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -3, { 2.579102, 1, 1.283203, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -2, { 2.619141, 1, 1.259766, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, -1, { 2.660156, 1, 1.235352, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 0, { 2.708984, 1, 1.208984, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 1, { 2.745117, 1, 1.189453, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 2, { 2.782227, 1, 1.168945, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 3, { 2.829102, 1, 1.148438, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 4, { 2.875977, 1, 1.125000, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 5, { 2.916992, 1, 1.105469, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 6, { 2.951172, 1, 1.087891, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 7, { 2.994141, 1, 1.069336, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 8, { 3.039063, 1, 1.048828, 0 } }, { "Canon", "EOS Kiss Digital X", Shade, 9, { 3.083984, 1, 1.030273, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -9, { 2.156250, 1, 1.580078, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -8, { 2.188477, 1, 1.551758, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -7, { 2.226563, 1, 1.521484, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -6, { 2.265625, 1, 1.490234, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -5, { 2.306641, 1, 1.460938, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -4, { 2.342773, 1, 1.432617, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -3, { 2.381836, 1, 1.404297, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -2, { 2.420898, 1, 1.375977, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, -1, { 2.467773, 1, 1.350586, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 0, { 2.509766, 1, 1.323242, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 1, { 2.546875, 1, 1.300781, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 2, { 2.585938, 1, 1.278320, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 3, { 2.625977, 1, 1.252930, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 4, { 2.673828, 1, 1.229492, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 5, { 2.723633, 1, 1.205078, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 6, { 2.752930, 1, 1.185547, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 7, { 2.790039, 1, 1.165039, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 8, { 2.836914, 1, 1.142578, 0 } }, { "Canon", "EOS Kiss Digital X", Cloudy, 9, { 2.884766, 1, 1.120117, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -9, { 1.320106, 1, 2.752205, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -8, { 1.340708, 1, 2.703540, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -7, { 1.359680, 1, 2.655417, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -6, { 1.381802, 1, 2.606601, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -5, { 1.406446, 1, 2.555953, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -4, { 1.428957, 1, 2.504496, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -3, { 1.452575, 1, 2.459801, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -2, { 1.475931, 1, 2.419619, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, -1, { 1.501825, 1, 2.377737, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 0, { 1.526123, 1, 2.330889, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 1, { 1.548893, 1, 2.286900, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 2, { 1.572753, 1, 2.238184, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 3, { 1.599254, 1, 2.198509, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 4, { 1.624765, 1, 2.149156, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 5, { 1.653774, 1, 2.102830, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 6, { 1.681861, 1, 2.064577, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 7, { 1.709369, 1, 2.022945, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 8, { 1.737247, 1, 1.982676, 0 } }, { "Canon", "EOS Kiss Digital X", Tungsten, 9, { 1.770349, 1, 1.946705, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -9, { 1.638122, 1, 2.485267, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -8, { 1.667900, 1, 2.445883, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -7, { 1.695814, 1, 2.404651, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -6, { 1.723364, 1, 2.361682, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -5, { 1.752820, 1, 2.317669, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -4, { 1.788079, 1, 2.263009, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -3, { 1.815414, 1, 2.221694, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -2, { 1.844828, 1, 2.175287, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, -1, { 1.880309, 1, 2.127413, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 0, { 1.910506, 1, 2.080739, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 1, { 1.950195, 1, 2.043945, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 2, { 1.984375, 1, 2.007813, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 3, { 2.015625, 1, 1.968750, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 4, { 2.047852, 1, 1.928711, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 5, { 2.085938, 1, 1.892578, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 6, { 2.124023, 1, 1.858398, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 7, { 2.165039, 1, 1.825195, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 8, { 2.197266, 1, 1.790039, 0 } }, { "Canon", "EOS Kiss Digital X", WhiteFluorescent, 9, { 2.235352, 1, 1.756836, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -9, { 2.398438, 1, 1.432617, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -8, { 2.438477, 1, 1.402344, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -7, { 2.485352, 1, 1.375977, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -6, { 2.528320, 1, 1.349609, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -5, { 2.566406, 1, 1.323242, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -4, { 2.605469, 1, 1.299805, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -3, { 2.645508, 1, 1.276367, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -2, { 2.694336, 1, 1.251953, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, -1, { 2.738281, 1, 1.227539, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 0, { 2.767578, 1, 1.203125, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 1, { 2.813477, 1, 1.183594, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 2, { 2.860352, 1, 1.164063, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 3, { 2.900391, 1, 1.141602, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 4, { 2.942383, 1, 1.118164, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 5, { 2.976563, 1, 1.101563, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 6, { 3.020508, 1, 1.082031, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 7, { 3.065430, 1, 1.063477, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 8, { 3.122070, 1, 1.041992, 0 } }, { "Canon", "EOS Kiss Digital X", Flash, 9, { 3.169922, 1, 1.024414, 0 } }, { "Canon", "EOS 450D", Daylight, 0, { 2.216797, 1, 1.471680, 0 } }, { "Canon", "EOS 450D", Shade, 0, { 2.566406, 1, 1.241211, 0 } }, { "Canon", "EOS 450D", Cloudy, 0, { 2.386719, 1, 1.345703, 0 } }, { "Canon", "EOS 450D", Tungsten, 0, { 1.559034, 1, 2.170841, 0 } }, { "Canon", "EOS 450D", Fluorescent, 0, { 1.922857, 1, 1.996190, 0 } }, { "Canon", "EOS 450D", Flash, 0, { 2.456055, 1, 1.318359, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Daylight, 0, { 2.216797, 1, 1.471680, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Shade, 0, { 2.566406, 1, 1.241211, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Cloudy, 0, { 2.386719, 1, 1.345703, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Tungsten, 0, { 1.559034, 1, 2.170841, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Fluorescent, 0, { 1.922857, 1, 1.996190, 0 } }, { "Canon", "EOS DIGITAL REBEL XSi", Flash, 0, { 2.456055, 1, 1.318359, 0 } }, { "Canon", "EOS Kiss Digital X2", Daylight, 0, { 2.216797, 1, 1.471680, 0 } }, { "Canon", "EOS Kiss Digital X2", Shade, 0, { 2.566406, 1, 1.241211, 0 } }, { "Canon", "EOS Kiss Digital X2", Cloudy, 0, { 2.386719, 1, 1.345703, 0 } }, { "Canon", "EOS Kiss Digital X2", Tungsten, 0, { 1.559034, 1, 2.170841, 0 } }, { "Canon", "EOS Kiss Digital X2", Fluorescent, 0, { 1.922857, 1, 1.996190, 0 } }, { "Canon", "EOS Kiss Digital X2", Flash, 0, { 2.456055, 1, 1.318359, 0 } }, { "Canon", "EOS 500D", Daylight, 0, { 2.023438, 1, 1.417969, 0 } }, { "Canon", "EOS 500D", Shade, 0, { 2.291016, 1, 1.217773, 0 } }, { "Canon", "EOS 500D", Cloudy, 0, { 2.156250, 1, 1.304687, 0 } }, { "Canon", "EOS 500D", Tungsten, 0, { 1.481347, 1, 1.976342, 0 } }, { "Canon", "EOS 500D", Fluorescent, 0, { 1.799224, 1, 1.824442, 0 } }, { "Canon", "EOS 500D", Flash, 0, { 2.207031, 1, 1.295898, 0 } }, { "Canon", "EOS REBEL T1i", Daylight, 0, { 2.023438, 1, 1.417969, 0 } }, { "Canon", "EOS REBEL T1i", Shade, 0, { 2.291016, 1, 1.217773, 0 } }, { "Canon", "EOS REBEL T1i", Cloudy, 0, { 2.156250, 1, 1.304687, 0 } }, { "Canon", "EOS REBEL T1i", Tungsten, 0, { 1.481347, 1, 1.976342, 0 } }, { "Canon", "EOS REBEL T1i", Fluorescent, 0, { 1.799224, 1, 1.824442, 0 } }, { "Canon", "EOS REBEL T1i", Flash, 0, { 2.207031, 1, 1.295898, 0 } }, { "Canon", "EOS Kiss Digital X3", Daylight, 0, { 2.023438, 1, 1.417969, 0 } }, { "Canon", "EOS Kiss Digital X3", Shade, 0, { 2.291016, 1, 1.217773, 0 } }, { "Canon", "EOS Kiss Digital X3", Cloudy, 0, { 2.156250, 1, 1.304687, 0 } }, { "Canon", "EOS Kiss Digital X3", Tungsten, 0, { 1.481347, 1, 1.976342, 0 } }, { "Canon", "EOS Kiss Digital X3", Fluorescent, 0, { 1.799224, 1, 1.824442, 0 } }, { "Canon", "EOS Kiss Digital X3", Flash, 0, { 2.207031, 1, 1.295898, 0 } }, /* Canon EOS 550D Firmware Version 1.0.9 */ /* Fine-tuning is the camera's Amber-Blue bracketing. */ { "Canon", "EOS 550D", Daylight, -9, { 1.903320, 1, 1.784180, 0 } }, { "Canon", "EOS 550D", Daylight, -8, { 1.924805, 1, 1.756836, 0 } }, { "Canon", "EOS 550D", Daylight, -7, { 1.950195, 1, 1.729492, 0 } }, { "Canon", "EOS 550D", Daylight, -6, { 1.980469, 1, 1.701172, 0 } }, { "Canon", "EOS 550D", Daylight, -5, { 2.007813, 1, 1.672852, 0 } }, { "Canon", "EOS 550D", Daylight, -4, { 2.040039, 1, 1.646484, 0 } }, { "Canon", "EOS 550D", Daylight, -3, { 2.064453, 1, 1.615234, 0 } }, { "Canon", "EOS 550D", Daylight, -2, { 2.089844, 1, 1.587891, 0 } }, { "Canon", "EOS 550D", Daylight, -1, { 2.120117, 1, 1.556641, 0 } }, { "Canon", "EOS 550D", Daylight, 0, { 2.146484, 1, 1.526367, 0 } }, { "Canon", "EOS 550D", Daylight, 1, { 2.178711, 1, 1.503906, 0 } }, { "Canon", "EOS 550D", Daylight, 2, { 2.211914, 1, 1.481445, 0 } }, { "Canon", "EOS 550D", Daylight, 3, { 2.246094, 1, 1.458984, 0 } }, { "Canon", "EOS 550D", Daylight, 4, { 2.280273, 1, 1.436523, 0 } }, { "Canon", "EOS 550D", Daylight, 5, { 2.316406, 1, 1.412109, 0 } }, { "Canon", "EOS 550D", Daylight, 6, { 2.342773, 1, 1.391602, 0 } }, { "Canon", "EOS 550D", Daylight, 7, { 2.375977, 1, 1.373047, 0 } }, { "Canon", "EOS 550D", Daylight, 8, { 2.409180, 1, 1.350586, 0 } }, { "Canon", "EOS 550D", Daylight, 9, { 2.444336, 1, 1.328125, 0 } }, { "Canon", "EOS 550D", Shade, -9, { 2.173828, 1, 1.507813, 0 } }, { "Canon", "EOS 550D", Shade, -8, { 2.207031, 1, 1.484375, 0 } }, { "Canon", "EOS 550D", Shade, -7, { 2.240234, 1, 1.460938, 0 } }, { "Canon", "EOS 550D", Shade, -6, { 2.275391, 1, 1.438477, 0 } }, { "Canon", "EOS 550D", Shade, -5, { 2.311523, 1, 1.414063, 0 } }, { "Canon", "EOS 550D", Shade, -4, { 2.342773, 1, 1.395508, 0 } }, { "Canon", "EOS 550D", Shade, -3, { 2.370117, 1, 1.374023, 0 } }, { "Canon", "EOS 550D", Shade, -2, { 2.403320, 1, 1.352539, 0 } }, { "Canon", "EOS 550D", Shade, -1, { 2.444336, 1, 1.332031, 0 } }, { "Canon", "EOS 550D", Shade, 0, { 2.479492, 1, 1.307617, 0 } }, { "Canon", "EOS 550D", Shade, 1, { 2.509766, 1, 1.292969, 0 } }, { "Canon", "EOS 550D", Shade, 2, { 2.541016, 1, 1.276367, 0 } }, { "Canon", "EOS 550D", Shade, 3, { 2.573242, 1, 1.259766, 0 } }, { "Canon", "EOS 550D", Shade, 4, { 2.612305, 1, 1.241211, 0 } }, { "Canon", "EOS 550D", Shade, 5, { 2.645508, 1, 1.223633, 0 } }, { "Canon", "EOS 550D", Shade, 6, { 2.673828, 1, 1.206055, 0 } }, { "Canon", "EOS 550D", Shade, 7, { 2.702148, 1, 1.187500, 0 } }, { "Canon", "EOS 550D", Shade, 8, { 2.738281, 1, 1.168945, 0 } }, { "Canon", "EOS 550D", Shade, 9, { 2.782227, 1, 1.148438, 0 } }, { "Canon", "EOS 550D", Cloudy, -9, { 2.043945, 1, 1.640625, 0 } }, { "Canon", "EOS 550D", Cloudy, -8, { 2.068359, 1, 1.612305, 0 } }, { "Canon", "EOS 550D", Cloudy, -7, { 2.093750, 1, 1.583008, 0 } }, { "Canon", "EOS 550D", Cloudy, -6, { 2.120117, 1, 1.553711, 0 } }, { "Canon", "EOS 550D", Cloudy, -5, { 2.151367, 1, 1.523438, 0 } }, { "Canon", "EOS 550D", Cloudy, -4, { 2.183594, 1, 1.501953, 0 } }, { "Canon", "EOS 550D", Cloudy, -3, { 2.216797, 1, 1.477539, 0 } }, { "Canon", "EOS 550D", Cloudy, -2, { 2.250977, 1, 1.454102, 0 } }, { "Canon", "EOS 550D", Cloudy, -1, { 2.280273, 1, 1.432617, 0 } }, { "Canon", "EOS 550D", Cloudy, 0, { 2.316406, 1, 1.408203, 0 } }, { "Canon", "EOS 550D", Cloudy, 1, { 2.348633, 1, 1.389648, 0 } }, { "Canon", "EOS 550D", Cloudy, 2, { 2.381836, 1, 1.369141, 0 } }, { "Canon", "EOS 550D", Cloudy, 3, { 2.415039, 1, 1.347656, 0 } }, { "Canon", "EOS 550D", Cloudy, 4, { 2.450195, 1, 1.326172, 0 } }, { "Canon", "EOS 550D", Cloudy, 5, { 2.491211, 1, 1.304688, 0 } }, { "Canon", "EOS 550D", Cloudy, 6, { 2.515625, 1, 1.290039, 0 } }, { "Canon", "EOS 550D", Cloudy, 7, { 2.546875, 1, 1.272461, 0 } }, { "Canon", "EOS 550D", Cloudy, 8, { 2.579102, 1, 1.254883, 0 } }, { "Canon", "EOS 550D", Cloudy, 9, { 2.619141, 1, 1.236328, 0 } }, { "Canon", "EOS 550D", Tungsten, -9, { 1.345703, 1, 2.605469, 0 } }, { "Canon", "EOS 550D", Tungsten, -8, { 1.361328, 1, 2.579102, 0 } }, { "Canon", "EOS 550D", Tungsten, -7, { 1.379883, 1, 2.546875, 0 } }, { "Canon", "EOS 550D", Tungsten, -6, { 1.398438, 1, 2.515625, 0 } }, { "Canon", "EOS 550D", Tungsten, -5, { 1.417969, 1, 2.491211, 0 } }, { "Canon", "EOS 550D", Tungsten, -4, { 1.440430, 1, 2.456055, 0 } }, { "Canon", "EOS 550D", Tungsten, -3, { 1.460938, 1, 2.409180, 0 } }, { "Canon", "EOS 550D", Tungsten, -2, { 1.479492, 1, 2.365234, 0 } }, { "Canon", "EOS 550D", Tungsten, -1, { 1.503906, 1, 2.322266, 0 } }, { "Canon", "EOS 550D", Tungsten, 0, { 1.526367, 1, 2.275391, 0 } }, { "Canon", "EOS 550D", Tungsten, 1, { 1.546875, 1, 2.240234, 0 } }, { "Canon", "EOS 550D", Tungsten, 2, { 1.568359, 1, 2.207031, 0 } }, { "Canon", "EOS 550D", Tungsten, 3, { 1.589844, 1, 2.169922, 0 } }, { "Canon", "EOS 550D", Tungsten, 4, { 1.612305, 1, 2.137695, 0 } }, { "Canon", "EOS 550D", Tungsten, 5, { 1.638672, 1, 2.102539, 0 } }, { "Canon", "EOS 550D", Tungsten, 6, { 1.662109, 1, 2.068359, 0 } }, { "Canon", "EOS 550D", Tungsten, 7, { 1.684570, 1, 2.032227, 0 } }, { "Canon", "EOS 550D", Tungsten, 8, { 1.707031, 1, 2.000000, 0 } }, { "Canon", "EOS 550D", Tungsten, 9, { 1.732422, 1, 1.965820, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -9, { 1.662109, 1, 2.473633, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -8, { 1.684570, 1, 2.432617, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -7, { 1.709961, 1, 2.392578, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -6, { 1.735352, 1, 2.342773, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -5, { 1.762695, 1, 2.300781, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -4, { 1.787109, 1, 2.260742, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -3, { 1.812500, 1, 2.226563, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -2, { 1.841797, 1, 2.188477, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, -1, { 1.872070, 1, 2.156250, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 0, { 1.899414, 1, 2.115234, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 1, { 1.924805, 1, 2.081055, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 2, { 1.950195, 1, 2.051758, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 3, { 1.976563, 1, 2.015625, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 4, { 2.007813, 1, 1.984375, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 5, { 2.040039, 1, 1.950195, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 6, { 2.064453, 1, 1.920898, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 7, { 2.089844, 1, 1.889648, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 8, { 2.120117, 1, 1.862305, 0 } }, { "Canon", "EOS 550D", WhiteFluorescent, 9, { 2.146484, 1, 1.832031, 0 } }, { "Canon", "EOS 550D", Flash, -9, { 2.098633, 1, 1.625000, 0 } }, { "Canon", "EOS 550D", Flash, -8, { 2.124023, 1, 1.594727, 0 } }, { "Canon", "EOS 550D", Flash, -7, { 2.156250, 1, 1.565430, 0 } }, { "Canon", "EOS 550D", Flash, -6, { 2.188477, 1, 1.535156, 0 } }, { "Canon", "EOS 550D", Flash, -5, { 2.221680, 1, 1.510742, 0 } }, { "Canon", "EOS 550D", Flash, -4, { 2.255859, 1, 1.488281, 0 } }, { "Canon", "EOS 550D", Flash, -3, { 2.286133, 1, 1.464844, 0 } }, { "Canon", "EOS 550D", Flash, -2, { 2.322266, 1, 1.442383, 0 } }, { "Canon", "EOS 550D", Flash, -1, { 2.354492, 1, 1.419922, 0 } }, { "Canon", "EOS 550D", Flash, 0, { 2.381836, 1, 1.397461, 0 } }, { "Canon", "EOS 550D", Flash, 1, { 2.420898, 1, 1.377930, 0 } }, { "Canon", "EOS 550D", Flash, 2, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS 550D", Flash, 3, { 2.491211, 1, 1.334961, 0 } }, { "Canon", "EOS 550D", Flash, 4, { 2.522461, 1, 1.312500, 0 } }, { "Canon", "EOS 550D", Flash, 5, { 2.553711, 1, 1.295898, 0 } }, { "Canon", "EOS 550D", Flash, 6, { 2.585938, 1, 1.280273, 0 } }, { "Canon", "EOS 550D", Flash, 7, { 2.625977, 1, 1.262695, 0 } }, { "Canon", "EOS 550D", Flash, 8, { 2.653320, 1, 1.244141, 0 } }, { "Canon", "EOS 550D", Flash, 9, { 2.680664, 1, 1.226563, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -9, { 1.903320, 1, 1.784180, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -8, { 1.924805, 1, 1.756836, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -7, { 1.950195, 1, 1.729492, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -6, { 1.980469, 1, 1.701172, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -5, { 2.007813, 1, 1.672852, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -4, { 2.040039, 1, 1.646484, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -3, { 2.064453, 1, 1.615234, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -2, { 2.089844, 1, 1.587891, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, -1, { 2.120117, 1, 1.556641, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 0, { 2.146484, 1, 1.526367, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 1, { 2.178711, 1, 1.503906, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 2, { 2.211914, 1, 1.481445, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 3, { 2.246094, 1, 1.458984, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 4, { 2.280273, 1, 1.436523, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 5, { 2.316406, 1, 1.412109, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 6, { 2.342773, 1, 1.391602, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 7, { 2.375977, 1, 1.373047, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 8, { 2.409180, 1, 1.350586, 0 } }, { "Canon", "EOS REBEL T2i", Daylight, 9, { 2.444336, 1, 1.328125, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -9, { 2.173828, 1, 1.507813, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -8, { 2.207031, 1, 1.484375, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -7, { 2.240234, 1, 1.460938, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -6, { 2.275391, 1, 1.438477, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -5, { 2.311523, 1, 1.414063, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -4, { 2.342773, 1, 1.395508, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -3, { 2.370117, 1, 1.374023, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -2, { 2.403320, 1, 1.352539, 0 } }, { "Canon", "EOS REBEL T2i", Shade, -1, { 2.444336, 1, 1.332031, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 0, { 2.479492, 1, 1.307617, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 1, { 2.509766, 1, 1.292969, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 2, { 2.541016, 1, 1.276367, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 3, { 2.573242, 1, 1.259766, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 4, { 2.612305, 1, 1.241211, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 5, { 2.645508, 1, 1.223633, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 6, { 2.673828, 1, 1.206055, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 7, { 2.702148, 1, 1.187500, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 8, { 2.738281, 1, 1.168945, 0 } }, { "Canon", "EOS REBEL T2i", Shade, 9, { 2.782227, 1, 1.148438, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -9, { 2.043945, 1, 1.640625, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -8, { 2.068359, 1, 1.612305, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -7, { 2.093750, 1, 1.583008, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -6, { 2.120117, 1, 1.553711, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -5, { 2.151367, 1, 1.523438, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -4, { 2.183594, 1, 1.501953, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -3, { 2.216797, 1, 1.477539, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -2, { 2.250977, 1, 1.454102, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, -1, { 2.280273, 1, 1.432617, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 0, { 2.316406, 1, 1.408203, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 1, { 2.348633, 1, 1.389648, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 2, { 2.381836, 1, 1.369141, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 3, { 2.415039, 1, 1.347656, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 4, { 2.450195, 1, 1.326172, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 5, { 2.491211, 1, 1.304688, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 6, { 2.515625, 1, 1.290039, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 7, { 2.546875, 1, 1.272461, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 8, { 2.579102, 1, 1.254883, 0 } }, { "Canon", "EOS REBEL T2i", Cloudy, 9, { 2.619141, 1, 1.236328, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -9, { 1.345703, 1, 2.605469, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -8, { 1.361328, 1, 2.579102, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -7, { 1.379883, 1, 2.546875, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -6, { 1.398438, 1, 2.515625, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -5, { 1.417969, 1, 2.491211, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -4, { 1.440430, 1, 2.456055, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -3, { 1.460938, 1, 2.409180, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -2, { 1.479492, 1, 2.365234, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, -1, { 1.503906, 1, 2.322266, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 0, { 1.526367, 1, 2.275391, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 1, { 1.546875, 1, 2.240234, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 2, { 1.568359, 1, 2.207031, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 3, { 1.589844, 1, 2.169922, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 4, { 1.612305, 1, 2.137695, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 5, { 1.638672, 1, 2.102539, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 6, { 1.662109, 1, 2.068359, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 7, { 1.684570, 1, 2.032227, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 8, { 1.707031, 1, 2.000000, 0 } }, { "Canon", "EOS REBEL T2i", Tungsten, 9, { 1.732422, 1, 1.965820, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -9, { 1.662109, 1, 2.473633, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -8, { 1.684570, 1, 2.432617, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -7, { 1.709961, 1, 2.392578, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -6, { 1.735352, 1, 2.342773, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -5, { 1.762695, 1, 2.300781, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -4, { 1.787109, 1, 2.260742, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -3, { 1.812500, 1, 2.226563, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -2, { 1.841797, 1, 2.188477, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, -1, { 1.872070, 1, 2.156250, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 0, { 1.899414, 1, 2.115234, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 1, { 1.924805, 1, 2.081055, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 2, { 1.950195, 1, 2.051758, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 3, { 1.976563, 1, 2.015625, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 4, { 2.007813, 1, 1.984375, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 5, { 2.040039, 1, 1.950195, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 6, { 2.064453, 1, 1.920898, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 7, { 2.089844, 1, 1.889648, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 8, { 2.120117, 1, 1.862305, 0 } }, { "Canon", "EOS REBEL T2i", WhiteFluorescent, 9, { 2.146484, 1, 1.832031, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -9, { 2.098633, 1, 1.625000, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -8, { 2.124023, 1, 1.594727, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -7, { 2.156250, 1, 1.565430, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -6, { 2.188477, 1, 1.535156, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -5, { 2.221680, 1, 1.510742, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -4, { 2.255859, 1, 1.488281, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -3, { 2.286133, 1, 1.464844, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -2, { 2.322266, 1, 1.442383, 0 } }, { "Canon", "EOS REBEL T2i", Flash, -1, { 2.354492, 1, 1.419922, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 0, { 2.381836, 1, 1.397461, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 1, { 2.420898, 1, 1.377930, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 2, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 3, { 2.491211, 1, 1.334961, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 4, { 2.522461, 1, 1.312500, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 5, { 2.553711, 1, 1.295898, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 6, { 2.585938, 1, 1.280273, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 7, { 2.625977, 1, 1.262695, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 8, { 2.653320, 1, 1.244141, 0 } }, { "Canon", "EOS REBEL T2i", Flash, 9, { 2.680664, 1, 1.226563, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -9, { 1.903320, 1, 1.784180, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -8, { 1.924805, 1, 1.756836, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -7, { 1.950195, 1, 1.729492, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -6, { 1.980469, 1, 1.701172, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -5, { 2.007813, 1, 1.672852, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -4, { 2.040039, 1, 1.646484, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -3, { 2.064453, 1, 1.615234, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -2, { 2.089844, 1, 1.587891, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, -1, { 2.120117, 1, 1.556641, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 0, { 2.146484, 1, 1.526367, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 1, { 2.178711, 1, 1.503906, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 2, { 2.211914, 1, 1.481445, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 3, { 2.246094, 1, 1.458984, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 4, { 2.280273, 1, 1.436523, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 5, { 2.316406, 1, 1.412109, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 6, { 2.342773, 1, 1.391602, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 7, { 2.375977, 1, 1.373047, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 8, { 2.409180, 1, 1.350586, 0 } }, { "Canon", "EOS Kiss Digital X4", Daylight, 9, { 2.444336, 1, 1.328125, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -9, { 2.173828, 1, 1.507813, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -8, { 2.207031, 1, 1.484375, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -7, { 2.240234, 1, 1.460938, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -6, { 2.275391, 1, 1.438477, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -5, { 2.311523, 1, 1.414063, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -4, { 2.342773, 1, 1.395508, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -3, { 2.370117, 1, 1.374023, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -2, { 2.403320, 1, 1.352539, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, -1, { 2.444336, 1, 1.332031, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 0, { 2.479492, 1, 1.307617, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 1, { 2.509766, 1, 1.292969, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 2, { 2.541016, 1, 1.276367, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 3, { 2.573242, 1, 1.259766, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 4, { 2.612305, 1, 1.241211, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 5, { 2.645508, 1, 1.223633, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 6, { 2.673828, 1, 1.206055, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 7, { 2.702148, 1, 1.187500, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 8, { 2.738281, 1, 1.168945, 0 } }, { "Canon", "EOS Kiss Digital X4", Shade, 9, { 2.782227, 1, 1.148438, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -9, { 2.043945, 1, 1.640625, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -8, { 2.068359, 1, 1.612305, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -7, { 2.093750, 1, 1.583008, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -6, { 2.120117, 1, 1.553711, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -5, { 2.151367, 1, 1.523438, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -4, { 2.183594, 1, 1.501953, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -3, { 2.216797, 1, 1.477539, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -2, { 2.250977, 1, 1.454102, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, -1, { 2.280273, 1, 1.432617, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 0, { 2.316406, 1, 1.408203, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 1, { 2.348633, 1, 1.389648, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 2, { 2.381836, 1, 1.369141, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 3, { 2.415039, 1, 1.347656, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 4, { 2.450195, 1, 1.326172, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 5, { 2.491211, 1, 1.304688, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 6, { 2.515625, 1, 1.290039, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 7, { 2.546875, 1, 1.272461, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 8, { 2.579102, 1, 1.254883, 0 } }, { "Canon", "EOS Kiss Digital X4", Cloudy, 9, { 2.619141, 1, 1.236328, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -9, { 1.345703, 1, 2.605469, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -8, { 1.361328, 1, 2.579102, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -7, { 1.379883, 1, 2.546875, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -6, { 1.398438, 1, 2.515625, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -5, { 1.417969, 1, 2.491211, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -4, { 1.440430, 1, 2.456055, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -3, { 1.460938, 1, 2.409180, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -2, { 1.479492, 1, 2.365234, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, -1, { 1.503906, 1, 2.322266, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 0, { 1.526367, 1, 2.275391, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 1, { 1.546875, 1, 2.240234, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 2, { 1.568359, 1, 2.207031, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 3, { 1.589844, 1, 2.169922, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 4, { 1.612305, 1, 2.137695, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 5, { 1.638672, 1, 2.102539, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 6, { 1.662109, 1, 2.068359, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 7, { 1.684570, 1, 2.032227, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 8, { 1.707031, 1, 2.000000, 0 } }, { "Canon", "EOS Kiss Digital X4", Tungsten, 9, { 1.732422, 1, 1.965820, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -9, { 1.662109, 1, 2.473633, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -8, { 1.684570, 1, 2.432617, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -7, { 1.709961, 1, 2.392578, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -6, { 1.735352, 1, 2.342773, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -5, { 1.762695, 1, 2.300781, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -4, { 1.787109, 1, 2.260742, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -3, { 1.812500, 1, 2.226563, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -2, { 1.841797, 1, 2.188477, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, -1, { 1.872070, 1, 2.156250, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 0, { 1.899414, 1, 2.115234, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 1, { 1.924805, 1, 2.081055, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 2, { 1.950195, 1, 2.051758, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 3, { 1.976563, 1, 2.015625, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 4, { 2.007813, 1, 1.984375, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 5, { 2.040039, 1, 1.950195, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 6, { 2.064453, 1, 1.920898, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 7, { 2.089844, 1, 1.889648, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 8, { 2.120117, 1, 1.862305, 0 } }, { "Canon", "EOS Kiss Digital X4", WhiteFluorescent, 9, { 2.146484, 1, 1.832031, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -9, { 2.098633, 1, 1.625000, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -8, { 2.124023, 1, 1.594727, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -7, { 2.156250, 1, 1.565430, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -6, { 2.188477, 1, 1.535156, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -5, { 2.221680, 1, 1.510742, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -4, { 2.255859, 1, 1.488281, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -3, { 2.286133, 1, 1.464844, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -2, { 2.322266, 1, 1.442383, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, -1, { 2.354492, 1, 1.419922, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 0, { 2.381836, 1, 1.397461, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 1, { 2.420898, 1, 1.377930, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 2, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 3, { 2.491211, 1, 1.334961, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 4, { 2.522461, 1, 1.312500, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 5, { 2.553711, 1, 1.295898, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 6, { 2.585938, 1, 1.280273, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 7, { 2.625977, 1, 1.262695, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 8, { 2.653320, 1, 1.244141, 0 } }, { "Canon", "EOS Kiss Digital X4", Flash, 9, { 2.680664, 1, 1.226563, 0 } }, // Canon EOS 600D firmware version 1.0.2 { "Canon", "EOS 600D", Daylight, 0, { 2.235352, 1, 1.612305, 0 } }, { "Canon", "EOS 600D", Shade, 0, { 2.592773, 1, 1.377930, 0 } }, { "Canon", "EOS 600D", Cloudy, 0, { 2.409180, 1, 1.486328, 0 } }, { "Canon", "EOS 600D", Tungsten, 0, { 1.597656, 1, 2.409180, 0 } }, { "Canon", "EOS 600D", Fluorescent, 0, { 1.958008, 1, 2.260742, 0 } }, { "Canon", "EOS 600D", Flash, 0, { 2.509766, 1, 1.464844, 0 } }, { "Canon", "EOS REBEL T3i", Daylight, 0, { 2.235352, 1, 1.612305, 0 } }, { "Canon", "EOS REBEL T3i", Shade, 0, { 2.592773, 1, 1.377930, 0 } }, { "Canon", "EOS REBEL T3i", Cloudy, 0, { 2.409180, 1, 1.486328, 0 } }, { "Canon", "EOS REBEL T3i", Tungsten, 0, { 1.597656, 1, 2.409180, 0 } }, { "Canon", "EOS REBEL T3i", Fluorescent, 0, { 1.958008, 1, 2.260742, 0 } }, { "Canon", "EOS REBEL T3i", Flash, 0, { 2.509766, 1, 1.464844, 0 } }, { "Canon", "EOS Kiss Digital X5", Daylight, 0, { 2.235352, 1, 1.612305, 0 } }, { "Canon", "EOS Kiss Digital X5", Shade, 0, { 2.592773, 1, 1.377930, 0 } }, { "Canon", "EOS Kiss Digital X5", Cloudy, 0, { 2.409180, 1, 1.486328, 0 } }, { "Canon", "EOS Kiss Digital X5", Tungsten, 0, { 1.597656, 1, 2.409180, 0 } }, { "Canon", "EOS Kiss Digital X5", Fluorescent, 0, { 1.958008, 1, 2.260742, 0 } }, { "Canon", "EOS Kiss Digital X5", Flash, 0, { 2.509766, 1, 1.464844, 0 } }, /* Fine-tuning is the camera's Amber-Blue bracketing. */ { "Canon", "EOS 650D", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS 650D", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS 650D", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS 650D", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS 650D", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS 650D", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS 650D", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS 650D", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS 650D", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS 650D", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS 650D", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS 650D", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS 650D", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS 650D", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS 650D", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS 650D", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS 650D", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS 650D", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS REBEL T4i", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS REBEL T4i", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS REBEL T4i", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS REBEL T4i", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS REBEL T4i", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS REBEL T4i", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS REBEL T4i", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS REBEL T4i", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS REBEL T4i", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS REBEL T4i", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS REBEL T4i", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS REBEL T4i", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS REBEL T4i", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS REBEL T4i", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS REBEL T4i", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS REBEL T4i", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS REBEL T4i", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS REBEL T4i", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS Kiss Digital X6i", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS Kiss Digital X6i", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS Kiss Digital X6i", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS Kiss Digital X6i", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS Kiss Digital X6i", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS Kiss Digital X6i", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS Kiss Digital X6i", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS Kiss Digital X6i", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS Kiss Digital X6i", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS Kiss Digital X6i", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS Kiss Digital X6i", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS Kiss Digital X6i", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS Kiss Digital X6i", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS Kiss Digital X6i", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS Kiss Digital X6i", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS Kiss Digital X6i", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS Kiss Digital X6i", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS Kiss Digital X6i", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS 1000D", Daylight, 0, { 2.183594, 1, 1.526367, 0 } }, { "Canon", "EOS 1000D", Shade, 0, { 2.553711, 1, 1.262695, 0 } }, { "Canon", "EOS 1000D", Cloudy, 0, { 2.365234, 1, 1.375977, 0 } }, { "Canon", "EOS 1000D", Tungsten, 0, { 1.470328, 1, 2.402126, 0 } }, { "Canon", "EOS 1000D", Fluorescent, 0, { 1.889648, 1, 2.133789, 0 } }, { "Canon", "EOS 1000D", Flash, 0, { 2.541830, 1, 1.769099, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Daylight, 0, { 2.183594, 1, 1.526367, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Shade, 0, { 2.553711, 1, 1.262695, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Cloudy, 0, { 2.365234, 1, 1.375977, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Tungsten, 0, { 1.470328, 1, 2.402126, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Fluorescent, 0, { 1.889648, 1, 2.133789, 0 } }, { "Canon", "EOS DIGITAL REBEL XS", Flash, 0, { 2.541830, 1, 1.769099, 0 } }, { "Canon", "EOS Kiss Digital F", Daylight, 0, { 2.183594, 1, 1.526367, 0 } }, { "Canon", "EOS Kiss Digital F", Shade, 0, { 2.553711, 1, 1.262695, 0 } }, { "Canon", "EOS Kiss Digital F", Cloudy, 0, { 2.365234, 1, 1.375977, 0 } }, { "Canon", "EOS Kiss Digital F", Tungsten, 0, { 1.470328, 1, 2.402126, 0 } }, { "Canon", "EOS Kiss Digital F", Fluorescent, 0, { 1.889648, 1, 2.133789, 0 } }, { "Canon", "EOS Kiss Digital F", Flash, 0, { 2.541830, 1, 1.769099, 0 } }, { "Canon", "EOS 1100D", Daylight, 0, { 2.2559, 1, 1.4844, 0 } }, { "Canon", "EOS 1100D", Shade, 0, { 2.6455, 1, 1.2725, 0 } }, { "Canon", "EOS 1100D", Cloudy, 0, { 2.4443, 1, 1.3652, 0 } }, { "Canon", "EOS 1100D", Tungsten, 0, { 1.5654, 1, 2.2402, 0 } }, { "Canon", "EOS 1100D", WhiteFluorescent, 0, { 1.9541, 1, 2.0732, 0 } }, { "Canon", "EOS 1100D", Flash, 0, { 2.5283, 1, 1.3584, 0 } }, { "Canon", "EOS REBEL T3", Daylight, 0, { 2.2559, 1, 1.4844, 0 } }, { "Canon", "EOS REBEL T3", Shade, 0, { 2.6455, 1, 1.2725, 0 } }, { "Canon", "EOS REBEL T3", Cloudy, 0, { 2.4443, 1, 1.3652, 0 } }, { "Canon", "EOS REBEL T3", Tungsten, 0, { 1.5654, 1, 2.2402, 0 } }, { "Canon", "EOS REBEL T3", WhiteFluorescent, 0, { 1.9541, 1, 2.0732, 0 } }, { "Canon", "EOS REBEL T3", Flash, 0, { 2.5283, 1, 1.3584, 0 } }, { "Canon", "EOS Kiss Digital X50", Daylight, 0, { 2.2559, 1, 1.4844, 0 } }, { "Canon", "EOS Kiss Digital X50", Shade, 0, { 2.6455, 1, 1.2725, 0 } }, { "Canon", "EOS Kiss Digital X50", Cloudy, 0, { 2.4443, 1, 1.3652, 0 } }, { "Canon", "EOS Kiss Digital X50", Tungsten, 0, { 1.5654, 1, 2.2402, 0 } }, { "Canon", "EOS Kiss Digital X50", WhiteFluorescent, 0, { 1.9541, 1, 2.0732, 0 } }, { "Canon", "EOS Kiss Digital X50", Flash, 0, { 2.5283, 1, 1.3584, 0 } }, { "Canon", "EOS-1DS", Daylight, 0, { 1.6133, 1, 1.2500, 0 } }, /* 5302K */ { "Canon", "EOS-1DS", Shade, 0, { 1.8477, 1, 1.0684, 0 } }, /* 6685K */ { "Canon", "EOS-1DS", Cloudy, 0, { 1.7285, 1, 1.1504, 0 } }, /* 5940K */ { "Canon", "EOS-1DS", Tungsten, 0, { 1.1270, 1, 1.9199, 0 } }, /* 3334K */ { "Canon", "EOS-1DS", Fluorescent, 0, { 1.2012, 1, 1.7168, 0 } }, /* 3643K */ { "Canon", "EOS-1DS", Flash, 0, { 1.7793, 1, 1.1445, 0 } }, /* 6184K */ // Firmware Version 1.1.6 { "Canon", "EOS-1Ds Mark II", Daylight, 0, { 1.992188, 1, 1.503906, 0 } }, { "Canon", "EOS-1Ds Mark II", Shade, 0, { 2.300781, 1, 1.243164, 0 } }, { "Canon", "EOS-1Ds Mark II", Cloudy, 0, { 2.146484, 1, 1.363281, 0 } }, { "Canon", "EOS-1Ds Mark II", Tungsten, 0, { 1.395018, 1, 2.370107, 0 } }, { "Canon", "EOS-1Ds Mark II", Fluorescent, 0, { 1.854792, 1, 2.067764, 0 } }, { "Canon", "EOS-1Ds Mark II", Flash, 0, { 2.235352, 1, 1.297852, 0 } }, { "Canon", "EOS-1D Mark II", Cloudy, 0, { 2.093750, 1, 1.166016, 0 } }, { "Canon", "EOS-1D Mark II", Daylight, 0, { 1.957031, 1, 1.295898, 0 } }, { "Canon", "EOS-1D Mark II", Flash, 0, { 2.225586, 1, 1.172852, 0 } }, { "Canon", "EOS-1D Mark II", Fluorescent, 0, { 1.785853, 1, 1.785853, 0 } }, { "Canon", "EOS-1D Mark II", Shade, 0, { 2.220703, 1, 1.069336, 0 } }, { "Canon", "EOS-1D Mark II", Tungsten, 0, { 1.415480, 1, 2.160142, 0 } }, { "Canon", "EOS-1D Mark II N", Cloudy, 0, { 2.183594, 1, 1.220703, 0 } }, { "Canon", "EOS-1D Mark II N", Daylight, 0, { 2.019531, 1, 1.349609, 0 } }, { "Canon", "EOS-1D Mark II N", Flash, 0, { 2.291016, 1, 1.149414, 0 } }, { "Canon", "EOS-1D Mark II N", Fluorescent, 0, { 1.802899, 1, 1.990338, 0 } }, { "Canon", "EOS-1D Mark II N", Shade, 0, { 2.337891, 1, 1.112305, 0 } }, { "Canon", "EOS-1D Mark II N", Tungsten, 0, { 1.408514, 1, 2.147645, 0 } }, // Firmware Version 1.0.6 (Temporary) { "Canon", "EOS-1D Mark IV", Daylight, 0, { 2.040039, 1, 1.558594, 0 } }, { "Canon", "EOS-1D Mark IV", Shade, 0, { 2.342773, 1, 1.333008, 0 } }, { "Canon", "EOS-1D Mark IV", Cloudy, 0, { 2.188477, 1, 1.440430, 0 } }, { "Canon", "EOS-1D Mark IV", Tungsten, 0, { 1.458333, 1, 2.305254, 0 } }, { "Canon", "EOS-1D Mark IV", Fluorescent, 0, { 1.767892, 1, 2.205029, 0 } }, { "Canon", "EOS-1D Mark IV", Flash, 0, { 2.230469, 1, 1.423828, 0 } }, // Canon EOS M Firmware 1.0.6 { "Canon", "EOS M", Cloudy, 0, { 2.156250, 1, 1.448242, 0 } }, { "Canon", "EOS M", Daylight, 0, { 2.007813, 1, 1.575195, 0 } }, { "Canon", "EOS M", Flash, 0, { 2.230469, 1, 1.429688, 0 } }, { "Canon", "EOS M", Tungsten, 0, { 1.448242, 1, 2.386719, 0 } }, { "Canon", "EOS M", Shade, 0, { 2.300781, 1, 1.334961, 0 } }, { "Canon", "EOS M", Fluorescent, 0, { 1.784180, 1, 2.275391, 0 } }, { "FUJIFILM", "E900", Daylight, 0, { 1.571875, 1, 1.128125, 0 } }, { "FUJIFILM", "E900", Shade, 0, { 1.668750, 1, 1.006250, 0 } }, { "FUJIFILM", "E900", DaylightFluorescent, 0, { 1.907609, 1, 1.016304, 0 } }, { "FUJIFILM", "E900", WarmWhiteFluorescent, 0, { 1.654891, 1, 1.241848, 0 } }, { "FUJIFILM", "E900", CoolWhiteFluorescent, 0, { 1.554348, 1, 1.519022, 0 } }, { "FUJIFILM", "E900", Incandescent, 0, { 1.037611, 1, 1.842920, 0 } }, { "FUJIFILM", "F700", Daylight, 0, { 1.725000, 1, 1.500000, 0 } }, { "FUJIFILM", "F700", Shade, 0, { 1.950000, 1, 1.325000, 0 } }, { "FUJIFILM", "F700", DaylightFluorescent, 0, { 2.032609, 1, 1.336957, 0 } }, { "FUJIFILM", "F700", WarmWhiteFluorescent, 0, { 1.706522, 1, 1.663043, 0 } }, { "FUJIFILM", "F700", CoolWhiteFluorescent, 0, { 1.684783, 1, 2.152174, 0 } }, { "FUJIFILM", "F700", Incandescent, 0, { 1.168142, 1, 2.477876, 0 } }, { "FUJIFILM", "HS20EXR", Daylight, 0, { 1.4107, 1, 1.9702, 0 } }, { "FUJIFILM", "HS20EXR", Shade, 0, { 1.5804, 1, 1.7440, 0 } }, { "FUJIFILM", "HS20EXR", DaylightFluorescent, 0, { 1.7292, 1, 1.7470, 0 } }, { "FUJIFILM", "HS20EXR", WarmWhiteFluorescent, 0, { 1.4821, 1, 2.0476, 0 } }, { "FUJIFILM", "HS20EXR", CoolWhiteFluorescent, 0, { 1.5625, 1, 2.5714, 0 } }, { "FUJIFILM", "HS20EXR", Incandescent, 0, { 1, 1.0633, 2.9430, 0 } }, { "FUJIFILM", "S100FS", Daylight, 0, { 1.702381, 1, 1.845238, 0 } }, { "FUJIFILM", "S100FS", Shade, 0, { 1.830357, 1, 1.601190, 0 } }, { "FUJIFILM", "S100FS", DaylightFluorescent, 0, { 1.895833, 1, 1.461309, 0 } }, { "FUJIFILM", "S100FS", WarmWhiteFluorescent, 0, { 1.574405, 1, 1.818452, 0 } }, { "FUJIFILM", "S100FS", CoolWhiteFluorescent, 0, { 1.663690, 1, 2.309524, 0 } }, { "FUJIFILM", "S100FS", Incandescent, 0, { 1.107143, 1, 2.815476, 0 } }, { "FUJIFILM", "S20Pro", Daylight, 0, { 1.712500, 1, 1.500000, 0 } }, { "FUJIFILM", "S20Pro", Cloudy, 0, { 1.887500, 1, 1.262500, 0 } }, { "FUJIFILM", "S20Pro", DaylightFluorescent, 0, { 2.097826, 1, 1.304348, 0 } }, { "FUJIFILM", "S20Pro", WarmWhiteFluorescent, 0, { 1.782609, 1, 1.619565, 0 } }, { "FUJIFILM", "S20Pro", CoolWhiteFluorescent, 0, { 1.670213, 1, 2.063830, 0 } }, { "FUJIFILM", "S20Pro", Incandescent, 0, { 1.069565, 1, 2.486957, 0 } }, { "FUJIFILM", "S2Pro", Daylight, 0, { 1.509804, 1, 1.401961, 0 } }, { "FUJIFILM", "S2Pro", Cloudy, 0, { 1.666667, 1, 1.166667, 0 } }, { "FUJIFILM", "S2Pro", Flash, 0, { 1, 1.014084, 2.542253, 0 } }, { "FUJIFILM", "S2Pro", DaylightFluorescent, 0, { 1.948718, 1, 1.230769, 0 } }, { "FUJIFILM", "S2Pro", WarmWhiteFluorescent, 0, { 1.675214, 1, 1.572650, 0 } }, { "FUJIFILM", "S2Pro", CoolWhiteFluorescent, 0, { 1.649573, 1, 2.094017, 0 } }, { "FUJIFILM", "S5000", Incandescent, 0, { 1.212081, 1, 2.672364, 0 } }, { "FUJIFILM", "S5000", Fluorescent, 0, { 1.772316, 1, 2.349902, 0 } }, { "FUJIFILM", "S5000", Daylight, 0, { 1.860403, 1, 1.515946, 0 } }, { "FUJIFILM", "S5000", Flash, 0, { 2.202181, 1, 1.423284, 0 } }, { "FUJIFILM", "S5000", Cloudy, 0, { 2.036578, 1, 1.382513, 0 } }, { "FUJIFILM", "S5000", Shade, 0, { 2.357215, 1, 1.212016, 0 } }, { "FUJIFILM", "S5200", Daylight, 0, { 1.587500, 1, 1.381250, 0 } }, { "FUJIFILM", "S5200", Shade, 0, { 1.946875, 1, 1.175000, 0 } }, { "FUJIFILM", "S5200", DaylightFluorescent, 0, { 1.948370, 1, 1.187500, 0 } }, { "FUJIFILM", "S5200", WarmWhiteFluorescent, 0, { 1.682065, 1, 1.437500, 0 } }, { "FUJIFILM", "S5200", CoolWhiteFluorescent, 0, { 1.595109, 1, 1.839674, 0 } }, { "FUJIFILM", "S5200", Incandescent, 0, { 1.077434, 1, 2.170354, 0 } }, { "FUJIFILM", "S5500", Daylight, 0, { 1.712500, 1, 1.550000, 0 } }, { "FUJIFILM", "S5500", Shade, 0, { 1.912500, 1, 1.375000, 0 } }, { "FUJIFILM", "S5500", DaylightFluorescent, 0, { 1.978261, 1, 1.380435, 0 } }, { "FUJIFILM", "S5500", WarmWhiteFluorescent, 0, { 1.673913, 1, 1.673913, 0 } }, { "FUJIFILM", "S5500", CoolWhiteFluorescent, 0, { 1.663043, 1, 2.163043, 0 } }, { "FUJIFILM", "S5500", Incandescent, 0, { 1.115044, 1, 2.566372, 0 } }, { "FUJIFILM", "S5600", Daylight, 0, { 1.587500, 1, 1.381250, 0 } }, { "FUJIFILM", "S5600", Shade, 0, { 1.946875, 1, 1.175000, 0 } }, { "FUJIFILM", "S5600", DaylightFluorescent, 0, { 1.948370, 1, 1.187500, 0 } }, { "FUJIFILM", "S5600", WarmWhiteFluorescent, 0, { 1.682065, 1, 1.437500, 0 } }, { "FUJIFILM", "S5600", CoolWhiteFluorescent, 0, { 1.595109, 1, 1.839674, 0 } }, { "FUJIFILM", "S5600", Incandescent, 0, { 1.077434, 1, 2.170354, 0 } }, { "FUJIFILM", "S6000fd", Daylight, 0, { 1.511905, 1, 1.431548, 0 } }, { "FUJIFILM", "S6000fd", Shade, 0, { 1.699405, 1, 1.232143, 0 } }, { "FUJIFILM", "S6000fd", DaylightFluorescent, 0, { 1.866071, 1, 1.309524, 0 } }, { "FUJIFILM", "S6000fd", WarmWhiteFluorescent, 0, { 1.568452, 1, 1.627976, 0 } }, { "FUJIFILM", "S6000fd", CoolWhiteFluorescent, 0, { 1.598214, 1, 2.038691, 0 } }, { "FUJIFILM", "S6000fd", Incandescent, 0, { 1, 1.024390, 2.466463, 0 } }, { "FUJIFILM", "S6500fd", Daylight, 0, { 1.398810, 1, 1.470238, 0 } }, { "FUJIFILM", "S6500fd", Shade, 0, { 1.580357, 1, 1.270833, 0 } }, { "FUJIFILM", "S6500fd", DaylightFluorescent, 0, { 1.735119, 1, 1.348214, 0 } }, { "FUJIFILM", "S6500fd", WarmWhiteFluorescent, 0, { 1.455357, 1, 1.672619, 0 } }, { "FUJIFILM", "S6500fd", CoolWhiteFluorescent, 0, { 1.482143, 1, 2.089286, 0 } }, { "FUJIFILM", "S6500fd", Incandescent, 0, { 1, 1.123746, 2.769231, 0 } }, { "FUJIFILM", "S7000", Daylight, 0, { 1.900000, 1, 1.525000, 0 } }, { "FUJIFILM", "S7000", Shade, 0, { 2.137500, 1, 1.350000, 0 } }, { "FUJIFILM", "S7000", DaylightFluorescent, 0, { 2.315217, 1, 1.347826, 0 } }, { "FUJIFILM", "S7000", WarmWhiteFluorescent, 0, { 1.902174, 1, 1.663043, 0 } }, { "FUJIFILM", "S7000", CoolWhiteFluorescent, 0, { 1.836957, 1, 2.130435, 0 } }, { "FUJIFILM", "S7000", Incandescent, 0, { 1.221239, 1, 2.548673, 0 } }, /* The S9000 and S9500 are the same camera */ { "FUJIFILM", "S9000", Daylight, 0, { 1.618750, 1, 1.231250, 0 } }, { "FUJIFILM", "S9000", Cloudy, 0, { 1.700000, 1, 1.046875, 0 } }, { "FUJIFILM", "S9000", DaylightFluorescent, 0, { 1.902174, 1, 1.057065, 0 } }, { "FUJIFILM", "S9000", WarmWhiteFluorescent, 0, { 1.633152, 1, 1.293478, 0 } }, { "FUJIFILM", "S9000", CoolWhiteFluorescent, 0, { 1.546196, 1, 1.622283, 0 } }, { "FUJIFILM", "S9000", Incandescent, 0, { 1.064159, 1, 1.960177, 0 } }, { "FUJIFILM", "S9100", Daylight, 0, { 1.506250, 1, 1.318750, 0 } }, { "FUJIFILM", "S9100", Cloudy, 0, { 1.587500, 1, 1.128125, 0 } }, { "FUJIFILM", "S9100", DaylightFluorescent, 0, { 1.777174, 1, 1.138587, 0 } }, { "FUJIFILM", "S9100", WarmWhiteFluorescent, 0, { 1.521739, 1, 1.380435, 0 } }, { "FUJIFILM", "S9100", CoolWhiteFluorescent, 0, { 1.437500, 1, 1.720109, 0 } }, { "FUJIFILM", "S9100", Incandescent, 0, { 1, 1.024943, 2.113379, 0 } }, /* The S9000 and S9500 are the same camera */ { "FUJIFILM", "S9500", Daylight, 0, { 1.618750, 1, 1.231250, 0 } }, { "FUJIFILM", "S9500", Cloudy, 0, { 1.700000, 1, 1.046875, 0 } }, { "FUJIFILM", "S9500", DaylightFluorescent, 0, { 1.902174, 1, 1.057065, 0 } }, { "FUJIFILM", "S9500", WarmWhiteFluorescent, 0, { 1.633152, 1, 1.293478, 0 } }, { "FUJIFILM", "S9500", CoolWhiteFluorescent, 0, { 1.546196, 1, 1.622283, 0 } }, { "FUJIFILM", "S9500", Incandescent, 0, { 1.064159, 1, 1.960177, 0 } }, { "FUJIFILM", "S9600", Daylight, 0, { 1.534375, 1, 1.300000, 0 } }, { "FUJIFILM", "S9600", Shade, 0, { 1.615625, 1, 1.112500, 0 } }, { "FUJIFILM", "S9600", DaylightFluorescent, 0, { 1.809783, 1, 1.122283, 0 } }, { "FUJIFILM", "S9600", WarmWhiteFluorescent, 0, { 1.551630, 1, 1.361413, 0 } }, { "FUJIFILM", "S9600", CoolWhiteFluorescent, 0, { 1.467391, 1, 1.692935, 0 } }, { "FUJIFILM", "S9600", Incandescent, 0, { 1, 1.004444, 2.040000, 0 } }, { "FUJIFILM", "X100", Daylight, 0, { 1.4503, 1, 1.5033, 0 } }, { "FUJIFILM", "X100", Shade, 0, { 1.5861, 1, 1.2947, 0 } }, { "FUJIFILM", "X100", DaylightFluorescent, 0, { 1.8841, 1, 1.3179, 0 } }, { "FUJIFILM", "X100", WarmWhiteFluorescent, 0, { 1.6291, 1, 1.5927, 0 } }, { "FUJIFILM", "X100", CoolWhiteFluorescent, 0, { 1.5662, 1, 2.0265, 0 } }, { "FUJIFILM", "X100", Incandescent, 0, { 1, 1.0272, 2.4966, 0 } }, { "FUJIFILM", "X100", Underwater, 0, { 1.4603, 1, 1.5662, 0 } }, { "FUJIFILM", "X100", "2500K", 0, { 1, 1.6503, 5.1858, 0 } }, { "FUJIFILM", "X100", "2550K", 0, { 1, 1.5729, 4.7917, 0 } }, { "FUJIFILM", "X100", "2650K", 0, { 1, 1.4313, 4.1090, 0 } }, { "FUJIFILM", "X100", "2700K", 0, { 1, 1.3790, 3.8447, 0 } }, { "FUJIFILM", "X100", "2800K", 0, { 1, 1.2797, 3.3814, 0 } }, { "FUJIFILM", "X100", "2850K", 0, { 1, 1.2377, 3.1844, 0 } }, { "FUJIFILM", "X100", "2950K", 0, { 1, 1.1660, 2.8571, 0 } }, { "FUJIFILM", "X100", "3000K", 0, { 1, 1.1353, 2.7180, 0 } }, { "FUJIFILM", "X100", "3100K", 0, { 1, 1.0824, 2.4731, 0 } }, { "FUJIFILM", "X100", "3200K", 0, { 1, 1.0342, 2.2671, 0 } }, { "FUJIFILM", "X100", "3300K", 0, { 1.0066, 1, 2.1060, 0 } }, { "FUJIFILM", "X100", "3400K", 0, { 1.0430, 1, 2.0265, 0 } }, { "FUJIFILM", "X100", "3600K", 0, { 1.1159, 1, 1.8907, 0 } }, { "FUJIFILM", "X100", "3700K", 0, { 1.1457, 1, 1.8311, 0 } }, { "FUJIFILM", "X100", "3800K", 0, { 1.1755, 1, 1.7781, 0 } }, { "FUJIFILM", "X100", "4000K", 0, { 1.2351, 1, 1.6821, 0 } }, { "FUJIFILM", "X100", "4200K", 0, { 1.2848, 1, 1.5993, 0 } }, { "FUJIFILM", "X100", "4300K", 0, { 1.3079, 1, 1.5662, 0 } }, { "FUJIFILM", "X100", "4500K", 0, { 1.3543, 1, 1.5000, 0 } }, { "FUJIFILM", "X100", "4800K", 0, { 1.4172, 1, 1.4205, 0 } }, { "FUJIFILM", "X100", "5000K", 0, { 1.4536, 1, 1.3742, 0 } }, { "FUJIFILM", "X100", "5300K", 0, { 1.5033, 1, 1.3179, 0 } }, { "FUJIFILM", "X100", "5600K", 0, { 1.5530, 1, 1.2715, 0 } }, { "FUJIFILM", "X100", "5900K", 0, { 1.5927, 1, 1.2318, 0 } }, { "FUJIFILM", "X100", "6300K", 0, { 1.6457, 1, 1.1887, 0 } }, { "FUJIFILM", "X100", "6700K", 0, { 1.6921, 1, 1.1556, 0 } }, { "FUJIFILM", "X100", "7100K", 0, { 1.7318, 1, 1.1291, 0 } }, { "FUJIFILM", "X100", "7700K", 0, { 1.7881, 1, 1.0960, 0 } }, { "FUJIFILM", "X100", "8300K", 0, { 1.8377, 1, 1.0728, 0 } }, { "FUJIFILM", "X100", "9100K", 0, { 1.8940, 1, 1.0464, 0 } }, { "FUJIFILM", "X100", "10000K", 0, { 1.9503, 1, 1.0298, 0 } }, { "KODAK", "P850 ZOOM", Daylight, 0, { 1.859375, 1, 1.566406, 0 } }, { "KODAK", "P850 ZOOM", Cloudy, 0, { 1.960938, 1, 1.570313, 0 } }, { "KODAK", "P850 ZOOM", Shade, 0, { 2.027344, 1, 1.519531, 0 } }, { "KODAK", "P850 ZOOM", EveningSun, 0, { 1.679688, 1, 1.812500, 0 } }, { "KODAK", "P850 ZOOM", Tungsten, 0, { 1.140625, 1, 2.726563, 0 } }, { "KODAK", "P850 ZOOM", Fluorescent, 0, { 1.113281, 1, 2.949219, 0 } }, { "KODAK", "EASYSHARE Z1015 IS", Daylight, 0, { 1.546875, 1, 2.082031, 0 } }, { "KODAK", "EASYSHARE Z1015 IS", Tungsten, 0, { 1, 1.024000, 3.384000, 0 } }, { "KODAK", "EASYSHARE Z1015 IS", Fluorescent, 0, { 1.562500, 1, 2.515625, 0 } }, { "KODAK", "EASYSHARE Z1015 IS", Shade, 0, { 1.820313, 1, 1.789062, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Cloudy, 0, { 2.136719, 1, 1.168213, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Daylight, 0, { 2.007996, 1, 1.268982, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Flash, 0, { 2.164490, 1, 1.177795, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Fluorescent, 0, { 1.655579, 1, 2.070374, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Shade, 0, { 2.197754, 1, 1.111084, 0 } }, { "Leica Camera AG", "M8 Digital Camera", Tungsten, 0, { 1.160034, 1, 2.028381, 0 } }, { "Leica", "M9 Digital Camera", Tungsten, 0, { 1.321288, 1, 2.077024, 0 } }, { "Leica", "M9 Digital Camera", Fluorescent, 0, { 1.673827, 1, 1.855043, 0 } }, { "Leica", "M9 Digital Camera", DaylightFluorescent, 0, { 2.224852, 1, 1.388000, 0 } }, { "Leica", "M9 Digital Camera", Daylight, 0, { 2.013733, 1, 1.364869, 0 } }, { "Leica", "M9 Digital Camera", Flash, 0, { 1.980652, 1, 1.331111, 0 } }, { "Leica", "M9 Digital Camera", Cloudy, 0, { 2.146728, 1, 1.252197, 0 } }, { "Leica", "M9 Digital Camera", Shade, 0, { 2.249268, 1, 1.179015, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Incandescent, 0, { 1, 1.109985, 2.430664, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Fluorescent, 0, { 1.234985, 1, 1.791138, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Daylight, 0, { 1.459961, 1, 1.184937, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Flash, 0, { 1.395020, 1, 1.144897, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Cloudy, 0, { 1.541992, 1, 1.052856, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", Shade, 0, { 1.644897, 1.033936, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "2600K", 0, { 1, 1.220825, 2.999390, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "2700K", 0, { 1, 1.172607, 2.747192, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "2800K", 0, { 1, 1.129639, 2.527710, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "2900K", 0, { 1, 1.088867, 2.333130, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3000K", 0, { 1, 1.049438, 2.156494, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3100K", 0, { 1, 1.015503, 2.008423, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3200K", 0, { 1.008789, 1, 1.904663, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3300K", 0, { 1.032349, 1, 1.841187, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3400K", 0, { 1.056763, 1, 1.780273, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3500K", 0, { 1.081543, 1, 1.723755, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3600K", 0, { 1.105591, 1, 1.673828, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3700K", 0, { 1.128052, 1, 1.625732, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3800K", 0, { 1.149536, 1, 1.580688, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "3900K", 0, { 1.170532, 1, 1.540527, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4000K", 0, { 1.191040, 1, 1.504150, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4100K", 0, { 1.209106, 1, 1.466919, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4200K", 0, { 1.226807, 1, 1.433228, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4300K", 0, { 1.244019, 1, 1.402466, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4400K", 0, { 1.261108, 1, 1.374268, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4500K", 0, { 1.276611, 1, 1.346924, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4600K", 0, { 1.290771, 1, 1.320435, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4700K", 0, { 1.304565, 1, 1.295898, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4800K", 0, { 1.318115, 1, 1.273315, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "4900K", 0, { 1.331543, 1, 1.252441, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "5000K", 0, { 1.344360, 1, 1.233032, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "5200K", 0, { 1.365479, 1, 1.193970, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "5400K", 0, { 1.385498, 1, 1.160034, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "5600K", 0, { 1.404663, 1, 1.130127, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "5800K", 0, { 1.421387, 1, 1.102661, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "6000K", 0, { 1.435303, 1, 1.076782, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "6200K", 0, { 1.448608, 1, 1.053833, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "6400K", 0, { 1.461304, 1, 1.032959, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "6600K", 0, { 1.473511, 1, 1.014160, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "6800K", 0, { 1.488647, 1.003906, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "7000K", 0, { 1.522705, 1.021118, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "7200K", 0, { 1.555176, 1.037476, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "7400K", 0, { 1.586182, 1.052979, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "7600K", 0, { 1.615967, 1.067627, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "7800K", 0, { 1.644409, 1.081665, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "8000K", 0, { 1.671875, 1.094849, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "8300K", 0, { 1.708740, 1.114624, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "8600K", 0, { 1.743286, 1.133057, 1, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "8900K", 0, { 1.775879, 1.150269, 1.000000, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "9200K", 0, { 1.806274, 1.166382, 1.000000, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "9500K", 0, { 1.835449, 1.181519, 1.000000, 0 } }, { "Leica Camera AG", "R8 - Digital Back DMR", "9800K", 0, { 1.862793, 1.195801, 1.000000, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Incandescent, 0, { 1, 1.109985, 2.430664, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Fluorescent, 0, { 1.234985, 1, 1.791138, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Daylight, 0, { 1.459961, 1, 1.184937, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Flash, 0, { 1.395020, 1, 1.144897, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Cloudy, 0, { 1.541992, 1, 1.052856, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", Shade, 0, { 1.644897, 1.033936, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "2600K", 0, { 1, 1.220825, 2.999390, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "2700K", 0, { 1, 1.172607, 2.747192, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "2800K", 0, { 1, 1.129639, 2.527710, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "2900K", 0, { 1, 1.088867, 2.333130, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3000K", 0, { 1, 1.049438, 2.156494, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3100K", 0, { 1, 1.015503, 2.008423, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3200K", 0, { 1.008789, 1, 1.904663, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3300K", 0, { 1.032349, 1, 1.841187, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3400K", 0, { 1.056763, 1, 1.780273, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3500K", 0, { 1.081543, 1, 1.723755, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3600K", 0, { 1.105591, 1, 1.673828, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3700K", 0, { 1.128052, 1, 1.625732, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3800K", 0, { 1.149536, 1, 1.580688, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "3900K", 0, { 1.170532, 1, 1.540527, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4000K", 0, { 1.191040, 1, 1.504150, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4100K", 0, { 1.209106, 1, 1.466919, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4200K", 0, { 1.226807, 1, 1.433228, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4300K", 0, { 1.244019, 1, 1.402466, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4400K", 0, { 1.261108, 1, 1.374268, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4500K", 0, { 1.276611, 1, 1.346924, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4600K", 0, { 1.290771, 1, 1.320435, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4700K", 0, { 1.304565, 1, 1.295898, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4800K", 0, { 1.318115, 1, 1.273315, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "4900K", 0, { 1.331543, 1, 1.252441, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "5000K", 0, { 1.344360, 1, 1.233032, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "5200K", 0, { 1.365479, 1, 1.193970, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "5400K", 0, { 1.385498, 1, 1.160034, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "5600K", 0, { 1.404663, 1, 1.130127, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "5800K", 0, { 1.421387, 1, 1.102661, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "6000K", 0, { 1.435303, 1, 1.076782, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "6200K", 0, { 1.448608, 1, 1.053833, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "6400K", 0, { 1.461304, 1, 1.032959, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "6600K", 0, { 1.473511, 1, 1.014160, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "6800K", 0, { 1.488647, 1.003906, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "7000K", 0, { 1.522705, 1.021118, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "7200K", 0, { 1.555176, 1.037476, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "7400K", 0, { 1.586182, 1.052979, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "7600K", 0, { 1.615967, 1.067627, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "7800K", 0, { 1.644409, 1.081665, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "8000K", 0, { 1.671875, 1.094849, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "8300K", 0, { 1.708740, 1.114624, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "8600K", 0, { 1.743286, 1.133057, 1, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "8900K", 0, { 1.775879, 1.150269, 1.000000, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "9200K", 0, { 1.806274, 1.166382, 1.000000, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "9500K", 0, { 1.835449, 1.181519, 1.000000, 0 } }, { "Leica Camera AG", "R9 - Digital Back DMR", "9800K", 0, { 1.862793, 1.195801, 1.000000, 0 } }, { "LEICA", "DIGILUX 2", Daylight, 0, { 1.628906, 1, 1.488281, 0 } }, { "LEICA", "DIGILUX 2", Cloudy, 0, { 1.835938, 1, 1.343750, 0 } }, { "LEICA", "DIGILUX 2", Incandescent, 0, { 1.078125, 1, 2.203125, 0 } }, { "LEICA", "DIGILUX 2", Flash, 0, { 2.074219, 1, 1.304688, 0 } }, { "LEICA", "DIGILUX 2", BlackNWhite, 0, { 1.632812, 1, 1.550781, 0 } }, { "LEICA", "DIGILUX 3", Daylight, 0, { 1.942966, 1, 1.399240, 0 } }, { "LEICA", "DIGILUX 3", Cloudy, 0, { 2.083650, 1, 1.247148, 0 } }, { "LEICA", "DIGILUX 3", Shade, 0, { 2.296578, 1, 1.110266, 0 } }, { "LEICA", "DIGILUX 3", Incandescent, 0, { 1.372624, 1, 2.079848, 0 } }, /* Flash multipliers are variable */ { "LEICA", "DIGILUX 3", Flash, 0, { 2.095057, 1, 1.091255, 0 } }, /* Digilux 3 Kelvin presets */ { "LEICA", "DIGILUX 3", "2500K", 0, { 1.178707, 1, 2.756654, 0 } }, { "LEICA", "DIGILUX 3", "2600K", 0, { 1.212928, 1, 2.650190, 0 } }, { "LEICA", "DIGILUX 3", "2700K", 0, { 1.250951, 1, 2.539924, 0 } }, { "LEICA", "DIGILUX 3", "2800K", 0, { 1.285171, 1, 2.433460, 0 } }, { "LEICA", "DIGILUX 3", "2900K", 0, { 1.323194, 1, 2.326996, 0 } }, { "LEICA", "DIGILUX 3", "3000K", 0, { 1.361217, 1, 2.212928, 0 } }, { "LEICA", "DIGILUX 3", "3100K", 0, { 1.391635, 1, 2.197719, 0 } }, { "LEICA", "DIGILUX 3", "3200K", 0, { 1.429658, 1, 2.178707, 0 } }, { "LEICA", "DIGILUX 3", "3300K", 0, { 1.471483, 1, 2.167300, 0 } }, { "LEICA", "DIGILUX 3", "3400K", 0, { 1.509506, 1, 2.148289, 0 } }, { "LEICA", "DIGILUX 3", "3500K", 0, { 1.547529, 1, 2.133080, 0 } }, { "LEICA", "DIGILUX 3", "3600K", 0, { 1.574145, 1, 2.087453, 0 } }, { "LEICA", "DIGILUX 3", "3800K", 0, { 1.631179, 1, 1.992395, 0 } }, { "LEICA", "DIGILUX 3", "4000K", 0, { 1.684411, 1, 1.882129, 0 } }, { "LEICA", "DIGILUX 3", "4200K", 0, { 1.733840, 1, 1.790875, 0 } }, { "LEICA", "DIGILUX 3", "4400K", 0, { 1.790875, 1, 1.699620, 0 } }, { "LEICA", "DIGILUX 3", "4600K", 0, { 1.821293, 1, 1.615970, 0 } }, { "LEICA", "DIGILUX 3", "4800K", 0, { 1.832700, 1, 1.551331, 0 } }, { "LEICA", "DIGILUX 3", "5000K", 0, { 1.851711, 1, 1.490494, 0 } }, { "LEICA", "DIGILUX 3", "5300K", 0, { 1.889734, 1, 1.414449, 0 } }, { "LEICA", "DIGILUX 3", "5500K", 0, { 1.923954, 1, 1.361217, 0 } }, { "LEICA", "DIGILUX 3", "5800K", 0, { 1.954373, 1, 1.315589, 0 } }, { "LEICA", "DIGILUX 3", "6000K", 0, { 1.977186, 1, 1.277567, 0 } }, { "LEICA", "DIGILUX 3", "6300K", 0, { 2.049430, 1, 1.231939, 0 } }, { "LEICA", "DIGILUX 3", "6500K", 0, { 2.102662, 1, 1.193916, 0 } }, { "LEICA", "DIGILUX 3", "6800K", 0, { 2.155893, 1, 1.178707, 0 } }, { "LEICA", "DIGILUX 3", "7300K", 0, { 2.254753, 1, 1.133080, 0 } }, { "LEICA", "DIGILUX 3", "7800K", 0, { 2.319392, 1, 1.087452, 0 } }, { "LEICA", "DIGILUX 3", "8300K", 0, { 2.365019, 1, 1.045627, 0 } }, { "LEICA", "DIGILUX 3", "9000K", 0, { 2.429658, 1, 1.007605, 0 } }, { "LEICA", "DIGILUX 3", "10000K", 0, { 2.680608, 1.057034, 1, 0 } }, { "Minolta", "DiMAGE 5", Daylight, 0, { 2.023438, 1, 1.371094, 0 } }, { "Minolta", "DiMAGE 5", Incandescent, 0, { 1.113281, 1, 2.480469, 0 } }, { "Minolta", "DiMAGE 5", Fluorescent, 0, { 1.957031, 1, 2.058594, 0 } }, { "Minolta", "DiMAGE 5", Cloudy, 0, { 2.199219, 1, 1.300781, 0 } }, { "Minolta", "DiMAGE 7", Cloudy, 0, { 2.082031, 1, 1.226562, 0 } }, { "Minolta", "DiMAGE 7", Daylight, 0, { 1.914062, 1, 1.527344, 0 } }, { "Minolta", "DiMAGE 7", Fluorescent, 0, { 1.917969, 1, 2.007812, 0 } }, { "Minolta", "DiMAGE 7", Tungsten, 0, { 1.050781, 1, 2.437500, 0 } }, { "Minolta", "DiMAGE 7i", Daylight, 0, { 1.441406, 1, 1.457031, 0 } }, { "Minolta", "DiMAGE 7i", Tungsten, 0, { 1, 1.333333, 3.572917, 0 } }, { "Minolta", "DiMAGE 7i", Fluorescent, 0, { 1.554688, 1, 2.230469, 0 } }, { "Minolta", "DiMAGE 7i", Cloudy, 0, { 1.550781, 1, 1.402344, 0 } }, { "Minolta", "DiMAGE 7Hi", Daylight, 0, { 1.609375, 1, 1.328125, 0 } }, /*5500K*/ { "Minolta", "DiMAGE 7Hi", Tungsten, 0, { 1, 1.137778, 2.768889, 0 } }, /*2800K*/ { "Minolta", "DiMAGE 7Hi", WhiteFluorescent, 0, { 1.664062, 1, 2.105469, 0 } }, /*4060K*/ { "Minolta", "DiMAGE 7Hi", CoolWhiteFluorescent, 0, { 1.796875, 1, 1.734375, 0 } }, /*4938K*/ { "Minolta", "DiMAGE 7Hi", Cloudy, 0, { 1.730469, 1, 1.269531, 0 } }, /*5823K*/ { "Minolta", "DiMAGE A1", Daylight, 0, { 1.808594, 1, 1.304688, 0 } }, { "Minolta", "DiMAGE A1", Tungsten, 0, { 1.062500, 1, 2.675781, 0 } }, { "Minolta", "DiMAGE A1", Fluorescent, 0, { 1.707031, 1, 2.039063, 0 } }, { "Minolta", "DiMAGE A1", Cloudy, 0, { 1.960938, 1, 1.339844, 0 } }, { "Minolta", "DiMAGE A1", Shade, 0, { 2.253906, 1, 1.199219, 0 } }, { "Minolta", "DiMAGE A1", Shade, 2, { 2.000000, 1, 1.183594, 0 } }, { "Minolta", "DiMAGE A1", Flash, 0, { 1.972656, 1, 1.265625, 0 } }, { "Minolta", "DiMAGE A2", Cloudy, -3, { 2.109375, 1, 1.578125, 0 } }, { "Minolta", "DiMAGE A2", Cloudy, 0, { 2.203125, 1, 1.296875, 0 } }, { "Minolta", "DiMAGE A2", Cloudy, 3, { 2.296875, 1, 1.015625, 0 } }, { "Minolta", "DiMAGE A2", Daylight, -3, { 1.867188, 1, 1.683594, 0 } }, { "Minolta", "DiMAGE A2", Daylight, 0, { 1.960938, 1, 1.402344, 0 } }, { "Minolta", "DiMAGE A2", Daylight, 3, { 2.054688, 1, 1.121094, 0 } }, { "Minolta", "DiMAGE A2", Flash, -3, { 1.945312, 1, 1.613281, 0 } }, { "Minolta", "DiMAGE A2", Flash, 0, { 2.039062, 1, 1.332031, 0 } }, { "Minolta", "DiMAGE A2", Flash, 3, { 2.132812, 1, 1.050781, 0 } }, { "Minolta", "DiMAGE A2", Fluorescent, -2, { 1.136719, 1, 2.746094, 0 } }, { "Minolta", "DiMAGE A2", Fluorescent, 0, { 1.722656, 1, 2.132812, 0 } }, { "Minolta", "DiMAGE A2", Fluorescent, 4, { 2.347656, 1, 1.535156, 0 } }, { "Minolta", "DiMAGE A2", Shade, -3, { 2.273438, 1, 1.546875, 0 } }, { "Minolta", "DiMAGE A2", Shade, 0, { 2.367188, 1, 1.265625, 0 } }, { "Minolta", "DiMAGE A2", Shade, 3, { 2.500000, 1.015873, 1, 0 } }, { "Minolta", "DiMAGE A2", Tungsten, -3, { 1.003906, 1, 3.164062, 0 } }, { "Minolta", "DiMAGE A2", Tungsten, 0, { 1.097656, 1, 2.882812, 0 } }, { "Minolta", "DiMAGE A2", Tungsten, 3, { 1.191406, 1, 2.601562, 0 } }, { "Minolta", "DiMAGE Z2", Daylight, 0, { 1.843749, 1, 1.664062, 0 } }, { "Minolta", "DiMAGE Z2", Cloudy, 0, { 2.195312, 1, 1.449218, 0 } }, { "Minolta", "DiMAGE Z2", Tungsten, 0, { 1.097656, 1, 3.050780, 0 } }, { "Minolta", "DiMAGE Z2", Fluorescent, 0, { 1.796874, 1, 2.257810, 0 } }, { "Minolta", "DiMAGE Z2", Flash, 0, { 2.117186, 1, 1.472656, 0 } }, { "Minolta", "DiMAGE G500", Daylight, 0, { 1.496094, 1, 1.121094, 0 } }, { "Minolta", "DiMAGE G500", Cloudy, 0, { 1.527344, 1, 1.105469, 0 } }, { "Minolta", "DiMAGE G500", Fluorescent, 0, { 1.382813, 1, 1.347656, 0 } }, { "Minolta", "DiMAGE G500", Tungsten, 0, { 1.042969, 1, 1.859375, 0 } }, { "Minolta", "DiMAGE G500", Flash, 0, { 1.647078, 1, 1.218159, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, -3, { 1.593750, 1, 1.875000, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, -2, { 1.644531, 1, 1.792969, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, -1, { 1.699219, 1, 1.718750, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, 0, { 1.757812, 1, 1.636719, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, 1, { 1.804688, 1, 1.566406, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, 2, { 1.863281, 1, 1.500000, 0 } }, { "MINOLTA", "DYNAX 5D", Daylight, 3, { 1.925781, 1, 1.437500, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, -3, { 1.835938, 1, 1.644531, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, -2, { 1.894531, 1, 1.574219, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, -1, { 1.957031, 1, 1.507812, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, 0, { 2.011719, 1, 1.433594, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, 1, { 2.078125, 1, 1.375000, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, 2, { 2.148438, 1, 1.316406, 0 } }, { "MINOLTA", "DYNAX 5D", Shade, 3, { 2.218750, 1, 1.261719, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, -3, { 1.718750, 1, 1.738281, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, -2, { 1.773438, 1, 1.664062, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, -1, { 1.835938, 1, 1.593750, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, 0, { 1.886719, 1, 1.500000, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, 1, { 1.945312, 1, 1.460938, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, 2, { 2.007812, 1, 1.390625, 0 } }, { "MINOLTA", "DYNAX 5D", Cloudy, 3, { 2.078125, 1, 1.332031, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, -3, { 1, 1.066667, 4.262500, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, -2, { 1, 1.032258, 3.951613, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, -1, { 1, 1.000000, 3.671875, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, 0, { 1.023438, 1, 3.496094, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, 1, { 1.062500, 1, 3.367188, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, 2, { 1.097656, 1, 3.203125, 0 } }, { "MINOLTA", "DYNAX 5D", Tungsten, 3, { 1.132812, 1, 3.070312, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, -2, { 1.148438, 1, 3.429688, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, -1, { 1.285156, 1, 3.250000, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, 0, { 1.703125, 1, 2.582031, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, 1, { 1.761719, 1, 2.335938, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, 2, { 1.730469, 1, 1.878906, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, 3, { 1.996094, 1, 1.527344, 0 } }, { "MINOLTA", "DYNAX 5D", Fluorescent, 4, { 2.218750, 1, 1.714844, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, -3, { 1.738281, 1, 1.683594, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, -2, { 1.792969, 1, 1.609375, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, -1, { 1.855469, 1, 1.542969, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, 0, { 1.917969, 1, 1.457031, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, 1, { 1.968750, 1, 1.406250, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, 2, { 2.031250, 1, 1.347656, 0 } }, { "MINOLTA", "DYNAX 5D", Flash, 3, { 2.101562, 1, 1.289062, 0 } }, { "MINOLTA", "DYNAX 7D", Daylight, -3, { 1.476562, 1, 1.824219, 0 } }, { "MINOLTA", "DYNAX 7D", Daylight, 0, { 1.621094, 1, 1.601562, 0 } }, { "MINOLTA", "DYNAX 7D", Daylight, 3, { 1.785156, 1, 1.414062, 0 } }, { "MINOLTA", "DYNAX 7D", Shade, -3, { 1.683594, 1, 1.585938, 0 } }, { "MINOLTA", "DYNAX 7D", Shade, 0, { 1.855469, 1, 1.402344, 0 } }, { "MINOLTA", "DYNAX 7D", Shade, 3, { 2.031250, 1, 1.226562, 0 } }, { "MINOLTA", "DYNAX 7D", Cloudy, -3, { 1.593750, 1, 1.671875, 0 } }, { "MINOLTA", "DYNAX 7D", Cloudy, 0, { 1.738281, 1, 1.464844, 0 } }, { "MINOLTA", "DYNAX 7D", Cloudy, 3, { 1.925781, 1, 1.296875, 0 } }, { "MINOLTA", "DYNAX 7D", Tungsten, -3, { 0.867188, 1, 3.765625, 0 } }, { "MINOLTA", "DYNAX 7D", Tungsten, 0, { 0.945312, 1, 3.292969, 0 } }, { "MINOLTA", "DYNAX 7D", Tungsten, 3, { 1.050781, 1, 2.921875, 0 } }, { "MINOLTA", "DYNAX 7D", Fluorescent, -2, { 1.058594, 1, 3.230469, 0 } }, { "MINOLTA", "DYNAX 7D", Fluorescent, 0, { 1.570312, 1, 2.453125, 0 } }, { "MINOLTA", "DYNAX 7D", Fluorescent, 1, { 1.625000, 1, 2.226562, 0 } }, { "MINOLTA", "DYNAX 7D", Fluorescent, 4, { 2.046875, 1, 1.675781, 0 } }, { "MINOLTA", "DYNAX 7D", Flash, -3, { 1.738281, 1, 1.656250, 0 } }, { "MINOLTA", "DYNAX 7D", Flash, 0, { 1.890625, 1, 1.445312, 0 } }, { "MINOLTA", "DYNAX 7D", Flash, 3, { 2.101562, 1, 1.281250, 0 } }, { "MINOLTA", "DYNAX 7D", "2500K", 0, { 1, 1.207547, 4.801887, 0 } }, { "MINOLTA", "DYNAX 7D", "2600K", 0, { 1, 1.153153, 4.297297, 0 } }, { "MINOLTA", "DYNAX 7D", "2700K", 0, { 1, 1.089362, 3.829787, 0 } }, { "MINOLTA", "DYNAX 7D", "2800K", 0, { 1, 1.044898, 3.477551, 0 } }, { "MINOLTA", "DYNAX 7D", "2900K", 0, { 1, 1.007874, 3.173228, 0 } }, { "MINOLTA", "DYNAX 7D", "3000K", 0, { 1.031250, 1, 3.000000, 0 } }, { "MINOLTA", "DYNAX 7D", "3100K", 0, { 1.066406, 1, 2.875000, 0 } }, { "MINOLTA", "DYNAX 7D", "3200K", 0, { 1.109375, 1, 2.765625, 0 } }, { "MINOLTA", "DYNAX 7D", "3300K", 0, { 1.144531, 1, 2.648438, 0 } }, { "MINOLTA", "DYNAX 7D", "3400K", 0, { 1.175781, 1, 2.554688, 0 } }, { "MINOLTA", "DYNAX 7D", "3500K", 0, { 1.207031, 1, 2.468750, 0 } }, { "MINOLTA", "DYNAX 7D", "3600K", 0, { 1.242188, 1, 2.390625, 0 } }, { "MINOLTA", "DYNAX 7D", "3700K", 0, { 1.277344, 1, 2.312500, 0 } }, { "MINOLTA", "DYNAX 7D", "3800K", 0, { 1.304688, 1, 2.242188, 0 } }, { "MINOLTA", "DYNAX 7D", "3900K", 0, { 1.339844, 1, 2.179688, 0 } }, { "MINOLTA", "DYNAX 7D", "4000K", 0, { 1.363281, 1, 2.125000, 0 } }, { "MINOLTA", "DYNAX 7D", "4100K", 0, { 1.390625, 1, 2.078125, 0 } }, { "MINOLTA", "DYNAX 7D", "4200K", 0, { 1.421875, 1, 2.023438, 0 } }, { "MINOLTA", "DYNAX 7D", "4300K", 0, { 1.445312, 1, 1.976562, 0 } }, { "MINOLTA", "DYNAX 7D", "4400K", 0, { 1.476562, 1, 1.937500, 0 } }, { "MINOLTA", "DYNAX 7D", "4500K", 0, { 1.500000, 1, 1.894531, 0 } }, { "MINOLTA", "DYNAX 7D", "4600K", 0, { 1.527344, 1, 1.855469, 0 } }, { "MINOLTA", "DYNAX 7D", "4700K", 0, { 1.542969, 1, 1.824219, 0 } }, { "MINOLTA", "DYNAX 7D", "4800K", 0, { 1.566406, 1, 1.785156, 0 } }, { "MINOLTA", "DYNAX 7D", "4900K", 0, { 1.593750, 1, 1.757812, 0 } }, { "MINOLTA", "DYNAX 7D", "5000K", 0, { 1.609375, 1, 1.726562, 0 } }, { "MINOLTA", "DYNAX 7D", "5100K", 0, { 1.636719, 1, 1.699219, 0 } }, { "MINOLTA", "DYNAX 7D", "5200K", 0, { 1.656250, 1, 1.671875, 0 } }, { "MINOLTA", "DYNAX 7D", "5300K", 0, { 1.671875, 1, 1.644531, 0 } }, { "MINOLTA", "DYNAX 7D", "5400K", 0, { 1.691406, 1, 1.621094, 0 } }, { "MINOLTA", "DYNAX 7D", "5500K", 0, { 1.710938, 1, 1.601562, 0 } }, { "MINOLTA", "DYNAX 7D", "5600K", 0, { 1.726562, 1, 1.585938, 0 } }, { "MINOLTA", "DYNAX 7D", "5700K", 0, { 1.757812, 1, 1.558594, 0 } }, { "MINOLTA", "DYNAX 7D", "5800K", 0, { 1.765625, 1, 1.535156, 0 } }, { "MINOLTA", "DYNAX 7D", "5900K", 0, { 1.785156, 1, 1.515625, 0 } }, { "MINOLTA", "DYNAX 7D", "6000K", 0, { 1.792969, 1, 1.500000, 0 } }, { "MINOLTA", "DYNAX 7D", "6100K", 0, { 1.812500, 1, 1.484375, 0 } }, { "MINOLTA", "DYNAX 7D", "6200K", 0, { 1.835938, 1, 1.468750, 0 } }, { "MINOLTA", "DYNAX 7D", "6300K", 0, { 1.843750, 1, 1.453125, 0 } }, { "MINOLTA", "DYNAX 7D", "6400K", 0, { 1.863281, 1, 1.437500, 0 } }, { "MINOLTA", "DYNAX 7D", "6500K", 0, { 1.875000, 1, 1.421875, 0 } }, { "MINOLTA", "DYNAX 7D", "6600K", 0, { 1.894531, 1, 1.414062, 0 } }, { "MINOLTA", "DYNAX 7D", "6700K", 0, { 1.914062, 1, 1.398438, 0 } }, { "MINOLTA", "DYNAX 7D", "6800K", 0, { 1.925781, 1, 1.382812, 0 } }, { "MINOLTA", "DYNAX 7D", "6900K", 0, { 1.937500, 1, 1.375000, 0 } }, { "MINOLTA", "DYNAX 7D", "7000K", 0, { 1.945312, 1, 1.363281, 0 } }, { "MINOLTA", "DYNAX 7D", "7100K", 0, { 1.957031, 1, 1.347656, 0 } }, { "MINOLTA", "DYNAX 7D", "7200K", 0, { 1.976562, 1, 1.339844, 0 } }, { "MINOLTA", "DYNAX 7D", "7300K", 0, { 1.988281, 1, 1.324219, 0 } }, { "MINOLTA", "DYNAX 7D", "7400K", 0, { 2.000000, 1, 1.316406, 0 } }, { "MINOLTA", "DYNAX 7D", "7500K", 0, { 2.007812, 1, 1.304688, 0 } }, { "MINOLTA", "DYNAX 7D", "7600K", 0, { 2.023438, 1, 1.304688, 0 } }, { "MINOLTA", "DYNAX 7D", "7700K", 0, { 2.031250, 1, 1.289062, 0 } }, { "MINOLTA", "DYNAX 7D", "7800K", 0, { 2.046875, 1, 1.277344, 0 } }, { "MINOLTA", "DYNAX 7D", "7900K", 0, { 2.054688, 1, 1.277344, 0 } }, { "MINOLTA", "DYNAX 7D", "8000K", 0, { 2.062500, 1, 1.261719, 0 } }, { "MINOLTA", "DYNAX 7D", "8100K", 0, { 2.085938, 1, 1.253906, 0 } }, { "MINOLTA", "DYNAX 7D", "8200K", 0, { 2.085938, 1, 1.250000, 0 } }, { "MINOLTA", "DYNAX 7D", "8300K", 0, { 2.101562, 1, 1.234375, 0 } }, { "MINOLTA", "DYNAX 7D", "8400K", 0, { 2.109375, 1, 1.234375, 0 } }, { "MINOLTA", "DYNAX 7D", "8500K", 0, { 2.125000, 1, 1.226562, 0 } }, { "MINOLTA", "DYNAX 7D", "8600K", 0, { 2.132812, 1, 1.214844, 0 } }, { "MINOLTA", "DYNAX 7D", "8700K", 0, { 2.132812, 1, 1.207031, 0 } }, { "MINOLTA", "DYNAX 7D", "8800K", 0, { 2.148438, 1, 1.207031, 0 } }, { "MINOLTA", "DYNAX 7D", "8900K", 0, { 2.156250, 1, 1.195312, 0 } }, { "MINOLTA", "DYNAX 7D", "9000K", 0, { 2.171875, 1, 1.187500, 0 } }, { "MINOLTA", "DYNAX 7D", "9100K", 0, { 2.179688, 1, 1.187500, 0 } }, { "MINOLTA", "DYNAX 7D", "9200K", 0, { 2.179688, 1, 1.183594, 0 } }, { "MINOLTA", "DYNAX 7D", "9300K", 0, { 2.195312, 1, 1.175781, 0 } }, { "MINOLTA", "DYNAX 7D", "9400K", 0, { 2.203125, 1, 1.171875, 0 } }, { "MINOLTA", "DYNAX 7D", "9500K", 0, { 2.218750, 1, 1.164062, 0 } }, { "MINOLTA", "DYNAX 7D", "9600K", 0, { 2.218750, 1, 1.156250, 0 } }, { "MINOLTA", "DYNAX 7D", "9700K", 0, { 2.226562, 1, 1.152344, 0 } }, { "MINOLTA", "DYNAX 7D", "9800K", 0, { 2.226562, 1, 1.144531, 0 } }, { "MINOLTA", "DYNAX 7D", "9900K", 0, { 2.242188, 1, 1.144531, 0 } }, // copied from NIKON 1 V1 { "NIKON", "1 J1", Incandescent, 0, { 1.210938, 1, 2.308594, 0 } }, { "NIKON", "1 J1", CoolWhiteFluorescent, 0, { 1.687500, 1, 2.199219, 0 } }, { "NIKON", "1 J1", DirectSunlight, 0, { 1.828125, 1, 1.550781, 0 } }, { "NIKON", "1 J1", Flash, 0, { 2.101563, 1, 1.335938, 0 } }, { "NIKON", "1 J1", Cloudy, 0, { 1.960938, 1, 1.406250, 0 } }, { "NIKON", "1 J1", Shade, 0, { 2.257813, 1, 1.277344, 0 } }, { "NIKON", "1 V1", Incandescent, 0, { 1.210938, 1, 2.308594, 0 } }, { "NIKON", "1 V1", CoolWhiteFluorescent, 0, { 1.687500, 1, 2.199219, 0 } }, { "NIKON", "1 V1", DirectSunlight, 0, { 1.828125, 1, 1.550781, 0 } }, { "NIKON", "1 V1", Flash, 0, { 2.101563, 1, 1.335938, 0 } }, { "NIKON", "1 V1", Cloudy, 0, { 1.960938, 1, 1.406250, 0 } }, { "NIKON", "1 V1", Shade, 0, { 2.257813, 1, 1.277344, 0 } }, // Fine tuning is from A6 to B6 on amber-blue. { "NIKON", "COOLPIX P7100", DirectSunlight, -6, { 1.7908, 1, 1.9042, 0 } }, { "NIKON", "COOLPIX P7100", DirectSunlight, 0, { 1.6500, 1, 2.1349, 0 } }, { "NIKON", "COOLPIX P7100", DirectSunlight, 6, { 1.5171, 1, 2.3891, 0 } }, { "NIKON", "COOLPIX P7100", Incandescent, -6, { 1.2708, 1, 3.0068, 0 } }, { "NIKON", "COOLPIX P7100", Incandescent, 0, { 1.1730, 1, 3.3705, 0 } }, { "NIKON", "COOLPIX P7100", Incandescent, 6, { 1.0753, 1, 3.7693, 0 } }, { "NIKON", "COOLPIX P7100", WhiteFluorescent, -6, { 2.0020, 1, 2.6158, 0 } }, { "NIKON", "COOLPIX P7100", WhiteFluorescent, 0, { 1.8456, 1, 2.9326, 0 } }, { "NIKON", "COOLPIX P7100", WhiteFluorescent, 6, { 1.6970, 1, 3.2805, 0 } }, { "NIKON", "COOLPIX P7100", DayWhiteFluorescent, -6, { 1.9707, 1, 1.9003, 0 } }, { "NIKON", "COOLPIX P7100", DayWhiteFluorescent, 0, { 1.8182, 1, 2.1310, 0 } }, { "NIKON", "COOLPIX P7100", DayWhiteFluorescent, 6, { 1.6696, 1, 2.3812, 0 } }, { "NIKON", "COOLPIX P7100", DaylightFluorescent, -6, { 2.3069, 1, 1.5601, 0 } }, { "NIKON", "COOLPIX P7100", DaylightFluorescent, 0, { 2.1271, 1, 1.7517, 0 } }, { "NIKON", "COOLPIX P7100", DaylightFluorescent, 6, { 1.9550, 1, 1.9589, 0 } }, { "NIKON", "COOLPIX P7100", Cloudy, -6, { 1.9707, 1, 1.6540, 0 } }, { "NIKON", "COOLPIX P7100", Cloudy, 0, { 1.8182, 1, 1.8534, 0 } }, { "NIKON", "COOLPIX P7100", Cloudy, 6, { 1.6696, 1, 2.0723, 0 } }, { "NIKON", "COOLPIX P7100", Flash, -6, { 2.3148, 1, 1.4780, 0 } }, { "NIKON", "COOLPIX P7100", Flash, 0, { 2.1349, 1, 1.6579, 0 } }, { "NIKON", "COOLPIX P7100", Flash, 6, { 1.9629, 1, 1.8534, 0 } }, { "NIKON", "D1", Incandescent, -3, { 1, 1.439891, 2.125769, 0 } }, { "NIKON", "D1", Incandescent, 0, { 1, 1.582583, 2.556096, 0 } }, { "NIKON", "D1", Incandescent, 3, { 1, 1.745033, 3.044175, 0 } }, { "NIKON", "D1", Fluorescent, -3, { 1, 1.013461, 1.489820, 0 } }, { "NIKON", "D1", Fluorescent, 0, { 1, 1.077710, 1.672660, 0 } }, { "NIKON", "D1", Fluorescent, 3, { 1, 1.143167, 1.875227, 0 } }, { "NIKON", "D1", DirectSunlight, -3, { 1.084705, 1.039344, 1, 0 } }, { "NIKON", "D1", DirectSunlight, 0, { 1.000000, 1.000000, 1, 0 } }, { "NIKON", "D1", DirectSunlight, 3, { 1, 1.049801, 1.109411, 0 } }, { "NIKON", "D1", Flash, -3, { 1.317409, 1.116197, 1, 0 } }, { "NIKON", "D1", Flash, 0, { 1.235772, 1.078231, 1, 0 } }, { "NIKON", "D1", Flash, 3, { 1.100855, 1.016026, 1, 0 } }, { "NIKON", "D1", Cloudy, -3, { 1.241160, 1.116197, 1, 0 } }, { "NIKON", "D1", Cloudy, 0, { 1.162116, 1.078231, 1, 0 } }, { "NIKON", "D1", Cloudy, 3, { 1.063923, 1.032573, 1, 0 } }, { "NIKON", "D1", Shade, -3, { 1.361330, 1.191729, 1, 0 } }, { "NIKON", "D1", Shade, 0, { 1.284963, 1.136201, 1, 0 } }, { "NIKON", "D1", Shade, 3, { 1.205117, 1.096886, 1, 0 } }, { "NIKON", "D1H", Incandescent, -3, { 1.503906, 1, 1.832031, 0 } }, { "NIKON", "D1H", Incandescent, 0, { 1.363281, 1, 1.996094, 0 } }, { "NIKON", "D1H", Incandescent, 3, { 1.246094, 1, 2.148438, 0 } }, { "NIKON", "D1H", Fluorescent, -3, { 2.546875, 1, 1.175781, 0 } }, { "NIKON", "D1H", Fluorescent, 0, { 1.925781, 1, 2.054688, 0 } }, { "NIKON", "D1H", Fluorescent, 3, { 1.234375, 1, 2.171875, 0 } }, { "NIKON", "D1H", DirectSunlight, -3, { 2.230469, 1, 1.187500, 0 } }, { "NIKON", "D1H", DirectSunlight, 0, { 2.148438, 1, 1.246094, 0 } }, { "NIKON", "D1H", DirectSunlight, 3, { 2.066406, 1, 1.316406, 0 } }, { "NIKON", "D1H", Flash, -3, { 2.453125, 1, 1.117188, 0 } }, { "NIKON", "D1H", Flash, 0, { 2.347656, 1, 1.140625, 0 } }, { "NIKON", "D1H", Flash, 3, { 2.242188, 1, 1.164062, 0 } }, { "NIKON", "D1H", Cloudy, -3, { 2.441406, 1, 1.046875, 0 } }, { "NIKON", "D1H", Cloudy, 0, { 2.300781, 1, 1.128906, 0 } }, { "NIKON", "D1H", Cloudy, 3, { 2.207031, 1, 1.199219, 0 } }, { "NIKON", "D1H", Shade, -3, { 2.839844, 1, 1.000000, 0 } }, { "NIKON", "D1H", Shade, 0, { 2.628906, 1, 1.011719, 0 } }, { "NIKON", "D1H", Shade, 3, { 2.441406, 1, 1.046875, 0 } }, { "NIKON", "D1X", Incandescent, -3, { 1.503906, 1, 1.832031, 0 } }, /*3250K*/ { "NIKON", "D1X", Incandescent, -2, { 1.445312, 1, 1.890625, 0 } }, /*3150K*/ { "NIKON", "D1X", Incandescent, -1, { 1.410156, 1, 1.937500, 0 } }, /*3100K*/ { "NIKON", "D1X", Incandescent, 0, { 1.363281, 1, 1.996094, 0 } }, /*3000K*/ { "NIKON", "D1X", Incandescent, 1, { 1.316406, 1, 2.042969, 0 } }, /*2900K*/ { "NIKON", "D1X", Incandescent, 2, { 1.281250, 1, 2.101562, 0 } }, /*2800K*/ { "NIKON", "D1X", Incandescent, 3, { 1.246094, 1, 2.148438, 0 } }, /*2700K*/ { "NIKON", "D1X", Fluorescent, -3, { 2.546875, 1, 1.175781, 0 } }, /*7200K*/ { "NIKON", "D1X", Fluorescent, -2, { 2.464844, 1, 1.210938, 0 } }, /*6500K*/ { "NIKON", "D1X", Fluorescent, -1, { 2.160156, 1, 1.386719, 0 } }, /*5000K*/ { "NIKON", "D1X", Fluorescent, 0, { 1.925781, 1, 2.054688, 0 } }, /*4200K*/ { "NIKON", "D1X", Fluorescent, 1, { 1.703125, 1, 2.277344, 0 } }, /*3700K*/ { "NIKON", "D1X", Fluorescent, 2, { 1.328125, 1, 2.394531, 0 } }, /*3000K*/ { "NIKON", "D1X", Fluorescent, 3, { 1.234375, 1, 2.171875, 0 } }, /*2700K*/ { "NIKON", "D1X", DirectSunlight, -3, { 2.230469, 1, 1.187500, 0 } }, /*5600K*/ { "NIKON", "D1X", DirectSunlight, -2, { 2.207031, 1, 1.210938, 0 } }, /*5400K*/ { "NIKON", "D1X", DirectSunlight, -1, { 2.171875, 1, 1.222656, 0 } }, /*5300K*/ { "NIKON", "D1X", DirectSunlight, 0, { 2.148438, 1, 1.246094, 0 } }, /*5200K*/ { "NIKON", "D1X", DirectSunlight, 1, { 2.113281, 1, 1.269531, 0 } }, /*5000K*/ { "NIKON", "D1X", DirectSunlight, 2, { 2.089844, 1, 1.292969, 0 } }, /*4900K*/ { "NIKON", "D1X", DirectSunlight, 3, { 2.066406, 1, 1.316406, 0 } }, /*4800K*/ { "NIKON", "D1X", Flash, -3, { 2.453125, 1, 1.117188, 0 } }, /*6000K*/ { "NIKON", "D1X", Flash, -2, { 2.417969, 1, 1.128906, 0 } }, /*5800K*/ { "NIKON", "D1X", Flash, -1, { 2.382812, 1, 1.128906, 0 } }, /*5600K*/ { "NIKON", "D1X", Flash, 0, { 2.347656, 1, 1.140625, 0 } }, /*5400K*/ { "NIKON", "D1X", Flash, 1, { 2.312500, 1, 1.152344, 0 } }, /*5200K*/ { "NIKON", "D1X", Flash, 2, { 2.277344, 1, 1.164062, 0 } }, /*5000K*/ { "NIKON", "D1X", Flash, 3, { 2.242188, 1, 1.164062, 0 } }, /*4800K*/ { "NIKON", "D1X", Cloudy, -3, { 2.441406, 1, 1.046875, 0 } }, /*6600K*/ { "NIKON", "D1X", Cloudy, -2, { 2.394531, 1, 1.082031, 0 } }, /*6400K*/ { "NIKON", "D1X", Cloudy, -1, { 2.347656, 1, 1.105469, 0 } }, /*6200K*/ { "NIKON", "D1X", Cloudy, 0, { 2.300781, 1, 1.128906, 0 } }, /*6000K*/ { "NIKON", "D1X", Cloudy, 1, { 2.253906, 1, 1.164062, 0 } }, /*5800K*/ { "NIKON", "D1X", Cloudy, 2, { 2.230469, 1, 1.187500, 0 } }, /*5600K*/ { "NIKON", "D1X", Cloudy, 3, { 2.207031, 1, 1.199219, 0 } }, /*5400K*/ { "NIKON", "D1X", Shade, -3, { 2.839844, 1, 1.000000, 0 } }, /*9200K*/ { "NIKON", "D1X", Shade, -2, { 2.769531, 1, 1.000000, 0 } }, /*8800K*/ { "NIKON", "D1X", Shade, -1, { 2.699219, 1, 1.000000, 0 } }, /*8400K*/ { "NIKON", "D1X", Shade, 0, { 2.628906, 1, 1.011719, 0 } }, /*8000K*/ { "NIKON", "D1X", Shade, 1, { 2.558594, 1, 1.023438, 0 } }, /*7500K*/ { "NIKON", "D1X", Shade, 2, { 2.500000, 1, 1.035156, 0 } }, /*7100K*/ { "NIKON", "D1X", Shade, 3, { 2.441406, 1, 1.046875, 0 } }, /*6700K*/ /* * D2X with firmware A 1.01 and B 1.01 */ /* D2X basic + fine tune presets */ { "NIKON", "D2X", Incandescent, -3, { 0.98462, 1, 2.61154, 0 } }, /*3300K*/ { "NIKON", "D2X", Incandescent, -2, { 0.95880, 1, 2.71536, 0 } }, /*3200K*/ { "NIKON", "D2X", Incandescent, -1, { 0.94465, 1, 2.77122, 0 } }, /*3100K*/ { "NIKON", "D2X", Incandescent, 0, { 0.92086, 1, 2.89928, 0 } }, /*3000K*/ { "NIKON", "D2X", Incandescent, 1, { 0.89510, 1, 3.03846, 0 } }, /*2900K*/ { "NIKON", "D2X", Incandescent, 2, { 0.86486, 1, 3.17905, 0 } }, /*2800K*/ { "NIKON", "D2X", Incandescent, 3, { 0.83388, 1, 3.34528, 0 } }, /*2700K*/ { "NIKON", "D2X", Fluorescent, -3, { 2.01562, 1, 1.72266, 0 } }, /*7200K*/ { "NIKON", "D2X", Fluorescent, -2, { 1.67969, 1, 1.42578, 0 } }, /*6500K*/ { "NIKON", "D2X", Fluorescent, -1, { 1.42969, 1, 1.80078, 0 } }, /*5000K*/ { "NIKON", "D2X", Fluorescent, 0, { 1.42969, 1, 2.62891, 0 } }, /*4200K*/ { "NIKON", "D2X", Fluorescent, 1, { 1.13672, 1, 3.02734, 0 } }, /*3700K*/ { "NIKON", "D2X", Fluorescent, 2, { 0.94118, 1, 2.68498, 0 } }, /*3000K*/ { "NIKON", "D2X", Fluorescent, 3, { 0.83388, 1, 3.51140, 0 } }, /*2700K*/ { "NIKON", "D2X", DirectSunlight, -3, { 1.61328, 1, 1.61328, 0 } }, /*5600K*/ { "NIKON", "D2X", DirectSunlight, -2, { 1.57031, 1, 1.65234, 0 } }, /*5400K*/ { "NIKON", "D2X", DirectSunlight, -1, { 1.55078, 1, 1.67578, 0 } }, /*5300K*/ { "NIKON", "D2X", DirectSunlight, 0, { 1.52734, 1, 1.69531, 0 } }, /*5200K*/ { "NIKON", "D2X", DirectSunlight, 1, { 1.48438, 1, 1.74609, 0 } }, /*5000K*/ { "NIKON", "D2X", DirectSunlight, 2, { 1.45312, 1, 1.76953, 0 } }, /*4900K*/ { "NIKON", "D2X", DirectSunlight, 3, { 1.42578, 1, 1.78906, 0 } }, /*4800K*/ { "NIKON", "D2X", Flash, -3, { 1.71484, 1, 1.48438, 0 } }, /*6000K*/ { "NIKON", "D2X", Flash, -2, { 1.67578, 1, 1.48438, 0 } }, /*5800K*/ { "NIKON", "D2X", Flash, -1, { 1.66797, 1, 1.50781, 0 } }, /*5600K*/ { "NIKON", "D2X", Flash, 0, { 1.66016, 1, 1.53125, 0 } }, /*5400K*/ { "NIKON", "D2X", Flash, 1, { 1.64453, 1, 1.54297, 0 } }, /*5200K*/ { "NIKON", "D2X", Flash, 2, { 1.62891, 1, 1.54297, 0 } }, /*5000K*/ { "NIKON", "D2X", Flash, 3, { 1.57031, 1, 1.56641, 0 } }, /*4800K*/ { "NIKON", "D2X", Cloudy, -3, { 1.79297, 1, 1.46875, 0 } }, /*6600K*/ { "NIKON", "D2X", Cloudy, -2, { 1.76172, 1, 1.49219, 0 } }, /*6400K*/ { "NIKON", "D2X", Cloudy, -1, { 1.72656, 1, 1.51953, 0 } }, /*6200K*/ { "NIKON", "D2X", Cloudy, 0, { 1.69141, 1, 1.54688, 0 } }, /*6000K*/ { "NIKON", "D2X", Cloudy, 1, { 1.65234, 1, 1.57812, 0 } }, /*5800K*/ { "NIKON", "D2X", Cloudy, 2, { 1.61328, 1, 1.61328, 0 } }, /*5600K*/ { "NIKON", "D2X", Cloudy, 3, { 1.57031, 1, 1.65234, 0 } }, /*5400K*/ { "NIKON", "D2X", Shade, -3, { 2.10938, 1, 1.23828, 0 } }, /*9200K*/ { "NIKON", "D2X", Shade, -2, { 2.07031, 1, 1.26562, 0 } }, /*8800K*/ { "NIKON", "D2X", Shade, -1, { 2.02734, 1, 1.29688, 0 } }, /*8400K*/ { "NIKON", "D2X", Shade, 0, { 1.98047, 1, 1.32812, 0 } }, /*8000K*/ { "NIKON", "D2X", Shade, 1, { 1.92188, 1, 1.37109, 0 } }, /*7500K*/ { "NIKON", "D2X", Shade, 2, { 1.86719, 1, 1.41406, 0 } }, /*7100K*/ { "NIKON", "D2X", Shade, 3, { 1.80859, 1, 1.45703, 0 } }, /*6700K*/ /* D2X Kelvin presets */ { "NIKON", "D2X", "2500K", 0, { 0.74203, 1, 3.67536, 0 } }, { "NIKON", "D2X", "2550K", 0, { 0.76877, 1, 3.58859, 0 } }, { "NIKON", "D2X", "2650K", 0, { 0.81529, 1, 3.42675, 0 } }, { "NIKON", "D2X", "2700K", 0, { 0.83388, 1, 3.34528, 0 } }, { "NIKON", "D2X", "2800K", 0, { 0.86486, 1, 3.17905, 0 } }, { "NIKON", "D2X", "2850K", 0, { 0.87973, 1, 3.10309, 0 } }, { "NIKON", "D2X", "2950K", 0, { 0.90780, 1, 2.96454, 0 } }, { "NIKON", "D2X", "3000K", 0, { 0.92086, 1, 2.89928, 0 } }, { "NIKON", "D2X", "3100K", 0, { 0.94465, 1, 2.77122, 0 } }, { "NIKON", "D2X", "3200K", 0, { 0.96970, 1, 2.65530, 0 } }, { "NIKON", "D2X", "3300K", 0, { 0.99611, 1, 2.55642, 0 } }, { "NIKON", "D2X", "3400K", 0, { 1.01953, 1, 2.46484, 0 } }, { "NIKON", "D2X", "3600K", 0, { 1.07422, 1, 2.34375, 0 } }, { "NIKON", "D2X", "3700K", 0, { 1.09766, 1, 2.26172, 0 } }, { "NIKON", "D2X", "3800K", 0, { 1.12500, 1, 2.18750, 0 } }, { "NIKON", "D2X", "4000K", 0, { 1.17969, 1, 2.06250, 0 } }, { "NIKON", "D2X", "4200K", 0, { 1.24219, 1, 1.96094, 0 } }, { "NIKON", "D2X", "4300K", 0, { 1.27344, 1, 1.91797, 0 } }, { "NIKON", "D2X", "4500K", 0, { 1.33594, 1, 1.83984, 0 } }, { "NIKON", "D2X", "4800K", 0, { 1.42578, 1, 1.78906, 0 } }, { "NIKON", "D2X", "5000K", 0, { 1.48438, 1, 1.74609, 0 } }, { "NIKON", "D2X", "5300K", 0, { 1.55078, 1, 1.67578, 0 } }, { "NIKON", "D2X", "5600K", 0, { 1.61328, 1, 1.61328, 0 } }, { "NIKON", "D2X", "5900K", 0, { 1.67188, 1, 1.56250, 0 } }, { "NIKON", "D2X", "6300K", 0, { 1.74219, 1, 1.50391, 0 } }, { "NIKON", "D2X", "6700K", 0, { 1.80859, 1, 1.45703, 0 } }, { "NIKON", "D2X", "7100K", 0, { 1.86719, 1, 1.41406, 0 } }, { "NIKON", "D2X", "7700K", 0, { 1.94531, 1, 1.35547, 0 } }, { "NIKON", "D2X", "8300K", 0, { 2.01562, 1, 1.30469, 0 } }, { "NIKON", "D2X", "9100K", 0, { 2.09766, 1, 1.24609, 0 } }, { "NIKON", "D2X", "10000K", 0, { 2.17578, 1, 1.18359, 0 } }, { "NIKON", "D3", Daylight, 0, { 1.81640, 1, 1.35546, 0 } }, { "NIKON", "D3", Flash, 0, { 2.03906, 1, 1.17187, 0 } }, { "NIKON", "D3", Cloudy, 0, { 1.94921, 1, 1.22265, 0 } }, { "NIKON", "D3", Shade, 0, { 2.24609, 1, 1.08593, 0 } }, { "NIKON", "D3", Incandescent, 0, { 1.16796, 1, 2.31640, 0 } }, { "NIKON", "D3", Fluorescent, 0, { 1.68750, 1, 2.10156, 0 } }, { "NIKON", "D3", "2500K", 0, { 1.00390, 1, 3.00000, 0 } }, { "NIKON", "D3", "2560K", 0, { 1.02343, 1, 2.89062, 0 } }, { "NIKON", "D3", "2630K", 0, { 1.04296, 1, 2.78125, 0 } }, { "NIKON", "D3", "2700K", 0, { 1.06640, 1, 2.67968, 0 } }, { "NIKON", "D3", "2780K", 0, { 1.09375, 1, 2.57812, 0 } }, { "NIKON", "D3", "2860K", 0, { 1.11718, 1, 2.47656, 0 } }, { "NIKON", "D3", "2940K", 0, { 1.14843, 1, 2.38281, 0 } }, { "NIKON", "D3", "3000K", 0, { 1.16796, 1, 2.31640, 0 } }, { "NIKON", "D3", "3030K", 0, { 1.17578, 1, 2.28906, 0 } }, { "NIKON", "D3", "3130K", 0, { 1.20703, 1, 2.19921, 0 } }, { "NIKON", "D3", "3230K", 0, { 1.24218, 1, 2.10937, 0 } }, { "NIKON", "D3", "3330K", 0, { 1.27734, 1, 2.02343, 0 } }, { "NIKON", "D3", "3450K", 0, { 1.31350, 1, 1.94140, 0 } }, { "NIKON", "D3", "3570K", 0, { 1.35156, 1, 1.85937, 0 } }, { "NIKON", "D3", "3700K", 0, { 1.39062, 1, 1.78125, 0 } }, { "NIKON", "D3", "3850K", 0, { 1.43359, 1, 1.70703, 0 } }, { "NIKON", "D3", "4000K", 0, { 1.47656, 1, 1.63281, 0 } }, { "NIKON", "D3", "4170K", 0, { 1.52343, 1, 1.56640, 0 } }, { "NIKON", "D3", "4350K", 0, { 1.60156, 1, 1.55078, 0 } }, { "NIKON", "D3", "4550K", 0, { 1.66406, 1, 1.51562, 0 } }, { "NIKON", "D3", "4760K", 0, { 1.72265, 1, 1.46093, 0 } }, { "NIKON", "D3", "5000K", 0, { 1.77734, 1, 1.40234, 0 } }, { "NIKON", "D3", "5200K", 0, { 1.81640, 1, 1.35546, 0 } }, { "NIKON", "D3", "5260K", 0, { 1.82812, 1, 1.34375, 0 } }, { "NIKON", "D3", "5560K", 0, { 1.87890, 1, 1.28515, 0 } }, { "NIKON", "D3", "5880K", 0, { 1.93359, 1, 1.23437, 0 } }, { "NIKON", "D3", "6000K", 0, { 1.94921, 1, 1.22265, 0 } }, { "NIKON", "D3", "6250K", 0, { 1.99218, 1, 1.19140, 0 } }, { "NIKON", "D3", "6400K", 0, { 2.03906, 1, 1.17187, 0 } }, { "NIKON", "D3", "6670K", 0, { 2.05468, 1, 1.15625, 0 } }, { "NIKON", "D3", "7140K", 0, { 2.12500, 1, 1.12500, 0 } }, { "NIKON", "D3", "7690K", 0, { 2.20312, 1, 1.09765, 0 } }, { "NIKON", "D3", "8000K", 0, { 2.24609, 1, 1.08593, 0 } }, { "NIKON", "D3", "8330K", 0, { 2.28906, 1, 1.07031, 0 } }, { "NIKON", "D3", "9090K", 0, { 2.38281, 1, 1.03515, 0 } }, { "NIKON", "D3", "10000K", 0, { 2.48046, 1, 1.00000, 0 } }, { "NIKON", "D3S", Incandescent, 0, { 1.191406, 1, 2.242188, 0 } }, { "NIKON", "D3S", SodiumVaporFluorescent, 0, { 1.132812, 1, 2.511719, 0 } }, { "NIKON", "D3S", WarmWhiteFluorescent, 0, { 1.179688, 1, 1.996094, 0 } }, { "NIKON", "D3S", WhiteFluorescent, 0, { 1.394531, 1, 2.402344, 0 } }, { "NIKON", "D3S", CoolWhiteFluorescent, 0, { 1.703125, 1, 2.066406, 0 } }, { "NIKON", "D3S", DayWhiteFluorescent, 0, { 1.710938, 1, 1.390625, 0 } }, { "NIKON", "D3S", DaylightFluorescent, 0, { 1.941406, 1, 1.113281, 0 } }, { "NIKON", "D3S", HighTempMercuryVaporFluorescent, 0, { 2.289062, 1, 1.355469, 0 } }, { "NIKON", "D3S", DirectSunlight, 0, { 1.835938, 1, 1.359375, 0 } }, { "NIKON", "D3S", Flash, 0, { 2.035156, 1, 1.183594, 0 } }, { "NIKON", "D3S", Cloudy, 0, { 1.964844, 1, 1.226562, 0 } }, { "NIKON", "D3S", Shade, 0, { 2.253906, 1, 1.089844, 0 } }, { "NIKON", "D3S", "2500K", 0, { 1.031250, 1, 2.851562, 0 } }, { "NIKON", "D3S", "2560K", 0, { 1.050781, 1, 2.753906, 0 } }, { "NIKON", "D3S", "2630K", 0, { 1.070312, 1, 2.656250, 0 } }, { "NIKON", "D3S", "2700K", 0, { 1.093750, 1, 2.558594, 0 } }, { "NIKON", "D3S", "2780K", 0, { 1.117188, 1, 2.468750, 0 } }, { "NIKON", "D3S", "2860K", 0, { 1.144531, 1, 2.382812, 0 } }, { "NIKON", "D3S", "2940K", 0, { 1.171875, 1, 2.300781, 0 } }, { "NIKON", "D3S", "3030K", 0, { 1.199219, 1, 2.214844, 0 } }, { "NIKON", "D3S", "3130K", 0, { 1.230469, 1, 2.125000, 0 } }, { "NIKON", "D3S", "3230K", 0, { 1.265625, 1, 2.050781, 0 } }, { "NIKON", "D3S", "3330K", 0, { 1.296875, 1, 1.984375, 0 } }, { "NIKON", "D3S", "3450K", 0, { 1.335938, 1, 1.921875, 0 } }, { "NIKON", "D3S", "3570K", 0, { 1.375000, 1, 1.843750, 0 } }, { "NIKON", "D3S", "3700K", 0, { 1.414062, 1, 1.769531, 0 } }, { "NIKON", "D3S", "3850K", 0, { 1.453125, 1, 1.695312, 0 } }, { "NIKON", "D3S", "4000K", 0, { 1.500000, 1, 1.628906, 0 } }, { "NIKON", "D3S", "4170K", 0, { 1.542969, 1, 1.562500, 0 } }, { "NIKON", "D3S", "4350K", 0, { 1.621094, 1, 1.550781, 0 } }, { "NIKON", "D3S", "4550K", 0, { 1.687500, 1, 1.511719, 0 } }, { "NIKON", "D3S", "4760K", 0, { 1.742188, 1, 1.460938, 0 } }, { "NIKON", "D3S", "5000K", 0, { 1.796875, 1, 1.402344, 0 } }, { "NIKON", "D3S", "5260K", 0, { 1.847656, 1, 1.343750, 0 } }, { "NIKON", "D3S", "5560K", 0, { 1.894531, 1, 1.292969, 0 } }, { "NIKON", "D3S", "5880K", 0, { 1.949219, 1, 1.242188, 0 } }, { "NIKON", "D3S", "6250K", 0, { 2.003906, 1, 1.199219, 0 } }, { "NIKON", "D3S", "6670K", 0, { 2.066406, 1, 1.160156, 0 } }, { "NIKON", "D3S", "7140K", 0, { 2.140625, 1, 1.132812, 0 } }, { "NIKON", "D3S", "7690K", 0, { 2.214844, 1, 1.101562, 0 } }, { "NIKON", "D3S", "8330K", 0, { 2.292969, 1, 1.070312, 0 } }, { "NIKON", "D3S", "9090K", 0, { 2.390625, 1, 1.046875, 0 } }, { "NIKON", "D3S", "10000K", 0, { 2.492188, 1, 1.003906, 0 } }, /* D3X with firmware A 1.00 and B 1.01 */ { "NIKON", "D3X", Incandescent, -4, { 1.441406, 1, 2.125000, 0 } }, { "NIKON", "D3X", Incandescent, -3, { 1.421875, 1, 2.167969, 0 } }, { "NIKON", "D3X", Incandescent, -2, { 1.402344, 1, 2.210938, 0 } }, { "NIKON", "D3X", Incandescent, -1, { 1.382813, 1, 2.250000, 0 } }, { "NIKON", "D3X", Incandescent, 0, { 1.367188, 1, 2.292969, 0 } }, { "NIKON", "D3X", Incandescent, 1, { 1.351563, 1, 2.332031, 0 } }, { "NIKON", "D3X", Incandescent, 2, { 1.332031, 1, 2.371093, 0 } }, { "NIKON", "D3X", Incandescent, 3, { 1.316406, 1, 2.414063, 0 } }, { "NIKON", "D3X", Incandescent, 4, { 1.300781, 1, 2.457031, 0 } }, { "NIKON", "D3X", Fluorescent, -4, { 2.183594, 1, 1.980469, 0 } }, { "NIKON", "D3X", Fluorescent, -3, { 2.136719, 1, 2.015625, 0 } }, { "NIKON", "D3X", Fluorescent, -2, { 2.089844, 1, 2.054688, 0 } }, { "NIKON", "D3X", Fluorescent, -1, { 2.039064, 1, 2.089844, 0 } }, { "NIKON", "D3X", Fluorescent, 0, { 1.984375, 1, 2.128906, 0 } }, { "NIKON", "D3X", Fluorescent, 1, { 1.929688, 1, 2.167969, 0 } }, { "NIKON", "D3X", Fluorescent, 2, { 1.875000, 1, 2.207031, 0 } }, { "NIKON", "D3X", Fluorescent, 3, { 1.816406, 1, 2.246094, 0 } }, { "NIKON", "D3X", Fluorescent, 4, { 1.753906, 1, 2.292969, 0 } }, { "NIKON", "D3X", DirectSunlight, -4, { 2.289063, 1, 1.308594, 0 } }, { "NIKON", "D3X", DirectSunlight, -3, { 2.253906, 1, 1.335938, 0 } }, { "NIKON", "D3X", DirectSunlight, -2, { 2.222656, 1, 1.359375, 0 } }, { "NIKON", "D3X", DirectSunlight, -1, { 2.187500, 1, 1.386719, 0 } }, { "NIKON", "D3X", DirectSunlight, 0, { 2.156250, 1, 1.417969, 0 } }, { "NIKON", "D3X", DirectSunlight, 1, { 2.125000, 1, 1.445313, 0 } }, { "NIKON", "D3X", DirectSunlight, 2, { 2.093750, 1, 1.472656, 0 } }, { "NIKON", "D3X", DirectSunlight, 3, { 2.062500, 1, 1.496094, 0 } }, { "NIKON", "D3X", DirectSunlight, 4, { 2.027344, 1, 1.519531, 0 } }, { "NIKON", "D3X", Flash, -4, { 2.566406, 1, 1.183594, 0 } }, { "NIKON", "D3X", Flash, -3, { 2.523438, 1, 1.199219, 0 } }, { "NIKON", "D3X", Flash, -2, { 2.484375, 1, 1.214844, 0 } }, { "NIKON", "D3X", Flash, -1, { 2.445313, 1, 1.226563, 0 } }, { "NIKON", "D3X", Flash, 0, { 2.402344, 1, 1.242187, 0 } }, { "NIKON", "D3X", Flash, 1, { 2.371094, 1, 1.257813, 0 } }, { "NIKON", "D3X", Flash, 2, { 2.343750, 1, 1.273438, 0 } }, { "NIKON", "D3X", Flash, 3, { 2.320313, 1, 1.292969, 0 } }, { "NIKON", "D3X", Flash, 4, { 2.289063, 1, 1.308594, 0 } }, { "NIKON", "D3X", Cloudy, -4, { 2.488281, 1, 1.214844, 0 } }, { "NIKON", "D3X", Cloudy, -3, { 2.445313, 1, 1.230469, 0 } }, { "NIKON", "D3X", Cloudy, -2, { 2.406250, 1, 1.250000, 0 } }, { "NIKON", "D3X", Cloudy, -1, { 2.363281, 1, 1.265625, 0 } }, { "NIKON", "D3X", Cloudy, 0, { 2.328125, 1, 1.289062, 0 } }, { "NIKON", "D3X", Cloudy, 1, { 2.289063, 1, 1.308594, 0 } }, { "NIKON", "D3X", Cloudy, 2, { 2.253906, 1, 1.335938, 0 } }, { "NIKON", "D3X", Cloudy, 3, { 2.222656, 1, 1.359375, 0 } }, { "NIKON", "D3X", Cloudy, 4, { 2.187500, 1, 1.386719, 0 } }, { "NIKON", "D3X", Shade, -4, { 2.937500, 1, 1.089844, 0 } }, { "NIKON", "D3X", Shade, -3, { 2.878906, 1, 1.113281, 0 } }, { "NIKON", "D3X", Shade, -2, { 2.820313, 1, 1.128906, 0 } }, { "NIKON", "D3X", Shade, -1, { 2.761719, 1, 1.144531, 0 } }, { "NIKON", "D3X", Shade, 0, { 2.707031, 1, 1.160156, 0 } }, { "NIKON", "D3X", Shade, 1, { 2.652344, 1, 1.171875, 0 } }, { "NIKON", "D3X", Shade, 2, { 2.601563, 1, 1.183594, 0 } }, { "NIKON", "D3X", Shade, 3, { 2.554688, 1, 1.199219, 0 } }, { "NIKON", "D3X", Shade, 4, { 2.507813, 1, 1.210938, 0 } }, /* D3X Kelvin presets */ { "NIKON", "D3X", "2500K", 0, { 1.179688, 1, 2.898438, 0 } }, { "NIKON", "D3X", "2560K", 0, { 1.203125, 1, 2.796875, 0 } }, { "NIKON", "D3X", "2630K", 0, { 1.226563, 1, 2.699219, 0 } }, { "NIKON", "D3X", "2700K", 0, { 1.253906, 1, 2.605469, 0 } }, { "NIKON", "D3X", "2780K", 0, { 1.281250, 1, 2.519531, 0 } }, { "NIKON", "D3X", "2860K", 0, { 1.312500, 1, 2.429688, 0 } }, { "NIKON", "D3X", "2940K", 0, { 1.343750, 1, 2.347656, 0 } }, { "NIKON", "D3X", "3030K", 0, { 1.378906, 1, 2.269531, 0 } }, { "NIKON", "D3X", "3130K", 0, { 1.414063, 1, 2.187500, 0 } }, { "NIKON", "D3X", "3230K", 0, { 1.453125, 1, 2.097656, 0 } }, { "NIKON", "D3X", "3330K", 0, { 1.492187, 1, 2.015625, 0 } }, { "NIKON", "D3X", "3450K", 0, { 1.539062, 1, 1.933594, 0 } }, { "NIKON", "D3X", "3570K", 0, { 1.585937, 1, 1.859375, 0 } }, { "NIKON", "D3X", "3700K", 0, { 1.636719, 1, 1.792969, 0 } }, { "NIKON", "D3X", "3850K", 0, { 1.695312, 1, 1.734375, 0 } }, { "NIKON", "D3X", "4000K", 0, { 1.753906, 1, 1.683594, 0 } }, { "NIKON", "D3X", "4170K", 0, { 1.824219, 1, 1.636719, 0 } }, { "NIKON", "D3X", "4350K", 0, { 1.902344, 1, 1.593750, 0 } }, { "NIKON", "D3X", "4550K", 0, { 1.976562, 1, 1.554687, 0 } }, { "NIKON", "D3X", "4760K", 0, { 2.042969, 1, 1.511719, 0 } }, { "NIKON", "D3X", "5000K", 0, { 2.105469, 1, 1.460938, 0 } }, { "NIKON", "D3X", "5260K", 0, { 2.167969, 1, 1.406250, 0 } }, { "NIKON", "D3X", "5560K", 0, { 2.234375, 1, 1.351563, 0 } }, { "NIKON", "D3X", "5880K", 0, { 2.304688, 1, 1.300781, 0 } }, { "NIKON", "D3X", "6250K", 0, { 2.378906, 1, 1.257813, 0 } }, { "NIKON", "D3X", "6670K", 0, { 2.464844, 1, 1.226562, 0 } }, { "NIKON", "D3X", "7140K", 0, { 2.554687, 1, 1.199219, 0 } }, { "NIKON", "D3X", "7690K", 0, { 2.652344, 1, 1.171875, 0 } }, { "NIKON", "D3X", "8330K", 0, { 2.761719, 1, 1.144531, 0 } }, { "NIKON", "D3X", "9090K", 0, { 2.878906, 1, 1.113281, 0 } }, { "NIKON", "D3X", "10000K", 0, { 3.000000, 1, 1.062500, 0 } }, { "NIKON", "D4", Incandescent, 0, { 1.281250, 1, 2.371094, 0 } }, { "NIKON", "D4", SodiumVaporFluorescent, 0, { 1.195313, 1, 2.589844, 0 } }, { "NIKON", "D4", WarmWhiteFluorescent, 0, { 1.277344, 1, 2.109375, 0 } }, { "NIKON", "D4", WhiteFluorescent, 0, { 1.488281, 1, 2.476563, 0 } }, { "NIKON", "D4", CoolWhiteFluorescent, 0, { 1.855469, 1, 2.156250, 0 } }, { "NIKON", "D4", DayWhiteFluorescent, 0, { 1.867188, 1, 1.476563, 0 } }, { "NIKON", "D4", DaylightFluorescent, 0, { 2.132813, 1, 1.156250, 0 } }, { "NIKON", "D4", HighTempMercuryVaporFluorescent, 0, { 2.546875, 1, 1.425781, 0 } }, { "NIKON", "D4", DirectSunlight, 0, { 2.019531, 1, 1.437500, 0 } }, { "NIKON", "D4", Flash, 0, { 2.300781, 1, 1.253906, 0 } }, { "NIKON", "D4", Cloudy, 0, { 2.175781, 1, 1.300781, 0 } }, { "NIKON", "D4", Shade, 0, { 2.511719, 1, 1.164063, 0 } }, { "NIKON", "D4", "2500K", 0, { 1.097656, 1, 3.027344, 0 } }, { "NIKON", "D4", "2600K", 0, { 1.132813, 1, 2.859375, 0 } }, { "NIKON", "D4", "2700K", 0, { 1.167969, 1, 2.710938, 0 } }, { "NIKON", "D4", "2800K", 0, { 1.207031, 1, 2.582031, 0 } }, { "NIKON", "D4", "2900K", 0, { 1.246094, 1, 2.464844, 0 } }, { "NIKON", "D4", "3000K", 0, { 1.281250, 1, 2.363281, 0 } }, { "NIKON", "D4", "3200K", 0, { 1.355469, 1, 2.195313, 0 } }, { "NIKON", "D4", "3400K", 0, { 1.425781, 1, 2.054688, 0 } }, { "NIKON", "D4", "3600K", 0, { 1.496094, 1, 1.929688, 0 } }, { "NIKON", "D4", "3800K", 0, { 1.558594, 1, 1.812500, 0 } }, { "NIKON", "D4", "4000K", 0, { 1.628906, 1, 1.718750, 0 } }, { "NIKON", "D4", "4200K", 0, { 1.703125, 1, 1.660156, 0 } }, { "NIKON", "D4", "4400K", 0, { 1.781250, 1, 1.621094, 0 } }, { "NIKON", "D4", "4600K", 0, { 1.859375, 1, 1.589844, 0 } }, { "NIKON", "D4", "4800K", 0, { 1.921875, 1, 1.539063, 0 } }, { "NIKON", "D4", "5000K", 0, { 1.972656, 1, 1.488281, 0 } }, { "NIKON", "D4", "5300K", 0, { 2.039063, 1, 1.417969, 0 } }, { "NIKON", "D4", "5600K", 0, { 2.097656, 1, 1.359375, 0 } }, { "NIKON", "D4", "5900K", 0, { 2.152344, 1, 1.308594, 0 } }, { "NIKON", "D4", "6200K", 0, { 2.207031, 1, 1.273438, 0 } }, { "NIKON", "D4", "6500K", 0, { 2.261719, 1, 1.242188, 0 } }, { "NIKON", "D4", "6800K", 0, { 2.312500, 1, 1.222656, 0 } }, { "NIKON", "D4", "7100K", 0, { 2.363281, 1, 1.203125, 0 } }, { "NIKON", "D4", "7500K", 0, { 2.433594, 1, 1.183594, 0 } }, { "NIKON", "D4", "8000K", 0, { 2.511719, 1, 1.160156, 0 } }, { "NIKON", "D4", "8500K", 0, { 2.589844, 1, 1.140625, 0 } }, { "NIKON", "D4", "9000K", 0, { 2.660156, 1, 1.117188, 0 } }, { "NIKON", "D4", "9500K", 0, { 2.730469, 1, 1.093750, 0 } }, { "NIKON", "D4", "10000K", 0, { 2.792969, 1, 1.066406, 0 } }, { "NIKON", "D100", Incandescent, -3, { 1.527344, 1, 2.539062, 0 } }, /*3300K*/ { "NIKON", "D100", Incandescent, -2, { 1.476562, 1, 2.656250, 0 } }, /*3200K*/ { "NIKON", "D100", Incandescent, -1, { 1.457031, 1, 2.707031, 0 } }, /*3100K*/ { "NIKON", "D100", Incandescent, 0, { 1.406250, 1, 2.828125, 0 } }, /*3000K*/ { "NIKON", "D100", Incandescent, 1, { 1.367188, 1, 2.937500, 0 } }, /*2900K*/ { "NIKON", "D100", Incandescent, 2, { 1.316406, 1, 3.046875, 0 } }, /*2800K*/ { "NIKON", "D100", Incandescent, 3, { 1.269531, 1, 3.167969, 0 } }, /*2700K*/ { "NIKON", "D100", Fluorescent, -3, { 3.148438, 1, 1.847656, 0 } }, /*7200K*/ { "NIKON", "D100", Fluorescent, -2, { 2.609375, 1, 1.617187, 0 } }, /*6500K*/ { "NIKON", "D100", Fluorescent, -1, { 2.250000, 1, 2.039062, 0 } }, /*5000K*/ { "NIKON", "D100", Fluorescent, 0, { 2.058594, 1, 2.617187, 0 } }, /*4200K*/ { "NIKON", "D100", Fluorescent, 1, { 1.886719, 1, 2.726562, 0 } }, /*3700K*/ { "NIKON", "D100", Fluorescent, 2, { 1.429688, 1, 3.359375, 0 } }, /*3000K*/ { "NIKON", "D100", Fluorescent, 3, { 1.250000, 1, 2.699219, 0 } }, /*2700K*/ { "NIKON", "D100", DirectSunlight, -3, { 2.386719, 1, 1.687500, 0 } }, /*5600K*/ { "NIKON", "D100", DirectSunlight, -2, { 2.316406, 1, 1.726563, 0 } }, /*5400K*/ { "NIKON", "D100", DirectSunlight, -1, { 2.296875, 1, 1.738281, 0 } }, /*5300K*/ { "NIKON", "D100", DirectSunlight, 0, { 2.257812, 1, 1.757812, 0 } }, /*5200K*/ { "NIKON", "D100", DirectSunlight, 1, { 2.187500, 1, 1.796875, 0 } }, /*5000K*/ { "NIKON", "D100", DirectSunlight, 2, { 2.156250, 1, 1.816406, 0 } }, /*4900K*/ { "NIKON", "D100", DirectSunlight, 3, { 2.117187, 1, 1.847656, 0 } }, /*4800K*/ { "NIKON", "D100", Flash, -3, { 2.718750, 1, 1.519531, 0 } }, /*6000K*/ { "NIKON", "D100", Flash, -2, { 2.656250, 1, 1.527344, 0 } }, /*5800K*/ { "NIKON", "D100", Flash, -1, { 2.597656, 1, 1.527344, 0 } }, /*5600K*/ { "NIKON", "D100", Flash, 0, { 2.539062, 1, 1.539062, 0 } }, /*5400K*/ { "NIKON", "D100", Flash, 1, { 2.476562, 1, 1.539062, 0 } }, /*5200K*/ { "NIKON", "D100", Flash, 2, { 2.437500, 1, 1.546875, 0 } }, /*5000K*/ { "NIKON", "D100", Flash, 3, { 2.398438, 1, 1.546875, 0 } }, /*4800K*/ { "NIKON", "D100", Cloudy, -3, { 2.648438, 1, 1.558594, 0 } }, /*6600K*/ { "NIKON", "D100", Cloudy, -2, { 2.609375, 1, 1.578125, 0 } }, /*6400K*/ { "NIKON", "D100", Cloudy, -1, { 2.558594, 1, 1.597656, 0 } }, /*6200K*/ { "NIKON", "D100", Cloudy, 0, { 2.507813, 1, 1.628906, 0 } }, /*6000K*/ { "NIKON", "D100", Cloudy, 1, { 2.449219, 1, 1.656250, 0 } }, /*5800K*/ { "NIKON", "D100", Cloudy, 2, { 2.398438, 1, 1.687500, 0 } }, /*5600K*/ { "NIKON", "D100", Cloudy, 3, { 2.316406, 1, 1.726563, 0 } }, /*5400K*/ { "NIKON", "D100", Shade, -3, { 3.046875, 1, 1.386719, 0 } }, /*9200K*/ { "NIKON", "D100", Shade, -2, { 3.000000, 1, 1.406250, 0 } }, /*8800K*/ { "NIKON", "D100", Shade, -1, { 2.957031, 1, 1.417969, 0 } }, /*8400K*/ { "NIKON", "D100", Shade, 0, { 2.906250, 1, 1.437500, 0 } }, /*8000K*/ { "NIKON", "D100", Shade, 1, { 2.816406, 1, 1.476562, 0 } }, /*7500K*/ { "NIKON", "D100", Shade, 2, { 2.750000, 1, 1.519531, 0 } }, /*7100K*/ { "NIKON", "D100", Shade, 3, { 2.667969, 1, 1.546875, 0 } }, /*6700K*/ /* D200 basic + fine tune WB presets */ { "NIKON", "D200", Incandescent, -2, { 1.199219, 1, 2.238281, 0 } }, { "NIKON", "D200", Incandescent, -1, { 1.183594, 1, 2.289063, 0 } }, { "NIKON", "D200", Incandescent, 0, { 1.148437, 1, 2.398438, 0 } }, { "NIKON", "D200", Incandescent, 1, { 1.113281, 1, 2.519531, 0 } }, { "NIKON", "D200", Incandescent, 2, { 1.074219, 1, 2.648438, 0 } }, { "NIKON", "D200", Incandescent, 3, { 1.031250, 1, 2.804688, 0 } }, { "NIKON", "D200", Fluorescent, -3, { 2.273438, 1, 1.410156, 0 } }, { "NIKON", "D200", Fluorescent, -2, { 1.933594, 1, 1.152344, 0 } }, { "NIKON", "D200", Fluorescent, -1, { 1.675781, 1, 1.453125, 0 } }, { "NIKON", "D200", Fluorescent, 0, { 1.664062, 1, 2.148437, 0 } }, { "NIKON", "D200", Fluorescent, 1, { 1.335937, 1, 2.453125, 0 } }, { "NIKON", "D200", Fluorescent, 2, { 1.140625, 1, 2.214844, 0 } }, { "NIKON", "D200", Fluorescent, 3, { 1.035156, 1, 2.410156, 0 } }, { "NIKON", "D200", DirectSunlight, -3, { 1.863281, 1, 1.320312, 0 } }, { "NIKON", "D200", DirectSunlight, -2, { 1.835938, 1, 1.355469, 0 } }, { "NIKON", "D200", DirectSunlight, -1, { 1.820313, 1, 1.375000, 0 } }, { "NIKON", "D200", DirectSunlight, 0, { 1.804688, 1, 1.398437, 0 } }, { "NIKON", "D200", DirectSunlight, 1, { 1.746094, 1, 1.425781, 0 } }, { "NIKON", "D200", DirectSunlight, 2, { 1.714844, 1, 1.437500, 0 } }, { "NIKON", "D200", DirectSunlight, 3, { 1.687500, 1, 1.449219, 0 } }, { "NIKON", "D200", Flash, -3, { 2.066406, 1, 1.183594, 0 } }, { "NIKON", "D200", Flash, -2, { 2.046875, 1, 1.191406, 0 } }, { "NIKON", "D200", Flash, -1, { 2.027344, 1, 1.199219, 0 } }, { "NIKON", "D200", Flash, 0, { 2.007813, 1, 1.171875, 0 } }, { "NIKON", "D200", Flash, 1, { 1.984375, 1, 1.207031, 0 } }, { "NIKON", "D200", Flash, 2, { 1.964844, 1, 1.214844, 0 } }, { "NIKON", "D200", Flash, 3, { 1.945312, 1, 1.222656, 0 } }, { "NIKON", "D200", Cloudy, -3, { 2.027344, 1, 1.210937, 0 } }, { "NIKON", "D200", Cloudy, -2, { 1.992187, 1, 1.226562, 0 } }, { "NIKON", "D200", Cloudy, -1, { 1.953125, 1, 1.242187, 0 } }, { "NIKON", "D200", Cloudy, 0, { 1.917969, 1, 1.261719, 0 } }, { "NIKON", "D200", Cloudy, 1, { 1.890625, 1, 1.285156, 0 } }, { "NIKON", "D200", Cloudy, 2, { 1.863281, 1, 1.320312, 0 } }, { "NIKON", "D200", Cloudy, 3, { 1.835938, 1, 1.355469, 0 } }, { "NIKON", "D200", Shade, -3, { 2.378906, 1, 1.066406, 0 } }, { "NIKON", "D200", Shade, -2, { 2.332031, 1, 1.085938, 0 } }, { "NIKON", "D200", Shade, -1, { 2.289063, 1, 1.105469, 0 } }, { "NIKON", "D200", Shade, 0, { 2.234375, 1, 1.125000, 0 } }, { "NIKON", "D200", Shade, 1, { 2.167969, 1, 1.152344, 0 } }, { "NIKON", "D200", Shade, 2, { 2.105469, 1, 1.175781, 0 } }, { "NIKON", "D200", Shade, 3, { 2.046875, 1, 1.199219, 0 } }, /* D200 Kelvin presets */ { "NIKON", "D200", "2500K", 0, { 1.000000, 1, 3.121094, 0 } }, { "NIKON", "D200", "2550K", 0, { 1.000000, 1, 3.035156, 0 } }, { "NIKON", "D200", "2650K", 0, { 1.011719, 1, 2.878906, 0 } }, { "NIKON", "D200", "2700K", 0, { 1.031250, 1, 2.804688, 0 } }, { "NIKON", "D200", "2800K", 0, { 1.074219, 1, 2.648438, 0 } }, { "NIKON", "D200", "2850K", 0, { 1.089844, 1, 2.589844, 0 } }, { "NIKON", "D200", "2950K", 0, { 1.132813, 1, 2.453125, 0 } }, { "NIKON", "D200", "3000K", 0, { 1.148438, 1, 2.398438, 0 } }, { "NIKON", "D200", "3100K", 0, { 1.183594, 1, 2.289063, 0 } }, { "NIKON", "D200", "3200K", 0, { 1.218750, 1, 2.187500, 0 } }, { "NIKON", "D200", "3300K", 0, { 1.250000, 1, 2.097656, 0 } }, { "NIKON", "D200", "3400K", 0, { 1.281250, 1, 2.015625, 0 } }, { "NIKON", "D200", "3600K", 0, { 1.343750, 1, 1.871094, 0 } }, { "NIKON", "D200", "3700K", 0, { 1.371094, 1, 1.820313, 0 } }, { "NIKON", "D200", "3800K", 0, { 1.402344, 1, 1.761719, 0 } }, { "NIKON", "D200", "4000K", 0, { 1.457031, 1, 1.667969, 0 } }, { "NIKON", "D200", "4200K", 0, { 1.511719, 1, 1.593750, 0 } }, { "NIKON", "D200", "4300K", 0, { 1.535156, 1, 1.558594, 0 } }, { "NIKON", "D200", "4500K", 0, { 1.589844, 1, 1.500000, 0 } }, { "NIKON", "D200", "4800K", 0, { 1.687500, 1, 1.449219, 0 } }, { "NIKON", "D200", "5000K", 0, { 1.746094, 1, 1.425781, 0 } }, { "NIKON", "D200", "5300K", 0, { 1.820313, 1, 1.375000, 0 } }, { "NIKON", "D200", "5600K", 0, { 1.863281, 1, 1.320313, 0 } }, { "NIKON", "D200", "5900K", 0, { 1.902344, 1, 1.273438, 0 } }, { "NIKON", "D200", "6300K", 0, { 1.972656, 1, 1.234375, 0 } }, { "NIKON", "D200", "6700K", 0, { 2.046875, 1, 1.199219, 0 } }, { "NIKON", "D200", "7100K", 0, { 2.105469, 1, 1.175781, 0 } }, { "NIKON", "D200", "7700K", 0, { 2.191406, 1, 1.144531, 0 } }, { "NIKON", "D200", "8300K", 0, { 2.277344, 1, 1.109375, 0 } }, { "NIKON", "D200", "9300K", 0, { 2.367188, 1, 1.070313, 0 } }, { "NIKON", "D200", "10000K", 0, { 2.453125, 1, 1.035156, 0 } }, { "NIKON", "D300", Incandescent, -6, { 1.097656, 1, 1.898438, 0 } }, { "NIKON", "D300", Incandescent, -5, { 1.085938, 1, 1.929688, 0 } }, { "NIKON", "D300", Incandescent, -4, { 1.070313, 1, 1.964844, 0 } }, { "NIKON", "D300", Incandescent, -3, { 1.058594, 1, 2.000000, 0 } }, { "NIKON", "D300", Incandescent, -2, { 1.042969, 1, 2.035156, 0 } }, { "NIKON", "D300", Incandescent, -1, { 1.031250, 1, 2.074219, 0 } }, { "NIKON", "D300", Incandescent, 0, { 1.019531, 1, 2.109375, 0 } }, { "NIKON", "D300", Incandescent, 1, { 1.007813, 1, 2.144531, 0 } }, { "NIKON", "D300", Incandescent, 2, { 0.996094, 1, 2.183594, 0 } }, { "NIKON", "D300", Incandescent, 3, { 0.984375, 1, 2.218750, 0 } }, { "NIKON", "D300", Incandescent, 4, { 0.972656, 1, 2.257813, 0 } }, { "NIKON", "D300", Incandescent, 5, { 0.964844, 1, 2.296875, 0 } }, { "NIKON", "D300", Incandescent, 6, { 0.953125, 1, 2.335938, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -6, { 1.031250, 1, 2.101563, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -5, { 1.015625, 1, 2.136719, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -4, { 1.003906, 1, 2.167969, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -3, { 0.988281, 1, 2.207031, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -2, { 0.976563, 1, 2.242188, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, -1, { 0.960938, 1, 2.281250, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 0, { 0.949219, 1, 2.320313, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 1, { 0.937500, 1, 2.363281, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 2, { 0.925781, 1, 2.410156, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 3, { 0.914063, 1, 2.457031, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 4, { 0.902344, 1, 2.503906, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 5, { 0.890625, 1, 2.558594, 0 } }, { "NIKON", "D300", SodiumVaporFluorescent, 6, { 0.878906, 1, 2.613281, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -6, { 1.128906, 1, 1.847656, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -5, { 1.113281, 1, 1.867188, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -4, { 1.097656, 1, 1.886719, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -3, { 1.085938, 1, 1.906250, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -2, { 1.070313, 1, 1.925781, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, -1, { 1.058594, 1, 1.945313, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 0, { 1.046875, 1, 1.960938, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 1, { 1.035156, 1, 1.980469, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 2, { 1.023438, 1, 1.996094, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 3, { 1.007813, 1, 2.015625, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 4, { 1.000000, 1, 2.031250, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 5, { 0.988281, 1, 2.046875, 0 } }, { "NIKON", "D300", WarmWhiteFluorescent, 6, { 0.976563, 1, 2.062500, 0 } }, { "NIKON", "D300", WhiteFluorescent, -6, { 1.453125, 1, 2.050781, 0 } }, { "NIKON", "D300", WhiteFluorescent, -5, { 1.414063, 1, 2.093750, 0 } }, { "NIKON", "D300", WhiteFluorescent, -4, { 1.371094, 1, 2.132813, 0 } }, { "NIKON", "D300", WhiteFluorescent, -3, { 1.328125, 1, 2.175781, 0 } }, { "NIKON", "D300", WhiteFluorescent, -2, { 1.285156, 1, 2.218750, 0 } }, { "NIKON", "D300", WhiteFluorescent, -1, { 1.238281, 1, 2.261719, 0 } }, { "NIKON", "D300", WhiteFluorescent, 0, { 1.191406, 1, 2.304688, 0 } }, { "NIKON", "D300", WhiteFluorescent, 1, { 1.140625, 1, 2.351563, 0 } }, { "NIKON", "D300", WhiteFluorescent, 2, { 1.089844, 1, 2.394531, 0 } }, { "NIKON", "D300", WhiteFluorescent, 3, { 1.039063, 1, 2.441406, 0 } }, { "NIKON", "D300", WhiteFluorescent, 4, { 0.984375, 1, 2.488281, 0 } }, { "NIKON", "D300", WhiteFluorescent, 5, { 0.925781, 1, 2.535156, 0 } }, { "NIKON", "D300", WhiteFluorescent, 6, { 0.867188, 1, 2.582031, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -6, { 1.667969, 1, 1.800781, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -5, { 1.636719, 1, 1.835938, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -4, { 1.605469, 1, 1.875000, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -3, { 1.574219, 1, 1.914063, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -2, { 1.539063, 1, 1.953125, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, -1, { 1.503906, 1, 1.996094, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 0, { 1.468750, 1, 2.035156, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 1, { 1.429688, 1, 2.074219, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 2, { 1.386719, 1, 2.117188, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 3, { 1.347656, 1, 2.160156, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 4, { 1.304688, 1, 2.203125, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 5, { 1.257813, 1, 2.246094, 0 } }, { "NIKON", "D300", CoolWhiteFluorescent, 6, { 1.210938, 1, 2.289063, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -6, { 1.625000, 1, 1.195313, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -5, { 1.601563, 1, 1.222656, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -4, { 1.582031, 1, 1.253906, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -3, { 1.558594, 1, 1.281250, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -2, { 1.535156, 1, 1.308594, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, -1, { 1.515625, 1, 1.335938, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 0, { 1.492188, 1, 1.363281, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 1, { 1.472656, 1, 1.390625, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 2, { 1.453125, 1, 1.417969, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 3, { 1.433594, 1, 1.441406, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 4, { 1.410156, 1, 1.468750, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 5, { 1.390625, 1, 1.492188, 0 } }, { "NIKON", "D300", DayWhiteFluorescent, 6, { 1.375000, 1, 1.519531, 0 } }, { "NIKON", "D300", DaylightFluorescent, -6, { 1.851563, 1, 1.000000, 0 } }, { "NIKON", "D300", DaylightFluorescent, -5, { 1.824219, 1, 1.000000, 0 } }, { "NIKON", "D300", DaylightFluorescent, -4, { 1.796875, 1, 1.000000, 0 } }, { "NIKON", "D300", DaylightFluorescent, -3, { 1.773438, 1, 1.007813, 0 } }, { "NIKON", "D300", DaylightFluorescent, -2, { 1.750000, 1, 1.039063, 0 } }, { "NIKON", "D300", DaylightFluorescent, -1, { 1.722656, 1, 1.070313, 0 } }, { "NIKON", "D300", DaylightFluorescent, 0, { 1.699219, 1, 1.101563, 0 } }, { "NIKON", "D300", DaylightFluorescent, 1, { 1.675781, 1, 1.128906, 0 } }, { "NIKON", "D300", DaylightFluorescent, 2, { 1.652344, 1, 1.160156, 0 } }, { "NIKON", "D300", DaylightFluorescent, 3, { 1.628906, 1, 1.187500, 0 } }, { "NIKON", "D300", DaylightFluorescent, 4, { 1.605469, 1, 1.218750, 0 } }, { "NIKON", "D300", DaylightFluorescent, 5, { 1.585938, 1, 1.246094, 0 } }, { "NIKON", "D300", DaylightFluorescent, 6, { 1.562500, 1, 1.273438, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -6, { 2.039063, 1, 1.156250, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -5, { 2.027344, 1, 1.183594, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -4, { 2.015625, 1, 1.210938, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -3, { 2.003906, 1, 1.238281, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -2, { 1.992188, 1, 1.269531, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, -1, { 1.976563, 1, 1.300781, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 0, { 1.960938, 1, 1.328125, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 1, { 1.945313, 1, 1.359375, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 2, { 1.929688, 1, 1.390625, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 3, { 1.914063, 1, 1.421875, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 4, { 1.894531, 1, 1.457031, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 5, { 1.875000, 1, 1.488281, 0 } }, { "NIKON", "D300", HighTempMercuryVaporFluorescent, 6, { 1.855469, 1, 1.523438, 0 } }, { "NIKON", "D300", DirectSunlight, -6, { 1.687500, 1, 1.167969, 0 } }, { "NIKON", "D300", DirectSunlight, -5, { 1.664063, 1, 1.187500, 0 } }, { "NIKON", "D300", DirectSunlight, -4, { 1.644531, 1, 1.207031, 0 } }, { "NIKON", "D300", DirectSunlight, -3, { 1.625000, 1, 1.230469, 0 } }, { "NIKON", "D300", DirectSunlight, -2, { 1.601563, 1, 1.253906, 0 } }, { "NIKON", "D300", DirectSunlight, -1, { 1.582031, 1, 1.281250, 0 } }, { "NIKON", "D300", DirectSunlight, 0, { 1.562500, 1, 1.308594, 0 } }, { "NIKON", "D300", DirectSunlight, 1, { 1.542969, 1, 1.335938, 0 } }, { "NIKON", "D300", DirectSunlight, 2, { 1.523438, 1, 1.359375, 0 } }, { "NIKON", "D300", DirectSunlight, 3, { 1.503906, 1, 1.386719, 0 } }, { "NIKON", "D300", DirectSunlight, 4, { 1.480469, 1, 1.414063, 0 } }, { "NIKON", "D300", DirectSunlight, 5, { 1.457031, 1, 1.437500, 0 } }, { "NIKON", "D300", DirectSunlight, 6, { 1.429688, 1, 1.457031, 0 } }, { "NIKON", "D300", Flash, -6, { 1.910156, 1, 1.058594, 0 } }, { "NIKON", "D300", Flash, -5, { 1.863281, 1, 1.078125, 0 } }, { "NIKON", "D300", Flash, -4, { 1.820313, 1, 1.093750, 0 } }, { "NIKON", "D300", Flash, -3, { 1.781250, 1, 1.105469, 0 } }, { "NIKON", "D300", Flash, -2, { 1.746094, 1, 1.121094, 0 } }, { "NIKON", "D300", Flash, -1, { 1.714844, 1, 1.136719, 0 } }, { "NIKON", "D300", Flash, 0, { 1.687500, 1, 1.152344, 0 } }, { "NIKON", "D300", Flash, 1, { 1.660156, 1, 1.164063, 0 } }, { "NIKON", "D300", Flash, 2, { 1.636719, 1, 1.179688, 0 } }, { "NIKON", "D300", Flash, 3, { 1.613281, 1, 1.195313, 0 } }, { "NIKON", "D300", Flash, 4, { 1.593750, 1, 1.210938, 0 } }, { "NIKON", "D300", Flash, 5, { 1.574219, 1, 1.230469, 0 } }, { "NIKON", "D300", Flash, 6, { 1.554688, 1, 1.246094, 0 } }, { "NIKON", "D300", Cloudy, -6, { 1.820313, 1, 1.093750, 0 } }, { "NIKON", "D300", Cloudy, -5, { 1.789063, 1, 1.105469, 0 } }, { "NIKON", "D300", Cloudy, -4, { 1.761719, 1, 1.117188, 0 } }, { "NIKON", "D300", Cloudy, -3, { 1.734375, 1, 1.132813, 0 } }, { "NIKON", "D300", Cloudy, -2, { 1.710938, 1, 1.148438, 0 } }, { "NIKON", "D300", Cloudy, -1, { 1.687500, 1, 1.167969, 0 } }, { "NIKON", "D300", Cloudy, 0, { 1.664063, 1, 1.187500, 0 } }, { "NIKON", "D300", Cloudy, 1, { 1.644531, 1, 1.207031, 0 } }, { "NIKON", "D300", Cloudy, 2, { 1.625000, 1, 1.230469, 0 } }, { "NIKON", "D300", Cloudy, 3, { 1.601563, 1, 1.253906, 0 } }, { "NIKON", "D300", Cloudy, 4, { 1.582031, 1, 1.281250, 0 } }, { "NIKON", "D300", Cloudy, 5, { 1.562500, 1, 1.308594, 0 } }, { "NIKON", "D300", Cloudy, 6, { 1.542969, 1, 1.335938, 0 } }, { "NIKON", "D300", Shade, -6, { 2.156250, 1, 1.000000, 0 } }, { "NIKON", "D300", Shade, -5, { 2.109375, 1, 1.000000, 0 } }, { "NIKON", "D300", Shade, -4, { 2.062500, 1, 1.011719, 0 } }, { "NIKON", "D300", Shade, -3, { 2.019531, 1, 1.027344, 0 } }, { "NIKON", "D300", Shade, -2, { 1.976563, 1, 1.042969, 0 } }, { "NIKON", "D300", Shade, -1, { 1.937500, 1, 1.054688, 0 } }, { "NIKON", "D300", Shade, 0, { 1.902344, 1, 1.066406, 0 } }, { "NIKON", "D300", Shade, 1, { 1.867188, 1, 1.074219, 0 } }, { "NIKON", "D300", Shade, 2, { 1.832031, 1, 1.085938, 0 } }, { "NIKON", "D300", Shade, 3, { 1.804688, 1, 1.097656, 0 } }, { "NIKON", "D300", Shade, 4, { 1.773438, 1, 1.113281, 0 } }, { "NIKON", "D300", Shade, 5, { 1.746094, 1, 1.125000, 0 } }, { "NIKON", "D300", Shade, 6, { 1.722656, 1, 1.140625, 0 } }, { "NIKON", "D300", "2500K", 0, { 0.894531, 1, 2.632813, 0 } }, { "NIKON", "D300", "2560K", 0, { 0.906250, 1, 2.550781, 0 } }, { "NIKON", "D300", "2630K", 0, { 0.921875, 1, 2.468750, 0 } }, { "NIKON", "D300", "2700K", 0, { 0.941406, 1, 2.390625, 0 } }, { "NIKON", "D300", "2780K", 0, { 0.960938, 1, 2.312500, 0 } }, { "NIKON", "D300", "2860K", 0, { 0.980469, 1, 2.234375, 0 } }, { "NIKON", "D300", "2940K", 0, { 1.003906, 1, 2.160156, 0 } }, { "NIKON", "D300", "3030K", 0, { 1.027344, 1, 2.085938, 0 } }, { "NIKON", "D300", "3130K", 0, { 1.050781, 1, 2.015625, 0 } }, { "NIKON", "D300", "3230K", 0, { 1.078125, 1, 1.945313, 0 } }, { "NIKON", "D300", "3330K", 0, { 1.109375, 1, 1.875000, 0 } }, { "NIKON", "D300", "3450K", 0, { 1.136719, 1, 1.808594, 0 } }, { "NIKON", "D300", "3570K", 0, { 1.167969, 1, 1.742188, 0 } }, { "NIKON", "D300", "3700K", 0, { 1.203125, 1, 1.679688, 0 } }, { "NIKON", "D300", "3850K", 0, { 1.238281, 1, 1.617188, 0 } }, { "NIKON", "D300", "4000K", 0, { 1.277344, 1, 1.554688, 0 } }, { "NIKON", "D300", "4170K", 0, { 1.316406, 1, 1.500000, 0 } }, { "NIKON", "D300", "4350K", 0, { 1.386719, 1, 1.484375, 0 } }, { "NIKON", "D300", "4550K", 0, { 1.441406, 1, 1.449219, 0 } }, { "NIKON", "D300", "4760K", 0, { 1.488281, 1, 1.402344, 0 } }, { "NIKON", "D300", "5000K", 0, { 1.531250, 1, 1.351563, 0 } }, { "NIKON", "D300", "5260K", 0, { 1.570313, 1, 1.296875, 0 } }, { "NIKON", "D300", "5560K", 0, { 1.613281, 1, 1.246094, 0 } }, { "NIKON", "D300", "5880K", 0, { 1.652344, 1, 1.199219, 0 } }, { "NIKON", "D300", "6250K", 0, { 1.695313, 1, 1.160156, 0 } }, { "NIKON", "D300", "6670K", 0, { 1.746094, 1, 1.125000, 0 } }, { "NIKON", "D300", "7140K", 0, { 1.804688, 1, 1.097656, 0 } }, { "NIKON", "D300", "7690K", 0, { 1.867188, 1, 1.074219, 0 } }, { "NIKON", "D300", "8330K", 0, { 1.937500, 1, 1.054688, 0 } }, { "NIKON", "D300", "9090K", 0, { 2.019531, 1, 1.027344, 0 } }, { "NIKON", "D300", "10000K", 0, { 2.109375, 1, 1.000000, 0 } }, { "NIKON", "D300S", DirectSunlight, -6, { 1.687, 1, 1.168, 0 } }, { "NIKON", "D300S", DirectSunlight, 0, { 1.563, 1, 1.309, 0 } }, { "NIKON", "D300S", DirectSunlight, 6, { 1.430, 1, 1.457, 0 } }, { "NIKON", "D300S", Flash, -6, { 1.910, 1, 1.059, 0 } }, { "NIKON", "D300S", Flash, 0, { 1.687, 1, 1.152, 0 } }, { "NIKON", "D300S", Flash, 6, { 1.555, 1, 1.246, 0 } }, { "NIKON", "D300S", Cloudy, -6, { 1.820, 1, 1.094, 0 } }, { "NIKON", "D300S", Cloudy, 0, { 1.664, 1, 1.187, 0 } }, { "NIKON", "D300S", Cloudy, 6, { 1.543, 1, 1.336, 0 } }, { "NIKON", "D300S", Shade, -6, { 2.156, 1, 1.000, 0 } }, { "NIKON", "D300S", Shade, 0, { 1.902, 1, 1.066, 0 } }, { "NIKON", "D300S", Shade, 6, { 1.723, 1, 1.141, 0 } }, { "NIKON", "D300S", Incandescent, -6, { 1.098, 1, 1.898, 0 } }, { "NIKON", "D300S", Incandescent, 0, { 1.020, 1, 2.109, 0 } }, { "NIKON", "D300S", Incandescent, 6, { 1, 1.049, 2.451, 0 } }, { "NIKON", "D300S", SodiumVaporFluorescent, -6, { 1.031, 1, 2.102, 0 } }, { "NIKON", "D300S", SodiumVaporFluorescent, 0, { 1, 1.053, 2.444, 0 } }, { "NIKON", "D300S", SodiumVaporFluorescent, 6, { 1, 1.138, 2.973, 0 } }, { "NIKON", "D300S", WarmWhiteFluorescent, -6, { 1.129, 1, 1.848, 0 } }, { "NIKON", "D300S", WarmWhiteFluorescent, 0, { 1.047, 1, 1.961, 0 } }, { "NIKON", "D300S", WarmWhiteFluorescent, 6, { 1, 1.024, 2.112, 0 } }, { "NIKON", "D300S", WhiteFluorescent, -6, { 1.453, 1, 2.051, 0 } }, { "NIKON", "D300S", WhiteFluorescent, 0, { 1.191, 1, 2.305, 0 } }, { "NIKON", "D300S", WhiteFluorescent, 6, { 1, 1.153, 2.977, 0 } }, { "NIKON", "D300S", CoolWhiteFluorescent, -6, { 1.668, 1, 1.801, 0 } }, { "NIKON", "D300S", CoolWhiteFluorescent, 0, { 1.469, 1, 2.035, 0 } }, { "NIKON", "D300S", CoolWhiteFluorescent, 6, { 1.211, 1, 2.289, 0 } }, { "NIKON", "D300S", DayWhiteFluorescent, -6, { 1.625, 1, 1.195, 0 } }, { "NIKON", "D300S", DayWhiteFluorescent, 0, { 1.492, 1, 1.363, 0 } }, { "NIKON", "D300S", DayWhiteFluorescent, 6, { 1.375, 1, 1.520, 0 } }, { "NIKON", "D300S", DaylightFluorescent, -6, { 1.852, 1, 1.000, 0 } }, { "NIKON", "D300S", DaylightFluorescent, 0, { 1.699, 1, 1.102, 0 } }, { "NIKON", "D300S", DaylightFluorescent, 6, { 1.563, 1, 1.273, 0 } }, { "NIKON", "D300S", HighTempMercuryVaporFluorescent, -6, { 2.039, 1, 1.156, 0 } }, { "NIKON", "D300S", HighTempMercuryVaporFluorescent, 0, { 1.961, 1, 1.328, 0 } }, { "NIKON", "D300S", HighTempMercuryVaporFluorescent, 6, { 1.855, 1, 1.523, 0 } }, { "NIKON", "D600", DirectSunlight, 0, { 1.906250, 1, 1.390625, 0 } }, { "NIKON", "D600", Flash, 0, { 2.136719, 1, 1.214844, 0 } }, { "NIKON", "D600", Cloudy, 0, { 2.039063, 1, 1.261719, 0 } }, { "NIKON", "D600", Shade, 0, { 2.328125, 1, 1.136719, 0 } }, { "NIKON", "D600", Incandescent, 0, { 1.226563, 1, 2.214844, 0 } }, { "NIKON", "D600", SodiumVaporFluorescent, 0, { 1.148438, 1, 2.433594, 0 } }, { "NIKON", "D600", WarmWhiteFluorescent, 0, { 1.230469, 1, 1.953125, 0 } }, { "NIKON", "D600", WhiteFluorescent, 0, { 1.421875, 1, 2.281250, 0 } }, { "NIKON", "D600", CoolWhiteFluorescent, 0, { 1.730469, 1, 2.003906, 0 } }, { "NIKON", "D600", DayWhiteFluorescent, 0, { 1.777344, 1, 1.375000, 0 } }, { "NIKON", "D600", DaylightFluorescent, 0, { 2.039063, 1, 1.117188, 0 } }, { "NIKON", "D600", HighTempMercuryVaporFluorescent, 0, { 2.332031, 1, 1.355469, 0 } }, { "NIKON", "D700", DirectSunlight, -6, { 1.980469, 1, 1.199219, 0 } }, { "NIKON", "D700", DirectSunlight, 0, { 1.816406, 1, 1.355469, 0 } }, { "NIKON", "D700", DirectSunlight, 6, { 1.652344, 1, 1.523437, 0 } }, { "NIKON", "D700", Flash, -6, { 2.261719, 1, 1.082031, 0 } }, { "NIKON", "D700", Flash, 0, { 2.039063, 1, 1.171875, 0 } }, { "NIKON", "D700", Flash, 6, { 1.871094, 1, 1.281250, 0 } }, { "NIKON", "D700", Cloudy, -6, { 2.148437, 1, 1.117187, 0 } }, { "NIKON", "D700", Cloudy, 0, { 1.949219, 1, 1.222656, 0 } }, { "NIKON", "D700", Cloudy, 6, { 1.792969, 1, 1.386719, 0 } }, { "NIKON", "D700", Shade, -6, { 2.535156, 1, 1.000000, 0 } }, { "NIKON", "D700", Shade, 0, { 2.246094, 1, 1.085937, 0 } }, { "NIKON", "D700", Shade, 6, { 2.023438, 1, 1.171875, 0 } }, { "NIKON", "D700", Incandescent , -6, { 1.265625, 1, 2.050781, 0 } }, { "NIKON", "D700", Incandescent , 0, { 1.167969, 1, 2.316406, 0 } }, { "NIKON", "D700", Incandescent , 6, { 1.085938, 1, 2.605469, 0 } }, { "NIKON", "D700", SodiumVaporFluorescent, -6, { 1.175781, 1, 2.191406, 0 } }, { "NIKON", "D700", SodiumVaporFluorescent, 0, { 1.062500, 1, 2.464844, 0 } }, { "NIKON", "D700", SodiumVaporFluorescent, 6, { 1.000000, 1, 2.789062, 0 } }, { "NIKON", "D700", WarmWhiteFluorescent, -6, { 1.269531, 1, 1.968750, 0 } }, { "NIKON", "D700", WarmWhiteFluorescent, 0, { 1.167969, 1, 2.109375, 0 } }, { "NIKON", "D700", WarmWhiteFluorescent, 6, { 1.078125, 1, 2.230469, 0 } }, { "NIKON", "D700", WhiteFluorescent, -6, { 1.671875, 1, 2.121094, 0 } }, { "NIKON", "D700", WhiteFluorescent, 0, { 1.363281, 1, 2.425781, 0 } }, { "NIKON", "D700", WhiteFluorescent, 6, { 1, 1.015873, 2.813492, 0 } }, { "NIKON", "D700", CoolWhiteFluorescent, -6, { 1.929687, 1, 1.835938, 0 } }, { "NIKON", "D700", CoolWhiteFluorescent, 0, { 1.687500, 1, 2.101563, 0 } }, { "NIKON", "D700", CoolWhiteFluorescent, 6, { 1.386719, 1, 2.406250, 0 } }, { "NIKON", "D700", DayWhiteFluorescent, -6, { 1.867188, 1, 1.218750, 0 } }, { "NIKON", "D700", DayWhiteFluorescent, 0, { 1.710938, 1, 1.410156, 0 } }, { "NIKON", "D700", DayWhiteFluorescent, 6, { 1.570313, 1, 1.585938, 0 } }, { "NIKON", "D700", DaylightFluorescent, -6, { 2.128906, 1, 1.000000, 0 } }, { "NIKON", "D700", DaylightFluorescent, 0, { 1.953125, 1, 1.113281, 0 } }, { "NIKON", "D700", DaylightFluorescent, 6, { 1.792969, 1, 1.308594, 0 } }, { "NIKON", "D700", HighTempMercuryVaporFluorescent, -6, { 2.378906, 1, 1.218750, 0 } }, { "NIKON", "D700", HighTempMercuryVaporFluorescent, 0, { 2.289063, 1, 1.363281, 0 } }, { "NIKON", "D700", HighTempMercuryVaporFluorescent, 6, { 2.164063, 1, 1.542969, 0 } }, { "NIKON", "D700", "2500K", 0, { 1.003906, 1, 3.000000, 0 } }, { "NIKON", "D700", "2560K", 0, { 1.023438, 1, 2.890625, 0 } }, { "NIKON", "D700", "2630K", 0, { 1.042969, 1, 2.781250, 0 } }, { "NIKON", "D700", "2700K", 0, { 1.066406, 1, 2.679687, 0 } }, { "NIKON", "D700", "2780K", 0, { 1.093750, 1, 2.578125, 0 } }, { "NIKON", "D700", "2860K", 0, { 1.117187, 1, 2.476562, 0 } }, { "NIKON", "D700", "2940K", 0, { 1.148437, 1, 2.382812, 0 } }, { "NIKON", "D700", "3030K", 0, { 1.175781, 1, 2.289063, 0 } }, { "NIKON", "D700", "3130K", 0, { 1.207031, 1, 2.199219, 0 } }, { "NIKON", "D700", "3230K", 0, { 1.242188, 1, 2.109375, 0 } }, { "NIKON", "D700", "3330K", 0, { 1.277344, 1, 2.023438, 0 } }, { "NIKON", "D700", "3450K", 0, { 1.312500, 1, 1.941406, 0 } }, { "NIKON", "D700", "3570K", 0, { 1.351562, 1, 1.859375, 0 } }, { "NIKON", "D700", "3700K", 0, { 1.390625, 1, 1.781250, 0 } }, { "NIKON", "D700", "3850K", 0, { 1.433594, 1, 1.707031, 0 } }, { "NIKON", "D700", "4000K", 0, { 1.476563, 1, 1.632813, 0 } }, { "NIKON", "D700", "4170K", 0, { 1.523437, 1, 1.566406, 0 } }, { "NIKON", "D700", "4350K", 0, { 1.601562, 1, 1.550781, 0 } }, { "NIKON", "D700", "4760K", 0, { 1.722656, 1, 1.460938, 0 } }, { "NIKON", "D700", "5000K", 0, { 1.777344, 1, 1.402344, 0 } }, { "NIKON", "D700", "5260K", 0, { 1.828125, 1, 1.343750, 0 } }, { "NIKON", "D700", "5560K", 0, { 1.878906, 1, 1.285156, 0 } }, { "NIKON", "D700", "5880K", 0, { 1.933594, 1, 1.234375, 0 } }, { "NIKON", "D700", "6250K", 0, { 1.992187, 1, 1.191406, 0 } }, { "NIKON", "D700", "6670K", 0, { 2.054688, 1, 1.156250, 0 } }, { "NIKON", "D700", "7140K", 0, { 2.125000, 1, 1.125000, 0 } }, { "NIKON", "D700", "7690K", 0, { 2.203125, 1, 1.097656, 0 } }, { "NIKON", "D700", "8330K", 0, { 2.289063, 1, 1.070313, 0 } }, { "NIKON", "D700", "9090K", 0, { 2.382812, 1, 1.035156, 0 } }, { "NIKON", "D700", "10000K", 0, { 2.480469, 1, 1.000000, 0 } }, { "NIKON", "D800", Incandescent, -6, { 1.39062500, 1, 1.98437500, 0 } }, { "NIKON", "D800", Incandescent, 0, { 1.28906250, 1, 2.17578125, 0 } }, { "NIKON", "D800", Incandescent, 6, { 1.19921875, 1, 2.42968750, 0 } }, { "NIKON", "D800", CoolWhiteFluorescent, -6, { 2.00390625, 1, 1.76953125, 0 } }, { "NIKON", "D800", CoolWhiteFluorescent, 0, { 1.76562500, 1, 2.00390625, 0 } }, { "NIKON", "D800", CoolWhiteFluorescent, 6, { 1.48046875, 1, 2.25781250, 0 } }, { "NIKON", "D800", DirectSunlight, -6, { 2.12890625, 1, 1.23046875, 0 } }, { "NIKON", "D800", DirectSunlight, 0, { 1.97265625, 1, 1.37500000, 0 } }, { "NIKON", "D800", DirectSunlight, 6, { 1.80468750, 1, 1.53125000, 0 } }, { "NIKON", "D800", Flash, -6, { 2.39843750, 1, 1.12500000, 0 } }, { "NIKON", "D800", Flash, 0, { 2.18750000, 1, 1.20703125, 0 } }, { "NIKON", "D800", Flash, 6, { 2.02734375, 1, 1.30078125, 0 } }, { "NIKON", "D800", Cloudy, -6, { 2.29296875, 1, 1.15625000, 0 } }, { "NIKON", "D800", Cloudy, 0, { 2.10156250, 1, 1.25390625, 0 } }, { "NIKON", "D800", Cloudy, 6, { 1.94531250, 1, 1.40234375, 0 } }, { "NIKON", "D800", Shade, -6, { 2.68750000, 1, 1.01562500, 0 } }, { "NIKON", "D800", Shade, 0, { 2.37890625, 1, 1.12890625, 0 } }, { "NIKON", "D800", Shade, 6, { 2.16796875, 1, 1.20703125, 0 } }, { "NIKON", "D800", "2700K", 0, { 1.17968750, 1, 2.48828125, 0 } }, { "NIKON", "D800", "5000K", 0, { 1.92968750, 1, 1.41796875, 0 } }, { "NIKON", "D800E", Incandescent, -6, { 1.39062500, 1, 1.98437500, 0 } }, { "NIKON", "D800E", Incandescent, 0, { 1.28906250, 1, 2.17578125, 0 } }, { "NIKON", "D800E", Incandescent, 6, { 1.19921875, 1, 2.42968750, 0 } }, { "NIKON", "D800E", CoolWhiteFluorescent, -6, { 2.00390625, 1, 1.76953125, 0 } }, { "NIKON", "D800E", CoolWhiteFluorescent, 0, { 1.76562500, 1, 2.00390625, 0 } }, { "NIKON", "D800E", CoolWhiteFluorescent, 6, { 1.48046875, 1, 2.25781250, 0 } }, { "NIKON", "D800E", DirectSunlight, -6, { 2.12890625, 1, 1.23046875, 0 } }, { "NIKON", "D800E", DirectSunlight, 0, { 1.97265625, 1, 1.37500000, 0 } }, { "NIKON", "D800E", DirectSunlight, 6, { 1.80468750, 1, 1.53125000, 0 } }, { "NIKON", "D800E", Flash, -6, { 2.39843750, 1, 1.12500000, 0 } }, { "NIKON", "D800E", Flash, 0, { 2.18750000, 1, 1.20703125, 0 } }, { "NIKON", "D800E", Flash, 6, { 2.02734375, 1, 1.30078125, 0 } }, { "NIKON", "D800E", Cloudy, -6, { 2.29296875, 1, 1.15625000, 0 } }, { "NIKON", "D800E", Cloudy, 0, { 2.10156250, 1, 1.25390625, 0 } }, { "NIKON", "D800E", Cloudy, 6, { 1.94531250, 1, 1.40234375, 0 } }, { "NIKON", "D800E", Shade, -6, { 2.68750000, 1, 1.01562500, 0 } }, { "NIKON", "D800E", Shade, 0, { 2.37890625, 1, 1.12890625, 0 } }, { "NIKON", "D800E", Shade, 6, { 2.16796875, 1, 1.20703125, 0 } }, { "NIKON", "D800E", "2700K", 0, { 1.17968750, 1, 2.48828125, 0 } }, { "NIKON", "D800E", "5000K", 0, { 1.92968750, 1, 1.41796875, 0 } }, { "NIKON", "D40", Incandescent, -3, { 1.492188, 1, 2.164063, 0 } }, { "NIKON", "D40", Incandescent, -2, { 1.437500, 1, 2.367188, 0 } }, { "NIKON", "D40", Incandescent, -1, { 1.417969, 1, 2.414062, 0 } }, { "NIKON", "D40", Incandescent, 0, { 1.375000, 1, 2.511719, 0 } }, { "NIKON", "D40", Incandescent, 1, { 1.324219, 1, 2.628906, 0 } }, { "NIKON", "D40", Incandescent, 2, { 1.277344, 1, 2.753906, 0 } }, { "NIKON", "D40", Incandescent, 3, { 1.222656, 1, 2.914063, 0 } }, { "NIKON", "D40", Fluorescent, -3, { 2.738281, 1, 1.492188, 0 } }, { "NIKON", "D40", Fluorescent, -2, { 2.417969, 1, 1.246094, 0 } }, { "NIKON", "D40", Fluorescent, -1, { 2.093750, 1, 1.570312, 0 } }, { "NIKON", "D40", Fluorescent, 0, { 2.007813, 1, 2.269531, 0 } }, { "NIKON", "D40", Fluorescent, 1, { 1.613281, 1, 2.593750, 0 } }, { "NIKON", "D40", Fluorescent, 2, { 1.394531, 1, 2.343750, 0 } }, { "NIKON", "D40", Fluorescent, 3, { 1.210938, 1, 2.621094, 0 } }, { "NIKON", "D40", DirectSunlight, -3, { 2.328125, 1, 1.371094, 0 } }, { "NIKON", "D40", DirectSunlight, -2, { 2.269531, 1, 1.394531, 0 } }, { "NIKON", "D40", DirectSunlight, -1, { 2.230469, 1, 1.410156, 0 } }, { "NIKON", "D40", DirectSunlight, 0, { 2.195313, 1, 1.421875, 0 } }, { "NIKON", "D40", DirectSunlight, 1, { 2.113281, 1, 1.445312, 0 } }, { "NIKON", "D40", DirectSunlight, 2, { 2.070312, 1, 1.453125, 0 } }, { "NIKON", "D40", DirectSunlight, 3, { 2.039063, 1, 1.457031, 0 } }, { "NIKON", "D40", Flash, -3, { 2.667969, 1, 1.214844, 0 } }, { "NIKON", "D40", Flash, -2, { 2.605469, 1, 1.234375, 0 } }, { "NIKON", "D40", Flash, -1, { 2.539062, 1, 1.257812, 0 } }, { "NIKON", "D40", Flash, 0, { 2.464844, 1, 1.281250, 0 } }, { "NIKON", "D40", Flash, 1, { 2.390625, 1, 1.312500, 0 } }, { "NIKON", "D40", Flash, 2, { 2.308594, 1, 1.343750, 0 } }, { "NIKON", "D40", Flash, 3, { 2.222656, 1, 1.386719, 0 } }, { "NIKON", "D40", Cloudy, -3, { 2.570313, 1, 1.246094, 0 } }, { "NIKON", "D40", Cloudy, -2, { 2.523438, 1, 1.269531, 0 } }, { "NIKON", "D40", Cloudy, -1, { 2.476562, 1, 1.296875, 0 } }, { "NIKON", "D40", Cloudy, 0, { 2.429688, 1, 1.320313, 0 } }, { "NIKON", "D40", Cloudy, 1, { 2.382812, 1, 1.343750, 0 } }, { "NIKON", "D40", Cloudy, 2, { 2.328125, 1, 1.371094, 0 } }, { "NIKON", "D40", Cloudy, 3, { 2.269531, 1, 1.394531, 0 } }, { "NIKON", "D40", Shade, -3, { 2.957031, 1, 1.054688, 0 } }, { "NIKON", "D40", Shade, -2, { 2.921875, 1, 1.074219, 0 } }, { "NIKON", "D40", Shade, -1, { 2.878906, 1, 1.097656, 0 } }, { "NIKON", "D40", Shade, 0, { 2.820313, 1, 1.125000, 0 } }, { "NIKON", "D40", Shade, 1, { 2.746094, 1, 1.160156, 0 } }, { "NIKON", "D40", Shade, 2, { 2.671875, 1, 1.195312, 0 } }, { "NIKON", "D40", Shade, 3, { 2.597656, 1, 1.234375, 0 } }, { "NIKON", "D40X", Incandescent, -3, { 1.234375, 1, 2.140625, 0 } }, { "NIKON", "D40X", Incandescent, 0, { 1.148438, 1, 2.386719, 0 } }, { "NIKON", "D40X", Incandescent, 3, { 1.039062, 1, 2.734375, 0 } }, { "NIKON", "D40X", Fluorescent, -3, { 2.296875, 1, 1.398438, 0 } }, { "NIKON", "D40X", Fluorescent, 0, { 1.683594, 1, 2.117188, 0 } }, { "NIKON", "D40X", Fluorescent, 3, { 1.000000, 1, 2.527344, 0 } }, { "NIKON", "D40X", DirectSunlight, -3, { 1.882812, 1, 1.300781, 0 } }, { "NIKON", "D40X", DirectSunlight, 0, { 1.792969, 1, 1.371094, 0 } }, { "NIKON", "D40X", DirectSunlight, 3, { 1.695312, 1, 1.437500, 0 } }, { "NIKON", "D40X", Flash, -3, { 2.089844, 1, 1.132812, 0 } }, { "NIKON", "D40X", Flash, 0, { 1.949219, 1, 1.187500, 0 } }, { "NIKON", "D40X", Flash, 3, { 1.769531, 1, 1.269531, 0 } }, { "NIKON", "D40X", Cloudy, -3, { 2.070312, 1, 1.191406, 0 } }, { "NIKON", "D40X", Cloudy, 0, { 1.960938, 1, 1.253906, 0 } }, { "NIKON", "D40X", Cloudy, 3, { 1.835938, 1, 1.332031, 0 } }, { "NIKON", "D40X", Shade, -3, { 2.414062, 1, 1.042969, 0 } }, { "NIKON", "D40X", Shade, 0, { 2.277344, 1, 1.089844, 0 } }, { "NIKON", "D40X", Shade, 3, { 2.085938, 1, 1.183594, 0 } }, { "NIKON", "D50", Incandescent, 0, { 1.328125, 1, 2.500000, 0 } }, { "NIKON", "D50", Fluorescent, 0, { 1.945312, 1, 2.191406, 0 } }, { "NIKON", "D50", DirectSunlight, 0, { 2.140625, 1, 1.398438, 0 } }, { "NIKON", "D50", Flash, 0, { 2.398438, 1, 1.339844, 0 } }, { "NIKON", "D50", Cloudy, 0, { 2.360269, 1, 1.282828, 0 } }, { "NIKON", "D50", Shade, 0, { 2.746094, 1, 1.156250, 0 } }, { "NIKON", "D60", DirectSunlight, 0, { 1.792969, 1, 1.371094, 0 } }, { "NIKON", "D60", Flash, 0, { 2.007813, 1, 1.187500, 0 } }, { "NIKON", "D60", Cloudy, 0, { 1.960937, 1, 1.253906, 0 } }, { "NIKON", "D60", Shade, 0, { 2.277344, 1, 1.089844, 0 } }, { "NIKON", "D60", Incandescent, 0, { 1.148437, 1, 2.382812, 0 } }, { "NIKON", "D60", SodiumVaporFluorescent, 0, { 1.035156, 1, 2.468750, 0 } }, { "NIKON", "D60", WarmWhiteFluorescent, 0, { 1.136719, 1, 2.167969, 0 } }, { "NIKON", "D60", WhiteFluorescent, 0, { 1.343750, 1, 2.480469, 0 } }, { "NIKON", "D60", CoolWhiteFluorescent, 0, { 1.683594, 1, 2.117187, 0 } }, { "NIKON", "D60", DayWhiteFluorescent, 0, { 1.679688, 1, 1.414063, 0 } }, { "NIKON", "D60", DaylightFluorescent, 0, { 1.953125, 1, 1.121094, 0 } }, { "NIKON", "D60", HighTempMercuryVaporFluorescent, 0, { 2.296875, 1, 1.398438, 0 } }, { "NIKON", "D70", Incandescent, -3, { 1.429688, 1, 2.539063, 0 } }, /*3300K*/ { "NIKON", "D70", Incandescent, -2, { 1.398438, 1, 2.632813, 0 } }, /*3200K*/ { "NIKON", "D70", Incandescent, -1, { 1.378906, 1, 2.687500, 0 } }, /*3100K*/ { "NIKON", "D70", Incandescent, 0, { 1.343750, 1, 2.816406, 0 } }, /*3000K*/ { "NIKON", "D70", Incandescent, 1, { 1.312500, 1, 2.937500, 0 } }, /*2900K*/ { "NIKON", "D70", Incandescent, 2, { 1.281250, 1, 3.089844, 0 } }, /*2800K*/ { "NIKON", "D70", Incandescent, 3, { 1.253906, 1, 3.250000, 0 } }, /*2700K*/ { "NIKON", "D70", Fluorescent, -3, { 2.734375, 1, 1.621094, 0 } }, /*7200K*/ { "NIKON", "D70", Fluorescent, -2, { 2.417969, 1, 1.343750, 0 } }, /*6500K*/ { "NIKON", "D70", Fluorescent, -1, { 2.078125, 1, 1.691406, 0 } }, /*5000K*/ { "NIKON", "D70", Fluorescent, 0, { 1.964844, 1, 2.476563, 0 } }, /*4200K*/ { "NIKON", "D70", Fluorescent, 1, { 1.566406, 1, 2.753906, 0 } }, /*3700K*/ { "NIKON", "D70", Fluorescent, 2, { 1.406250, 1, 2.550781, 0 } }, /*3000K*/ { "NIKON", "D70", Fluorescent, 3, { 1.312500, 1, 2.562500, 0 } }, /*2700K*/ { "NIKON", "D70", DirectSunlight, -3, { 2.156250, 1, 1.523438, 0 } }, /*5600K*/ { "NIKON", "D70", DirectSunlight, -2, { 2.109375, 1, 1.562500, 0 } }, /*5400K*/ { "NIKON", "D70", DirectSunlight, -1, { 2.089844, 1, 1.574219, 0 } }, /*5300K*/ { "NIKON", "D70", DirectSunlight, 0, { 2.062500, 1, 1.597656, 0 } }, /*5200K*/ { "NIKON", "D70", DirectSunlight, 1, { 2.007813, 1, 1.648438, 0 } }, /*5000K*/ { "NIKON", "D70", DirectSunlight, 2, { 1.980469, 1, 1.671875, 0 } }, /*4900K*/ { "NIKON", "D70", DirectSunlight, 3, { 1.953125, 1, 1.695313, 0 } }, /*4800K*/ { "NIKON", "D70", Flash, -3, { 2.578125, 1, 1.476563, 0 } }, /*6000K*/ { "NIKON", "D70", Flash, -2, { 2.535156, 1, 1.484375, 0 } }, /*5800K*/ { "NIKON", "D70", Flash, -1, { 2.488281, 1, 1.492188, 0 } }, /*5600K*/ { "NIKON", "D70", Flash, 0, { 2.441406, 1, 1.500000, 0 } }, /*5400K*/ { "NIKON", "D70", Flash, 1, { 2.421875, 1, 1.507813, 0 } }, /*5200K*/ { "NIKON", "D70", Flash, 2, { 2.398438, 1, 1.515625, 0 } }, /*5000K*/ { "NIKON", "D70", Flash, 3, { 2.378906, 1, 1.523438, 0 } }, /*4800K*/ { "NIKON", "D70", Cloudy, -3, { 2.375000, 1, 1.386719, 0 } }, /*6600K*/ { "NIKON", "D70", Cloudy, -2, { 2.343750, 1, 1.406250, 0 } }, /*6400K*/ { "NIKON", "D70", Cloudy, -1, { 2.300781, 1, 1.429688, 0 } }, /*6200K*/ { "NIKON", "D70", Cloudy, 0, { 2.257813, 1, 1.457031, 0 } }, /*6000K*/ { "NIKON", "D70", Cloudy, 1, { 2.207031, 1, 1.488281, 0 } }, /*5800K*/ { "NIKON", "D70", Cloudy, 2, { 2.156250, 1, 1.523438, 0 } }, /*5600K*/ { "NIKON", "D70", Cloudy, 3, { 2.109375, 1, 1.562500, 0 } }, /*5400K*/ { "NIKON", "D70", Shade, -3, { 2.757813, 1, 1.226563, 0 } }, /*9200K*/ { "NIKON", "D70", Shade, -2, { 2.710938, 1, 1.242188, 0 } }, /*8800K*/ { "NIKON", "D70", Shade, -1, { 2.660156, 1, 1.257813, 0 } }, /*8400K*/ { "NIKON", "D70", Shade, 0, { 2.613281, 1, 1.277344, 0 } }, /*8000K*/ { "NIKON", "D70", Shade, 1, { 2.531250, 1, 1.308594, 0 } }, /*7500K*/ { "NIKON", "D70", Shade, 2, { 2.472656, 1, 1.335938, 0 } }, /*7100K*/ { "NIKON", "D70", Shade, 3, { 2.394531, 1, 1.375000, 0 } }, /*6700K*/ { "NIKON", "D70s", Incandescent, -3, { 1.429688, 1, 2.539063, 0 } }, /*3300K*/ { "NIKON", "D70s", Incandescent, -2, { 1.398438, 1, 2.632813, 0 } }, /*3200K*/ { "NIKON", "D70s", Incandescent, -1, { 1.378906, 1, 2.687500, 0 } }, /*3100K*/ { "NIKON", "D70s", Incandescent, 0, { 1.343750, 1, 2.816406, 0 } }, /*3000K*/ { "NIKON", "D70s", Incandescent, 1, { 1.312500, 1, 2.937500, 0 } }, /*2900K*/ { "NIKON", "D70s", Incandescent, 2, { 1.281250, 1, 3.089844, 0 } }, /*2800K*/ { "NIKON", "D70s", Incandescent, 3, { 1.253906, 1, 3.250000, 0 } }, /*2700K*/ { "NIKON", "D70s", Fluorescent, -3, { 2.734375, 1, 1.621094, 0 } }, /*7200K*/ { "NIKON", "D70s", Fluorescent, -2, { 2.417969, 1, 1.343750, 0 } }, /*6500K*/ { "NIKON", "D70s", Fluorescent, -1, { 2.078125, 1, 1.691406, 0 } }, /*5000K*/ { "NIKON", "D70s", Fluorescent, 0, { 1.964844, 1, 2.476563, 0 } }, /*4200K*/ { "NIKON", "D70s", Fluorescent, 1, { 1.566406, 1, 2.753906, 0 } }, /*3700K*/ { "NIKON", "D70s", Fluorescent, 2, { 1.406250, 1, 2.550781, 0 } }, /*3000K*/ { "NIKON", "D70s", Fluorescent, 3, { 1.312500, 1, 2.562500, 0 } }, /*2700K*/ { "NIKON", "D70s", DirectSunlight, -3, { 2.156250, 1, 1.523438, 0 } }, /*5600K*/ { "NIKON", "D70s", DirectSunlight, -2, { 2.109375, 1, 1.562500, 0 } }, /*5400K*/ { "NIKON", "D70s", DirectSunlight, -1, { 2.089844, 1, 1.574219, 0 } }, /*5300K*/ { "NIKON", "D70s", DirectSunlight, 0, { 2.062500, 1, 1.597656, 0 } }, /*5200K*/ { "NIKON", "D70s", DirectSunlight, 1, { 2.007813, 1, 1.648438, 0 } }, /*5000K*/ { "NIKON", "D70s", DirectSunlight, 2, { 1.980469, 1, 1.671875, 0 } }, /*4900K*/ { "NIKON", "D70s", DirectSunlight, 3, { 1.953125, 1, 1.695313, 0 } }, /*4800K*/ { "NIKON", "D70s", Flash, -3, { 2.578125, 1, 1.476563, 0 } }, /*6000K*/ { "NIKON", "D70s", Flash, -2, { 2.535156, 1, 1.484375, 0 } }, /*5800K*/ { "NIKON", "D70s", Flash, -1, { 2.488281, 1, 1.492188, 0 } }, /*5600K*/ { "NIKON", "D70s", Flash, 0, { 2.441406, 1, 1.500000, 0 } }, /*5400K*/ { "NIKON", "D70s", Flash, 1, { 2.421875, 1, 1.507813, 0 } }, /*5200K*/ { "NIKON", "D70s", Flash, 2, { 2.398438, 1, 1.515625, 0 } }, /*5000K*/ { "NIKON", "D70s", Flash, 3, { 2.378906, 1, 1.523438, 0 } }, /*4800K*/ { "NIKON", "D70s", Cloudy, -3, { 2.375000, 1, 1.386719, 0 } }, /*6600K*/ { "NIKON", "D70s", Cloudy, -2, { 2.343750, 1, 1.406250, 0 } }, /*6400K*/ { "NIKON", "D70s", Cloudy, -1, { 2.300781, 1, 1.429688, 0 } }, /*6200K*/ { "NIKON", "D70s", Cloudy, 0, { 2.257813, 1, 1.457031, 0 } }, /*6000K*/ { "NIKON", "D70s", Cloudy, 1, { 2.207031, 1, 1.488281, 0 } }, /*5800K*/ { "NIKON", "D70s", Cloudy, 2, { 2.156250, 1, 1.523438, 0 } }, /*5600K*/ { "NIKON", "D70s", Cloudy, 3, { 2.109375, 1, 1.562500, 0 } }, /*5400K*/ { "NIKON", "D70s", Shade, -3, { 2.757813, 1, 1.226563, 0 } }, /*9200K*/ { "NIKON", "D70s", Shade, -2, { 2.710938, 1, 1.242188, 0 } }, /*8800K*/ { "NIKON", "D70s", Shade, -1, { 2.660156, 1, 1.257813, 0 } }, /*8400K*/ { "NIKON", "D70s", Shade, 0, { 2.613281, 1, 1.277344, 0 } }, /*8000K*/ { "NIKON", "D70s", Shade, 1, { 2.531250, 1, 1.308594, 0 } }, /*7500K*/ { "NIKON", "D70s", Shade, 2, { 2.472656, 1, 1.335938, 0 } }, /*7100K*/ { "NIKON", "D70s", Shade, 3, { 2.394531, 1, 1.375000, 0 } }, /*6700K*/ { "NIKON", "D80", Incandescent, -3, { 1.234375, 1, 2.140625, 0 } }, { "NIKON", "D80", Incandescent, 0, { 1.148438, 1, 2.386719, 0 } }, { "NIKON", "D80", Incandescent, 3, { 1.039062, 1, 2.734375, 0 } }, { "NIKON", "D80", Fluorescent, -3, { 2.296875, 1, 1.398438, 0 } }, { "NIKON", "D80", Fluorescent, 0, { 1.683594, 1, 2.117188, 0 } }, { "NIKON", "D80", Fluorescent, 3, { 1.000000, 1, 2.527344, 0 } }, { "NIKON", "D80", Daylight, -3, { 1.882812, 1, 1.300781, 0 } }, { "NIKON", "D80", Daylight, 0, { 1.792969, 1, 1.371094, 0 } }, { "NIKON", "D80", Daylight, 3, { 1.695312, 1, 1.437500, 0 } }, { "NIKON", "D80", Flash, -3, { 2.070312, 1, 1.144531, 0 } }, { "NIKON", "D80", Flash, 0, { 2.007812, 1, 1.242188, 0 } }, { "NIKON", "D80", Flash, 3, { 1.972656, 1, 1.156250, 0 } }, { "NIKON", "D80", Cloudy, -3, { 2.070312, 1, 1.191406, 0 } }, { "NIKON", "D80", Cloudy, 0, { 1.960938, 1, 1.253906, 0 } }, { "NIKON", "D80", Cloudy, 3, { 1.835938, 1, 1.332031, 0 } }, { "NIKON", "D80", Shade, -3, { 2.414062, 1, 1.042969, 0 } }, { "NIKON", "D80", Shade, 0, { 2.277344, 1, 1.089844, 0 } }, { "NIKON", "D80", Shade, 3, { 2.085938, 1, 1.183594, 0 } }, { "NIKON", "D80", "4300K", 0, { 1.562500, 1, 1.523438, 0 } }, { "NIKON", "D80", "5000K", 0, { 1.746094, 1, 1.410156, 0 } }, { "NIKON", "D80", "5900K", 0, { 1.941406, 1, 1.265625, 0 } }, { "NIKON", "D90", Incandescent, -6, { 1.273438, 1, 1.906250, 0 } }, { "NIKON", "D90", Incandescent, 0, { 1.179688, 1, 2.097656, 0 } }, { "NIKON", "D90", Incandescent, 6, { 1.113281, 1, 2.320313, 0 } }, { "NIKON", "D90", SodiumVaporFluorescent, -6, { 1.164063, 1, 2.058594, 0 } }, { "NIKON", "D90", SodiumVaporFluorescent, 0, { 1.062500, 1, 2.289063, 0 } }, { "NIKON", "D90", SodiumVaporFluorescent, 6, { 1.000000, 1, 2.554688, 0 } }, { "NIKON", "D90", WarmWhiteFluorescent, -6, { 1.285156, 1, 1.761719, 0 } }, { "NIKON", "D90", WarmWhiteFluorescent, 0, { 1.191406, 1, 1.871094, 0 } }, { "NIKON", "D90", WarmWhiteFluorescent, 6, { 1.105469, 1, 1.968750, 0 } }, { "NIKON", "D90", WhiteFluorescent, -6, { 1.628906, 1, 1.953125, 0 } }, { "NIKON", "D90", WhiteFluorescent, 0, { 1.343750, 1, 2.183594, 0 } }, { "NIKON", "D90", WhiteFluorescent, 6, { 1.000000, 1, 2.429688, 0 } }, { "NIKON", "D90", CoolWhiteFluorescent, -6, { 1.867188, 1, 1.722656, 0 } }, { "NIKON", "D90", CoolWhiteFluorescent, 0, { 1.644531, 1, 1.937500, 0 } }, { "NIKON", "D90", CoolWhiteFluorescent, 6, { 1.363281, 1, 2.167969, 0 } }, { "NIKON", "D90", DayWhiteFluorescent, -6, { 1.843750, 1, 1.160156, 0 } }, { "NIKON", "D90", DayWhiteFluorescent, 0, { 1.695313, 1, 1.312500, 0 } }, { "NIKON", "D90", DayWhiteFluorescent, 6, { 1.562500, 1, 1.457031, 0 } }, { "NIKON", "D90", DaylightFluorescent, -6, { 2.089844, 1, 1.000000, 0 } }, { "NIKON", "D90", DaylightFluorescent, 0, { 1.925781, 1, 1.074219, 0 } }, { "NIKON", "D90", DaylightFluorescent, 6, { 1.773438, 1, 1.234375, 0 } }, { "NIKON", "D90", HighTempMercuryVaporFluorescent, -6, { 2.308594, 1, 1.132813, 0 } }, { "NIKON", "D90", HighTempMercuryVaporFluorescent, 0, { 2.207031, 1, 1.292969, 0 } }, { "NIKON", "D90", HighTempMercuryVaporFluorescent, 6, { 2.085938, 1, 1.468750, 0 } }, { "NIKON", "D90", DirectSunlight, -6, { 1.949219, 1, 1.171875, 0 } }, { "NIKON", "D90", DirectSunlight, 0, { 1.800781, 1, 1.308594, 0 } }, { "NIKON", "D90", DirectSunlight, 6, { 1.640625, 1, 1.457031, 0 } }, { "NIKON", "D90", Flash, -6, { 2.218750, 1, 1.062500, 0 } }, { "NIKON", "D90", Flash, 0, { 1.976563, 1, 1.152344, 0 } }, { "NIKON", "D90", Flash, 6, { 1.789063, 1, 1.253906, 0 } }, { "NIKON", "D90", Cloudy, -6, { 2.093750, 1, 1.093750, 0 } }, { "NIKON", "D90", Cloudy, 0, { 1.917969, 1, 1.187500, 0 } }, { "NIKON", "D90", Cloudy, 6, { 1.765625, 1, 1.332031, 0 } }, { "NIKON", "D90", Shade, -6, { 2.453125, 1, 1.000000, 0 } }, { "NIKON", "D90", Shade, 0, { 2.183594, 1, 1.062500, 0 } }, { "NIKON", "D90", Shade, 6, { 1.984375, 1, 1.140625, 0 } }, { "NIKON", "D90", "2500K", 0, { 1.023438, 1, 2.644531, 0 } }, { "NIKON", "D90", "2560K", 0, { 1.046875, 1, 2.554688, 0 } }, { "NIKON", "D90", "2630K", 0, { 1.070313, 1, 2.464844, 0 } }, { "NIKON", "D90", "2700K", 0, { 1.093750, 1, 2.378906, 0 } }, { "NIKON", "D90", "2780K", 0, { 1.117188, 1, 2.296875, 0 } }, { "NIKON", "D90", "2860K", 0, { 1.140625, 1, 2.218750, 0 } }, { "NIKON", "D90", "2940K", 0, { 1.164063, 1, 2.144531, 0 } }, { "NIKON", "D90", "3030K", 0, { 1.187500, 1, 2.078125, 0 } }, { "NIKON", "D90", "3130K", 0, { 1.218750, 1, 2.011719, 0 } }, { "NIKON", "D90", "3230K", 0, { 1.250000, 1, 1.949219, 0 } }, { "NIKON", "D90", "3330K", 0, { 1.285156, 1, 1.886719, 0 } }, { "NIKON", "D90", "3450K", 0, { 1.324219, 1, 1.828125, 0 } }, { "NIKON", "D90", "3570K", 0, { 1.359375, 1, 1.769531, 0 } }, { "NIKON", "D90", "3700K", 0, { 1.398438, 1, 1.707031, 0 } }, { "NIKON", "D90", "3850K", 0, { 1.437500, 1, 1.636719, 0 } }, { "NIKON", "D90", "4000K", 0, { 1.480469, 1, 1.562500, 0 } }, { "NIKON", "D90", "4170K", 0, { 1.535156, 1, 1.519531, 0 } }, { "NIKON", "D90", "4350K", 0, { 1.593750, 1, 1.488281, 0 } }, { "NIKON", "D90", "4550K", 0, { 1.652344, 1, 1.445313, 0 } }, { "NIKON", "D90", "4760K", 0, { 1.707031, 1, 1.398438, 0 } }, { "NIKON", "D90", "5000K", 0, { 1.761719, 1, 1.347656, 0 } }, { "NIKON", "D90", "5260K", 0, { 1.808594, 1, 1.296875, 0 } }, { "NIKON", "D90", "5560K", 0, { 1.859375, 1, 1.250000, 0 } }, { "NIKON", "D90", "5880K", 0, { 1.910156, 1, 1.207031, 0 } }, { "NIKON", "D90", "6250K", 0, { 1.960938, 1, 1.164063, 0 } }, { "NIKON", "D90", "6670K", 0, { 2.011719, 1, 1.128906, 0 } }, { "NIKON", "D90", "7140K", 0, { 2.074219, 1, 1.097656, 0 } }, { "NIKON", "D90", "7690K", 0, { 2.140625, 1, 1.074219, 0 } }, { "NIKON", "D90", "8330K", 0, { 2.218750, 1, 1.050781, 0 } }, { "NIKON", "D90", "9090K", 0, { 2.308594, 1, 1.027344, 0 } }, { "NIKON", "D90", "10000K", 0, { 2.414063, 1, 1.007813, 0 } }, { "NIKON", "D3000", DirectSunlight, 0, { 1.851563, 1, 1.347656, 0 } }, { "NIKON", "D3000", Flash, 0, { 2.113281, 1, 1.164062, 0 } }, { "NIKON", "D3000", Cloudy, 0, { 2.019531, 1, 1.214844, 0 } }, { "NIKON", "D3000", Shade, 0, { 2.355469, 1, 1.082031, 0 } }, { "NIKON", "D3000", Incandescent, 0, { 1.171875, 1, 2.316406, 0 } }, { "NIKON", "D3000", SodiumVaporFluorescent, 0, { 1.023438, 1, 2.371094, 0 } }, { "NIKON", "D3000", WarmWhiteFluorescent, 0, { 1.179688, 1, 2.074219, 0 } }, { "NIKON", "D3000", WhiteFluorescent, 0, { 1.355469, 1, 2.328125, 0 } }, { "NIKON", "D3000", CoolWhiteFluorescent, 0, { 1.703125, 1, 2.019531, 0 } }, { "NIKON", "D3000", DayWhiteFluorescent, 0, { 1.750000, 1, 1.386719, 0 } }, { "NIKON", "D3000", DaylightFluorescent, 0, { 1.960937, 1, 1.105469, 0 } }, { "NIKON", "D3000", HighTempMercuryVaporFluorescent, 0, { 2.351563, 1, 1.328125, 0 } }, { "NIKON", "D3100", DirectSunlight, 0, { 2.109375, 1, 1.257813, 0 } }, { "NIKON", "D3100", Flash, 0, { 2.386719, 1, 1.097656, 0 } }, { "NIKON", "D3100", Cloudy, 0, { 2.257812, 1, 1.140625, 0 } }, { "NIKON", "D3100", Shade, 0, { 2.609375, 1, 1.015625, 0 } }, { "NIKON", "D3100", Incandescent, 0, { 1.320313, 1, 2.039063, 0 } }, { "NIKON", "D3100", SodiumVaporFluorescent, 0, { 1.222656, 1, 2.238281, 0 } }, { "NIKON", "D3100", WarmWhiteFluorescent, 0, { 1.312500, 1, 1.847656, 0 } }, { "NIKON", "D3100", WhiteFluorescent, 0, { 1.531250, 1, 2.152344, 0 } }, { "NIKON", "D3100", CoolWhiteFluorescent, 0, { 1.894531, 1, 1.875000, 0 } }, { "NIKON", "D3100", DayWhiteFluorescent, 0, { 1.941406, 1, 1.281250, 0 } }, { "NIKON", "D3100", DaylightFluorescent, 0, { 2.214844, 1, 1.015625, 0 } }, { "NIKON", "D3100", HighTempMercuryVaporFluorescent, 0, { 2.589844, 1, 1.250000, 0 } }, { "NIKON", "D3200", DirectSunlight, 0, { 2.0508, 1, 1.2734, 0 } }, { "NIKON", "D3200", Flash, 0, { 2.3203, 1, 1.1484, 0 } }, { "NIKON", "D3200", Cloudy, 0, { 2.1719, 1, 1.1641, 0 } }, { "NIKON", "D3200", Shade, 0, { 2.4492, 1, 1.0508, 0 } }, { "NIKON", "D3200", Incandescent, 0, { 1.3594, 1, 1.9648, 0 } }, { "NIKON", "D3200", SodiumVaporFluorescent, 0, { 1.2773, 1, 2.0938, 0 } }, { "NIKON", "D3200", WarmWhiteFluorescent, 0, { 1.3516, 1, 1.7734, 0 } }, { "NIKON", "D3200", WhiteFluorescent, 0, { 1.5039, 1, 1.9727, 0 } }, { "NIKON", "D3200", CoolWhiteFluorescent, 0, { 1.8203, 1, 1.7969, 0 } }, { "NIKON", "D3200", DayWhiteFluorescent, 0, { 1.8789, 1, 1.2617, 0 } }, { "NIKON", "D3200", DaylightFluorescent, 0, { 2.1094, 1, 1.0313, 0 } }, { "NIKON", "D3200", HighTempMercuryVaporFluorescent, 0, { 2.4453, 1, 1.2500, 0 } }, { "NIKON", "D5000", DirectSunlight, 0, { 1.800781, 1, 1.308594, 0 } }, { "NIKON", "D5000", Flash, 0, { 1.976562, 1, 1.152344, 0 } }, { "NIKON", "D5000", Cloudy, 0, { 1.917969, 1, 1.187500, 0 } }, { "NIKON", "D5000", Shade, 0, { 2.183594, 1, 1.062500, 0 } }, { "NIKON", "D5000", Incandescent, 0, { 1.179687, 1, 2.097656, 0 } }, { "NIKON", "D5000", SodiumVaporFluorescent, 0, { 1.062500, 1, 2.289063, 0 } }, { "NIKON", "D5000", WarmWhiteFluorescent, 0, { 1.191406, 1, 1.871094, 0 } }, { "NIKON", "D5000", WhiteFluorescent, 0, { 1.343750, 1, 2.183594, 0 } }, { "NIKON", "D5000", CoolWhiteFluorescent, 0, { 1.644531, 1, 1.937500, 0 } }, { "NIKON", "D5000", DayWhiteFluorescent, 0, { 1.695313, 1, 1.312500, 0 } }, { "NIKON", "D5000", DaylightFluorescent, 0, { 1.925781, 1, 1.074219, 0 } }, { "NIKON", "D5000", HighTempMercuryVaporFluorescent, 0, { 2.207031, 1, 1.292969, 0 } }, { "NIKON", "D5100", DirectSunlight, 0, { 2.0273, 1, 1.3906, 0 } }, { "NIKON", "D5100", Flash, 0, { 2.2813, 1, 1.2109, 0 } }, { "NIKON", "D5100", Cloudy, 0, { 2.1680, 1, 1.2656, 0 } }, { "NIKON", "D5100", Shade, 0, { 2.4922, 1, 1.1367, 0 } }, { "NIKON", "D5100", Incandescent, 0, { 1.3047, 1, 2.2148, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 0, { 1.2031, 1, 2.4375, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 0, { 1.3008, 1, 1.9648, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 0, { 1.4961, 1, 2.3047, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 0, { 1.8320, 1, 2.0273, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 0, { 1.8984, 1, 1.3906, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 0, { 2.1680, 1, 1.1172, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 0, { 2.4844, 1, 1.3672, 0 } }, { "NIKON", "D7000", DirectSunlight, -6, { 2.199219, 1, 1.242187, 0 } }, { "NIKON", "D7000", DirectSunlight, 0, { 2.027344, 1, 1.390625, 0 } }, { "NIKON", "D7000", DirectSunlight, 6, { 1.847656, 1, 1.542969, 0 } }, { "NIKON", "D7000", Flash, -6, { 2.511719, 1, 1.132812, 0 } }, { "NIKON", "D7000", Flash, 0, { 2.281250, 1, 1.210938, 0 } }, { "NIKON", "D7000", Flash, 6, { 2.089844, 1, 1.308594, 0 } }, { "NIKON", "D7000", Cloudy, -6, { 2.386719, 1, 1.164062, 0 } }, { "NIKON", "D7000", Cloudy, 0, { 2.167969, 1, 1.265625, 0 } }, { "NIKON", "D7000", Cloudy, 6, { 2.000000, 1, 1.421875, 0 } }, { "NIKON", "D7000", Shade, -6, { 2.828125, 1, 1.023437, 0 } }, { "NIKON", "D7000", Shade, 0, { 2.492188, 1, 1.136719, 0 } }, { "NIKON", "D7000", Shade, 6, { 2.246094, 1, 1.218750, 0 } }, { "NIKON", "D7000", Incandescent, -6, { 1.417969, 1, 2.003906, 0 } }, { "NIKON", "D7000", Incandescent, 0, { 1.304688, 1, 2.214844, 0 } }, { "NIKON", "D7000", Incandescent, 6, { 1.218750, 1, 2.464844, 0 } }, { "NIKON", "D7000", SodiumVaporFluorescent, -6, { 1.324219, 1, 2.187500, 0 } }, { "NIKON", "D7000", SodiumVaporFluorescent, 0, { 1.203125, 1, 2.437500, 0 } }, { "NIKON", "D7000", SodiumVaporFluorescent, 6, { 1.128906, 1, 2.718750, 0 } }, { "NIKON", "D7000", WarmWhiteFluorescent, -6, { 1.414062, 1, 1.859375, 0 } }, { "NIKON", "D7000", WarmWhiteFluorescent, 0, { 1.300781, 1, 1.964844, 0 } }, { "NIKON", "D7000", WarmWhiteFluorescent, 6, { 1.199219, 1, 2.082031, 0 } }, { "NIKON", "D7000", WhiteFluorescent, -6, { 1.812500, 1, 2.042969, 0 } }, { "NIKON", "D7000", WhiteFluorescent, 0, { 1.496094, 1, 2.304688, 0 } }, { "NIKON", "D7000", WhiteFluorescent, 6, { 1.078125, 1, 2.628906, 0 } }, { "NIKON", "D7000", CoolWhiteFluorescent, -6, { 2.105469, 1, 1.808594, 0 } }, { "NIKON", "D7000", CoolWhiteFluorescent, 0, { 1.832031, 1, 2.027344, 0 } }, { "NIKON", "D7000", CoolWhiteFluorescent, 6, { 1.519531, 1, 2.281250, 0 } }, { "NIKON", "D7000", DayWhiteFluorescent, -6, { 2.070312, 1, 1.214844, 0 } }, { "NIKON", "D7000", DayWhiteFluorescent, 0, { 1.898438, 1, 1.390625, 0 } }, { "NIKON", "D7000", DayWhiteFluorescent, 6, { 1.742187, 1, 1.546875, 0 } }, { "NIKON", "D7000", DaylightFluorescent, -6, { 2.359375, 1, 1.000000, 0 } }, { "NIKON", "D7000", DaylightFluorescent, 0, { 2.167969, 1, 1.117187, 0 } }, { "NIKON", "D7000", DaylightFluorescent, 6, { 1.988281, 1, 1.300781, 0 } }, { "NIKON", "D7000", HighTempMercuryVaporFluorescent, -6, { 2.578125, 1, 1.222656, 0 } }, { "NIKON", "D7000", HighTempMercuryVaporFluorescent, 0, { 2.484375, 1, 1.367188, 0 } }, { "NIKON", "D7000", HighTempMercuryVaporFluorescent, 6, { 2.351563, 1, 1.539063, 0 } }, { "NIKON", "E5400", Daylight, -3, { 2.046875, 1, 1.449219, 0 } }, { "NIKON", "E5400", Daylight, 0, { 1.800781, 1, 1.636719, 0 } }, { "NIKON", "E5400", Daylight, 3, { 1.539062, 1, 1.820312, 0 } }, { "NIKON", "E5400", Incandescent, -3, { 1.218750, 1, 2.656250, 0 } }, { "NIKON", "E5400", Incandescent, 0, { 1.218750, 1, 2.656250, 0 } }, { "NIKON", "E5400", Incandescent, 3, { 1.382812, 1, 2.351562, 0 } }, { "NIKON", "E5400", Fluorescent, -3, { 1.703125, 1, 2.460938, 0 } }, { "NIKON", "E5400", Fluorescent, 0, { 1.218750, 1, 2.656250, 0 } }, { "NIKON", "E5400", Fluorescent, 3, { 1.953125, 1, 1.906250, 0 } }, { "NIKON", "E5400", Cloudy, -3, { 1.703125, 1, 2.460938, 0 } }, { "NIKON", "E5400", Cloudy, 0, { 1.996094, 1, 1.421875, 0 } }, { "NIKON", "E5400", Cloudy, 3, { 2.265625, 1, 1.261719, 0 } }, { "NIKON", "E5400", Flash, -3, { 2.792969, 1, 1.152344, 0 } }, { "NIKON", "E5400", Flash, 0, { 2.328125, 1, 1.386719, 0 } }, { "NIKON", "E5400", Flash, 3, { 2.328125, 1, 1.386719, 0 } }, { "NIKON", "E5400", Shade, -3, { 2.722656, 1, 1.011719, 0 } }, { "NIKON", "E5400", Shade, 0, { 2.269531, 1, 1.218750, 0 } }, { "NIKON", "E5400", Shade, 3, { 2.269531, 1, 1.218750, 0 } }, { "NIKON", "E8700", Daylight, 0, { 1.968750, 1, 1.582031, 0 } }, { "NIKON", "E8700", Incandescent, 0, { 1.265625, 1, 2.765625, 0 } }, { "NIKON", "E8700", Fluorescent, 0, { 1.863281, 1, 2.304688, 0 } }, { "NIKON", "E8700", Cloudy, 0, { 2.218750, 1, 1.359375, 0 } }, { "NIKON", "E8700", Flash, 0, { 2.535156, 1, 1.273438, 0 } }, { "NIKON", "E8700", Shade, 0, { 2.527344, 1, 1.175781, 0 } }, { "OLYMPUS", "C5050Z", Shade, -7, { 3.887324, 1.201878, 1, 0 } }, { "OLYMPUS", "C5050Z", Shade, 0, { 1.757812, 1, 1.437500, 0 } }, { "OLYMPUS", "C5050Z", Shade, 7, { 1.019531, 1, 2.140625, 0 } }, { "OLYMPUS", "C5050Z", Cloudy, -7, { 3.255507, 1.127753, 1, 0 } }, { "OLYMPUS", "C5050Z", Cloudy, 0, { 1.570312, 1, 1.531250, 0 } }, { "OLYMPUS", "C5050Z", Cloudy, 7, { 1, 1.098712, 2.506438, 0 } }, { "OLYMPUS", "C5050Z", Daylight, -7, { 2.892116, 1.062241, 1, 0 } }, { "OLYMPUS", "C5050Z", Daylight, 0, { 1.480469, 1, 1.628906, 0 } }, { "OLYMPUS", "C5050Z", Daylight, 7, { 1, 1.168950, 2.835616, 0 } }, { "OLYMPUS", "C5050Z", EveningSun, -7, { 3.072649, 1.094017, 1, 0 } }, { "OLYMPUS", "C5050Z", EveningSun, 0, { 1.527344, 1, 1.578125, 0 } }, { "OLYMPUS", "C5050Z", EveningSun, 7, { 1, 1.132743, 2.659292, 0 } }, { "OLYMPUS", "C5050Z", DaylightFluorescent, -7, { 3.321267, 1.158371, 1, 0 } }, /*6700K*/ { "OLYMPUS", "C5050Z", DaylightFluorescent, 0, { 1.558594, 1, 1.492188, 0 } }, /*6700K*/ { "OLYMPUS", "C5050Z", DaylightFluorescent, 7, { 1, 1.108225, 2.463203, 0 } }, /*6700K*/ { "OLYMPUS", "C5050Z", NeutralFluorescent, -7, { 2.606426, 1.028112, 1, 0 } }, /*5000K*/ { "OLYMPUS", "C5050Z", NeutralFluorescent, 0, { 1.378906, 1, 1.679688, 0 } }, /*5000K*/ { "OLYMPUS", "C5050Z", NeutralFluorescent, 7, { 1, 1.254902, 3.137255, 0 } }, /*5000K*/ { "OLYMPUS", "C5050Z", CoolWhiteFluorescent, -7, { 2.519531, 1, 1.281250, 0 } }, /*4200K*/ { "OLYMPUS", "C5050Z", CoolWhiteFluorescent, 0, { 1.371094, 1, 2.210938, 0 } }, /*4200K*/ { "OLYMPUS", "C5050Z", CoolWhiteFluorescent, 7, { 1, 1.261084, 4.152709, 0 } }, /*4200K*/ { "OLYMPUS", "C5050Z", WhiteFluorescent, -7, { 1.707031, 1, 1.699219, 0 } }, /*3500K*/ { "OLYMPUS", "C5050Z", WhiteFluorescent, 0, { 1, 1.075630, 3.151261, 0 } }, /*3500K*/ { "OLYMPUS", "C5050Z", WhiteFluorescent, 7, { 1, 1.855072, 8.094203, 0 } }, /*3500K*/ { "OLYMPUS", "C5050Z", Incandescent, -7, { 1.679688, 1, 1.652344, 0 } }, /*3000K*/ { "OLYMPUS", "C5050Z", Incandescent, 0, { 1, 1.094017, 3.123932, 0 } }, /*3000K*/ { "OLYMPUS", "C5050Z", Incandescent, 7, { 1, 1.896296, 8.066667, 0 } }, /*3000K*/ { "OLYMPUS", "C5060WZ", Shade, 0, { 1.949219, 1, 1.195312, 0 } }, { "OLYMPUS", "C5060WZ", Cloudy, 0, { 1.621094, 1, 1.410156, 0 } }, { "OLYMPUS", "C5060WZ", DirectSunlight, 0, { 1.511719, 1, 1.500000, 0 } }, { "OLYMPUS", "C5060WZ", EveningSun, 0, { 1.636719, 1, 1.496094, 0 } }, { "OLYMPUS", "C5060WZ", DaylightFluorescent, 0, { 1.734375, 1, 1.343750, 0 } }, { "OLYMPUS", "C5060WZ", NeutralFluorescent, 0, { 1.457031, 1, 1.691406, 0 } }, { "OLYMPUS", "C5060WZ", CoolWhiteFluorescent, 0, { 1.417969, 1, 2.230469, 0 } }, { "OLYMPUS", "C5060WZ", WhiteFluorescent, 0, { 1, 1.103448, 3.422414, 0 } }, { "OLYMPUS", "C5060WZ", Incandescent, 0, { 1, 1.153153, 3.662162, 0 } }, { "OLYMPUS", "C5060WZ", FlashAuto, 0, { 1.850000, 1, 1.308044, 0 } }, // Olympus C8080WZ - firmware 757-78 { "OLYMPUS", "C8080WZ", Shade, -7, { 1.515625, 1, 1.773438, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -6, { 1.671875, 1, 1.691406, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -5, { 1.832031, 1, 1.605469, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -4, { 1.988281, 1, 1.523438, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -3, { 2.144531, 1, 1.441406, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -2, { 2.300781, 1, 1.355469, 0 } }, { "OLYMPUS", "C8080WZ", Shade, -1, { 2.457031, 1, 1.273438, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 0, { 2.617188, 1, 1.191406, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 1, { 2.929688, 1, 1.117188, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 2, { 3.242188, 1, 1.046875, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 3, { 3.644000, 1.024000, 1, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 4, { 4.290043, 1.108225, 1, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 5, { 5.032864, 1.201878, 1, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 6, { 5.907692, 1.312821, 1, 0 } }, { "OLYMPUS", "C8080WZ", Shade, 7, { 7.000000, 1.454545, 1, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -7, { 1.277344, 1, 2.164062, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -6, { 1.406250, 1, 2.062500, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -5, { 1.539062, 1, 1.960938, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -4, { 1.671875, 1, 1.859375, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -3, { 1.804688, 1, 1.757812, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -2, { 1.937500, 1, 1.656250, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, -1, { 2.070312, 1, 1.554688, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 0, { 2.203125, 1, 1.453125, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 1, { 2.464844, 1, 1.363281, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 2, { 2.730469, 1, 1.277344, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 3, { 2.996094, 1, 1.191406, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 4, { 3.257812, 1, 1.101562, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 5, { 3.523438, 1, 1.015625, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 6, { 4.075630, 1.075630, 1, 0 } }, { "OLYMPUS", "C8080WZ", Cloudy, 7, { 4.823256, 1.190698, 1, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -7, { 1.234375, 1, 2.343750, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -6, { 1.359375, 1, 2.234375, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -5, { 1.488281, 1, 2.125000, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -4, { 1.617188, 1, 2.011719, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -3, { 1.742188, 1, 1.902344, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -2, { 1.871094, 1, 1.792969, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, -1, { 2.000000, 1, 1.683594, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 0, { 2.128906, 1, 1.574219, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 1, { 2.382812, 1, 1.476562, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 2, { 2.636719, 1, 1.382812, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 3, { 2.894531, 1, 1.289062, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 4, { 3.148438, 1, 1.195312, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 5, { 3.406250, 1, 1.101562, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 6, { 3.660156, 1, 1.003906, 0 } }, { "OLYMPUS", "C8080WZ", Daylight, 7, { 4.300429, 1.098712, 1, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -7, { 1.308594, 1, 2.199219, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -6, { 1.445312, 1, 2.093750, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -5, { 1.582031, 1, 1.992188, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -4, { 1.718750, 1, 1.886719, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -3, { 1.851562, 1, 1.785156, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -2, { 1.988281, 1, 1.679688, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, -1, { 2.125000, 1, 1.578125, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 0, { 2.261719, 1, 1.476562, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 1, { 2.531250, 1, 1.386719, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 2, { 2.800781, 1, 1.296875, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 3, { 3.074219, 1, 1.207031, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 4, { 3.343750, 1, 1.121094, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 5, { 3.617188, 1, 1.031250, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 6, { 4.128631, 1.062241, 1, 0 } }, { "OLYMPUS", "C8080WZ", EveningSun, 7, { 4.863014, 1.168950, 1, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -7, { 1.488281, 1, 2.214844, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -6, { 1.652344, 1, 2.105469, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -5, { 1.812500, 1, 1.992188, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -4, { 1.976562, 1, 1.882812, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -3, { 2.117188, 1, 1.773438, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -2, { 2.253906, 1, 1.675781, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, -1, { 2.425781, 1, 1.585938, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 0, { 2.570312, 1, 1.468750, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 1, { 2.890625, 1, 1.386719, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 2, { 3.199219, 1, 1.308594, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 3, { 3.500000, 1, 1.214844, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 4, { 3.820312, 1, 1.125000, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 5, { 4.128906, 1, 1.039062, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 6, { 4.711934, 1.053498, 1, 0 } }, { "OLYMPUS", "C8080WZ", FlashAuto, 7, { 5.450450, 1.153153, 1, 0 } }, { "OLYMPUS", "C8080WZ", DaylightFluorescent, -7, { 1.425781, 1, 2.097656, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -6, { 1.574219, 1, 2.000000, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -5, { 1.722656, 1, 1.902344, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -4, { 1.867188, 1, 1.804688, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -3, { 2.015625, 1, 1.703125, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -2, { 2.164062, 1, 1.605469, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, -1, { 2.312500, 1, 1.507812, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 0, { 2.460938, 1, 1.410156, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 1, { 2.753906, 1, 1.324219, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 2, { 3.050781, 1, 1.238281, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 3, { 3.343750, 1, 1.156250, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 4, { 3.640625, 1, 1.070312, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 5, { 4.000000, 1.015873, 1, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 6, { 4.688312, 1.108225, 1, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", DaylightFluorescent, 7, { 5.545455, 1.224880, 1, 0 } }, /*6700K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -7, { 1.195312, 1, 2.589844, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -6, { 1.316406, 1, 2.464844, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -5, { 1.441406, 1, 2.343750, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -4, { 1.566406, 1, 2.222656, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -3, { 1.687500, 1, 2.101562, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -2, { 1.812500, 1, 1.980469, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, -1, { 1.937500, 1, 1.859375, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 0, { 2.062500, 1, 1.738281, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 1, { 2.308594, 1, 1.632812, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 2, { 2.554688, 1, 1.527344, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 3, { 2.804688, 1, 1.421875, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 4, { 3.050781, 1, 1.320312, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 5, { 3.296875, 1, 1.214844, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 6, { 3.546875, 1, 1.109375, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", NeutralFluorescent, 7, { 3.792969, 1, 1.007812, 0 } }, /*5000K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -7, { 1.109375, 1, 3.257812, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -6, { 1.226562, 1, 3.105469, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -5, { 1.339844, 1, 2.953125, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -4, { 1.457031, 1, 2.796875, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -3, { 1.570312, 1, 2.644531, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -2, { 1.687500, 1, 2.492188, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, -1, { 1.800781, 1, 2.339844, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 0, { 1.917969, 1, 2.187500, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 1, { 2.144531, 1, 2.054688, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 2, { 2.375000, 1, 1.921875, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 3, { 2.605469, 1, 1.792969, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 4, { 2.835938, 1, 1.660156, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 5, { 3.066406, 1, 1.531250, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 6, { 3.296875, 1, 1.398438, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", CoolWhiteFluorescent, 7, { 3.527344, 1, 1.265625, 0 } }, /*4200K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -7, { 1, 1.347368, 5.963158, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -6, { 1, 1.224880, 5.167464, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -5, { 1, 1.117904, 4.484716, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -4, { 1, 1.028112, 3.911647, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -3, { 1.046875, 1, 3.593750, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -2, { 1.125000, 1, 3.386719, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, -1, { 1.203125, 1, 3.179688, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 0, { 1.281250, 1, 2.972656, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 1, { 1.433594, 1, 2.792969, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 2, { 1.585938, 1, 2.613281, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 3, { 1.742188, 1, 2.437500, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 4, { 1.894531, 1, 2.257812, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 5, { 2.046875, 1, 2.078125, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 6, { 2.203125, 1, 1.902344, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", WhiteFluorescent, 7, { 2.355469, 1, 1.722656, 0 } }, /*3500K*/ { "OLYMPUS", "C8080WZ", Tungsten, -7, { 1, 1.488372, 6.988372, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -6, { 1, 1.347368, 6.026316, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -5, { 1, 1.230769, 5.235577, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -4, { 1, 1.132743, 4.566372, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -3, { 1, 1.049180, 4.000000, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -2, { 1.023438, 1, 3.589844, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, -1, { 1.093750, 1, 3.371094, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 0, { 1.164062, 1, 3.152344, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 1, { 1.300781, 1, 2.960938, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 2, { 1.441406, 1, 2.773438, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 3, { 1.582031, 1, 2.582031, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 4, { 1.722656, 1, 2.394531, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 5, { 1.722656, 1, 2.394531, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 6, { 2.000000, 1, 2.015625, 0 } }, /*3000K*/ { "OLYMPUS", "C8080WZ", Tungsten, 7, { 2.140625, 1, 1.828125, 0 } }, /*3000K*/ // Fin ajout { "OLYMPUS", "E-1", Incandescent, -7, { 1.195312, 1, 1.562500, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -6, { 1.187500, 1, 1.578125, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -5, { 1.187500, 1, 1.585938, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -4, { 1.179688, 1, 1.601562, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -3, { 1.171875, 1, 1.609375, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -2, { 1.164062, 1, 1.617188, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, -1, { 1.156250, 1, 1.632812, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 0, { 1.156250, 1, 1.640625, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 1, { 1.140625, 1, 1.648438, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 2, { 1.132812, 1, 1.664062, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 3, { 1.125000, 1, 1.671875, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 4, { 1.117188, 1, 1.679688, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 5, { 1.117188, 1, 1.695312, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 6, { 1.109375, 1, 1.703125, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", Incandescent, 7, { 1.101562, 1, 1.718750, 0 } }, /*3600K*/ { "OLYMPUS", "E-1", IncandescentWarm, -7, { 1.015625, 1, 1.867188, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -6, { 1.007812, 1, 1.875000, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -5, { 1.000000, 1, 1.890625, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -4, { 1, 1.007874, 1.913386, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -3, { 1, 1.015873, 1.944444, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -2, { 1, 1.015873, 1.952381, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, -1, { 1, 1.024000, 1.984000, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 0, { 1, 1.024000, 1.992000, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 1, { 1, 1.032258, 2.008065, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 2, { 1, 1.040650, 2.040650, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 3, { 1, 1.040650, 2.048780, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 4, { 1, 1.049180, 2.081967, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 5, { 1, 1.057851, 2.107438, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 6, { 1, 1.066667, 2.141667, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", IncandescentWarm, 7, { 1, 1.075630, 2.168067, 0 } }, /*3000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -7, { 2.296875, 1, 1.445312, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -6, { 2.273438, 1, 1.468750, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -5, { 2.242188, 1, 1.492188, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -4, { 2.210938, 1, 1.523438, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -3, { 2.171875, 1, 1.562500, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -2, { 2.132812, 1, 1.601562, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, -1, { 2.093750, 1, 1.640625, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 0, { 2.062500, 1, 1.679688, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 1, { 2.039062, 1, 1.703125, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 2, { 2.015625, 1, 1.734375, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 3, { 2.000000, 1, 1.757812, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 4, { 1.984375, 1, 1.789062, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 5, { 1.968750, 1, 1.812500, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 6, { 1.945312, 1, 1.835938, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", WhiteFluorescent, 7, { 1.929688, 1, 1.867188, 0 } }, /*4000K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -7, { 1.984375, 1, 1.203125, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -6, { 1.960938, 1, 1.218750, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -5, { 1.937500, 1, 1.234375, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -4, { 1.921875, 1, 1.257812, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -3, { 1.898438, 1, 1.273438, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -2, { 1.875000, 1, 1.289062, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, -1, { 1.851562, 1, 1.304688, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 0, { 1.835938, 1, 1.320312, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 1, { 1.804688, 1, 1.343750, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 2, { 1.773438, 1, 1.367188, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 3, { 1.750000, 1, 1.390625, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 4, { 1.718750, 1, 1.414062, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 5, { 1.695312, 1, 1.437500, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 6, { 1.656250, 1, 1.476562, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", NeutralFluorescent, 7, { 1.617188, 1, 1.515625, 0 } }, /*4500K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -7, { 2.819820, 1.153153, 1, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -6, { 2.669565, 1.113043, 1, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -5, { 2.521008, 1.075630, 1, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -4, { 2.390244, 1.040650, 1, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -3, { 2.259843, 1.007874, 1, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -2, { 2.195312, 1, 1.023438, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, -1, { 2.140625, 1, 1.054688, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 0, { 2.101562, 1, 1.085938, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 1, { 2.070312, 1, 1.101562, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 2, { 2.046875, 1, 1.117188, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 3, { 2.023438, 1, 1.132812, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 4, { 2.000000, 1, 1.156250, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 5, { 1.976562, 1, 1.171875, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 6, { 1.953125, 1, 1.187500, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", DaylightFluorescent, 7, { 1.929688, 1, 1.203125, 0 } }, /*6600K*/ { "OLYMPUS", "E-1", Daylight, -7, { 1.726562, 1, 1.093750, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -6, { 1.710938, 1, 1.101562, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -5, { 1.703125, 1, 1.109375, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -4, { 1.695312, 1, 1.117188, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -3, { 1.687500, 1, 1.117188, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -2, { 1.671875, 1, 1.125000, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, -1, { 1.664062, 1, 1.132812, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 0, { 1.664062, 1, 1.140625, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 1, { 1.648438, 1, 1.148438, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 2, { 1.640625, 1, 1.156250, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 3, { 1.632812, 1, 1.164062, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 4, { 1.617188, 1, 1.164062, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 5, { 1.609375, 1, 1.171875, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 6, { 1.601562, 1, 1.179688, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Daylight, 7, { 1.593750, 1, 1.187500, 0 } }, /*5300K*/ { "OLYMPUS", "E-1", Cloudy, -7, { 2.008130, 1.040650, 1, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -6, { 1.967742, 1.032258, 1, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -5, { 1.920635, 1.015873, 1, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -4, { 1.867188, 1, 1.000000, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -3, { 1.851562, 1, 1.007812, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -2, { 1.828125, 1, 1.023438, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, -1, { 1.812500, 1, 1.031250, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 0, { 1.796875, 1, 1.046875, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 1, { 1.781250, 1, 1.054688, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 2, { 1.773438, 1, 1.062500, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 3, { 1.757812, 1, 1.070312, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 4, { 1.750000, 1, 1.070312, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 5, { 1.742188, 1, 1.078125, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 6, { 1.734375, 1, 1.085938, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Cloudy, 7, { 1.726562, 1, 1.093750, 0 } }, /*6000K*/ { "OLYMPUS", "E-1", Shade, -7, { 2.584906, 1.207547, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -6, { 2.532710, 1.196262, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -5, { 2.467890, 1.174312, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -4, { 2.396396, 1.153153, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -3, { 2.357143, 1.142857, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -2, { 2.289474, 1.122807, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, -1, { 2.252174, 1.113043, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 0, { 2.196581, 1.094017, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 1, { 2.126050, 1.075630, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 2, { 2.091667, 1.066667, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 3, { 2.032787, 1.049180, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 4, { 2.000000, 1.040650, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 5, { 1.944000, 1.024000, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 6, { 1.897638, 1.007874, 1, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", Shade, 7, { 1.859375, 1, 1.000000, 0 } }, /*7500K*/ { "OLYMPUS", "E-1", "3300K", -7, { 1.109375, 1, 1.695312, 0 } }, { "OLYMPUS", "E-1", "3300K", -6, { 1.101562, 1, 1.710938, 0 } }, { "OLYMPUS", "E-1", "3300K", -5, { 1.093750, 1, 1.718750, 0 } }, { "OLYMPUS", "E-1", "3300K", -4, { 1.093750, 1, 1.734375, 0 } }, { "OLYMPUS", "E-1", "3300K", -3, { 1.085938, 1, 1.742188, 0 } }, { "OLYMPUS", "E-1", "3300K", -2, { 1.078125, 1, 1.750000, 0 } }, { "OLYMPUS", "E-1", "3300K", -1, { 1.070312, 1, 1.765625, 0 } }, { "OLYMPUS", "E-1", "3300K", 0, { 1.070312, 1, 1.773438, 0 } }, { "OLYMPUS", "E-1", "3300K", 1, { 1.054688, 1, 1.781250, 0 } }, { "OLYMPUS", "E-1", "3300K", 2, { 1.046875, 1, 1.796875, 0 } }, { "OLYMPUS", "E-1", "3300K", 3, { 1.046875, 1, 1.804688, 0 } }, { "OLYMPUS", "E-1", "3300K", 4, { 1.039062, 1, 1.820312, 0 } }, { "OLYMPUS", "E-1", "3300K", 5, { 1.031250, 1, 1.828125, 0 } }, { "OLYMPUS", "E-1", "3300K", 6, { 1.023438, 1, 1.843750, 0 } }, { "OLYMPUS", "E-1", "3300K", 7, { 1.015625, 1, 1.851562, 0 } }, { "OLYMPUS", "E-1", "3900K", -7, { 1.335938, 1, 1.414062, 0 } }, { "OLYMPUS", "E-1", "3900K", -6, { 1.320312, 1, 1.429688, 0 } }, { "OLYMPUS", "E-1", "3900K", -5, { 1.304688, 1, 1.445312, 0 } }, { "OLYMPUS", "E-1", "3900K", -4, { 1.289062, 1, 1.460938, 0 } }, { "OLYMPUS", "E-1", "3900K", -3, { 1.273438, 1, 1.476562, 0 } }, { "OLYMPUS", "E-1", "3900K", -2, { 1.257812, 1, 1.492188, 0 } }, { "OLYMPUS", "E-1", "3900K", -1, { 1.242188, 1, 1.507812, 0 } }, { "OLYMPUS", "E-1", "3900K", 0, { 1.234375, 1, 1.523438, 0 } }, { "OLYMPUS", "E-1", "3900K", 1, { 1.218750, 1, 1.531250, 0 } }, { "OLYMPUS", "E-1", "3900K", 2, { 1.210938, 1, 1.546875, 0 } }, { "OLYMPUS", "E-1", "3900K", 3, { 1.203125, 1, 1.554688, 0 } }, { "OLYMPUS", "E-1", "3900K", 4, { 1.195312, 1, 1.562500, 0 } }, { "OLYMPUS", "E-1", "3900K", 5, { 1.187500, 1, 1.578125, 0 } }, { "OLYMPUS", "E-1", "3900K", 6, { 1.187500, 1, 1.585938, 0 } }, { "OLYMPUS", "E-1", "3900K", 7, { 1.179688, 1, 1.601562, 0 } }, { "OLYMPUS", "E-1", "4300K", -7, { 1.484375, 1, 1.281250, 0 } }, { "OLYMPUS", "E-1", "4300K", -6, { 1.468750, 1, 1.289062, 0 } }, { "OLYMPUS", "E-1", "4300K", -5, { 1.460938, 1, 1.296875, 0 } }, { "OLYMPUS", "E-1", "4300K", -4, { 1.445312, 1, 1.304688, 0 } }, { "OLYMPUS", "E-1", "4300K", -3, { 1.437500, 1, 1.312500, 0 } }, { "OLYMPUS", "E-1", "4300K", -2, { 1.429688, 1, 1.328125, 0 } }, { "OLYMPUS", "E-1", "4300K", -1, { 1.414062, 1, 1.335938, 0 } }, { "OLYMPUS", "E-1", "4300K", 0, { 1.414062, 1, 1.343750, 0 } }, { "OLYMPUS", "E-1", "4300K", 1, { 1.390625, 1, 1.359375, 0 } }, { "OLYMPUS", "E-1", "4300K", 2, { 1.375000, 1, 1.375000, 0 } }, { "OLYMPUS", "E-1", "4300K", 3, { 1.359375, 1, 1.390625, 0 } }, { "OLYMPUS", "E-1", "4300K", 4, { 1.343750, 1, 1.406250, 0 } }, { "OLYMPUS", "E-1", "4300K", 5, { 1.328125, 1, 1.421875, 0 } }, { "OLYMPUS", "E-1", "4300K", 6, { 1.312500, 1, 1.437500, 0 } }, { "OLYMPUS", "E-1", "4300K", 7, { 1.296875, 1, 1.453125, 0 } }, { "OLYMPUS", "E-1", "4800K", -7, { 1.601562, 1, 1.179688, 0 } }, { "OLYMPUS", "E-1", "4800K", -6, { 1.593750, 1, 1.187500, 0 } }, { "OLYMPUS", "E-1", "4800K", -5, { 1.585938, 1, 1.195312, 0 } }, { "OLYMPUS", "E-1", "4800K", -4, { 1.578125, 1, 1.203125, 0 } }, { "OLYMPUS", "E-1", "4800K", -3, { 1.562500, 1, 1.203125, 0 } }, { "OLYMPUS", "E-1", "4800K", -2, { 1.554688, 1, 1.210938, 0 } }, { "OLYMPUS", "E-1", "4800K", -1, { 1.546875, 1, 1.218750, 0 } }, { "OLYMPUS", "E-1", "4800K", 0, { 1.546875, 1, 1.226562, 0 } }, { "OLYMPUS", "E-1", "4800K", 1, { 1.531250, 1, 1.234375, 0 } }, { "OLYMPUS", "E-1", "4800K", 2, { 1.515625, 1, 1.242188, 0 } }, { "OLYMPUS", "E-1", "4800K", 3, { 1.507812, 1, 1.257812, 0 } }, { "OLYMPUS", "E-1", "4800K", 4, { 1.500000, 1, 1.265625, 0 } }, { "OLYMPUS", "E-1", "4800K", 5, { 1.484375, 1, 1.273438, 0 } }, { "OLYMPUS", "E-1", "4800K", 6, { 1.476562, 1, 1.281250, 0 } }, { "OLYMPUS", "E-1", "4800K", 7, { 1.460938, 1, 1.289062, 0 } }, { "OLYMPUS", "E-10", Incandescent, 0, { 1, 1.153153, 3.441442, 0 } }, /*3000K*/ { "OLYMPUS", "E-10", IncandescentWarm, 0, { 1.101562, 1, 2.351562, 0 } }, /*3700K*/ { "OLYMPUS", "E-10", WhiteFluorescent, 0, { 1.460938, 1, 2.546875, 0 } }, /*4000K*/ { "OLYMPUS", "E-10", DaylightFluorescent, 0, { 1.460938, 1, 1.843750, 0 } }, /*4500K*/ { "OLYMPUS", "E-10", Daylight, 0, { 1.523438, 1, 1.617188, 0 } }, /*5500K*/ { "OLYMPUS", "E-10", Cloudy, 0, { 1.687500, 1, 1.437500, 0 } }, /*6500K*/ { "OLYMPUS", "E-10", Shade, 0, { 1.812500, 1, 1.312500, 0 } }, /*7500K*/ /* Firmware version 1.4 */ { "OLYMPUS", "E-3", Daylight, 0, { 1.7812, 1, 1.4688, 0 } }, { "OLYMPUS", "E-3", Shade, 0, { 2.1406, 1, 1.1484, 0 } }, { "OLYMPUS", "E-3", Cloudy, 0, { 1.9531, 1, 1.3359, 0 } }, { "OLYMPUS", "E-3", Incandescent, 0, { 1.0312, 1, 2.8125, 0 } }, { "OLYMPUS", "E-3", WhiteFluorescent, 0, { 1.6328, 1, 2.1953, 0 } }, { "OLYMPUS", "E-3", NeutralFluorescent, 0, { 1.6641, 1, 1.7734, 0 } }, { "OLYMPUS", "E-3", DaylightFluorescent, 0, { 1.9531, 1, 1.4844, 0 } }, { "OLYMPUS", "E-3", Flash, 0, { 1.9609, 1, 1.3359, 0 } }, { "OLYMPUS", "E-3", "2000K", 0, { 1, 2.5600, 11.3600, 0 } }, { "OLYMPUS", "E-3", "2050K", 0, { 1, 2.2069, 9.4655, 0 } }, { "OLYMPUS", "E-3", "2100K", 0, { 1, 2.0000, 8.3281, 0 } }, { "OLYMPUS", "E-3", "2150K", 0, { 1, 1.8286, 7.3857, 0 } }, { "OLYMPUS", "E-3", "2200K", 0, { 1, 1.6623, 6.4935, 0 } }, { "OLYMPUS", "E-3", "2250K", 0, { 1, 1.5422, 5.8434, 0 } }, { "OLYMPUS", "E-3", "2300K", 0, { 1, 1.4545, 5.3523, 0 } }, { "OLYMPUS", "E-3", "2350K", 0, { 1, 1.3763, 4.9140, 0 } }, { "OLYMPUS", "E-3", "2400K", 0, { 1, 1.2929, 4.4848, 0 } }, { "OLYMPUS", "E-3", "2450K", 0, { 1, 1.2427, 4.1942, 0 } }, { "OLYMPUS", "E-3", "2500K", 0, { 1, 1.1852, 3.8889, 0 } }, { "OLYMPUS", "E-3", "2550K", 0, { 1, 1.1429, 3.6429, 0 } }, { "OLYMPUS", "E-3", "2600K", 0, { 1, 1.0940, 3.3932, 0 } }, { "OLYMPUS", "E-3", "2650K", 0, { 1, 1.0579, 3.1901, 0 } }, { "OLYMPUS", "E-3", "2700K", 0, { 1, 1.0240, 3.0080, 0 } }, { "OLYMPUS", "E-3", "2750K", 0, { 1.0078, 1, 2.8516, 0 } }, { "OLYMPUS", "E-3", "2800K", 0, { 1.0312, 1, 2.7891, 0 } }, { "OLYMPUS", "E-3", "2900K", 0, { 1.0859, 1, 2.6406, 0 } }, { "OLYMPUS", "E-3", "3000K", 0, { 1.1328, 1, 2.5156, 0 } }, { "OLYMPUS", "E-3", "3100K", 0, { 1.1875, 1, 2.3906, 0 } }, { "OLYMPUS", "E-3", "3200K", 0, { 1.2266, 1, 2.2734, 0 } }, { "OLYMPUS", "E-3", "3300K", 0, { 1.2734, 1, 2.1641, 0 } }, { "OLYMPUS", "E-3", "3400K", 0, { 1.3047, 1, 2.1016, 0 } }, { "OLYMPUS", "E-3", "3500K", 0, { 1.3438, 1, 2.0312, 0 } }, { "OLYMPUS", "E-3", "3600K", 0, { 1.3750, 1, 1.9687, 0 } }, { "OLYMPUS", "E-3", "3700K", 0, { 1.4063, 1, 1.9219, 0 } }, { "OLYMPUS", "E-3", "3800K", 0, { 1.4375, 1, 1.8750, 0 } }, { "OLYMPUS", "E-3", "3900K", 0, { 1.4687, 1, 1.8281, 0 } }, { "OLYMPUS", "E-3", "4000K", 0, { 1.4844, 1, 1.8047, 0 } }, { "OLYMPUS", "E-3", "4200K", 0, { 1.5234, 1, 1.7422, 0 } }, { "OLYMPUS", "E-3", "4400K", 0, { 1.5703, 1, 1.6875, 0 } }, { "OLYMPUS", "E-3", "4600K", 0, { 1.6250, 1, 1.6250, 0 } }, { "OLYMPUS", "E-3", "4800K", 0, { 1.6797, 1, 1.5625, 0 } }, { "OLYMPUS", "E-3", "5000K", 0, { 1.7266, 1, 1.5156, 0 } }, { "OLYMPUS", "E-3", "5200K", 0, { 1.7734, 1, 1.4688, 0 } }, { "OLYMPUS", "E-3", "5400K", 0, { 1.8203, 1, 1.4297, 0 } }, { "OLYMPUS", "E-3", "5600K", 0, { 1.8750, 1, 1.3906, 0 } }, { "OLYMPUS", "E-3", "5800K", 0, { 1.9297, 1, 1.3516, 0 } }, { "OLYMPUS", "E-3", "6000K", 0, { 1.9844, 1, 1.3125, 0 } }, { "OLYMPUS", "E-3", "6200K", 0, { 2.0078, 1, 1.2891, 0 } }, { "OLYMPUS", "E-3", "6400K", 0, { 2.0312, 1, 1.2656, 0 } }, { "OLYMPUS", "E-3", "6600K", 0, { 2.0625, 1, 1.2344, 0 } }, { "OLYMPUS", "E-3", "6800K", 0, { 2.0859, 1, 1.2109, 0 } }, { "OLYMPUS", "E-3", "7000K", 0, { 2.1094, 1, 1.1875, 0 } }, { "OLYMPUS", "E-3", "7400K", 0, { 2.1484, 1, 1.1484, 0 } }, { "OLYMPUS", "E-3", "7800K", 0, { 2.1875, 1, 1.1094, 0 } }, { "OLYMPUS", "E-3", "8200K", 0, { 2.2266, 1, 1.0703, 0 } }, { "OLYMPUS", "E-3", "8600K", 0, { 2.2500, 1, 1.0469, 0 } }, { "OLYMPUS", "E-3", "9000K", 0, { 2.2813, 1, 1.0156, 0 } }, { "OLYMPUS", "E-3", "9400K", 0, { 2.3228, 1.0079, 1, 0 } }, { "OLYMPUS", "E-3", "9800K", 0, { 2.4032, 1.0323, 1, 0 } }, { "OLYMPUS", "E-3", "10000K", 0, { 2.4590, 1.0492, 1, 0 } }, { "OLYMPUS", "E-3", "11000K", 0, { 2.6379, 1.1034, 1, 0 } }, { "OLYMPUS", "E-3", "12000K", 0, { 2.8018, 1.1532, 1, 0 } }, { "OLYMPUS", "E-3", "13000K", 0, { 2.9811, 1.2075, 1, 0 } }, { "OLYMPUS", "E-3", "14000K", 0, { 3.1373, 1.2549, 1, 0 } }, /* Firmware version 1.3 */ { "OLYMPUS", "E-5", Daylight, 0, { 1.7344, 1, 1.3203, 0 } }, { "OLYMPUS", "E-5", Shade, 0, { 2.1016, 1, 1.0313, 0 } }, { "OLYMPUS", "E-5", Cloudy, 0, { 1.9141, 1, 1.1953, 0 } }, { "OLYMPUS", "E-5", Incandescent, 0, { 1.0000, 1, 2.3906, 0 } }, { "OLYMPUS", "E-5", Fluorescent, 0, { 1.6484, 1, 1.9141, 0 } }, { "OLYMPUS", "E-5", Underwater, 0, { 1.7266, 1, 1.3828, 0 } }, { "OLYMPUS", "E-5", Flash, 0, { 1.9063, 1, 1.1797, 0 } }, { "OLYMPUS", "E-5", "2000K", 0, { 1, 2.6122, 9.7959, 0 } }, { "OLYMPUS", "E-5", "2050K", 0, { 1, 2.2857, 8.2857, 0 } }, { "OLYMPUS", "E-5", "2100K", 0, { 1, 2.0645, 7.2742, 0 } }, { "OLYMPUS", "E-5", "2150K", 0, { 1, 1.8824, 6.4412, 0 } }, { "OLYMPUS", "E-5", "2200K", 0, { 1, 1.7067, 5.6533, 0 } }, { "OLYMPUS", "E-5", "2250K", 0, { 1, 1.6000, 5.1500, 0 } }, { "OLYMPUS", "E-5", "2300K", 0, { 1, 1.4884, 4.6512, 0 } }, { "OLYMPUS", "E-5", "2350K", 0, { 1, 1.4066, 4.2747, 0 } }, { "OLYMPUS", "E-5", "2400K", 0, { 1, 1.3333, 3.9375, 0 } }, { "OLYMPUS", "E-5", "2450K", 0, { 1, 1.2800, 3.6800, 0 } }, { "OLYMPUS", "E-5", "2500K", 0, { 1, 1.2190, 3.4095, 0 } }, { "OLYMPUS", "E-5", "2550K", 0, { 1, 1.1743, 3.1927, 0 } }, { "OLYMPUS", "E-5", "2600K", 0, { 1, 1.1327, 3.0000, 0 } }, { "OLYMPUS", "E-5", "2650K", 0, { 1, 1.0940, 2.8205, 0 } }, { "OLYMPUS", "E-5", "2700K", 0, { 1, 1.0579, 2.6529, 0 } }, { "OLYMPUS", "E-5", "2750K", 0, { 1, 1.0240, 2.5040, 0 } }, { "OLYMPUS", "E-5", "2800K", 0, { 1.0000, 1, 2.3906, 0 } }, { "OLYMPUS", "E-5", "2900K", 0, { 1.0547, 1, 2.2734, 0 } }, { "OLYMPUS", "E-5", "3000K", 0, { 1.1016, 1, 2.1641, 0 } }, { "OLYMPUS", "E-5", "3100K", 0, { 1.1484, 1, 2.0625, 0 } }, { "OLYMPUS", "E-5", "3200K", 0, { 1.1953, 1, 1.9609, 0 } }, { "OLYMPUS", "E-5", "3300K", 0, { 1.2344, 1, 1.8750, 0 } }, { "OLYMPUS", "E-5", "3400K", 0, { 1.2656, 1, 1.8281, 0 } }, { "OLYMPUS", "E-5", "3500K", 0, { 1.3047, 1, 1.7734, 0 } }, { "OLYMPUS", "E-5", "3600K", 0, { 1.3359, 1, 1.7188, 0 } }, { "OLYMPUS", "E-5", "3700K", 0, { 1.3594, 1, 1.6797, 0 } }, { "OLYMPUS", "E-5", "3800K", 0, { 1.3906, 1, 1.6406, 0 } }, { "OLYMPUS", "E-5", "3900K", 0, { 1.4219, 1, 1.6016, 0 } }, { "OLYMPUS", "E-5", "4000K", 0, { 1.4375, 1, 1.5937, 0 } }, { "OLYMPUS", "E-5", "4200K", 0, { 1.4766, 1, 1.5703, 0 } }, { "OLYMPUS", "E-5", "4400K", 0, { 1.5234, 1, 1.5313, 0 } }, { "OLYMPUS", "E-5", "4600K", 0, { 1.5781, 1, 1.4766, 0 } }, { "OLYMPUS", "E-5", "4800K", 0, { 1.6250, 1, 1.4219, 0 } }, { "OLYMPUS", "E-5", "5000K", 0, { 1.6641, 1, 1.3828, 0 } }, { "OLYMPUS", "E-5", "5200K", 0, { 1.7109, 1, 1.3438, 0 } }, { "OLYMPUS", "E-5", "5400K", 0, { 1.7578, 1, 1.3047, 0 } }, { "OLYMPUS", "E-5", "5600K", 0, { 1.8125, 1, 1.2656, 0 } }, { "OLYMPUS", "E-5", "5800K", 0, { 1.8594, 1, 1.2344, 0 } }, { "OLYMPUS", "E-5", "6000K", 0, { 1.9141, 1, 1.1953, 0 } }, { "OLYMPUS", "E-5", "6200K", 0, { 1.9375, 1, 1.1719, 0 } }, { "OLYMPUS", "E-5", "6400K", 0, { 1.9687, 1, 1.1484, 0 } }, { "OLYMPUS", "E-5", "6600K", 0, { 1.9922, 1, 1.1250, 0 } }, { "OLYMPUS", "E-5", "6800K", 0, { 2.0156, 1, 1.1016, 0 } }, { "OLYMPUS", "E-5", "7000K", 0, { 2.0469, 1, 1.0781, 0 } }, { "OLYMPUS", "E-5", "7400K", 0, { 2.0859, 1, 1.0469, 0 } }, { "OLYMPUS", "E-5", "7800K", 0, { 2.1250, 1, 1.0078, 0 } }, { "OLYMPUS", "E-5", "8200K", 0, { 2.2160, 1.0240, 1, 0 } }, { "OLYMPUS", "E-5", "8600K", 0, { 2.3033, 1.0492, 1, 0 } }, { "OLYMPUS", "E-5", "9000K", 0, { 2.4153, 1.0847, 1, 0 } }, { "OLYMPUS", "E-5", "9400K", 0, { 2.5043, 1.1130, 1, 0 } }, { "OLYMPUS", "E-5", "9800K", 0, { 2.5752, 1.1327, 1, 0 } }, { "OLYMPUS", "E-5", "10000K", 0, { 2.6396, 1.1532, 1, 0 } }, { "OLYMPUS", "E-5", "11000K", 0, { 2.8571, 1.2190, 1, 0 } }, { "OLYMPUS", "E-5", "12000K", 0, { 3.0198, 1.2673, 1, 0 } }, { "OLYMPUS", "E-5", "13000K", 0, { 3.2292, 1.3333, 1, 0 } }, { "OLYMPUS", "E-5", "14000K", 0, { 3.3763, 1.3763, 1, 0 } }, { "OLYMPUS", "E-30", Daylight, -7, { 1.554688, 1, 1.515625, 0 } }, { "OLYMPUS", "E-30", Daylight, 0, { 1.812500, 1, 1.335937, 0 } }, { "OLYMPUS", "E-30", Daylight, 7, { 2.062500, 1, 1.148437, 0 } }, { "OLYMPUS", "E-30", Shade, -7, { 1.867188, 1, 1.171875, 0 } }, { "OLYMPUS", "E-30", Shade, 0, { 2.179688, 1, 1.031250, 0 } }, { "OLYMPUS", "E-30", Shade, 7, { 2.814159, 1.132743, 1, 0 } }, { "OLYMPUS", "E-30", Cloudy, -7, { 1.710938, 1, 1.359375, 0 } }, { "OLYMPUS", "E-30", Cloudy, 0, { 1.992187, 1, 1.195312, 0 } }, { "OLYMPUS", "E-30", Cloudy, 7, { 2.265625, 1, 1.023438, 0 } }, { "OLYMPUS", "E-30", Incandescent, -7, { 1, 1.103448, 3.137931, 0 } }, { "OLYMPUS", "E-30", Incandescent, 0, { 1.054687, 1, 2.500000, 0 } }, { "OLYMPUS", "E-30", Incandescent, 7, { 1.195313, 1, 2.148437, 0 } }, { "OLYMPUS", "E-30", WhiteFluorescent, -7, { 1.453125, 1, 2.187500, 0 } }, { "OLYMPUS", "E-30", WhiteFluorescent, 0, { 1.695313, 1, 1.921875, 0 } }, { "OLYMPUS", "E-30", WhiteFluorescent, 7, { 1.929687, 1, 1.648437, 0 } }, { "OLYMPUS", "E-30", NeutralFluorescent, -7, { 1.437500, 1, 1.929687, 0 } }, { "OLYMPUS", "E-30", NeutralFluorescent, 0, { 1.679687, 1, 1.695313, 0 } }, { "OLYMPUS", "E-30", NeutralFluorescent, 7, { 1.914063, 1, 1.453125, 0 } }, { "OLYMPUS", "E-30", DaylightFluorescent, -7, { 1.765625, 1, 1.500000, 0 } }, { "OLYMPUS", "E-30", DaylightFluorescent, 0, { 2.054688, 1, 1.320313, 0 } }, { "OLYMPUS", "E-30", DaylightFluorescent, 7, { 2.335938, 1, 1.132812, 0 } }, { "OLYMPUS", "E-30", Flash, -7, { 1.710938, 1, 1.359375, 0 } }, { "OLYMPUS", "E-30", Flash, 0, { 1.992187, 1, 1.195312, 0 } }, { "OLYMPUS", "E-30", Flash, 7, { 2.265625, 1, 1.023438, 0 } }, { "OLYMPUS", "E-30", "2000K", 0, { 1, 2.509804, 10.058823, 0 } }, { "OLYMPUS", "E-30", "2050K", 0, { 1, 2.206897, 8.534483, 0 } }, { "OLYMPUS", "E-30", "2100K", 0, { 1, 1.969231, 7.384615, 0 } }, { "OLYMPUS", "E-30", "2150K", 0, { 1, 1.802817, 6.563380, 0 } }, { "OLYMPUS", "E-30", "2200K", 0, { 1, 1.641026, 5.782051, 0 } }, { "OLYMPUS", "E-30", "2250K", 0, { 1, 1.523809, 5.202381, 0 } }, { "OLYMPUS", "E-30", "2300K", 0, { 1, 1.422222, 4.711111, 0 } }, { "OLYMPUS", "E-30", "2350K", 0, { 1, 1.347368, 4.326316, 0 } }, { "OLYMPUS", "E-30", "2400K", 0, { 1, 1.267327, 3.950495, 0 } }, { "OLYMPUS", "E-30", "2450K", 0, { 1, 1.219048, 3.695238, 0 } }, { "OLYMPUS", "E-30", "2500K", 0, { 1, 1.163636, 3.436364, 0 } }, { "OLYMPUS", "E-30", "2550K", 0, { 1, 1.113043, 3.191304, 0 } }, { "OLYMPUS", "E-30", "2600K", 0, { 1, 1.075630, 2.991597, 0 } }, { "OLYMPUS", "E-30", "2650K", 0, { 1, 1.032258, 2.798387, 0 } }, { "OLYMPUS", "E-30", "2700K", 0, { 1.000000, 1, 2.632813, 0 } }, { "OLYMPUS", "E-30", "2750K", 0, { 1.031250, 1, 2.562500, 0 } }, { "OLYMPUS", "E-30", "2800K", 0, { 1.054687, 1, 2.500000, 0 } }, { "OLYMPUS", "E-30", "2900K", 0, { 1.109375, 1, 2.367187, 0 } }, { "OLYMPUS", "E-30", "3000K", 0, { 1.164062, 1, 2.250000, 0 } }, { "OLYMPUS", "E-30", "3100K", 0, { 1.210938, 1, 2.132812, 0 } }, { "OLYMPUS", "E-30", "3200K", 0, { 1.257812, 1, 2.031250, 0 } }, { "OLYMPUS", "E-30", "3300K", 0, { 1.304687, 1, 1.929687, 0 } }, { "OLYMPUS", "E-30", "3400K", 0, { 1.335937, 1, 1.875000, 0 } }, { "OLYMPUS", "E-30", "3500K", 0, { 1.375000, 1, 1.812500, 0 } }, { "OLYMPUS", "E-30", "3600K", 0, { 1.406250, 1, 1.757812, 0 } }, { "OLYMPUS", "E-30", "3700K", 0, { 1.437500, 1, 1.718750, 0 } }, { "OLYMPUS", "E-30", "3800K", 0, { 1.468750, 1, 1.679688, 0 } }, { "OLYMPUS", "E-30", "3900K", 0, { 1.500000, 1, 1.632813, 0 } }, { "OLYMPUS", "E-30", "4000K", 0, { 1.515625, 1, 1.625000, 0 } }, { "OLYMPUS", "E-30", "4200K", 0, { 1.546875, 1, 1.601562, 0 } }, { "OLYMPUS", "E-30", "4400K", 0, { 1.585938, 1, 1.562500, 0 } }, { "OLYMPUS", "E-30", "4600K", 0, { 1.640625, 1, 1.500000, 0 } }, { "OLYMPUS", "E-30", "4800K", 0, { 1.695313, 1, 1.445312, 0 } }, { "OLYMPUS", "E-30", "5000K", 0, { 1.742187, 1, 1.406250, 0 } }, { "OLYMPUS", "E-30", "5200K", 0, { 1.789062, 1, 1.359375, 0 } }, { "OLYMPUS", "E-30", "5400K", 0, { 1.835938, 1, 1.320313, 0 } }, { "OLYMPUS", "E-30", "5600K", 0, { 1.890625, 1, 1.273438, 0 } }, { "OLYMPUS", "E-30", "5800K", 0, { 1.937500, 1, 1.234375, 0 } }, { "OLYMPUS", "E-30", "6000K", 0, { 1.992187, 1, 1.195312, 0 } }, { "OLYMPUS", "E-30", "6200K", 0, { 2.015625, 1, 1.171875, 0 } }, { "OLYMPUS", "E-30", "6400K", 0, { 2.046875, 1, 1.148438, 0 } }, { "OLYMPUS", "E-30", "6600K", 0, { 2.070312, 1, 1.125000, 0 } }, { "OLYMPUS", "E-30", "6800K", 0, { 2.093750, 1, 1.101563, 0 } }, { "OLYMPUS", "E-30", "7000K", 0, { 2.125000, 1, 1.078125, 0 } }, { "OLYMPUS", "E-30", "7400K", 0, { 2.164063, 1, 1.046875, 0 } }, { "OLYMPUS", "E-30", "7800K", 0, { 2.203125, 1, 1.007813, 0 } }, { "OLYMPUS", "E-30", "8200K", 0, { 2.296000, 1.024000, 1, 0 } }, { "OLYMPUS", "E-30", "8600K", 0, { 2.385246, 1.049180, 1, 0 } }, { "OLYMPUS", "E-30", "9000K", 0, { 2.500000, 1.084746, 1, 0 } }, { "OLYMPUS", "E-30", "9400K", 0, { 2.591304, 1.113043, 1, 0 } }, { "OLYMPUS", "E-30", "9800K", 0, { 2.663717, 1.132743, 1, 0 } }, { "OLYMPUS", "E-30", "10000K", 0, { 2.729730, 1.153153, 1, 0 } }, { "OLYMPUS", "E-30", "11000K", 0, { 2.952381, 1.219048, 1, 0 } }, { "OLYMPUS", "E-30", "12000K", 0, { 3.118812, 1.267327, 1, 0 } }, { "OLYMPUS", "E-30", "13000K", 0, { 3.333333, 1.333333, 1, 0 } }, { "OLYMPUS", "E-30", "14000K", 0, { 3.483871, 1.376344, 1, 0 } }, { "OLYMPUS", "E-300", Incandescent, -7, { 1.179688, 1, 2.125000, 0 } }, { "OLYMPUS", "E-300", Incandescent, 0, { 1.140625, 1, 2.203125, 0 } }, { "OLYMPUS", "E-300", Incandescent, 7, { 1.093750, 1, 2.273438, 0 } }, { "OLYMPUS", "E-300", IncandescentWarm, -7, { 1.382812, 1, 1.859375, 0 } }, { "OLYMPUS", "E-300", IncandescentWarm, 0, { 1.312500, 1, 1.906250, 0 } }, { "OLYMPUS", "E-300", IncandescentWarm, 7, { 1.257812, 1, 1.984375, 0 } }, { "OLYMPUS", "E-300", WhiteFluorescent, -7, { 2.109375, 1, 1.710938, 0 } }, { "OLYMPUS", "E-300", WhiteFluorescent, 0, { 1.976562, 1, 1.921875, 0 } }, { "OLYMPUS", "E-300", WhiteFluorescent, 7, { 1.804688, 1, 2.062500, 0 } }, { "OLYMPUS", "E-300", NeutralFluorescent, -7, { 1.945312, 1, 1.445312, 0 } }, { "OLYMPUS", "E-300", NeutralFluorescent, 0, { 1.820312, 1, 1.562500, 0 } }, { "OLYMPUS", "E-300", NeutralFluorescent, 7, { 1.585938, 1, 1.945312, 0 } }, { "OLYMPUS", "E-300", DaylightFluorescent, -7, { 2.203125, 1, 1.000000, 0 } }, { "OLYMPUS", "E-300", DaylightFluorescent, 0, { 2.031250, 1, 1.328125, 0 } }, { "OLYMPUS", "E-300", DaylightFluorescent, 7, { 1.765625, 1, 1.367188, 0 } }, { "OLYMPUS", "E-300", Daylight, -7, { 1.835938, 1, 1.304688, 0 } }, { "OLYMPUS", "E-300", Daylight, 0, { 1.789062, 1, 1.351562, 0 } }, { "OLYMPUS", "E-300", Daylight, 7, { 1.726562, 1, 1.398438, 0 } }, { "OLYMPUS", "E-300", Cloudy, -7, { 2.000000, 1, 1.156250, 0 } }, { "OLYMPUS", "E-300", Cloudy, 0, { 1.890625, 1, 1.257812, 0 } }, { "OLYMPUS", "E-300", Cloudy, 7, { 1.835938, 1, 1.304688, 0 } }, { "OLYMPUS", "E-300", Shade, -7, { 2.179688, 1, 1.007812, 0 } }, { "OLYMPUS", "E-300", Shade, 0, { 2.070312, 1, 1.109375, 0 } }, { "OLYMPUS", "E-300", Shade, 7, { 1.945312, 1, 1.210938, 0 } }, { "OLYMPUS", "E-330", Daylight, 0, { 1.812500, 1, 1.296875, 0 } }, /*5300K*/ { "OLYMPUS", "E-330", Cloudy, 0, { 1.953125, 1, 1.195312, 0 } }, /*6000K*/ { "OLYMPUS", "E-330", Shade, 0, { 2.187500, 1, 1.054688, 0 } }, /*7500K*/ { "OLYMPUS", "E-330", Incandescent, 0, { 1.039062, 1, 2.437500, 0 } }, /*3000K*/ { "OLYMPUS", "E-330", WhiteFluorescent, 0, { 1.710938, 1, 1.906250, 0 } }, /*4000K*/ { "OLYMPUS", "E-330", NeutralFluorescent, 0, { 1.750000, 1, 1.531250, 0 } }, /*4500K*/ { "OLYMPUS", "E-330", DaylightFluorescent, 0, { 2.062500, 1, 1.289062, 0 } }, /*6600K*/ { "OLYMPUS", "E-400", Daylight, -7, { 2.554687, 1, 1.390625, 0 } }, { "OLYMPUS", "E-400", Daylight, 0, { 2.312500, 1, 1.179687, 0 } }, { "OLYMPUS", "E-400", Daylight, 7, { 2.096774, 1.032258, 1, 0 } }, { "OLYMPUS", "E-400", Cloudy, -7, { 2.695312, 1, 1.289062, 0 } }, { "OLYMPUS", "E-400", Cloudy, 0, { 2.437500, 1, 1.093750, 0 } }, { "OLYMPUS", "E-400", Cloudy, 7, { 2.554545, 1.163636, 1, 0 } }, { "OLYMPUS", "E-400", Shade, -7, { 2.835937, 1, 1.187500, 0 } }, { "OLYMPUS", "E-400", Shade, 0, { 2.754098, 1.049180, 1, 0 } }, { "OLYMPUS", "E-400", Shade, 7, { 3.202128, 1.361702, 1, 0 } }, { "OLYMPUS", "E-400", Incandescent, -7, { 1.500000, 1, 2.710938, 0 } }, { "OLYMPUS", "E-400", Incandescent, 0, { 1.460937, 1, 2.171875, 0 } }, { "OLYMPUS", "E-400", Incandescent, 7, { 1.367187, 1, 1.679688, 0 } }, { "OLYMPUS", "E-400", WhiteFluorescent, -7, { 2.523438, 1, 2.250000, 0 } }, { "OLYMPUS", "E-400", WhiteFluorescent, 0, { 2.390625, 1, 1.796875, 0 } }, { "OLYMPUS", "E-400", WhiteFluorescent, 7, { 2.164063, 1, 1.429688, 0 } }, { "OLYMPUS", "E-400", NeutralFluorescent, -7, { 2.226562, 1, 1.828125, 0 } }, { "OLYMPUS", "E-400", NeutralFluorescent, 0, { 2.132812, 1, 1.468750, 0 } }, { "OLYMPUS", "E-400", NeutralFluorescent, 7, { 1.953125, 1, 1.156250, 0 } }, { "OLYMPUS", "E-400", DaylightFluorescent, -7, { 2.593750, 1, 1.359375, 0 } }, { "OLYMPUS", "E-400", DaylightFluorescent, 0, { 2.445313, 1, 1.195313, 0 } }, { "OLYMPUS", "E-400", DaylightFluorescent, 7, { 3.293478, 1.391304, 1, 0 } }, { "OLYMPUS", "E-410", Daylight, 0, { 1.914063, 1, 1.367188, 0 } }, /*5300K*/ { "OLYMPUS", "E-410", Cloudy, 0, { 2.054688, 1, 1.250000, 0 } }, /*6000K*/ { "OLYMPUS", "E-410", Shade, 0, { 2.304688, 1, 1.031250, 0 } }, /*7500K*/ { "OLYMPUS", "E-410", Incandescent, 0, { 1.062500, 1, 2.781250, 0 } }, /*3000K*/ { "OLYMPUS", "E-410", WhiteFluorescent, 0, { 1.726562, 1, 2.226562, 0 } }, /*4000K*/ { "OLYMPUS", "E-410", NeutralFluorescent, 0, { 1.703125, 1, 1.796875, 0 } }, /*4500K*/ { "OLYMPUS", "E-410", DaylightFluorescent, 0, { 2.039063, 1, 1.476562, 0 } }, /*6600K*/ { "OLYMPUS", "E-420", Daylight, 0, { 1.820313, 1, 1.437500, 0 } }, { "OLYMPUS", "E-420", Shade, 0, { 2.179688, 1, 1.140625, 0 } }, { "OLYMPUS", "E-420", Cloudy, 0, { 2.000000, 1, 1.289062, 0 } }, { "OLYMPUS", "E-420", Incandescent, 0, { 1.039062, 1, 2.726562, 0 } }, { "OLYMPUS", "E-420", WhiteFluorescent, 0, { 1.703125, 1, 2.109375, 0 } }, { "OLYMPUS", "E-420", NeutralFluorescent, 0, { 1.703125, 1, 1.757812, 0 } }, { "OLYMPUS", "E-420", Flash, 0, { 2.078125, 1, 1.375000, 0 } }, { "OLYMPUS", "E-420", "2000K", 0, { 1.992187, 1, 1.289062, 0 } }, { "OLYMPUS", "E-420", "7000K", 0, { 2.125000, 1, 1.187500, 0 } }, { "OLYMPUS", "E-420", "14000K", 0, { 2.900901, 1.153153, 1, 0 } }, { "OLYMPUS", "E-500", Daylight, 0, { 1.898438, 1, 1.359375, 0 } }, /*5300K*/ { "OLYMPUS", "E-500", Cloudy, 0, { 1.992188, 1, 1.265625, 0 } }, /*6000K*/ { "OLYMPUS", "E-500", Shade, 0, { 2.148438, 1, 1.125000, 0 } }, /*7500K*/ { "OLYMPUS", "E-500", Incandescent, 0, { 1.265625, 1, 2.195312, 0 } }, /*3000K*/ { "OLYMPUS", "E-500", WhiteFluorescent, 0, { 1.976562, 1, 1.914062, 0 } }, /*4000K*/ { "OLYMPUS", "E-500", NeutralFluorescent, 0, { 1.828125, 1, 1.562500, 0 } }, /*4500K*/ { "OLYMPUS", "E-500", DaylightFluorescent, 0, { 2.046875, 1, 1.359375, 0 } }, /*6600K*/ { "OLYMPUS", "E-510", Daylight, -7, { 2.164063, 1, 1.546875, 0 } }, { "OLYMPUS", "E-510", Daylight, 0, { 1.968750, 1, 1.296875, 0 } }, { "OLYMPUS", "E-510", Daylight, 7, { 1.742187, 1, 1.062500, 0 } }, { "OLYMPUS", "E-510", Shade, -7, { 2.492188, 1, 1.273438, 0 } }, { "OLYMPUS", "E-510", Shade, 0, { 2.439024, 1.040650, 1, 0 } }, { "OLYMPUS", "E-510", Shade, 7, { 3.055556, 1.422222, 1, 0 } }, { "OLYMPUS", "E-510", Cloudy, -7, { 2.312500, 1, 1.414062, 0 } }, { "OLYMPUS", "E-510", Cloudy, 0, { 2.109375, 1, 1.187500, 0 } }, { "OLYMPUS", "E-510", Cloudy, 7, { 2.192982, 1.122807, 1, 0 } }, { "OLYMPUS", "E-510", Incandescent, -7, { 1.109375, 1, 3.351562, 0 } }, { "OLYMPUS", "E-510", Incandescent, 0, { 1.093750, 1, 2.671875, 0 } }, { "OLYMPUS", "E-510", Incandescent, 7, { 1.031250, 1, 2.054688, 0 } }, { "OLYMPUS", "E-510", WhiteFluorescent, -7, { 1.578125, 1, 2.250000, 0 } }, { "OLYMPUS", "E-510", WhiteFluorescent, 0, { 1.718750, 1, 2.109375, 0 } }, { "OLYMPUS", "E-510", WhiteFluorescent, 7, { 1.523437, 1, 1.265625, 0 } }, { "OLYMPUS", "E-510", NeutralFluorescent, -7, { 1.835938, 1, 1.828125, 0 } }, { "OLYMPUS", "E-510", NeutralFluorescent, 0, { 1.687500, 1, 1.710938, 0 } }, { "OLYMPUS", "E-510", NeutralFluorescent, 7, { 1.726562, 1, 1.078125, 0 } }, { "OLYMPUS", "E-510", DaylightFluorescent, -7, { 2.203125, 1, 1.500000, 0 } }, { "OLYMPUS", "E-510", DaylightFluorescent, 0, { 2.023438, 1, 1.398437, 0 } }, { "OLYMPUS", "E-510", DaylightFluorescent, 7, { 3.193182, 1.454545, 1, 0 } }, { "OLYMPUS", "E-520", Daylight, 0, { 1.859375, 1, 1.445312, 0 } }, { "OLYMPUS", "E-520", Shade, 0, { 2.234375, 1, 1.140625, 0 } }, { "OLYMPUS", "E-520", Cloudy, 0, { 2.046875, 1, 1.296875, 0 } }, { "OLYMPUS", "E-520", Tungsten, 0, { 1.062500, 1, 2.687500, 0 } }, { "OLYMPUS", "E-520", WhiteFluorescent, 0, { 1.703125, 1, 2.109375, 0 } }, { "OLYMPUS", "E-520", NeutralFluorescent, 0, { 1.718750, 1, 1.765625, 0 } }, { "OLYMPUS", "E-520", DaylightFluorescent, 0, { 2.101563, 1, 1.375000, 0 } }, { "OLYMPUS", "E-520", Flash, 0, { 2.039063, 1, 1.296875, 0 } }, { "OLYMPUS", "E-520", "2000K", 0, { 1, 2.461538, 10.576923, 0 } }, { "OLYMPUS", "E-520", "2050K", 0, { 1, 2.169491, 9.000000, 0 } }, { "OLYMPUS", "E-520", "2100K", 0, { 1, 1.939394, 7.803031, 0 } }, { "OLYMPUS", "E-520", "2150K", 0, { 1, 1.777778, 6.944445, 0 } }, { "OLYMPUS", "E-520", "2200K", 0, { 1, 1.620253, 6.126582, 0 } }, { "OLYMPUS", "E-520", "2250K", 0, { 1, 1.505882, 5.517647, 0 } }, { "OLYMPUS", "E-520", "2300K", 0, { 1, 1.406593, 5.000000, 0 } }, { "OLYMPUS", "E-520", "2350K", 0, { 1, 1.333333, 4.604167, 0 } }, { "OLYMPUS", "E-520", "2400K", 0, { 1, 1.254902, 4.205882, 0 } }, { "OLYMPUS", "E-520", "2450K", 0, { 1, 1.207547, 3.933962, 0 } }, { "OLYMPUS", "E-520", "2500K", 0, { 1, 1.153153, 3.657658, 0 } }, { "OLYMPUS", "E-520", "2550K", 0, { 1, 1.103448, 3.396552, 0 } }, { "OLYMPUS", "E-520", "2600K", 0, { 1, 1.066667, 3.191667, 0 } }, { "OLYMPUS", "E-520", "2650K", 0, { 1, 1.024000, 2.976000, 0 } }, { "OLYMPUS", "E-520", "2700K", 0, { 1.007812, 1, 2.828125, 0 } }, { "OLYMPUS", "E-520", "2750K", 0, { 1.039062, 1, 2.750000, 0 } }, { "OLYMPUS", "E-520", "2800K", 0, { 1.062500, 1, 2.687500, 0 } }, { "OLYMPUS", "E-520", "2900K", 0, { 1.117188, 1, 2.546875, 0 } }, { "OLYMPUS", "E-520", "3000K", 0, { 1.171875, 1, 2.421875, 0 } }, { "OLYMPUS", "E-520", "3100K", 0, { 1.218750, 1, 2.296875, 0 } }, { "OLYMPUS", "E-520", "3200K", 0, { 1.265625, 1, 2.179688, 0 } }, { "OLYMPUS", "E-520", "3300K", 0, { 1.312500, 1, 2.078125, 0 } }, { "OLYMPUS", "E-520", "3400K", 0, { 1.343750, 1, 2.023438, 0 } }, { "OLYMPUS", "E-520", "3500K", 0, { 1.382812, 1, 1.960937, 0 } }, { "OLYMPUS", "E-520", "3600K", 0, { 1.414063, 1, 1.906250, 0 } }, { "OLYMPUS", "E-520", "3700K", 0, { 1.445312, 1, 1.859375, 0 } }, { "OLYMPUS", "E-520", "3800K", 0, { 1.476563, 1, 1.812500, 0 } }, { "OLYMPUS", "E-520", "3900K", 0, { 1.507813, 1, 1.765625, 0 } }, { "OLYMPUS", "E-520", "4000K", 0, { 1.531250, 1, 1.757812, 0 } }, { "OLYMPUS", "E-520", "4200K", 0, { 1.578125, 1, 1.726562, 0 } }, { "OLYMPUS", "E-520", "4400K", 0, { 1.625000, 1, 1.679688, 0 } }, { "OLYMPUS", "E-520", "4600K", 0, { 1.687500, 1, 1.617187, 0 } }, { "OLYMPUS", "E-520", "4800K", 0, { 1.742187, 1, 1.554687, 0 } }, { "OLYMPUS", "E-520", "5000K", 0, { 1.789062, 1, 1.515625, 0 } }, { "OLYMPUS", "E-520", "5200K", 0, { 1.835938, 1, 1.468750, 0 } }, { "OLYMPUS", "E-520", "5400K", 0, { 1.882812, 1, 1.429687, 0 } }, { "OLYMPUS", "E-520", "5600K", 0, { 1.937500, 1, 1.382812, 0 } }, { "OLYMPUS", "E-520", "5800K", 0, { 1.992187, 1, 1.343750, 0 } }, { "OLYMPUS", "E-520", "6000K", 0, { 2.046875, 1, 1.296875, 0 } }, { "OLYMPUS", "E-520", "6200K", 0, { 2.070312, 1, 1.273438, 0 } }, { "OLYMPUS", "E-520", "6400K", 0, { 2.101563, 1, 1.250000, 0 } }, { "OLYMPUS", "E-520", "6600K", 0, { 2.125000, 1, 1.226563, 0 } }, { "OLYMPUS", "E-520", "6800K", 0, { 2.148437, 1, 1.210937, 0 } }, { "OLYMPUS", "E-520", "7000K", 0, { 2.179688, 1, 1.187500, 0 } }, { "OLYMPUS", "E-520", "7400K", 0, { 2.218750, 1, 1.156250, 0 } }, { "OLYMPUS", "E-520", "7800K", 0, { 2.257812, 1, 1.117187, 0 } }, { "OLYMPUS", "E-520", "8200K", 0, { 2.296875, 1, 1.085938, 0 } }, { "OLYMPUS", "E-520", "8600K", 0, { 2.328125, 1, 1.062500, 0 } }, { "OLYMPUS", "E-520", "9000K", 0, { 2.359375, 1, 1.039063, 0 } }, { "OLYMPUS", "E-520", "9400K", 0, { 2.382812, 1, 1.015625, 0 } }, { "OLYMPUS", "E-520", "9800K", 0, { 2.406250, 1, 1.000000, 0 } }, { "OLYMPUS", "E-520", "10000K", 0, { 2.460317, 1.015873, 1, 0 } }, { "OLYMPUS", "E-520", "11000K", 0, { 2.641667, 1.066667, 1, 0 } }, { "OLYMPUS", "E-520", "12000K", 0, { 2.775862, 1.103448, 1, 0 } }, { "OLYMPUS", "E-520", "13000K", 0, { 2.919643, 1.142857, 1, 0 } }, { "OLYMPUS", "E-520", "14000K", 0, { 3.036697, 1.174312, 1, 0 } }, /* -7/+7 fine tuning is -7/+7 in both amber-blue and green-magenta */ { "OLYMPUS", "E-600", Daylight, -7, { 1.804688, 1, 1.671875, 0 } }, { "OLYMPUS", "E-600", Daylight, 0, { 1.851563, 1, 1.289063, 0 } }, { "OLYMPUS", "E-600", Daylight, 7, { 1.917355, 1.057851, 1, 0 } }, { "OLYMPUS", "E-600", Shade, -7, { 2.179688, 1, 1.281250, 0 } }, { "OLYMPUS", "E-600", Shade, 0, { 2.244094, 1.007874, 1, 0 } }, { "OLYMPUS", "E-600", Shade, 7, { 2.989247, 1.376344, 1, 0 } }, { "OLYMPUS", "E-600", Cloudy, -7, { 2.000000, 1, 1.500000, 0 } }, { "OLYMPUS", "E-600", Cloudy, 0, { 2.046875, 1, 1.164062, 0 } }, { "OLYMPUS", "E-600", Cloudy, 7, { 2.327273, 1.163636, 1, 0 } }, { "OLYMPUS", "E-600", Incandescent, -7, { 1.062500, 1, 3.156250, 0 } }, { "OLYMPUS", "E-600", Incandescent, 0, { 1.093750, 1, 2.437500, 0 } }, { "OLYMPUS", "E-600", Incandescent, 7, { 1.062500, 1, 1.796875, 0 } }, { "OLYMPUS", "E-600", WhiteFluorescent, -7, { 1.703125, 1, 2.398438, 0 } }, { "OLYMPUS", "E-600", WhiteFluorescent, 0, { 1.750000, 1, 1.851563, 0 } }, { "OLYMPUS", "E-600", WhiteFluorescent, 7, { 1.710938, 1, 1.359375, 0 } }, { "OLYMPUS", "E-600", NeutralFluorescent, -7, { 1.671875, 1, 2.109375, 0 } }, { "OLYMPUS", "E-600", NeutralFluorescent, 0, { 1.710938, 1, 1.625000, 0 } }, { "OLYMPUS", "E-600", NeutralFluorescent, 7, { 1.671875, 1, 1.195312, 0 } }, { "OLYMPUS", "E-600", DaylightFluorescent, -7, { 2.039063, 1, 1.632813, 0 } }, { "OLYMPUS", "E-600", DaylightFluorescent, 0, { 2.085937, 1, 1.265625, 0 } }, { "OLYMPUS", "E-600", DaylightFluorescent, 7, { 2.193277, 1.075630, 1, 0 } }, { "OLYMPUS", "E-600", Flash, -7, { 1.992187, 1, 1.492187, 0 } }, { "OLYMPUS", "E-600", Flash, 0, { 2.039063, 1, 1.156250, 0 } }, { "OLYMPUS", "E-600", Flash, 7, { 2.339450, 1.174312, 1, 0 } }, /* -7/+7 fine tuning is -7/+7 in both amber-blue and green-magenta */ { "OLYMPUS", "E-620", Daylight, -7, { 1.804688, 1, 1.726563, 0 } }, { "OLYMPUS", "E-620", Daylight, 0, { 1.851563, 1, 1.335938, 0 } }, { "OLYMPUS", "E-620", Daylight, 7, { 1.841270, 1.015873, 1, 0 } }, { "OLYMPUS", "E-620", Shade, -7, { 2.171875, 1, 1.320312, 0 } }, { "OLYMPUS", "E-620", Shade, 0, { 2.218750, 1, 1.023438, 0 } }, { "OLYMPUS", "E-620", Shade, 7, { 2.885417, 1.333333, 1, 0 } }, { "OLYMPUS", "E-620", Cloudy, -7, { 1.992187, 1, 1.539062, 0 } }, { "OLYMPUS", "E-620", Cloudy, 0, { 2.039063, 1, 1.187500, 0 } }, { "OLYMPUS", "E-620", Cloudy, 7, { 2.297297, 1.153153, 1, 0 } }, { "OLYMPUS", "E-620", Incandescent, -7, { 1.070312, 1, 3.281250, 0 } }, { "OLYMPUS", "E-620", Incandescent, 0, { 1.101563, 1, 2.531250, 0 } }, { "OLYMPUS", "E-620", Incandescent, 7, { 1.070313, 1, 1.867188, 0 } }, { "OLYMPUS", "E-620", WhiteFluorescent, -7, { 1.679687, 1, 2.500000, 0 } }, { "OLYMPUS", "E-620", WhiteFluorescent, 0, { 1.718750, 1, 1.929687, 0 } }, { "OLYMPUS", "E-620", WhiteFluorescent, 7, { 1.679688, 1, 1.421875, 0 } }, { "OLYMPUS", "E-620", NeutralFluorescent, -7, { 1.632813, 1, 2.179688, 0 } }, { "OLYMPUS", "E-620", NeutralFluorescent, 0, { 1.671875, 1, 1.679688, 0 } }, { "OLYMPUS", "E-620", NeutralFluorescent, 7, { 1.625000, 1, 1.234375, 0 } }, { "OLYMPUS", "E-620", DaylightFluorescent, -7, { 2.000000, 1, 1.687500, 0 } }, { "OLYMPUS", "E-620", DaylightFluorescent, 0, { 2.046875, 1, 1.304687, 0 } }, { "OLYMPUS", "E-620", DaylightFluorescent, 7, { 2.098361, 1.049180, 1, 0 } }, { "OLYMPUS", "E-620", Flash, -7, { 1.992187, 1, 1.546875, 0 } }, { "OLYMPUS", "E-620", Flash, 0, { 2.039063, 1, 1.195313, 0 } }, { "OLYMPUS", "E-620", Flash, 7, { 2.276786, 1.142857, 1, 0 } }, /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-M5", Daylight, -7, { 1.8047, 1, 2.0547, 0 } }, { "OLYMPUS", "E-M5", Daylight, 0, { 2.1016, 1, 1.8047, 0 } }, { "OLYMPUS", "E-M5", Daylight, 7, { 2.3906, 1, 1.5469, 0 } }, { "OLYMPUS", "E-M5", Shade, -7, { 2.1484, 1, 1.6172, 0 } }, { "OLYMPUS", "E-M5", Shade, 0, { 2.5000, 1, 1.4219, 0 } }, { "OLYMPUS", "E-M5", Shade, 7, { 2.8437, 1, 1.2187, 0 } }, { "OLYMPUS", "E-M5", Cloudy, -7, { 1.9766, 1, 1.8516, 0 } }, { "OLYMPUS", "E-M5", Cloudy, 0, { 2.3047, 1, 1.6250, 0 } }, { "OLYMPUS", "E-M5", Cloudy, 7, { 2.6250, 1, 1.3906, 0 } }, { "OLYMPUS", "E-M5", Incandescent, -7, { 1.1250, 1, 3.6953, 0 } }, { "OLYMPUS", "E-M5", Incandescent, 0, { 1.3125, 1, 3.2422, 0 } }, { "OLYMPUS", "E-M5", Incandescent, 7, { 1.4922, 1, 2.7812, 0 } }, { "OLYMPUS", "E-M5", Fluorescent, -7, { 1.7344, 1, 2.9375, 0 } }, { "OLYMPUS", "E-M5", Fluorescent, 0, { 2.0234, 1, 2.5781, 0 } }, { "OLYMPUS", "E-M5", Fluorescent, 7, { 2.3047, 1, 2.2109, 0 } }, { "OLYMPUS", "E-M5", Underwater, -7, { 1.3906, 1, 2.8281, 0 } }, { "OLYMPUS", "E-M5", Underwater, 0, { 1.6250, 1, 2.4844, 0 } }, { "OLYMPUS", "E-M5", Underwater, 7, { 1.8516, 1, 2.1328, 0 } }, { "OLYMPUS", "E-M5", Flash, -7, { 2.0391, 1, 1.8203, 0 } }, { "OLYMPUS", "E-M5", Flash, 0, { 2.3750, 1, 1.6016, 0 } }, { "OLYMPUS", "E-M5", Flash, 7, { 2.7031, 1, 1.3750, 0 } }, { "OLYMPUS", "E-P1", Daylight, 0, { 1.835938, 1, 1.351563, 0 } }, { "OLYMPUS", "E-P1", Shade, 0, { 2.195313, 1, 1.046875, 0 } }, { "OLYMPUS", "E-P1", Cloudy, 0, { 2.031250, 1, 1.203125, 0 } }, { "OLYMPUS", "E-P1", Incandescent, 0, { 1.078125, 1, 2.570312, 0 } }, { "OLYMPUS", "E-P1", WhiteFluorescent, 0, { 1.695313, 1, 1.937500, 0 } }, { "OLYMPUS", "E-P1", NeutralFluorescent, 0, { 1.687500, 1, 1.703125, 0 } }, { "OLYMPUS", "E-P1", DaylightFluorescent, 0, { 2.070312, 1, 1.312500, 0 } }, { "OLYMPUS", "E-P2", Daylight, -7, { 1.789063, 1, 1.789063, 0 } }, { "OLYMPUS", "E-P2", Daylight, -6, { 1.789063, 1, 1.726563, 0 } }, { "OLYMPUS", "E-P2", Daylight, -5, { 1.804688, 1, 1.664063, 0 } }, { "OLYMPUS", "E-P2", Daylight, -4, { 1.812500, 1, 1.609375, 0 } }, { "OLYMPUS", "E-P2", Daylight, -3, { 1.812500, 1, 1.546875, 0 } }, { "OLYMPUS", "E-P2", Daylight, -2, { 1.812500, 1, 1.492188, 0 } }, { "OLYMPUS", "E-P2", Daylight, -1, { 1.820313, 1, 1.429688, 0 } }, { "OLYMPUS", "E-P2", Daylight, 0, { 1.828125, 1, 1.382813, 0 } }, { "OLYMPUS", "E-P2", Daylight, 1, { 1.820313, 1, 1.320313, 0 } }, { "OLYMPUS", "E-P2", Daylight, 2, { 1.820313, 1, 1.265625, 0 } }, { "OLYMPUS", "E-P2", Daylight, 3, { 1.820313, 1, 1.218750, 0 } }, { "OLYMPUS", "E-P2", Daylight, 4, { 1.804688, 1, 1.164063, 0 } }, { "OLYMPUS", "E-P2", Daylight, 5, { 1.804688, 1, 1.117188, 0 } }, { "OLYMPUS", "E-P2", Daylight, 6, { 1.796875, 1, 1.062500, 0 } }, { "OLYMPUS", "E-P2", Daylight, 7, { 1.781250, 1, 1.015625, 0 } }, { "OLYMPUS", "E-P2", Shade, -7, { 2.125000, 1, 1.382813, 0 } }, { "OLYMPUS", "E-P2", Shade, -6, { 2.132813, 1, 1.335938, 0 } }, { "OLYMPUS", "E-P2", Shade, -5, { 2.148438, 1, 1.289063, 0 } }, { "OLYMPUS", "E-P2", Shade, -4, { 2.148438, 1, 1.234375, 0 } }, { "OLYMPUS", "E-P2", Shade, -3, { 2.156250, 1, 1.195313, 0 } }, { "OLYMPUS", "E-P2", Shade, -2, { 2.156250, 1, 1.148438, 0 } }, { "OLYMPUS", "E-P2", Shade, -1, { 2.164063, 1, 1.101563, 0 } }, { "OLYMPUS", "E-P2", Shade, 0, { 2.171875, 1, 1.070313, 0 } }, { "OLYMPUS", "E-P2", Shade, 1, { 2.164063, 1, 1.023438, 0 } }, { "OLYMPUS", "E-P2", Shade, 2, { 2.164063, 1, 0.976563, 0 } }, { "OLYMPUS", "E-P2", Shade, 3, { 2.156250, 1, 0.937500, 0 } }, { "OLYMPUS", "E-P2", Shade, 4, { 2.156250, 1, 0.898438, 0 } }, { "OLYMPUS", "E-P2", Shade, 5, { 2.140625, 1, 0.859375, 0 } }, { "OLYMPUS", "E-P2", Shade, 6, { 2.132813, 1, 0.820313, 0 } }, { "OLYMPUS", "E-P2", Shade, 7, { 2.117188, 1, 0.781250, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -7, { 1.953125, 1, 1.617188, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -6, { 1.968750, 1, 1.562500, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -5, { 1.976563, 1, 1.507813, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -4, { 1.976563, 1, 1.445313, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -3, { 1.984375, 1, 1.398438, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -2, { 1.984375, 1, 1.343750, 0 } }, { "OLYMPUS", "E-P2", Cloudy, -1, { 1.992188, 1, 1.296875, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 0, { 2.000000, 1, 1.250000, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 1, { 1.992188, 1, 1.187500, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 2, { 1.992188, 1, 1.140625, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 3, { 1.984375, 1, 1.101563, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 4, { 1.976563, 1, 1.054688, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 5, { 1.968750, 1, 1.007813, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 6, { 1.960938, 1, 0.960938, 0 } }, { "OLYMPUS", "E-P2", Cloudy, 7, { 1.953125, 1, 0.914063, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -7, { 1.039063, 1, 3.445313, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -6, { 1.046875, 1, 3.320313, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -5, { 1.054688, 1, 3.210938, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -4, { 1.062500, 1, 3.093750, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -3, { 1.054688, 1, 2.976563, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -2, { 1.062500, 1, 2.867188, 0 } }, { "OLYMPUS", "E-P2", Incandescent, -1, { 1.062500, 1, 2.750000, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 0, { 1.070313, 1, 2.656250, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 1, { 1.062500, 1, 2.546875, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 2, { 1.062500, 1, 2.437500, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 3, { 1.062500, 1, 2.335938, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 4, { 1.054688, 1, 2.242188, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 5, { 1.054688, 1, 2.148438, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 6, { 1.046875, 1, 2.054688, 0 } }, { "OLYMPUS", "E-P2", Incandescent, 7, { 1.046875, 1, 1.960938, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -7, { 1.742188, 1, 2.617188, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -6, { 1.750000, 1, 2.515625, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -5, { 1.757813, 1, 2.429688, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -4, { 1.757813, 1, 2.343750, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -3, { 1.765625, 1, 2.257813, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -2, { 1.765625, 1, 2.171875, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, -1, { 1.773438, 1, 2.093750, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 0, { 1.781250, 1, 2.015625, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 1, { 1.773438, 1, 1.921875, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 2, { 1.773438, 1, 1.851563, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 3, { 1.765625, 1, 1.773438, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 4, { 1.765625, 1, 1.703125, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 5, { 1.757813, 1, 1.625000, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 6, { 1.750000, 1, 1.554688, 0 } }, { "OLYMPUS", "E-P2", WhiteFluorescent, 7, { 1.734375, 1, 1.484375, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -7, { 1.695313, 1, 2.328125, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -6, { 1.710938, 1, 2.242188, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -5, { 1.718750, 1, 2.171875, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -4, { 1.726563, 1, 2.085938, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -3, { 1.726563, 1, 2.007813, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -2, { 1.734375, 1, 1.937500, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, -1, { 1.734375, 1, 1.859375, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 0, { 1.742188, 1, 1.796875, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 1, { 1.734375, 1, 1.718750, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 2, { 1.726563, 1, 1.648438, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 3, { 1.726563, 1, 1.585938, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 4, { 1.718750, 1, 1.515625, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 5, { 1.718750, 1, 1.453125, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 6, { 1.710938, 1, 1.382813, 0 } }, { "OLYMPUS", "E-P2", NeutralFluorescent, 7, { 1.703125, 1, 1.320313, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -7, { 2.078125, 1, 1.765625, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -6, { 2.093750, 1, 1.710938, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -5, { 2.101563, 1, 1.648438, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -4, { 2.117188, 1, 1.593750, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -3, { 2.117188, 1, 1.531250, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -2, { 2.125000, 1, 1.476563, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, -1, { 2.125000, 1, 1.414063, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 0, { 2.132813, 1, 1.367188, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 1, { 2.125000, 1, 1.304688, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 2, { 2.117188, 1, 1.257813, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 3, { 2.117188, 1, 1.203125, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 4, { 2.109375, 1, 1.156250, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 5, { 2.109375, 1, 1.101563, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 6, { 2.093750, 1, 1.054688, 0 } }, { "OLYMPUS", "E-P2", DaylightFluorescent, 7, { 2.085938, 1, 1.007813, 0 } }, { "OLYMPUS", "E-P2", Flash, -7, { 1.960938, 1, 1.609375, 0 } }, { "OLYMPUS", "E-P2", Flash, -6, { 1.976563, 1, 1.554688, 0 } }, { "OLYMPUS", "E-P2", Flash, -5, { 1.984375, 1, 1.492188, 0 } }, { "OLYMPUS", "E-P2", Flash, -4, { 1.984375, 1, 1.437500, 0 } }, { "OLYMPUS", "E-P2", Flash, -3, { 1.992188, 1, 1.390625, 0 } }, { "OLYMPUS", "E-P2", Flash, -2, { 1.992188, 1, 1.335938, 0 } }, { "OLYMPUS", "E-P2", Flash, -1, { 2.000000, 1, 1.289063, 0 } }, { "OLYMPUS", "E-P2", Flash, 0, { 2.007813, 1, 1.242188, 0 } }, { "OLYMPUS", "E-P2", Flash, 1, { 2.000000, 1, 1.179688, 0 } }, { "OLYMPUS", "E-P2", Flash, 2, { 2.000000, 1, 1.132813, 0 } }, { "OLYMPUS", "E-P2", Flash, 3, { 1.992188, 1, 1.093750, 0 } }, { "OLYMPUS", "E-P2", Flash, 4, { 1.984375, 1, 1.046875, 0 } }, { "OLYMPUS", "E-P2", Flash, 5, { 1.976563, 1, 1.000000, 0 } }, { "OLYMPUS", "E-P2", Flash, 6, { 1.968750, 1, 0.953125, 0 } }, { "OLYMPUS", "E-P2", Flash, 7, { 1.960938, 1, 0.906250, 0 } }, { "OLYMPUS", "E-P3", Daylight, 0, { 2.0469, 1, 1.4922, 0 } }, { "OLYMPUS", "E-P3", Shade, 0, { 2.4375, 1, 1.1875, 0 } }, { "OLYMPUS", "E-P3", Cloudy, 0, { 2.2188, 1, 1.3750, 0 } }, { "OLYMPUS", "E-P3", Incandescent, 0, { 1.2266, 1, 2.5312, 0 } }, { "OLYMPUS", "E-P3", Fluorescent, 0, { 1.9766, 1, 1.9766, 0 } }, { "OLYMPUS", "E-P3", Flash, 0, { 2.2109, 1, 1.3672, 0 } }, /* Firmware version 1.2 */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-PL1", Daylight, -7, { 1.492188, 1, 1.531250, 0 } }, { "OLYMPUS", "E-PL1", Daylight, 0, { 1.726562, 1, 1.343750, 0 } }, { "OLYMPUS", "E-PL1", Daylight, 7, { 1.984375, 1, 1.148438, 0 } }, { "OLYMPUS", "E-PL1", Shade, -7, { 1.796875, 1, 1.171875, 0 } }, { "OLYMPUS", "E-PL1", Shade, 0, { 2.085937, 1, 1.039062, 0 } }, { "OLYMPUS", "E-PL1", Shade, 7, { 2.699115, 1.132743, 1, 0 } }, { "OLYMPUS", "E-PL1", Cloudy, -7, { 1.640625, 1, 1.367187, 0 } }, { "OLYMPUS", "E-PL1", Cloudy, 0, { 1.906250, 1, 1.210938, 0 } }, { "OLYMPUS", "E-PL1", Cloudy, 7, { 2.179688, 1, 1.031250, 0 } }, { "OLYMPUS", "E-PL1", Incandescent, -7, { 1, 1.174312, 3.467890, 0 } }, { "OLYMPUS", "E-PL1", Incandescent, 0, { 1, 1.015873, 2.619048, 0 } }, { "OLYMPUS", "E-PL1", Incandescent, 7, { 1.125000, 1, 2.226562, 0 } }, { "OLYMPUS", "E-PL1", WhiteFluorescent, -7, { 1.421875, 1, 2.234375, 0 } }, { "OLYMPUS", "E-PL1", WhiteFluorescent, 0, { 1.648437, 1, 1.960937, 0 } }, { "OLYMPUS", "E-PL1", WhiteFluorescent, 7, { 1.882812, 1, 1.679687, 0 } }, { "OLYMPUS", "E-PL1", NeutralFluorescent, -7, { 1.390625, 1, 1.945313, 0 } }, { "OLYMPUS", "E-PL1", NeutralFluorescent, 0, { 1.609375, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PL1", NeutralFluorescent, 7, { 1.851563, 1, 1.468750, 0 } }, { "OLYMPUS", "E-PL1", DaylightFluorescent, -7, { 1.750000, 1, 1.507812, 0 } }, { "OLYMPUS", "E-PL1", DaylightFluorescent, 0, { 2.015625, 1, 1.328125, 0 } }, { "OLYMPUS", "E-PL1", DaylightFluorescent, 7, { 2.320313, 1.140625, 1, 0 } }, { "OLYMPUS", "E-PL1", Flash, -7, { 1.640625, 1, 1.367187, 0 } }, { "OLYMPUS", "E-PL1", Flash, 0, { 1.898438, 1, 1.203125, 0 } }, { "OLYMPUS", "E-PL1", Flash, 7, { 2.179688, 1, 1.031250, 0 } }, { "OLYMPUS", "E-PL1", "2000K", 0, { 1, 2.723404, 11.340426, 0 } }, { "OLYMPUS", "E-PL1", "2050K", 0, { 1, 2.370370, 9.537037, 0 } }, { "OLYMPUS", "E-PL1", "2100K", 0, { 1, 2.133333, 8.316667, 0 } }, { "OLYMPUS", "E-PL1", "2150K", 0, { 1, 1.939394, 7.333333, 0 } }, { "OLYMPUS", "E-PL1", "2200K", 0, { 1, 1.753425, 6.410959, 0 } }, { "OLYMPUS", "E-PL1", "2250K", 0, { 1, 1.641026, 5.820513, 0 } }, { "OLYMPUS", "E-PL1", "2300K", 0, { 1, 1.523810, 5.226190, 0 } }, { "OLYMPUS", "E-PL1", "2350K", 0, { 1, 1.438202, 4.786517, 0 } }, { "OLYMPUS", "E-PL1", "2400K", 0, { 1, 1.361702, 4.404255, 0 } }, { "OLYMPUS", "E-PL1", "2450K", 0, { 1, 1.306122, 4.102041, 0 } }, { "OLYMPUS", "E-PL1", "2500K", 0, { 1, 1.242718, 3.796117, 0 } }, { "OLYMPUS", "E-PL1", "2550K", 0, { 1, 1.196262, 3.542056, 0 } }, { "OLYMPUS", "E-PL1", "2600K", 0, { 1, 1.153153, 3.315315, 0 } }, { "OLYMPUS", "E-PL1", "2650K", 0, { 1, 1.113043, 3.113044, 0 } }, { "OLYMPUS", "E-PL1", "2700K", 0, { 1, 1.075630, 2.924370, 0 } }, { "OLYMPUS", "E-PL1", "2750K", 0, { 1, 1.040650, 2.747968, 0 } }, { "OLYMPUS", "E-PL1", "2800K", 0, { 1, 1.015873, 2.619048, 0 } }, { "OLYMPUS", "E-PL1", "2900K", 0, { 1.039062, 1, 2.437500, 0 } }, { "OLYMPUS", "E-PL1", "3000K", 0, { 1.085937, 1, 2.312500, 0 } }, { "OLYMPUS", "E-PL1", "3100K", 0, { 1.132812, 1, 2.195313, 0 } }, { "OLYMPUS", "E-PL1", "3200K", 0, { 1.179687, 1, 2.078125, 0 } }, { "OLYMPUS", "E-PL1", "3300K", 0, { 1.218750, 1, 1.976562, 0 } }, { "OLYMPUS", "E-PL1", "3400K", 0, { 1.250000, 1, 1.921875, 0 } }, { "OLYMPUS", "E-PL1", "3500K", 0, { 1.281250, 1, 1.859375, 0 } }, { "OLYMPUS", "E-PL1", "3600K", 0, { 1.312500, 1, 1.796875, 0 } }, { "OLYMPUS", "E-PL1", "3700K", 0, { 1.343750, 1, 1.757812, 0 } }, { "OLYMPUS", "E-PL1", "3800K", 0, { 1.375000, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PL1", "3900K", 0, { 1.406250, 1, 1.664062, 0 } }, { "OLYMPUS", "E-PL1", "4000K", 0, { 1.421875, 1, 1.648437, 0 } }, { "OLYMPUS", "E-PL1", "4200K", 0, { 1.468750, 1, 1.617188, 0 } }, { "OLYMPUS", "E-PL1", "4400K", 0, { 1.515625, 1, 1.578125, 0 } }, { "OLYMPUS", "E-PL1", "4600K", 0, { 1.570313, 1, 1.515625, 0 } }, { "OLYMPUS", "E-PL1", "4800K", 0, { 1.617188, 1, 1.453125, 0 } }, { "OLYMPUS", "E-PL1", "5000K", 0, { 1.656250, 1, 1.414062, 0 } }, { "OLYMPUS", "E-PL1", "5200K", 0, { 1.703125, 1, 1.367188, 0 } }, { "OLYMPUS", "E-PL1", "5400K", 0, { 1.750000, 1, 1.328125, 0 } }, { "OLYMPUS", "E-PL1", "5600K", 0, { 1.804688, 1, 1.289063, 0 } }, { "OLYMPUS", "E-PL1", "5800K", 0, { 1.851563, 1, 1.250000, 0 } }, { "OLYMPUS", "E-PL1", "6000K", 0, { 1.906250, 1, 1.210938, 0 } }, { "OLYMPUS", "E-PL1", "6200K", 0, { 1.929687, 1, 1.187500, 0 } }, { "OLYMPUS", "E-PL1", "6400K", 0, { 1.953125, 1, 1.164062, 0 } }, { "OLYMPUS", "E-PL1", "6600K", 0, { 1.984375, 1, 1.132813, 0 } }, { "OLYMPUS", "E-PL1", "6800K", 0, { 2.007813, 1, 1.117187, 0 } }, { "OLYMPUS", "E-PL1", "7000K", 0, { 2.031250, 1, 1.085938, 0 } }, { "OLYMPUS", "E-PL1", "7400K", 0, { 2.070312, 1, 1.054688, 0 } }, { "OLYMPUS", "E-PL1", "7800K", 0, { 2.109375, 1, 1.015625, 0 } }, { "OLYMPUS", "E-PL1", "8200K", 0, { 2.200000, 1.024000, 1, 0 } }, { "OLYMPUS", "E-PL1", "8600K", 0, { 2.278689, 1.049180, 1, 0 } }, { "OLYMPUS", "E-PL1", "9000K", 0, { 2.369748, 1.075630, 1, 0 } }, { "OLYMPUS", "E-PL1", "9400K", 0, { 2.478261, 1.113043, 1, 0 } }, { "OLYMPUS", "E-PL1", "9800K", 0, { 2.548673, 1.132743, 1, 0 } }, { "OLYMPUS", "E-PL1", "10000K", 0, { 2.612613, 1.153153, 1, 0 } }, { "OLYMPUS", "E-PL1", "11000K", 0, { 2.819048, 1.219048, 1, 0 } }, { "OLYMPUS", "E-PL1", "12000K", 0, { 3.010000, 1.280000, 1, 0 } }, { "OLYMPUS", "E-PL1", "13000K", 0, { 3.221053, 1.347368, 1, 0 } }, { "OLYMPUS", "E-PL1", "14000K", 0, { 3.369565, 1.391304, 1, 0 } }, { "OLYMPUS", "E-PL2", Daylight, 0, { 1.4609, 1, 1.4219, 0 } }, { "OLYMPUS", "E-PL2", Shade, 0, { 1.7422, 1, 1.1094, 0 } }, { "OLYMPUS", "E-PL2", Cloudy, 0, { 1.6172, 1, 1.2891, 0 } }, { "OLYMPUS", "E-PL2", Tungsten, 0, { 1, 1.1327, 2.9115, 0 } }, { "OLYMPUS", "E-PL2", Fluorescent, 0, { 1.3828, 1, 2.0859, 0 } }, { "OLYMPUS", "E-PL2", Flash, 0, { 1.6016, 1, 1.2891, 0 } }, { "OLYMPUS", "E-PL2", "2000K", 0, { 1, 2.3273, 9.1091, 0 } }, { "OLYMPUS", "E-PL2", "2050K", 0, { 1, 2.0984, 7.9508, 0 } }, { "OLYMPUS", "E-PL2", "2100K", 0, { 1, 1.9692, 7.2615, 0 } }, { "OLYMPUS", "E-PL2", "2150K", 0, { 1, 1.8551, 6.6522, 0 } }, { "OLYMPUS", "E-PL2", "2200K", 0, { 1, 1.7297, 6.0135, 0 } }, { "OLYMPUS", "E-PL2", "2250K", 0, { 1, 1.6410, 5.5513, 0 } }, { "OLYMPUS", "E-PL2", "2300K", 0, { 1, 1.5610, 5.1341, 0 } }, { "OLYMPUS", "E-PL2", "2350K", 0, { 1, 1.4884, 4.7674, 0 } }, { "OLYMPUS", "E-PL2", "2400K", 0, { 1, 1.4382, 4.4944, 0 } }, { "OLYMPUS", "E-PL2", "2450K", 0, { 1, 1.3763, 4.1935, 0 } }, { "OLYMPUS", "E-PL2", "2500K", 0, { 1, 1.3333, 3.9583, 0 } }, { "OLYMPUS", "E-PL2", "2550K", 0, { 1, 1.2929, 3.7475, 0 } }, { "OLYMPUS", "E-PL2", "2600K", 0, { 1, 1.2549, 3.5392, 0 } }, { "OLYMPUS", "E-PL2", "2650K", 0, { 1, 1.2190, 3.3619, 0 } }, { "OLYMPUS", "E-PL2", "2700K", 0, { 1, 1.1852, 3.1852, 0 } }, { "OLYMPUS", "E-PL2", "2750K", 0, { 1, 1.1532, 3.0270, 0 } }, { "OLYMPUS", "E-PL2", "2800K", 0, { 1, 1.1327, 2.9115, 0 } }, { "OLYMPUS", "E-PL2", "2900K", 0, { 1, 1.0847, 2.6610, 0 } }, { "OLYMPUS", "E-PL2", "3000K", 0, { 1, 1.0492, 2.4672, 0 } }, { "OLYMPUS", "E-PL2", "3100K", 0, { 1, 1.0079, 2.2598, 0 } }, { "OLYMPUS", "E-PL2", "3200K", 0, { 1.0234, 1, 2.1484, 0 } }, { "OLYMPUS", "E-PL2", "3300K", 0, { 1.0547, 1, 2.0625, 0 } }, { "OLYMPUS", "E-PL2", "3400K", 0, { 1.0781, 1, 2.0156, 0 } }, { "OLYMPUS", "E-PL2", "3500K", 0, { 1.1016, 1, 1.9609, 0 } }, { "OLYMPUS", "E-PL2", "3600K", 0, { 1.1250, 1, 1.9063, 0 } }, { "OLYMPUS", "E-PL2", "3700K", 0, { 1.1484, 1, 1.8672, 0 } }, { "OLYMPUS", "E-PL2", "3800K", 0, { 1.1719, 1, 1.8281, 0 } }, { "OLYMPUS", "E-PL2", "3900K", 0, { 1.2031, 1, 1.7812, 0 } }, { "OLYMPUS", "E-PL2", "4000K", 0, { 1.2187, 1, 1.7578, 0 } }, { "OLYMPUS", "E-PL2", "4200K", 0, { 1.2578, 1, 1.6953, 0 } }, { "OLYMPUS", "E-PL2", "4400K", 0, { 1.2969, 1, 1.6406, 0 } }, { "OLYMPUS", "E-PL2", "4600K", 0, { 1.3359, 1, 1.5859, 0 } }, { "OLYMPUS", "E-PL2", "4800K", 0, { 1.3750, 1, 1.5313, 0 } }, { "OLYMPUS", "E-PL2", "5000K", 0, { 1.4062, 1, 1.4922, 0 } }, { "OLYMPUS", "E-PL2", "5200K", 0, { 1.4375, 1, 1.4453, 0 } }, { "OLYMPUS", "E-PL2", "5400K", 0, { 1.4766, 1, 1.4063, 0 } }, { "OLYMPUS", "E-PL2", "5600K", 0, { 1.5313, 1, 1.3672, 0 } }, { "OLYMPUS", "E-PL2", "5800K", 0, { 1.5703, 1, 1.3281, 0 } }, { "OLYMPUS", "E-PL2", "6000K", 0, { 1.6172, 1, 1.2891, 0 } }, { "OLYMPUS", "E-PL2", "6200K", 0, { 1.6328, 1, 1.2656, 0 } }, { "OLYMPUS", "E-PL2", "6400K", 0, { 1.6484, 1, 1.2422, 0 } }, { "OLYMPUS", "E-PL2", "6600K", 0, { 1.6719, 1, 1.2109, 0 } }, { "OLYMPUS", "E-PL2", "6800K", 0, { 1.6875, 1, 1.1875, 0 } }, { "OLYMPUS", "E-PL2", "7000K", 0, { 1.7031, 1, 1.1641, 0 } }, { "OLYMPUS", "E-PL2", "7400K", 0, { 1.7344, 1, 1.1250, 0 } }, { "OLYMPUS", "E-PL2", "7800K", 0, { 1.7578, 1, 1.0859, 0 } }, { "OLYMPUS", "E-PL2", "8200K", 0, { 1.7812, 1, 1.0469, 0 } }, { "OLYMPUS", "E-PL2", "8600K", 0, { 1.8047, 1, 1.0234, 0 } }, { "OLYMPUS", "E-PL2", "9000K", 0, { 1.8346, 1.0079, 1, 0 } }, { "OLYMPUS", "E-PL2", "9400K", 0, { 1.9032, 1.0323, 1, 0 } }, { "OLYMPUS", "E-PL2", "9800K", 0, { 1.9669, 1.0579, 1, 0 } }, { "OLYMPUS", "E-PL2", "10000K", 0, { 2.0084, 1.0756, 1, 0 } }, { "OLYMPUS", "E-PL2", "11000K", 0, { 2.1504, 1.1327, 1, 0 } }, { "OLYMPUS", "E-PL2", "12000K", 0, { 2.2870, 1.1852, 1, 0 } }, { "OLYMPUS", "E-PL2", "13000K", 0, { 2.4272, 1.2427, 1, 0 } }, { "OLYMPUS", "E-PL2", "14000K", 0, { 2.5556, 1.2929, 1, 0 } }, /* Firmware version 1.3 */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-PL3", Daylight, -7, { 1.695313, 1, 1.656250, 0 } }, { "OLYMPUS", "E-PL3", Daylight, 0, { 1.976562, 1, 1.453125, 0 } }, { "OLYMPUS", "E-PL3", Daylight, 7, { 2.250000, 1, 1.242187, 0 } }, { "OLYMPUS", "E-PL3", Shade, -7, { 2.046875, 1, 1.312500, 0 } }, { "OLYMPUS", "E-PL3", Shade, 0, { 2.382812, 1, 1.156250, 0 } }, { "OLYMPUS", "E-PL3", Shade, 7, { 2.732283, 1.007874, 1, 0 } }, { "OLYMPUS", "E-PL3", Cloudy, -7, { 1.859375, 1, 1.515625, 0 } }, { "OLYMPUS", "E-PL3", Cloudy, 0, { 2.164063, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PL3", Cloudy, 7, { 2.460937, 1, 1.148437, 0 } }, { "OLYMPUS", "E-PL3", Tungsten, -7, { 1.007812, 1, 2.812500, 0 } }, { "OLYMPUS", "E-PL3", Tungsten, 0, { 1.171875, 1, 2.468750, 0 } }, { "OLYMPUS", "E-PL3", Tungsten, 7, { 1.335937, 1, 2.117187, 0 } }, { "OLYMPUS", "E-PL3", Fluorescent, -7, { 1.679688, 1, 2.203125, 0 } }, { "OLYMPUS", "E-PL3", Fluorescent, 0, { 1.953125, 1, 1.937500, 0 } }, { "OLYMPUS", "E-PL3", Fluorescent, 7, { 2.226562, 1, 1.664062, 0 } }, { "OLYMPUS", "E-PL3", Underwater, -7, { 1.812500, 1, 1.789062, 0 } }, { "OLYMPUS", "E-PL3", Underwater, 0, { 2.390625, 1, 1.484375, 0 } }, { "OLYMPUS", "E-PL3", Underwater, 7, { 2.429688, 1, 1.335937, 0 } }, { "OLYMPUS", "E-PL3", Flash, -7, { 2.218750, 1, 1.421875, 0 } }, { "OLYMPUS", "E-PL3", Flash, 0, { 2.585938, 1, 1.250000, 0 } }, { "OLYMPUS", "E-PL3", Flash, 7, { 2.945313, 1, 1.070312, 0 } }, { "OLYMPUS", "E-PL3", "2000K", 0, { 1, 1.882353, 6.897059, 0 } }, { "OLYMPUS", "E-PL3", "2050K", 0, { 1, 1.684211, 5.986842, 0 } }, { "OLYMPUS", "E-PL3", "2100K", 0, { 1, 1.560976, 5.402439, 0 } }, { "OLYMPUS", "E-PL3", "2150K", 0, { 1, 1.454545, 4.909091, 0 } }, { "OLYMPUS", "E-PL3", "2200K", 0, { 1, 1.347368, 4.421053, 0 } }, { "OLYMPUS", "E-PL3", "2250K", 0, { 1, 1.267327, 4.049505, 0 } }, { "OLYMPUS", "E-PL3", "2300K", 0, { 1, 1.207547, 3.754717, 0 } }, { "OLYMPUS", "E-PL3", "2350K", 0, { 1, 1.153153, 3.504504, 0 } }, { "OLYMPUS", "E-PL3", "2400K", 0, { 1, 1.094017, 3.239316, 0 } }, { "OLYMPUS", "E-PL3", "2450K", 0, { 1, 1.057851, 3.057851, 0 } }, { "OLYMPUS", "E-PL3", "2500K", 0, { 1, 1.015873, 2.873016, 0 } }, { "OLYMPUS", "E-PL3", "2550K", 0, { 1.015625, 1, 2.757813, 0 } }, { "OLYMPUS", "E-PL3", "2600K", 0, { 1.054687, 1, 2.695312, 0 } }, { "OLYMPUS", "E-PL3", "2650K", 0, { 1.085938, 1, 2.632813, 0 } }, { "OLYMPUS", "E-PL3", "2700K", 0, { 1.117187, 1, 2.570312, 0 } }, { "OLYMPUS", "E-PL3", "2750K", 0, { 1.148438, 1, 2.515625, 0 } }, { "OLYMPUS", "E-PL3", "2800K", 0, { 1.171875, 1, 2.468750, 0 } }, { "OLYMPUS", "E-PL3", "2900K", 0, { 1.226562, 1, 2.367187, 0 } }, { "OLYMPUS", "E-PL3", "3000K", 0, { 1.273437, 1, 2.273437, 0 } }, { "OLYMPUS", "E-PL3", "3100K", 0, { 1.328125, 1, 2.179688, 0 } }, { "OLYMPUS", "E-PL3", "3200K", 0, { 1.367188, 1, 2.093750, 0 } }, { "OLYMPUS", "E-PL3", "3300K", 0, { 1.414062, 1, 2.015625, 0 } }, { "OLYMPUS", "E-PL3", "3400K", 0, { 1.445312, 1, 1.968750, 0 } }, { "OLYMPUS", "E-PL3", "3500K", 0, { 1.476563, 1, 1.914063, 0 } }, { "OLYMPUS", "E-PL3", "3600K", 0, { 1.507812, 1, 1.867188, 0 } }, { "OLYMPUS", "E-PL3", "3700K", 0, { 1.539062, 1, 1.828125, 0 } }, { "OLYMPUS", "E-PL3", "3800K", 0, { 1.570312, 1, 1.789062, 0 } }, { "OLYMPUS", "E-PL3", "3900K", 0, { 1.609375, 1, 1.750000, 0 } }, { "OLYMPUS", "E-PL3", "4000K", 0, { 1.640625, 1, 1.734375, 0 } }, { "OLYMPUS", "E-PL3", "4200K", 0, { 1.703125, 1, 1.695313, 0 } }, { "OLYMPUS", "E-PL3", "4400K", 0, { 1.757812, 1, 1.648437, 0 } }, { "OLYMPUS", "E-PL3", "4600K", 0, { 1.812500, 1, 1.601562, 0 } }, { "OLYMPUS", "E-PL3", "4800K", 0, { 1.867188, 1, 1.554688, 0 } }, { "OLYMPUS", "E-PL3", "5000K", 0, { 1.906250, 1, 1.515625, 0 } }, { "OLYMPUS", "E-PL3", "5200K", 0, { 1.953125, 1, 1.476562, 0 } }, { "OLYMPUS", "E-PL3", "5400K", 0, { 2.000000, 1, 1.437500, 0 } }, { "OLYMPUS", "E-PL3", "5600K", 0, { 2.054688, 1, 1.406250, 0 } }, { "OLYMPUS", "E-PL3", "5800K", 0, { 2.109375, 1, 1.375000, 0 } }, { "OLYMPUS", "E-PL3", "6000K", 0, { 2.164063, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PL3", "6200K", 0, { 2.195313, 1, 1.312500, 0 } }, { "OLYMPUS", "E-PL3", "6400K", 0, { 2.226562, 1, 1.289062, 0 } }, { "OLYMPUS", "E-PL3", "6600K", 0, { 2.257812, 1, 1.257812, 0 } }, { "OLYMPUS", "E-PL3", "6800K", 0, { 2.289063, 1, 1.234375, 0 } }, { "OLYMPUS", "E-PL3", "7000K", 0, { 2.320313, 1, 1.210938, 0 } }, { "OLYMPUS", "E-PL3", "7400K", 0, { 2.367187, 1, 1.171875, 0 } }, { "OLYMPUS", "E-PL3", "7800K", 0, { 2.414062, 1, 1.132812, 0 } }, { "OLYMPUS", "E-PL3", "8200K", 0, { 2.460937, 1, 1.093750, 0 } }, { "OLYMPUS", "E-PL3", "8600K", 0, { 2.492188, 1, 1.070313, 0 } }, { "OLYMPUS", "E-PL3", "9000K", 0, { 2.523438, 1, 1.039063, 0 } }, { "OLYMPUS", "E-PL3", "9400K", 0, { 2.554687, 1, 1.015625, 0 } }, { "OLYMPUS", "E-PL3", "9800K", 0, { 2.606299, 1.007874, 1, 0 } }, { "OLYMPUS", "E-PL3", "10000K", 0, { 2.664000, 1.024000, 1, 0 } }, { "OLYMPUS", "E-PL3", "11000K", 0, { 2.865546, 1.075630, 1, 0 } }, { "OLYMPUS", "E-PL3", "12000K", 0, { 3.043860, 1.122807, 1, 0 } }, { "OLYMPUS", "E-PL3", "13000K", 0, { 3.238532, 1.174312, 1, 0 } }, { "OLYMPUS", "E-PL3", "14000K", 0, { 3.400000, 1.219048, 1, 0 } }, { "OLYMPUS", "SP500UZ", Daylight, -7, { 1.136719, 1, 2.359375, 0 } }, { "OLYMPUS", "SP500UZ", Daylight, 0, { 1.960937, 1, 1.585937, 0 } }, { "OLYMPUS", "SP500UZ", Daylight, 7, { 3.927660, 1.089362, 1, 0 } }, { "OLYMPUS", "SP500UZ", Cloudy, -7, { 1.191406, 1, 2.210937, 0 } }, { "OLYMPUS", "SP500UZ", Cloudy, 0, { 2.058594, 1, 1.484375, 0 } }, { "OLYMPUS", "SP500UZ", Cloudy, 7, { 4.404545, 1.163636, 1, 0 } }, { "OLYMPUS", "SP500UZ", EveningSun, -7, { 1.199219, 1, 2.214844, 0 } }, { "OLYMPUS", "SP500UZ", EveningSun, 0, { 2.074219, 1, 1.488281, 0 } }, { "OLYMPUS", "SP500UZ", EveningSun, 7, { 4.440909, 1.163636, 1, 0 } }, { "OLYMPUS", "SP500UZ", Tungsten, -7, { 1, 1.590062, 6.490683, 0 } }, { "OLYMPUS", "SP500UZ", Tungsten, 0, { 1.085937, 1, 2.742188, 0 } }, { "OLYMPUS", "SP500UZ", Tungsten, 7, { 1.996094, 1, 1.589844, 0 } }, { "OLYMPUS", "SP500UZ", Fluorescent, -7, { 1.324219, 1, 2.214844, 0 } }, { "OLYMPUS", "SP500UZ", Fluorescent, 0, { 2.285156, 1, 1.488281, 0 } }, { "OLYMPUS", "SP500UZ", Fluorescent, 7, { 4.890909, 1.163636, 1, 0 } }, { "OLYMPUS", "SP510UZ", Daylight, 0, { 1.656250, 1, 1.621094, 0 } }, { "OLYMPUS", "SP510UZ", Cloudy, 0, { 1.789063, 1, 1.546875, 0 } }, { "OLYMPUS", "SP510UZ", Incandescent, 0, { 1, 1.066667, 2.891667, 0 } }, { "OLYMPUS", "SP510UZ", WhiteFluorescent, 0, { 1.929688, 1, 1.562500, 0 } }, { "OLYMPUS", "SP510UZ", NeutralFluorescent, 0, { 1.644531, 1, 1.843750, 0 } }, { "OLYMPUS", "SP510UZ", DaylightFluorescent, 0, { 1.628906, 1, 2.210938, 0 } }, /* Firmware version 1.5 */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "XZ-1", Daylight, -7, { 1.687500, 1, 2.054688, 0 } }, { "OLYMPUS", "XZ-1", Daylight, 0, { 1.968750, 1, 1.804687, 0 } }, { "OLYMPUS", "XZ-1", Daylight, 7, { 2.242187, 1, 1.546875, 0 } }, { "OLYMPUS", "XZ-1", Shade, -7, { 2.000000, 1, 1.718750, 0 } }, { "OLYMPUS", "XZ-1", Shade, 0, { 2.328125, 1, 1.507813, 0 } }, { "OLYMPUS", "XZ-1", Shade, 7, { 2.648438, 1, 1.289062, 0 } }, { "OLYMPUS", "XZ-1", Cloudy, -7, { 1.812500, 1, 1.898438, 0 } }, { "OLYMPUS", "XZ-1", Cloudy, 0, { 2.109375, 1, 1.671875, 0 } }, { "OLYMPUS", "XZ-1", Cloudy, 7, { 2.398438, 1, 1.437500, 0 } }, { "OLYMPUS", "XZ-1", Incandescent, -7, { 1.031250, 1, 3.500000, 0 } }, { "OLYMPUS", "XZ-1", Incandescent, 0, { 1.203125, 1, 3.070312, 0 } }, { "OLYMPUS", "XZ-1", Incandescent, 7, { 1.367187, 1, 2.632813, 0 } }, { "OLYMPUS", "XZ-1", Fluorescent, -7, { 1.640625, 1, 2.843750, 0 } }, { "OLYMPUS", "XZ-1", Fluorescent, 0, { 1.914062, 1, 2.500000, 0 } }, { "OLYMPUS", "XZ-1", Fluorescent, 7, { 2.179688, 1, 2.148437, 0 } }, { "OLYMPUS", "XZ-1", Underwater, -7, { 1.468750, 1, 2.296875, 0 } }, { "OLYMPUS", "XZ-1", Underwater, 0, { 1.710937, 1, 2.015625, 0 } }, { "OLYMPUS", "XZ-1", Underwater, 7, { 1.937500, 1, 1.726563, 0 } }, { "Panasonic", "DMC-FZ8", Daylight, 0, { 1.904943, 1, 1.596958, 0 } }, { "Panasonic", "DMC-FZ8", Cloudy, 0, { 2.060836, 1, 1.498099, 0 } }, { "Panasonic", "DMC-FZ8", Shade, 0, { 2.258555, 1, 1.391635, 0 } }, { "Panasonic", "DMC-FZ8", Incandescent, 0, { 1.247148, 1, 2.288973, 0 } }, { "Panasonic", "DMC-FZ8", Flash, 0, { 2.072243, 1, 1.456274, 0 } }, { "Panasonic", "DMC-FZ18", Daylight, 0, { 1.783270, 1, 1.889734, 0 } }, { "Panasonic", "DMC-FZ18", Cloudy, 0, { 1.946768, 1, 1.680608, 0 } }, { "Panasonic", "DMC-FZ18", Shade, 0, { 2.117871, 1, 1.558935, 0 } }, { "Panasonic", "DMC-FZ18", Incandescent, 0, { 1.140684, 1, 2.627376, 0 } }, { "Panasonic", "DMC-FZ18", Flash, 0, { 1.882129, 1, 1.703422, 0 } }, { "Panasonic", "DMC-FZ28", Daylight, 0, { 1.684411, 1, 1.802281, 0 } }, { "Panasonic", "DMC-FZ28", Cloudy, 0, { 1.825095, 1, 1.676806, 0 } }, { "Panasonic", "DMC-FZ28", Shade, 0, { 1.996198, 1, 1.566540, 0 } }, { "Panasonic", "DMC-FZ28", Incandescent, 0, { 1.117871, 1, 2.558935, 0 } }, { "Panasonic", "DMC-FZ28", Flash, 0, { 1.939164, 1, 1.596958, 0 } }, { "Panasonic", "DMC-FZ28", "3000K", 0, { 1.015209, 1, 2.771863, 0 } }, { "Panasonic", "DMC-FZ28", "4000K", 0, { 1.277566, 1, 2.171103, 0 } }, { "Panasonic", "DMC-FZ28", "5000K", 0, { 1.585551, 1, 1.889734, 0 } }, { "Panasonic", "DMC-FZ28", "6000K", 0, { 1.764258, 1, 1.737642, 0 } }, { "Panasonic", "DMC-FZ28", "7000K", 0, { 1.939164, 1, 1.596958, 0 } }, { "Panasonic", "DMC-FZ28", "8000K", 0, { 2.049430, 1, 1.528517, 0 } }, { "Panasonic", "DMC-FZ30", Daylight, 0, { 1.757576, 1, 1.446970, 0 } }, { "Panasonic", "DMC-FZ30", Cloudy, 0, { 1.943182, 1, 1.276515, 0 } }, { "Panasonic", "DMC-FZ30", Incandescent, 0, { 1.098485, 1, 2.106061, 0 } }, { "Panasonic", "DMC-FZ30", Flash, 0, { 1.965909, 1, 1.303030, 0 } }, { "Panasonic", "DMC-FZ50", Daylight, 0, { 2.095057, 1, 1.642586, 0 } }, { "Panasonic", "DMC-FZ50", Cloudy, 0, { 2.319392, 1, 1.482890, 0 } }, { "Panasonic", "DMC-FZ50", Shade, 0, { 2.463878, 1, 1.414449, 0 } }, { "Panasonic", "DMC-FZ50", Incandescent, 0, { 1.365019, 1, 2.311787, 0 } }, { "Panasonic", "DMC-FZ50", Flash, 0, { 2.338403, 1, 1.338403, 0 } }, { "Panasonic", "DMC-G1", Daylight, 0, { 1.942966, 1, 1.448669, 0 } }, { "Panasonic", "DMC-G1", Cloudy, 0, { 2.106464, 1, 1.326996, 0 } }, { "Panasonic", "DMC-G1", Shade, 0, { 2.323194, 1, 1.224335, 0 } }, { "Panasonic", "DMC-G1", Incandescent, 0, { 1.319392, 1, 2.148289, 0 } }, { "Panasonic", "DMC-G1", Flash, 0, { 1.528517, 1, 1.277567, 0 } }, { "Panasonic", "DMC-G2", Daylight, 0, { 1.931559, 1, 1.414449, 0 } }, { "Panasonic", "DMC-G2", Cloudy, 0, { 2.292776, 1, 1.231939, 0 } }, { "Panasonic", "DMC-G2", Shade, 0, { 2.243346, 1, 1.231939, 0 } }, { "Panasonic", "DMC-G2", Incandescent, 0, { 2.190114, 1, 1.250951, 0 } }, { "Panasonic", "DMC-G2", Flash, 0, { 2.296578, 1, 1.190114, 0 } }, { "Panasonic", "DMC-G3", Daylight, 0, { 2.7925, 1, 1.5472, 0 } }, { "Panasonic", "DMC-G3", Cloudy, 0, { 2.9660, 1, 1.4528, 0 } }, { "Panasonic", "DMC-G3", Shade, 0, { 3.2642, 1, 1.3698, 0 } }, { "Panasonic", "DMC-G3", Incandescent, 0, { 1.8491, 1, 2.2566, 0 } }, { "Panasonic", "DMC-G3", Flash, 0, { 3.2868, 1, 1.3547, 0 } }, { "Panasonic", "DMC-G3", "2500K", 0, { 1.4226, 1, 2.8302, 0 } }, { "Panasonic", "DMC-G3", "2600K", 0, { 1.4755, 1, 2.7547, 0 } }, { "Panasonic", "DMC-G3", "2700K", 0, { 1.5283, 1, 2.6717, 0 } }, { "Panasonic", "DMC-G3", "2800K", 0, { 1.5925, 1, 2.5849, 0 } }, { "Panasonic", "DMC-G3", "2900K", 0, { 1.6491, 1, 2.5019, 0 } }, { "Panasonic", "DMC-G3", "3000K", 0, { 1.7094, 1, 2.4189, 0 } }, { "Panasonic", "DMC-G3", "3100K", 0, { 1.7660, 1, 2.3434, 0 } }, { "Panasonic", "DMC-G3", "3200K", 0, { 1.8189, 1, 2.2604, 0 } }, { "Panasonic", "DMC-G3", "3300K", 0, { 1.8792, 1, 2.1849, 0 } }, { "Panasonic", "DMC-G3", "3400K", 0, { 1.9358, 1, 2.1019, 0 } }, { "Panasonic", "DMC-G3", "3500K", 0, { 1.9962, 1, 2.0189, 0 } }, { "Panasonic", "DMC-G3", "3700K", 0, { 2.1245, 1, 1.9358, 0 } }, { "Panasonic", "DMC-G3", "4000K", 0, { 2.3245, 1, 1.8113, 0 } }, { "Panasonic", "DMC-G3", "4200K", 0, { 2.4189, 1, 1.7623, 0 } }, { "Panasonic", "DMC-G3", "4500K", 0, { 2.5585, 1, 1.6868, 0 } }, { "Panasonic", "DMC-G3", "4700K", 0, { 2.6000, 1, 1.6679, 0 } }, { "Panasonic", "DMC-G3", "5000K", 0, { 2.6679, 1, 1.6264, 0 } }, { "Panasonic", "DMC-G3", "5200K", 0, { 2.7170, 1, 1.5962, 0 } }, { "Panasonic", "DMC-G3", "5500K", 0, { 2.7925, 1, 1.5472, 0 } }, { "Panasonic", "DMC-G3", "5700K", 0, { 2.8415, 1, 1.5208, 0 } }, { "Panasonic", "DMC-G3", "6000K", 0, { 2.9283, 1, 1.4717, 0 } }, { "Panasonic", "DMC-G3", "6500K", 0, { 3.0679, 1, 1.4189, 0 } }, { "Panasonic", "DMC-G3", "7000K", 0, { 3.1925, 1, 1.3811, 0 } }, { "Panasonic", "DMC-G3", "7500K", 0, { 3.3170, 1, 1.3472, 0 } }, { "Panasonic", "DMC-G3", "8000K", 0, { 3.3962, 1, 1.3283, 0 } }, { "Panasonic", "DMC-G3", "8500K", 0, { 3.4792, 1, 1.3057, 0 } }, { "Panasonic", "DMC-G3", "9000K", 0, { 3.5585, 1, 1.2868, 0 } }, { "Panasonic", "DMC-G3", "9500K", 0, { 3.6302, 1, 1.2642, 0 } }, { "Panasonic", "DMC-G3", "10000K", 0, { 3.7094, 1, 1.2528, 0 } }, { "Panasonic", "DMC-G5", Daylight, 0, { 2.343396, 1, 1.618868, 0 } }, { "Panasonic", "DMC-G5", Cloudy, 0, { 2.452830, 1, 1.532075, 0 } }, { "Panasonic", "DMC-G5", Shade, 0, { 2.637736, 1, 1.445283, 0 } }, { "Panasonic", "DMC-G5", Incandescent, 0, { 1.615094, 1, 2.339623, 0 } }, { "Panasonic", "DMC-G5", Flash, 0, { 2.433962, 1, 1.475472, 0 } }, { "Panasonic", "DMC-G5", "2500K", 0, { 1.271698, 1, 2.901887, 0 } }, { "Panasonic", "DMC-G5", "2700K", 0, { 1.369811, 1, 2.743396, 0 } }, { "Panasonic", "DMC-G5", "3000K", 0, { 1.516981, 1, 2.490566, 0 } }, { "Panasonic", "DMC-G5", "3500K", 0, { 1.720755, 1, 2.094340, 0 } }, { "Panasonic", "DMC-G5", "4000K", 0, { 1.966038, 1, 1.901887, 0 } }, { "Panasonic", "DMC-G5", "4500K", 0, { 2.120755, 1, 1.784906, 0 } }, { "Panasonic", "DMC-G5", "5000K", 0, { 2.230189, 1, 1.713208, 0 } }, { "Panasonic", "DMC-G5", "5500K", 0, { 2.343396, 1, 1.618868, 0 } }, { "Panasonic", "DMC-G5", "6000K", 0, { 2.422642, 1, 1.554717, 0 } }, { "Panasonic", "DMC-G5", "6500K", 0, { 2.501887, 1, 1.505660, 0 } }, { "Panasonic", "DMC-G5", "7000K", 0, { 2.603774, 1, 1.460377, 0 } }, { "Panasonic", "DMC-G5", "8000K", 0, { 2.754717, 1, 1.381132, 0 } }, { "Panasonic", "DMC-G5", "9000K", 0, { 2.867925, 1, 1.332075, 0 } }, { "Panasonic", "DMC-G5", "10000K", 0, { 2.966038, 1, 1.286792, 0 } }, { "Panasonic", "DMC-GF1", Daylight, 0, { 2.007605, 1, 1.418251, 0 } }, { "Panasonic", "DMC-GF1", Cloudy, 0, { 2.174905, 1, 1.296578, 0 } }, { "Panasonic", "DMC-GF1", Shade, 0, { 2.395437, 1, 1.193916, 0 } }, { "Panasonic", "DMC-GF1", Incandescent, 0, { 1.365019, 1, 2.117871, 0 } }, { "Panasonic", "DMC-GF1", Flash, 0, { 2.353612, 1, 1.231939, 0 } }, { "Panasonic", "DMC-GF3", Daylight, 0, { 1.9396, 1, 1.4377, 0 } }, { "Panasonic", "DMC-GF3", Cloudy, 0, { 2.0679, 1, 1.3396, 0 } }, { "Panasonic", "DMC-GF3", Shade, 0, { 2.2566, 1, 1.2717, 0 } }, { "Panasonic", "DMC-GF3", Incandescent, 0, { 1.3019, 1, 2.0868, 0 } }, { "Panasonic", "DMC-GF3", Flash, 0, { 2.1962, 1, 1.2717, 0 } }, { "Panasonic", "DMC-GH3", Daylight, 0, { 2.313208, 1, 1.845283, 0 } }, { "Panasonic", "DMC-GH3", Cloudy, 0, { 2.422642, 1, 1.720755, 0 } }, { "Panasonic", "DMC-GH3", Shade, 0, { 2.607547, 1, 1.615094, 0 } }, { "Panasonic", "DMC-GH3", Incandescent, 0, { 1.641509, 1, 2.747170, 0 } }, { "Panasonic", "DMC-GH3", Flash, 0, { 2.369811, 1, 1.694340, 0 } }, { "Panasonic", "DMC-GX1", Daylight, 0, { 2.7925, 1, 1.5472, 0 } }, { "Panasonic", "DMC-GX1", Cloudy, 0, { 2.9660, 1, 1.4528, 0 } }, { "Panasonic", "DMC-GX1", Shade, 0, { 3.2642, 1, 1.3698, 0 } }, { "Panasonic", "DMC-GX1", Incandescent, 0, { 1.8491, 1, 2.2566, 0 } }, { "Panasonic", "DMC-GX1", Flash, 0, { 3.2868, 1, 1.3547, 0 } }, { "Panasonic", "DMC-GX1", "2700K", 0, { 1.5283, 1, 2.6717, 0 } }, { "Panasonic", "DMC-GX1", "3000K", 0, { 1.7094, 1, 2.4189, 0 } }, { "Panasonic", "DMC-GX1", "3300K", 0, { 1.8792, 1, 2.1849, 0 } }, { "Panasonic", "DMC-GX1", "5000K", 0, { 2.6679, 1, 1.6264, 0 } }, { "Panasonic", "DMC-GX1", "5500K", 0, { 2.7925, 1, 1.5472, 0 } }, { "Panasonic", "DMC-GX1", "6500K", 0, { 3.0679, 1, 1.4189, 0 } }, { "Panasonic", "DMC-L1", Daylight, 0, { 1.980989, 1, 1.444867, 0 } }, { "Panasonic", "DMC-L1", Cloudy, 0, { 2.129278, 1, 1.300380, 0 } }, { "Panasonic", "DMC-L1", Shade, 0, { 2.361217, 1, 1.167300, 0 } }, { "Panasonic", "DMC-L1", Incandescent, 0, { 1.368821, 1, 2.091255, 0 } }, /* Flash multipliers are variable */ { "Panasonic", "DMC-L1", Flash, 0, { 2.319392, 1, 1.053232, 0 } }, /* DMC-L1 Kelvin presets */ { "Panasonic", "DMC-L1", "2500K", 0, { 1.209126, 1, 2.722434, 0 } }, { "Panasonic", "DMC-L1", "2600K", 0, { 1.243346, 1, 2.623574, 0 } }, { "Panasonic", "DMC-L1", "2700K", 0, { 1.285171, 1, 2.520913, 0 } }, { "Panasonic", "DMC-L1", "2800K", 0, { 1.323194, 1, 2.418251, 0 } }, { "Panasonic", "DMC-L1", "2900K", 0, { 1.365019, 1, 2.319392, 0 } }, { "Panasonic", "DMC-L1", "3000K", 0, { 1.406844, 1, 2.209126, 0 } }, { "Panasonic", "DMC-L1", "3100K", 0, { 1.441065, 1, 2.193916, 0 } }, { "Panasonic", "DMC-L1", "3200K", 0, { 1.482890, 1, 2.178707, 0 } }, { "Panasonic", "DMC-L1", "3300K", 0, { 1.524715, 1, 2.163498, 0 } }, { "Panasonic", "DMC-L1", "3400K", 0, { 1.566540, 1, 2.148289, 0 } }, { "Panasonic", "DMC-L1", "3500K", 0, { 1.608365, 1, 2.136882, 0 } }, { "Panasonic", "DMC-L1", "3600K", 0, { 1.638783, 1, 2.091255, 0 } }, { "Panasonic", "DMC-L1", "3800K", 0, { 1.699620, 1, 2.000000, 0 } }, { "Panasonic", "DMC-L1", "4000K", 0, { 1.760456, 1, 1.897338, 0 } }, { "Panasonic", "DMC-L1", "4200K", 0, { 1.813688, 1, 1.809886, 0 } }, { "Panasonic", "DMC-L1", "4400K", 0, { 1.874525, 1, 1.722433, 0 } }, { "Panasonic", "DMC-L1", "4600K", 0, { 1.912547, 1, 1.642585, 0 } }, { "Panasonic", "DMC-L1", "4800K", 0, { 1.923954, 1, 1.585551, 0 } }, { "Panasonic", "DMC-L1", "5000K", 0, { 1.942966, 1, 1.528517, 0 } }, { "Panasonic", "DMC-L1", "5300K", 0, { 1.984791, 1, 1.456274, 0 } }, { "Panasonic", "DMC-L1", "5500K", 0, { 2.019011, 1, 1.403042, 0 } }, { "Panasonic", "DMC-L1", "5800K", 0, { 2.057034, 1, 1.361217, 0 } }, { "Panasonic", "DMC-L1", "6000K", 0, { 2.079848, 1, 1.323194, 0 } }, { "Panasonic", "DMC-L1", "6300K", 0, { 2.159696, 1, 1.281369, 0 } }, { "Panasonic", "DMC-L1", "6500K", 0, { 2.216730, 1, 1.243346, 0 } }, { "Panasonic", "DMC-L1", "6800K", 0, { 2.273764, 1, 1.228137, 0 } }, { "Panasonic", "DMC-L1", "7300K", 0, { 2.380228, 1, 1.186312, 0 } }, { "Panasonic", "DMC-L1", "7800K", 0, { 2.452471, 1, 1.144487, 0 } }, { "Panasonic", "DMC-L1", "8300K", 0, { 2.501901, 1, 1.106464, 0 } }, { "Panasonic", "DMC-L1", "9000K", 0, { 2.574145, 1, 1.068441, 0 } }, { "Panasonic", "DMC-L1", "10000K", 0, { 2.692015, 1.011407, 1, 0 } }, { "Panasonic", "DMC-LX1", Daylight, 0, { 1.837121, 1, 1.484848, 0 } }, { "Panasonic", "DMC-LX1", Cloudy, 0, { 2.003788, 1, 1.310606, 0 } }, { "Panasonic", "DMC-LX1", Incandescent, 0, { 1.098485, 1, 2.272727, 0 } }, { "Panasonic", "DMC-LX2", Daylight, -3, { 2.456274, 1, 1.806084, 0 } }, { "Panasonic", "DMC-LX2", Daylight, 0, { 2.114068, 1, 1.726236, 0 } }, { "Panasonic", "DMC-LX2", Daylight, 3, { 1.916350, 1, 1.585551, 0 } }, { "Panasonic", "DMC-LX2", Cloudy, -3, { 2.714829, 1, 1.650190, 0 } }, { "Panasonic", "DMC-LX2", Cloudy, 0, { 2.338403, 1, 1.577947, 0 } }, { "Panasonic", "DMC-LX2", Cloudy, 3, { 2.121673, 1, 1.448669, 0 } }, { "Panasonic", "DMC-LX2", Shade, -3, { 2.939163, 1, 1.577947, 0 } }, { "Panasonic", "DMC-LX2", Shade, 0, { 2.532319, 1, 1.509506, 0 } }, { "Panasonic", "DMC-LX2", Shade, 3, { 2.292776, 1, 1.384030, 0 } }, { "Panasonic", "DMC-LX2", Incandescent, -3, { 1.581749, 1, 2.524715, 0 } }, { "Panasonic", "DMC-LX2", Incandescent, 0, { 1.365019, 1, 2.410646, 0 } }, { "Panasonic", "DMC-LX2", Incandescent, 3, { 1.235741, 1, 2.212928, 0 } }, { "Panasonic", "DMC-LX3", Daylight, 0, { 2.022814, 1, 1.623574, 0 } }, { "Panasonic", "DMC-LX3", Cloudy, 0, { 2.224335, 1, 1.520913, 0 } }, { "Panasonic", "DMC-LX3", Shade, 0, { 2.475285, 1, 1.399240, 0 } }, { "Panasonic", "DMC-LX3", Flash, 0, { 2.296578, 1, 1.482890, 0 } }, { "Panasonic", "DMC-LX3", Incandescent, 0, { 1.346008, 1, 2.269962, 0 } }, { "Panasonic", "DMC-LX5", Daylight, 0, { 1.9202, 1, 1.7567, 0 } }, { "Panasonic", "DMC-LX5", Cloudy, 0, { 2.0760, 1, 1.6388, 0 } }, { "Panasonic", "DMC-LX5", Shade, 0, { 2.1635, 1, 1.5817, 0 } }, { "Panasonic", "DMC-LX5", Flash, 0, { 2.0760, 1, 1.6388, 0 } }, { "Panasonic", "DMC-LX5", Incandescent, 0, { 1.2243, 1, 2.5741, 0 } }, /* It seems that the *ist D WB settings are not really presets. */ { "PENTAX", "*ist D", Daylight, 0, { 1.460938, 1, 1.019531, 0 } }, { "PENTAX", "*ist D", Shade, 0, { 1.734375, 1, 1.000000, 0 } }, { "PENTAX", "*ist D", Cloudy, 0, { 1.634921, 1.015873, 1, 0 } }, { "PENTAX", "*ist D", DaylightFluorescent, 0, { 1.657025, 1.057851, 1, 0 } }, { "PENTAX", "*ist D", NeutralFluorescent, 0, { 1.425781, 1, 1.117188, 0 } }, { "PENTAX", "*ist D", WhiteFluorescent, 0, { 1.328125, 1, 1.210938, 0 } }, { "PENTAX", "*ist D", Tungsten, 0, { 1.000000, 1, 2.226563, 0 } }, { "PENTAX", "*ist D", Flash, 0, { 1.750000, 1, 1.000000, 0 } }, /* It seems that the *ist DL WB settings are not really presets. */ { "PENTAX", "*ist DL", Daylight, 0, { 1.546875, 1, 1.007812, 0 } }, { "PENTAX", "*ist DL", Shade, 0, { 1.933594, 1, 1.027344, 0 } }, { "PENTAX", "*ist DL", Cloudy, 0, { 1.703125, 1, 1.003906, 0 } }, { "PENTAX", "*ist DL", DaylightFluorescent, 0, { 2.593909, 1.299492, 1, 0 } }, { "PENTAX", "*ist DL", NeutralFluorescent, 0, { 1.539062, 1, 1.003906, 0 } }, { "PENTAX", "*ist DL", WhiteFluorescent, 0, { 1.390625, 1, 1.117188, 0 } }, { "PENTAX", "*ist DL", Tungsten, 0, { 1.000000, 1, 2.074219, 0 } }, { "PENTAX", "*ist DL", Flash, 0, { 1.621094, 1, 1.027344, 0 } }, /* It seems that the *ist DS WB settings are not really presets. */ { "PENTAX", "*ist DS", Daylight, 0, { 1.632812, 1, 1.000000, 0 } }, { "PENTAX", "*ist DS", Shade, 0, { 1.964844, 1, 1.000000, 0 } }, { "PENTAX", "*ist DS", Cloudy, 0, { 1.761719, 1, 1.000000, 0 } }, { "PENTAX", "*ist DS", DaylightFluorescent, 0, { 1.910156, 1, 1.000000, 0 } }, { "PENTAX", "*ist DS", NeutralFluorescent, 0, { 1.521569, 1.003922, 1, 0 } }, { "PENTAX", "*ist DS", WhiteFluorescent, 0, { 1.496094, 1, 1.023438, 0 } }, { "PENTAX", "*ist DS", Tungsten, 0, { 1.000000, 1, 2.027344, 0 } }, { "PENTAX", "*ist DS", Flash, 0, { 1.695312, 1, 1.000000, 0 } }, { "PENTAX", "K10D", Daylight, 0, { 1.660156, 1, 1.066406, 0 } }, { "PENTAX", "K10D", Shade, 0, { 2.434783, 1.236715, 1, 0 } }, { "PENTAX", "K10D", Cloudy, 0, { 1.872428, 1.053498, 1, 0 } }, { "PENTAX", "K10D", DaylightFluorescent, 0, { 2.121094, 1, 1.078125, 0 } }, { "PENTAX", "K10D", NeutralFluorescent, 0, { 1.773438, 1, 1.226562, 0 } }, { "PENTAX", "K10D", WhiteFluorescent, 0, { 1.597656, 1, 1.488281, 0 } }, { "PENTAX", "K10D", Tungsten, 0, { 1.000000, 1, 2.558594, 0 } }, { "PENTAX", "K10D", Flash, 0, { 1.664062, 1, 1.046875, 0 } }, { "PENTAX", "K20D", Daylight, 0, { 1.691406, 1, 1.257812, 0 } }, { "PENTAX", "K20D", Shade, 0, { 2.012245, 1.299492, 1, 0 } }, { "PENTAX", "K20D", Cloudy, 0, { 1.792969, 1, 1.109375, 0 } }, { "PENTAX", "K20D", DaylightFluorescent, 0, { 2.234375, 1, 1.183594, 0 } }, { "PENTAX", "K20D", NeutralFluorescent, 0, { 1.898438, 1, 1.347656, 0 } }, { "PENTAX", "K20D", WhiteFluorescent, 0, { 1.769531, 1, 1.675781, 0 } }, { "PENTAX", "K20D", Tungsten, 0, { 1, 1.089362, 2.961702, 0 } }, { "PENTAX", "K20D", Flash, 0, { 1.792969, 1, 1.183594, 0 } }, { "PENTAX", "K100D", Daylight, 0, { 1.468750, 1, 1.023438, 0 } }, { "PENTAX", "K100D", Shade, 0, { 1.769531, 1, 1.000000, 0 } }, { "PENTAX", "K100D", Cloudy, 0, { 1.589844, 1, 1.000000, 0 } }, { "PENTAX", "K100D", DaylightFluorescent, 0, { 1.722656, 1, 1.039063, 0 } }, { "PENTAX", "K100D", NeutralFluorescent, 0, { 1.425781, 1, 1.160156, 0 } }, { "PENTAX", "K100D", WhiteFluorescent, 0, { 1.265625, 1, 1.414063, 0 } }, { "PENTAX", "K100D", Tungsten, 0, { 1, 1.015873, 2.055556, 0 } }, { "PENTAX", "K100D", Flash, 0, { 1.527344, 1, 1.000000, 0 } }, { "PENTAX", "K100D Super", Daylight, 0, { 1.593750, 1, 1.011719, 0 } }, { "PENTAX", "K100D Super", Shade, 0, { 1.917969, 1, 1.000000, 0 } }, { "PENTAX", "K100D Super", Cloudy, 0, { 1.703125, 1, 1.015625, 0 } }, { "PENTAX", "K100D Super", DaylightFluorescent, 0, { 1.708502, 1.036437, 1, 0 } }, { "PENTAX", "K100D Super", NeutralFluorescent, 0, { 1.634538, 1.028112, 1, 0 } }, { "PENTAX", "K100D Super", WhiteFluorescent, 0, { 1.425781, 1, 1.136719, 0 } }, { "PENTAX", "K100D Super", Tungsten, 0, { 1.015625, 1, 2.046875, 0 } }, { "PENTAX", "K100D Super", Flash, 0, { 1.670588, 1.003922, 1, 0 } }, { "PENTAX", "K110D", Daylight, 0, { 1.468750, 1, 1.023438, 0 } }, { "PENTAX", "K110D", Shade, 0, { 1.769531, 1, 1.000000, 0 } }, { "PENTAX", "K110D", Cloudy, 0, { 1.589844, 1, 1.000000, 0 } }, { "PENTAX", "K110D", DaylightFluorescent, 0, { 1.722656, 1, 1.039063, 0 } }, { "PENTAX", "K110D", NeutralFluorescent, 0, { 1.425781, 1, 1.160156, 0 } }, { "PENTAX", "K110D", WhiteFluorescent, 0, { 1.265625, 1, 1.414063, 0 } }, { "PENTAX", "K110D", Tungsten, 0, { 1, 1.015873, 2.055556, 0 } }, { "PENTAX", "K110D", Flash, 0, { 1.527344, 1, 1.000000, 0 } }, { "PENTAX", "K200D", Daylight, 0, { 1.804688, 1, 1.304688, 0 } }, { "PENTAX", "K200D", Shade, 0, { 2.140625, 1, 1.085937, 0 } }, { "PENTAX", "K200D", Cloudy, 0, { 1.957031, 1, 1.179687, 0 } }, { "PENTAX", "K200D", DaylightFluorescent, 0, { 2.121094, 1, 1.195313, 0 } }, { "PENTAX", "K200D", NeutralFluorescent, 0, { 1.773438, 1, 1.359375, 0 } }, { "PENTAX", "K200D", WhiteFluorescent, 0, { 1.597656, 1, 1.648437, 0 } }, { "PENTAX", "K200D", Tungsten, 0, { 1.000000, 1, 2.835937, 0 } }, { "PENTAX", "K200D", Flash, 0, { 1.917969, 1, 1.214844, 0 } }, { "PENTAX", "K-5", Daylight, 0, { 2.1211, 1, 1.5781, 0 } }, { "PENTAX", "K-5", Shade, 0, { 2.5312, 1, 1.1758, 0 } }, { "PENTAX", "K-5", Cloudy, 0, { 2.2852, 1, 1.3477, 0 } }, { "PENTAX", "K-5", DaylightFluorescent, 0, { 2.6172, 1, 1.5195, 0 } }, { "PENTAX", "K-5", WhiteFluorescent, 0, { 2.2422, 1, 1.6914, 0 } }, { "PENTAX", "K-5", CoolWhiteFluorescent, 0, { 2.0391, 1, 2.0898, 0 } }, { "PENTAX", "K-5", WarmWhiteFluorescent, 0, { 1.7070, 1, 2.6172, 0 } }, { "PENTAX", "K-5", Tungsten, 0, { 1.2734, 1, 2.9258, 0 } }, { "PENTAX", "K-5", Flash, 0, { 2.4023, 1, 1.4492, 0 } }, { "PENTAX", "K-5", "2500K", 0, { 1.1445, 1, 2.7891, 0 } }, { "PENTAX", "K-5", "3000K", 0, { 1.3867, 1, 2.2578, 0 } }, { "PENTAX", "K-5", "4000K", 0, { 1.7695, 1, 1.7344, 0 } }, { "PENTAX", "K-5", "5000K", 0, { 2.0508, 1, 1.4883, 0 } }, { "PENTAX", "K-5", "6000K", 0, { 2.2578, 1, 1.3477, 0 } }, { "PENTAX", "K-5", "7000K", 0, { 2.4141, 1, 1.2578, 0 } }, { "PENTAX", "K-5", "8000K", 0, { 2.5312, 1, 1.1992, 0 } }, { "PENTAX", "K-5", "9000K", 0, { 2.6250, 1, 1.1523, 0 } }, { "PENTAX", "K-5", "10000K", 0, { 2.6992, 1, 1.1211, 0 } }, // copied from K-5 II s { "PENTAX", "K-5 II", Daylight, 0, { 2.136719, 1, 1.628906, 0 } }, { "PENTAX", "K-5 II", Shade, 0, { 2.550781, 1, 1.214844, 0 } }, { "PENTAX", "K-5 II", Cloudy, 0, { 2.300781, 1, 1.390625, 0 } }, { "PENTAX", "K-5 II", DaylightFluorescent, 0, { 2.636719, 1, 1.566406, 0 } }, { "PENTAX", "K-5 II", WhiteFluorescent, 0, { 2.261719, 1, 1.746094, 0 } }, { "PENTAX", "K-5 II", CoolWhiteFluorescent, 0, { 2.054688, 1, 2.156250, 0 } }, { "PENTAX", "K-5 II", WarmWhiteFluorescent, 0, { 1.718750, 1, 2.699219, 0 } }, { "PENTAX", "K-5 II", Tungsten, 0, { 1.265625, 1, 2.816406, 0 } }, { "PENTAX", "K-5 II", Flash, 0, { 1.851562, 1, 1.792969, 0 } }, // firmware K-5 II s Ver 1.02 { "PENTAX", "K-5 II s", Daylight, 0, { 2.136719, 1, 1.628906, 0 } }, { "PENTAX", "K-5 II s", Shade, 0, { 2.550781, 1, 1.214844, 0 } }, { "PENTAX", "K-5 II s", Cloudy, 0, { 2.300781, 1, 1.390625, 0 } }, { "PENTAX", "K-5 II s", DaylightFluorescent, 0, { 2.636719, 1, 1.566406, 0 } }, { "PENTAX", "K-5 II s", WhiteFluorescent, 0, { 2.261719, 1, 1.746094, 0 } }, { "PENTAX", "K-5 II s", CoolWhiteFluorescent, 0, { 2.054688, 1, 2.156250, 0 } }, { "PENTAX", "K-5 II s", WarmWhiteFluorescent, 0, { 1.718750, 1, 2.699219, 0 } }, { "PENTAX", "K-5 II s", Tungsten, 0, { 1.265625, 1, 2.816406, 0 } }, { "PENTAX", "K-5 II s", Flash, 0, { 1.851562, 1, 1.792969, 0 } }, { "PENTAX", "K-7", Daylight, 0, { 1.808594, 1, 1.285156, 0 } }, { "PENTAX", "K-7", Shade, 0, { 2.207171, 1.019920, 1, 0 } }, { "PENTAX", "K-7", Cloudy, 0, { 1.960937, 1, 1.136719, 0 } }, { "PENTAX", "K-7", DaylightFluorescent, 0, { 2.281250, 1, 1.191406, 0 } }, { "PENTAX", "K-7", NeutralFluorescent, 0, { 1.937500, 1, 1.355469, 0 } }, { "PENTAX", "K-7", CoolWhiteFluorescent, 0, { 1.808594, 1, 1.687500, 0 } }, { "PENTAX", "K-7", WarmWhiteFluorescent, 0, { 1.589844, 1, 2.164063, 0 } }, { "PENTAX", "K-7", Tungsten, 0, { 1.105469, 1, 2.347656, 0 } }, { "PENTAX", "K-7", Flash, 0, { 2.093750, 1, 1.082031, 0 } }, { "PENTAX", "K-m", Daylight, 0, { 1.738281, 1, 1.363281, 0 } }, { "PENTAX", "K-m", Shade, 0, { 2.027344, 1, 1.027344, 0 } }, { "PENTAX", "K-m", Cloudy, 0, { 1.832031, 1, 1.183594, 0 } }, { "PENTAX", "K-m", DaylightFluorescent, 0, { 2.183594, 1, 1.250000, 0 } }, { "PENTAX", "K-m", NeutralFluorescent, 0, { 1.824219, 1, 1.417969, 0 } }, { "PENTAX", "K-m", WhiteFluorescent, 0, { 1.644531, 1, 1.714844, 0 } }, { "PENTAX", "K-m", Tungsten, 0, { 1.429687, 1, 1.980469, 0 } }, { "PENTAX", "K-m", Flash, 0, { 1.738281, 1, 1.363281, 0 } }, /* Firmware version 1.11 */ { "PENTAX", "K-r", Daylight, 0, { 1.8477, 1, 1.3906, 0 } }, { "PENTAX", "K-r", Shade, 0, { 2.1133, 1, 1.0586, 0 } }, { "PENTAX", "K-r", Cloudy, 0, { 1.9766, 1, 1.1445, 0 } }, { "PENTAX", "K-r", DaylightFluorescent, 0, { 2.2617, 1, 1.3203, 0 } }, { "PENTAX", "K-r", WhiteFluorescent, 0, { 1.9414, 1, 1.4688, 0 } }, { "PENTAX", "K-r", CoolWhiteFluorescent, 0, { 1.7656, 1, 1.8164, 0 } }, { "PENTAX", "K-r", WarmWhiteFluorescent, 0, { 1.4766, 1, 2.2734, 0 } }, { "PENTAX", "K-r", Tungsten, 0, { 1.1016, 1, 2.5391, 0 } }, { "PENTAX", "K-r", Flash, 0, { 2.0117, 1, 1.1172, 0 } }, { "PENTAX", "K-x", Daylight, 0, { 1.8803, 1, 1.4054, 0 } }, { "PENTAX", "K-x", Shade, 0, { 2.2278, 1, 1.0309, 0 } }, { "PENTAX", "K-x", Cloudy, 0, { 2.0077, 1, 1.1853, 0 } }, { "PENTAX", "K-x", DaylightFluorescent, 0, { 2.3012, 1, 1.3359, 0 } }, { "PENTAX", "K-x", WhiteFluorescent, 0, { 1.9730, 1, 1.4826, 0 } }, { "PENTAX", "K-x", CoolWhiteFluorescent, 0, { 1.7915, 1, 1.8378, 0 } }, { "PENTAX", "K-x", WarmWhiteFluorescent, 0, { 1.5019, 1, 2.2973, 0 } }, { "PENTAX", "K-x", Tungsten, 0, { 1.0463, 1, 3.4015, 0 } }, { "PENTAX", "K-x", Flash, 0, { 2.1120, 1, 1.2741, 0 } }, { "RICOH", "Caplio GX100", Daylight, 0, { 1.910001, 1, 1.820002, 0 } }, { "RICOH", "Caplio GX100", Cloudy, 0, { 2.240003, 1, 1.530002, 0 } }, { "RICOH", "Caplio GX100", Incandescent, 0, { 1.520002, 1, 2.520003, 0 } }, { "RICOH", "Caplio GX100", Fluorescent, 0, { 1.840001, 1, 1.970001, 0 } }, { "SAMSUNG", "EX1", Daylight, 0, { 1.8711, 1, 2.0039, 0 } }, { "SAMSUNG", "EX1", Cloudy, 0, { 2.3672, 1, 1.6797, 0 } }, { "SAMSUNG", "EX1", DaylightFluorescent, 0, { 1.9492, 1, 2.0586, 0 } }, { "SAMSUNG", "EX1", WhiteFluorescent, 0, { 1.4844, 1, 2.7852, 0 } }, { "SAMSUNG", "EX1", Tungsten, 0, { 1.2500, 1, 3.6834, 0 } }, { "SAMSUNG", "GX-1S", Daylight, 0, { 1.574219, 1, 1.109375, 0 } }, { "SAMSUNG", "GX-1S", Shade, 0, { 1.855469, 1, 1.000000, 0 } }, { "SAMSUNG", "GX-1S", Cloudy, 0, { 1.664062, 1, 1.000000, 0 } }, { "SAMSUNG", "GX-1S", DaylightFluorescent, 0, { 1.854251, 1.036437, 1, 0 } }, { "SAMSUNG", "GX-1S", NeutralFluorescent, 0, { 1.574219, 1, 1.171875, 0 } }, { "SAMSUNG", "GX-1S", WhiteFluorescent, 0, { 1.363281, 1, 1.335938, 0 } }, { "SAMSUNG", "GX-1S", Tungsten, 0, { 1.000000, 1, 2.226562, 0 } }, { "SAMSUNG", "GX-1S", Flash, 0, { 1.609375, 1, 1.031250, 0 } }, { "SAMSUNG", "GX10", Daylight, 0, { 1.660156, 1, 1.066406, 0 } }, { "SAMSUNG", "GX10", Shade, 0, { 2.434783, 1.236715, 1, 0 } }, { "SAMSUNG", "GX10", Cloudy, 0, { 1.872428, 1.053498, 1, 0 } }, { "SAMSUNG", "GX10", DaylightFluorescent, 0, { 2.121094, 1, 1.078125, 0 } }, { "SAMSUNG", "GX10", NeutralFluorescent, 0, { 1.773438, 1, 1.226562, 0 } }, { "SAMSUNG", "GX10", WhiteFluorescent, 0, { 1.597656, 1, 1.488281, 0 } }, { "SAMSUNG", "GX10", Tungsten, 0, { 1.000000, 1, 2.558594, 0 } }, { "SAMSUNG", "GX10", Flash, 0, { 1.664062, 1, 1.046875, 0 } }, // SAMSUNG NX100 (firmware 1.12) white balance presets with finetuning steps { "SAMSUNG", "NX100", Daylight, -7, { 1.566333, 1, 1.526753, 0 } }, { "SAMSUNG", "NX100", Daylight, -6, { 1.593941, 1, 1.475202, 0 } }, { "SAMSUNG", "NX100", Daylight, -5, { 1.621793, 1, 1.423650, 0 } }, { "SAMSUNG", "NX100", Daylight, -4, { 1.649401, 1, 1.371854, 0 } }, { "SAMSUNG", "NX100", Daylight, -3, { 1.677010, 1, 1.320303, 0 } }, { "SAMSUNG", "NX100", Daylight, -2, { 1.704618, 1, 1.268507, 0 } }, { "SAMSUNG", "NX100", Daylight, -1, { 1.732470, 1, 1.216956, 0 } }, { "SAMSUNG", "NX100", Daylight, 0, { 1.760078, 1, 1.165404, 0 } }, { "SAMSUNG", "NX100", Daylight, 1, { 1.790129, 1, 1.137063, 0 } }, { "SAMSUNG", "NX100", Daylight, 2, { 1.820425, 1, 1.108722, 0 } }, { "SAMSUNG", "NX100", Daylight, 3, { 1.850721, 1, 1.080381, 0 } }, { "SAMSUNG", "NX100", Daylight, 4, { 1.880772, 1, 1.052040, 0 } }, { "SAMSUNG", "NX100", Daylight, 5, { 1.911068, 1, 1.023699, 0 } }, { "SAMSUNG", "NX100", Daylight, 6, { 1.941377, 1, 0.995622, 0 } }, { "SAMSUNG", "NX100", Daylight, 7, { 1.971874, 1, 0.967384, 0 } }, { "SAMSUNG", "NX100", Cloudy, -7, { 1.638896, 1, 1.446372, 0 } }, { "SAMSUNG", "NX100", Cloudy, -6, { 1.667725, 1, 1.397508, 0 } }, { "SAMSUNG", "NX100", Cloudy, -5, { 1.696555, 1, 1.348644, 0 } }, { "SAMSUNG", "NX100", Cloudy, -4, { 1.725629, 1, 1.299780, 0 } }, { "SAMSUNG", "NX100", Cloudy, -3, { 1.754459, 1, 1.250672, 0 } }, { "SAMSUNG", "NX100", Cloudy, -2, { 1.783533, 1, 1.201808, 0 } }, { "SAMSUNG", "NX100", Cloudy, -1, { 1.812607, 1, 1.152944, 0 } }, { "SAMSUNG", "NX100", Cloudy, 0, { 1.841437, 1, 1.103836, 0 } }, { "SAMSUNG", "NX100", Cloudy, 1, { 1.872954, 1, 1.077205, 0 } }, { "SAMSUNG", "NX100", Cloudy, 2, { 1.904471, 1, 1.050330, 0 } }, { "SAMSUNG", "NX100", Cloudy, 3, { 1.936233, 1, 1.023455, 0 } }, { "SAMSUNG", "NX100", Cloudy, 4, { 1.967852, 1, 0.996834, 0 } }, { "SAMSUNG", "NX100", Cloudy, 5, { 1.999289, 1, 0.969905, 0 } }, { "SAMSUNG", "NX100", Cloudy, 6, { 2.030876, 1, 0.943088, 0 } }, { "SAMSUNG", "NX100", Cloudy, 7, { 2.062458, 1, 0.916275, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -7, { 1.526020, 1, 2.316638, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -6, { 1.553140, 1, 2.238212, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -5, { 1.580015, 1, 2.159785, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -4, { 1.606890, 1, 2.081603, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -3, { 1.634009, 1, 2.003176, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -2, { 1.660884, 1, 1.924750, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, -1, { 1.687760, 1, 1.846567, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 0, { 1.714879, 1, 1.768141, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 1, { 1.744197, 1, 1.725140, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 2, { 1.773516, 1, 1.682140, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 3, { 1.803078, 1, 1.639384, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 4, { 1.832397, 1, 1.596384, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 5, { 1.861959, 1, 1.553384, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 6, { 1.891522, 1, 1.510628, 0 } }, { "SAMSUNG", "NX100", WhiteFluorescent, 7, { 1.920596, 1, 1.467628, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -7, { 1.691180, 1, 1.884437, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -6, { 1.720987, 1, 1.821158, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -5, { 1.751038, 1, 1.757146, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -4, { 1.780845, 1, 1.693379, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -3, { 1.810897, 1, 1.629612, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -2, { 1.840704, 1, 1.565844, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, -1, { 1.870755, 1, 1.502077, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 0, { 1.900318, 1, 1.438309, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 1, { 1.933056, 1, 1.403616, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 2, { 1.965795, 1, 1.368678, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 3, { 1.998045, 1, 1.333741, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 4, { 2.030784, 1, 1.298803, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 5, { 2.063279, 1, 1.263621, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 6, { 2.095773, 1, 1.228927, 0 } }, { "SAMSUNG", "NX100", NeutralFluorescent, 7, { 2.128756, 1, 1.193990, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -7, { 1.995358, 1, 1.613731, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -6, { 2.030784, 1, 1.559492, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -5, { 2.065722, 1, 1.504764, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -4, { 2.101393, 1, 1.450037, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -3, { 2.136330, 1, 1.395553, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -2, { 2.171757, 1, 1.341070, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, -1, { 2.207183, 1, 1.286343, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 0, { 2.242365, 1, 1.231859, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 1, { 2.280723, 1, 1.202052, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 2, { 2.319326, 1, 1.172001, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 3, { 2.357684, 1, 1.142194, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 4, { 2.396042, 1, 1.112143, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 5, { 2.434645, 1, 1.082336, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 6, { 2.473003, 1, 1.052284, 0 } }, { "SAMSUNG", "NX100", DaylightFluorescent, 7, { 2.511361, 1, 1.022233, 0 } }, { "SAMSUNG", "NX100", Tungsten, -7, { 0.951650, 1, 3.086007, 0 } }, { "SAMSUNG", "NX100", Tungsten, -6, { 0.968307, 1, 2.981315, 0 } }, { "SAMSUNG", "NX100", Tungsten, -5, { 0.985078, 1, 2.877497, 0 } }, { "SAMSUNG", "NX100", Tungsten, -4, { 1.001710, 1, 2.772538, 0 } }, { "SAMSUNG", "NX100", Tungsten, -3, { 1.018568, 1, 2.668214, 0 } }, { "SAMSUNG", "NX100", Tungsten, -2, { 1.035426, 1, 2.563645, 0 } }, { "SAMSUNG", "NX100", Tungsten, -1, { 1.052284, 1, 2.459565, 0 } }, { "SAMSUNG", "NX100", Tungsten, 0, { 1.069142, 1, 2.354996, 0 } }, { "SAMSUNG", "NX100", Tungsten, 1, { 1.087466, 1, 2.298070, 0 } }, { "SAMSUNG", "NX100", Tungsten, 2, { 1.105790, 1, 2.240655, 0 } }, { "SAMSUNG", "NX100", Tungsten, 3, { 1.123870, 1, 2.183484, 0 } }, { "SAMSUNG", "NX100", Tungsten, 4, { 1.142438, 1, 2.126313, 0 } }, { "SAMSUNG", "NX100", Tungsten, 5, { 1.160762, 1, 2.069142, 0 } }, { "SAMSUNG", "NX100", Tungsten, 6, { 1.179086, 1, 2.011972, 0 } }, { "SAMSUNG", "NX100", Tungsten, 7, { 1.197410, 1, 1.954801, 0 } }, { "SAMSUNG", "NX100", Flash, -7, { 1.843635, 1, 1.282189, 0 } }, { "SAMSUNG", "NX100", Flash, -6, { 1.876130, 1, 1.238700, 0 } }, { "SAMSUNG", "NX100", Flash, -5, { 1.908624, 1, 1.195456, 0 } }, { "SAMSUNG", "NX100", Flash, -4, { 1.941363, 1, 1.151967, 0 } }, { "SAMSUNG", "NX100", Flash, -3, { 1.973858, 1, 1.108722, 0 } }, { "SAMSUNG", "NX100", Flash, -2, { 2.006108, 1, 1.064989, 0 } }, { "SAMSUNG", "NX100", Flash, -1, { 2.038847, 1, 1.021989, 0 } }, { "SAMSUNG", "NX100", Flash, 0, { 2.071719, 1, 0.978723, 0 } }, { "SAMSUNG", "NX100", Flash, 1, { 2.107068, 1, 0.954980, 0 } }, { "SAMSUNG", "NX100", Flash, 2, { 2.142857, 1, 0.931301, 0 } }, { "SAMSUNG", "NX100", Flash, 3, { 2.178191, 1, 0.907358, 0 } }, { "SAMSUNG", "NX100", Flash, 4, { 2.213684, 1, 0.883661, 0 } }, { "SAMSUNG", "NX100", Flash, 5, { 2.249317, 1, 0.859903, 0 } }, { "SAMSUNG", "NX100", Flash, 6, { 2.284664, 1, 0.836022, 0 } }, { "SAMSUNG", "NX100", Flash, 7, { 2.320238, 1, 0.812302, 0 } }, { "SAMSUNG", "NX100", "5000K", 0, { 1.684339, 1, 1.094063, 0 } }, { "SAMSUNG", "NX100", "5500K", 0, { 1.692022, 1, 0.843950, 0 } }, { "SAMSUNG", "NX100", "6500K", 0, { 2.110371, 1, 0.879107, 0 } }, // SAMSUNG NX200 Firmware Version 1.04 { "SAMSUNG", "NX200", Daylight, 0, { 2.773438, 1, 1.625000, 0 } }, { "SAMSUNG", "NX200", Cloudy, 0, { 2.902344, 1, 1.546875, 0 } }, { "SAMSUNG", "NX200", WhiteFluorescent, 0, { 2.445313, 1, 2.316406, 0 } }, { "SAMSUNG", "NX200", NeutralFluorescent, 0, { 2.746094, 1, 1.937500, 0 } }, { "SAMSUNG", "NX200", DaylightFluorescent, 0, { 3.214844, 1, 1.679688, 0 } }, { "SAMSUNG", "NX200", Tungsten, 0, { 1.511719, 1, 2.941406, 0 } }, { "SAMSUNG", "NX200", Flash, 0, { 2.914063, 1, 1.191406, 0 } }, { "SONY", "DSC-RX100", Daylight, 0, { 2.0703, 1, 2.1602, 0 } }, { "SONY", "DSC-RX100", Shade, 0, { 2.4531, 1, 1.7852, 0 } }, { "SONY", "DSC-RX100", Cloudy, 0, { 2.2305, 1, 1.9844, 0 } }, { "SONY", "DSC-RX100", Tungsten, 0, { 1.2891, 1, 3.8242, 0 } }, { "SONY", "DSC-RX100", WarmWhiteFluorescent, 0, { 1.5156, 1, 3.7656, 0 } }, { "SONY", "DSC-RX100", CoolWhiteFluorescent, 0, { 2.0430, 1, 3.1055, 0 } }, { "SONY", "DSC-RX100", DayWhiteFluorescent, 0, { 2.0000, 1, 2.1602, 0 } }, { "SONY", "DSC-RX100", DaylightFluorescent, 0, { 2.2266, 1, 1.8789, 0 } }, { "SONY", "DSC-RX100", Flash, 0, { 2.5352, 1, 1.6797, 0 } }, { "SONY", "DSLR-A100", Daylight, -3, { 1.601562, 1, 2.101562, 0 } }, { "SONY", "DSLR-A100", Daylight, 0, { 1.746094, 1, 1.843750, 0 } }, { "SONY", "DSLR-A100", Daylight, 3, { 1.914062, 1, 1.628906, 0 } }, { "SONY", "DSLR-A100", Shade, -3, { 1.906250, 1, 1.843750, 0 } }, { "SONY", "DSLR-A100", Shade, 0, { 2.070312, 1, 1.609375, 0 } }, { "SONY", "DSLR-A100", Shade, 3, { 2.281250, 1, 1.429688, 0 } }, { "SONY", "DSLR-A100", Cloudy, -3, { 1.691406, 1, 1.863281, 0 } }, { "SONY", "DSLR-A100", Cloudy, 0, { 1.855469, 1, 1.628906, 0 } }, { "SONY", "DSLR-A100", Cloudy, 3, { 2.023438, 1, 1.445312, 0 } }, { "SONY", "DSLR-A100", Tungsten, -3, { 1, 1.028112, 4.610442, 0 } }, { "SONY", "DSLR-A100", Tungsten, 0, { 1.054688, 1, 3.917969, 0 } }, { "SONY", "DSLR-A100", Tungsten, 3, { 1.164062, 1, 3.476562, 0 } }, { "SONY", "DSLR-A100", Fluorescent, -2, { 1.058594, 1, 4.453125, 0 } }, { "SONY", "DSLR-A100", Fluorescent, 0, { 1.718750, 1, 3.058594, 0 } }, { "SONY", "DSLR-A100", Fluorescent, 3, { 2.238281, 1, 1.949219, 0 } }, { "SONY", "DSLR-A100", Fluorescent, 4, { 1.992188, 1, 1.757812, 0 } }, { "SONY", "DSLR-A100", Flash, -3, { 1.710938, 1, 1.988281, 0 } }, { "SONY", "DSLR-A100", Flash, 0, { 1.859375, 1, 1.746094, 0 } }, { "SONY", "DSLR-A100", Flash, 3, { 2.046875, 1, 1.542969, 0 } }, { "SONY", "DSLR-A200", Daylight, -3 , { 1.507812, 1, 1.996094, 0 } }, { "SONY", "DSLR-A200", Daylight, 0 , { 1.664062, 1, 1.757812, 0 } }, { "SONY", "DSLR-A200", Daylight, 3 , { 1.820313, 1, 1.546875, 0 } }, { "SONY", "DSLR-A200", Shade, -3 , { 1.800781, 1, 1.578125, 0 } }, { "SONY", "DSLR-A200", Shade, 0 , { 1.972656, 1, 1.390625, 0 } }, { "SONY", "DSLR-A200", Shade, 3 , { 2.164063, 1, 1.218750, 0 } }, { "SONY", "DSLR-A200", Cloudy, -3 , { 1.636719, 1, 1.800781, 0 } }, { "SONY", "DSLR-A200", Cloudy, 0 , { 1.800781, 1, 1.585937, 0 } }, { "SONY", "DSLR-A200", Cloudy, 3 , { 1.972656, 1, 1.390625, 0 } }, { "SONY", "DSLR-A200", Tungsten, -3 , { 1, 1.136719, 4.355469, 0 } }, { "SONY", "DSLR-A200", Tungsten, 0 , { 1, 1.027344, 3.492187, 0 } }, { "SONY", "DSLR-A200", Tungsten, 3 , { 1.082031, 1, 3.019531, 0 } }, { "SONY", "DSLR-A200", Fluorescent, -2 , { 1, 1.066406, 4.453125, 0 } }, { "SONY", "DSLR-A200", Fluorescent, 0 , { 1.554687, 1, 2.601562, 0 } }, { "SONY", "DSLR-A200", Fluorescent, 3 , { 2.109375, 1, 1.828125, 0 } }, { "SONY", "DSLR-A200", Flash, -3 , { 1.746094, 1, 1.660156, 0 } }, { "SONY", "DSLR-A200", Flash, 0 , { 1.917969, 1, 1.460937, 0 } }, { "SONY", "DSLR-A200", Flash, 3 , { 2.109375, 1, 1.285156, 0 } }, { "SONY", "DSLR-A200", "5600K", 0 , { 1.710938, 1, 1.683594, 0 } }, /* Sony A230 presets - firmware v1.10 */ { "SONY", "DSLR-A230", Daylight, -3, { 1.621094, 1, 1.949219, 0 } }, { "SONY", "DSLR-A230", Daylight, -2, { 1.675781, 1, 1.859375, 0 } }, { "SONY", "DSLR-A230", Daylight, -1, { 1.726563, 1, 1.773438, 0 } }, { "SONY", "DSLR-A230", Daylight, 0, { 1.789063, 1, 1.695313, 0 } }, { "SONY", "DSLR-A230", Daylight, 1, { 1.839844, 1, 1.625000, 0 } }, { "SONY", "DSLR-A230", Daylight, 2, { 1.898438, 1, 1.546875, 0 } }, { "SONY", "DSLR-A230", Daylight, 3, { 1.957031, 1, 1.472656, 0 } }, { "SONY", "DSLR-A230", Shade, -3, { 1.937500, 1, 1.503906, 0 } }, { "SONY", "DSLR-A230", Shade, -2, { 1.996094, 1, 1.433594, 0 } }, { "SONY", "DSLR-A230", Shade, -1, { 2.054688, 1, 1.371094, 0 } }, { "SONY", "DSLR-A230", Shade, 0, { 2.121094, 1, 1.304688, 0 } }, { "SONY", "DSLR-A230", Shade, 1, { 2.187500, 1, 1.238281, 0 } }, { "SONY", "DSLR-A230", Shade, 2, { 2.261719, 1, 1.175781, 0 } }, { "SONY", "DSLR-A230", Shade, 3, { 2.324219, 1, 1.121094, 0 } }, { "SONY", "DSLR-A230", Cloudy, -3, { 1.761719, 1, 1.738281, 0 } }, { "SONY", "DSLR-A230", Cloudy, -2, { 1.816406, 1, 1.656250, 0 } }, { "SONY", "DSLR-A230", Cloudy, -1, { 1.875000, 1, 1.582031, 0 } }, { "SONY", "DSLR-A230", Cloudy, 0, { 1.937500, 1, 1.515625, 0 } }, { "SONY", "DSLR-A230", Cloudy, 1, { 1.996094, 1, 1.441406, 0 } }, { "SONY", "DSLR-A230", Cloudy, 2, { 2.054688, 1, 1.371094, 0 } }, { "SONY", "DSLR-A230", Cloudy, 3, { 2.121094, 1, 1.304688, 0 } }, { "SONY", "DSLR-A230", Tungsten, -3, { 0.944649, 1, 3.896679, 0 } }, { "SONY", "DSLR-A230", Tungsten, -2, { 0.977099, 1, 3.740458, 0 } }, { "SONY", "DSLR-A230", Tungsten, -1, { 1.015625, 1, 3.582031, 0 } }, { "SONY", "DSLR-A230", Tungsten, 0, { 1.046875, 1, 3.437500, 0 } }, { "SONY", "DSLR-A230", Tungsten, 1, { 1.082031, 1, 3.292969, 0 } }, { "SONY", "DSLR-A230", Tungsten, 2, { 1.121094, 1, 3.167969, 0 } }, { "SONY", "DSLR-A230", Tungsten, 3, { 1.164063, 1, 3.035156, 0 } }, { "SONY", "DSLR-A230", Fluorescent, -2, { 0.977099, 1, 3.942748, 0 } }, { "SONY", "DSLR-A230", Fluorescent, -1, { 1.250000, 1, 3.250000, 0 } }, { "SONY", "DSLR-A230", Fluorescent, 0, { 1.648438, 1, 2.457031, 0 } }, { "SONY", "DSLR-A230", Fluorescent, 1, { 1.867188, 1, 2.035156, 0 } }, { "SONY", "DSLR-A230", Fluorescent, 2, { 1.769531, 1, 1.742188, 0 } }, { "SONY", "DSLR-A230", Fluorescent, 3, { 2.277344, 1, 1.742188, 0 } }, { "SONY", "DSLR-A230", Fluorescent, 4, { 2.027344, 1, 1.527344, 0 } }, { "SONY", "DSLR-A230", Flash, -3, { 1.804688, 1, 1.722656, 0 } }, { "SONY", "DSLR-A230", Flash, -2, { 1.863281, 1, 1.656250, 0 } }, { "SONY", "DSLR-A230", Flash, -1, { 1.921875, 1, 1.582031, 0 } }, { "SONY", "DSLR-A230", Flash, 0, { 1.980469, 1, 1.500000, 0 } }, { "SONY", "DSLR-A230", Flash, 1, { 2.046875, 1, 1.433594, 0 } }, { "SONY", "DSLR-A230", Flash, 2, { 2.113281, 1, 1.359375, 0 } }, { "SONY", "DSLR-A230", Flash, 3, { 2.175781, 1, 1.304688, 0 } }, { "SONY", "DSLR-A300", Daylight, -3, { 1.480469, 1, 1.960937, 0 } }, { "SONY", "DSLR-A300", Daylight, 0, { 1.632813, 1, 1.730469, 0 } }, { "SONY", "DSLR-A300", Daylight, 3, { 1.789062, 1, 1.527344, 0 } }, { "SONY", "DSLR-A300", Shade, -3, { 1.769531, 1, 1.554687, 0 } }, { "SONY", "DSLR-A300", Shade, 0, { 1.937500, 1, 1.371094, 0 } }, { "SONY", "DSLR-A300", Shade, 3, { 2.121094, 1, 1.207031, 0 } }, { "SONY", "DSLR-A300", Cloudy, -3, { 1.609375, 1, 1.769531, 0 } }, { "SONY", "DSLR-A300", Cloudy, 0, { 1.769531, 1, 1.566406, 0 } }, { "SONY", "DSLR-A300", Cloudy, 3, { 1.937500, 1, 1.371094, 0 } }, { "SONY", "DSLR-A300", Tungsten, -3, { 1, 1.152344, 4.308594, 0 } }, { "SONY", "DSLR-A300", Tungsten, 0, { 1, 1.039063, 3.449219, 0 } }, { "SONY", "DSLR-A300", Tungsten, 3, { 1.066406, 1, 2.953125, 0 } }, { "SONY", "DSLR-A300", Fluorescent, -2, { 1, 1.082031, 4.410156, 0 } }, { "SONY", "DSLR-A300", Fluorescent, -1, { 1.117187, 1, 3.343750, 0 } }, { "SONY", "DSLR-A300", Fluorescent, 0, { 1.527344, 1, 2.546875, 0 } }, { "SONY", "DSLR-A300", Fluorescent, 1, { 1.714844, 1, 2.109375, 0 } }, { "SONY", "DSLR-A300", Fluorescent, 2, { 1.546875, 1, 1.769531, 0 } }, { "SONY", "DSLR-A300", Fluorescent, 3, { 2.070312, 1, 1.796875, 0 } }, { "SONY", "DSLR-A300", Fluorescent, 4, { 1.761719, 1, 1.527344, 0 } }, { "SONY", "DSLR-A300", Flash, -3, { 1.714844, 1, 1.632812, 0 } }, { "SONY", "DSLR-A300", Flash, 0, { 1.882812, 1, 1.441406, 0 } }, { "SONY", "DSLR-A300", Flash, 3, { 2.070312, 1, 1.273438, 0 } }, { "SONY", "DSLR-A330", Daylight, -3, { 1.5898, 1, 1.9687, 0 } }, { "SONY", "DSLR-A330", Daylight, -2, { 1.6406, 1, 1.8789, 0 } }, { "SONY", "DSLR-A330", Daylight, -1, { 1.6914, 1, 1.7969, 0 } }, { "SONY", "DSLR-A330", Daylight, 0, { 1.7500, 1, 1.7227, 0 } }, { "SONY", "DSLR-A330", Daylight, 1, { 1.7969, 1, 1.6523, 0 } }, { "SONY", "DSLR-A330", Daylight, 2, { 1.8555, 1, 1.5742, 0 } }, { "SONY", "DSLR-A330", Daylight, 3, { 1.9141, 1, 1.5000, 0 } }, { "SONY", "DSLR-A330", Shade, -3, { 1.8906, 1, 1.5352, 0 } }, { "SONY", "DSLR-A330", Shade, -2, { 1.9492, 1, 1.4648, 0 } }, { "SONY", "DSLR-A330", Shade, -1, { 2.0078, 1, 1.4023, 0 } }, { "SONY", "DSLR-A330", Shade, 0, { 2.0703, 1, 1.3359, 0 } }, { "SONY", "DSLR-A330", Shade, 1, { 2.1328, 1, 1.2734, 0 } }, { "SONY", "DSLR-A330", Shade, 2, { 2.2031, 1, 1.2109, 0 } }, { "SONY", "DSLR-A330", Shade, 3, { 2.2656, 1, 1.1602, 0 } }, { "SONY", "DSLR-A330", Cloudy, -3, { 1.7227, 1, 1.7617, 0 } }, { "SONY", "DSLR-A330", Cloudy, -2, { 1.7773, 1, 1.6836, 0 } }, { "SONY", "DSLR-A330", Cloudy, -1, { 1.8359, 1, 1.6094, 0 } }, { "SONY", "DSLR-A330", Cloudy, 0, { 1.8906, 1, 1.5430, 0 } }, { "SONY", "DSLR-A330", Cloudy, 1, { 1.9492, 1, 1.4727, 0 } }, { "SONY", "DSLR-A330", Cloudy, 2, { 2.0078, 1, 1.4023, 0 } }, { "SONY", "DSLR-A330", Cloudy, 3, { 2.0703, 1, 1.3359, 0 } }, { "SONY", "DSLR-A330", Tungsten, -3, { 1.0664, 1, 1.0664, 0 } }, { "SONY", "DSLR-A330", Tungsten, -2, { 1.0313, 1, 1.0313, 0 } }, { "SONY", "DSLR-A330", Tungsten, -1, { 1.0039, 1, 3.5625, 0 } }, { "SONY", "DSLR-A330", Tungsten, 0, { 1.0352, 1, 3.4219, 0 } }, { "SONY", "DSLR-A330", Tungsten, 1, { 1.0703, 1, 3.2812, 0 } }, { "SONY", "DSLR-A330", Tungsten, 2, { 1.1055, 1, 3.1602, 0 } }, { "SONY", "DSLR-A330", Tungsten, 3, { 1.1484, 1, 3.0313, 0 } }, { "SONY", "DSLR-A330", Fluorescent, -2, { 1.0312, 1, 1.0312, 0 } }, { "SONY", "DSLR-A330", Fluorescent, -1, { 1.2305, 1, 3.2383, 0 } }, { "SONY", "DSLR-A330", Fluorescent, 0, { 1.6172, 1, 2.4648, 0 } }, { "SONY", "DSLR-A330", Fluorescent, 1, { 1.8242, 1, 2.0508, 0 } }, { "SONY", "DSLR-A330", Fluorescent, 2, { 1.7305, 1, 1.7695, 0 } }, { "SONY", "DSLR-A330", Fluorescent, 3, { 2.2227, 1, 1.7695, 0 } }, { "SONY", "DSLR-A330", Fluorescent, 4, { 1.9805, 1, 1.5586, 0 } }, { "SONY", "DSLR-A330", Flash, -3, { 1.7656, 1, 1.7500, 0 } }, { "SONY", "DSLR-A330", Flash, -2, { 1.8203, 1, 1.6836, 0 } }, { "SONY", "DSLR-A330", Flash, -1, { 1.8789, 1, 1.6094, 0 } }, { "SONY", "DSLR-A330", Flash, 0, { 1.9375, 1, 1.5313, 0 } }, { "SONY", "DSLR-A330", Flash, 1, { 2.0000, 1, 1.4648, 0 } }, { "SONY", "DSLR-A330", Flash, 2, { 2.0625, 1, 1.3945, 0 } }, { "SONY", "DSLR-A330", Flash, 3, { 2.1250, 1, 1.3359, 0 } }, { "SONY", "DSLR-A350", Daylight, -3, { 2.316406, 1, 1.886719, 0 } }, { "SONY", "DSLR-A350", Daylight, 0, { 2.531250, 1, 1.648437, 0 } }, { "SONY", "DSLR-A350", Daylight, 3, { 2.750000, 1, 1.437500, 0 } }, { "SONY", "DSLR-A350", Shade, -3, { 2.722656, 1, 1.468750, 0 } }, { "SONY", "DSLR-A350", Shade, 0, { 2.960937, 1, 1.281250, 0 } }, { "SONY", "DSLR-A350", Shade, 3, { 3.222656, 1, 1.109375, 0 } }, { "SONY", "DSLR-A350", Cloudy, -3, { 2.496094, 1, 1.691406, 0 } }, { "SONY", "DSLR-A350", Cloudy, 0, { 2.722656, 1, 1.476562, 0 } }, { "SONY", "DSLR-A350", Cloudy, 3, { 2.960937, 1, 1.281250, 0 } }, { "SONY", "DSLR-A350", Tungsten, -3, { 1.445313, 1, 3.722656, 0 } }, { "SONY", "DSLR-A350", Tungsten, 0, { 1.578125, 1, 3.289062, 0 } }, { "SONY", "DSLR-A350", Tungsten, 3, { 1.726562, 1, 2.910156, 0 } }, { "SONY", "DSLR-A350", Flash, -3, { 2.644531, 1, 1.558594, 0 } }, { "SONY", "DSLR-A350", Flash, 0, { 2.875000, 1, 1.355469, 0 } }, { "SONY", "DSLR-A350", Flash, 3, { 3.136719, 1, 1.175781, 0 } }, { "SONY", "DSLR-A350", CoolWhiteFluorescent, 0, { 2.226563, 1, 2.355469, 0 } }, { "SONY", "DSLR-A350", Fluorescent, 0, { 1.554687, 1, 3.984375, 0 } }, { "SONY", "DSLR-A350", WarmWhiteFluorescent, 0, { 1.816406, 1, 3.207031, 0 } }, { "SONY", "DSLR-A350", DayWhiteFluorescent, 0, { 2.511719, 1, 1.957031, 0 } }, // { "SONY", "DSLR-A350", DayWhiteFluorescent, 0, { 2.484375, 1, 1.683594, 0 } }, { "SONY", "DSLR-A350", DaylightFluorescent, 0, { 3.023437, 1, 1.671875, 0 } }, // { "SONY", "DSLR-A350", DaylightFluorescent, 0, { 2.773438, 1, 1.441406, 0 } }, { "SONY", "DSLR-A380", Daylight, -3, { 2.335938, 1, 1.875000, 0 } }, { "SONY", "DSLR-A380", Daylight, 0, { 2.562500, 1, 1.648438, 0 } }, { "SONY", "DSLR-A380", Daylight, 3, { 2.796875, 1, 1.445312, 0 } }, { "SONY", "DSLR-A380", Shade, -3, { 2.765625, 1, 1.472656, 0 } }, { "SONY", "DSLR-A380", Shade, 0, { 3.019531, 1, 1.292969, 0 } }, { "SONY", "DSLR-A380", Shade, 3, { 3.296875, 1, 1.128906, 0 } }, { "SONY", "DSLR-A380", Cloudy, -3, { 2.527344, 1, 1.687500, 0 } }, { "SONY", "DSLR-A380", Cloudy, 0, { 2.765625, 1, 1.480469, 0 } }, { "SONY", "DSLR-A380", Cloudy, 3, { 3.019531, 1, 1.292969, 0 } }, { "SONY", "DSLR-A380", Tungsten, -3, { 1.410156, 1, 3.636719, 0 } }, { "SONY", "DSLR-A380", Tungsten, 0, { 1.550781, 1, 3.222656, 0 } }, { "SONY", "DSLR-A380", Tungsten, 3, { 1.710938, 1, 2.859375, 0 } }, { "SONY", "DSLR-A380", Fluorescent, -2, { 1.429687, 1, 3.906250, 0 } }, { "SONY", "DSLR-A380", Fluorescent, 0, { 2.234375, 1, 2.335938, 0 } }, { "SONY", "DSLR-A380", Fluorescent, 4, { 2.792969, 1, 1.445312, 0 } }, { "SONY", "DSLR-A380", Flash, -3, { 2.574219, 1, 1.664063, 0 } }, { "SONY", "DSLR-A380", Flash, 0, { 2.816406, 1, 1.453125, 0 } }, { "SONY", "DSLR-A380", Flash, 3, { 3.070312, 1, 1.273437, 0 } }, { "SONY", "DSLR-A390", Daylight, -3, { 2.0273, 1, 1.5820, 0 } }, { "SONY", "DSLR-A390", Daylight, 0, { 2.2188, 1, 1.3711, 0 } }, { "SONY", "DSLR-A390", Daylight, 3, { 2.4180, 1, 1.1836, 0 } }, { "SONY", "DSLR-A390", Shade, -3, { 2.3906, 1, 1.2148, 0 } }, { "SONY", "DSLR-A390", Shade, 0, { 2.6055, 1, 1.0469, 0 } }, { "SONY", "DSLR-A390", Shade, 3, { 2.8392, 1, 1.0000, 0 } }, { "SONY", "DSLR-A390", Cloudy, -3, { 2.1875, 1, 1.4062, 0 } }, { "SONY", "DSLR-A390", Cloudy, 0, { 2.3906, 1, 1.2227, 0 } }, { "SONY", "DSLR-A390", Cloudy, 3, { 2.6055, 1, 1.0469, 0 } }, { "SONY", "DSLR-A390", Tungsten, -3, { 1.2461, 1, 3.1992, 0 } }, { "SONY", "DSLR-A390", Tungsten, 0, { 1.3633, 1, 2.8164, 0 } }, { "SONY", "DSLR-A390", Tungsten, 3, { 1.4961, 1, 2.4844, 0 } }, { "SONY", "DSLR-A390", Fluorescent, -2, { 1.2617, 1, 3.4453, 0 } }, { "SONY", "DSLR-A390", Fluorescent, 0, { 1.9414, 1, 2.0039, 0 } }, { "SONY", "DSLR-A390", Fluorescent, 4, { 2.4102, 1, 1.1836, 0 } }, { "SONY", "DSLR-A390", Flash, -3, { 2.2305, 1, 1.3867, 0 } }, { "SONY", "DSLR-A390", Flash, 0, { 2.4336, 1, 1.1953, 0 } }, { "SONY", "DSLR-A390", Flash, 3, { 2.6484, 1, 1.0313, 0 } }, /* Sony A450 presets */ { "SONY", "DSLR-A450", Daylight, -3, { 2.109375, 1, 1.593750, 0 } }, { "SONY", "DSLR-A450", Daylight, 0, { 2.296875, 1, 1.445312, 0 } }, { "SONY", "DSLR-A450", Daylight, 3, { 2.503906, 1, 1.312500, 0 } }, { "SONY", "DSLR-A450", Shade, -3, { 2.468750, 1, 1.332031, 0 } }, { "SONY", "DSLR-A450", Shade, 0, { 2.691406, 1, 1.214844, 0 } }, { "SONY", "DSLR-A450", Shade, 3, { 2.925781, 1, 1.105469, 0 } }, { "SONY", "DSLR-A450", Cloudy, -3, { 2.261719, 1, 1.468750, 0 } }, { "SONY", "DSLR-A450", Cloudy, 0, { 2.464844, 1, 1.335938, 0 } }, { "SONY", "DSLR-A450", Cloudy, 3, { 2.683594, 1, 1.214844, 0 } }, { "SONY", "DSLR-A450", Tungsten, -3, { 1.312500, 1, 2.734375, 0 } }, { "SONY", "DSLR-A450", Tungsten, 0, { 1.437500, 1, 2.468750, 0 } }, { "SONY", "DSLR-A450", Tungsten, 3, { 1.566406, 1, 2.234375, 0 } }, { "SONY", "DSLR-A450", Fluorescent, -1, { 1.636719, 1, 2.507812, 0 } }, { "SONY", "DSLR-A450", Fluorescent, 0, { 2.019531, 1, 2.003906, 0 } }, { "SONY", "DSLR-A450", Fluorescent, 3, { 2.507812, 1, 1.355469, 0 } }, { "SONY", "DSLR-A450", Flash, -3, { 2.339844, 1, 1.433594, 0 } }, { "SONY", "DSLR-A450", Flash, 0, { 2.550781, 1, 1.304688, 0 } }, { "SONY", "DSLR-A450", Flash, 3, { 2.777344, 1, 1.183594, 0 } }, { "SONY", "DSLR-A550", Daylight, 0, { 2.160156, 1, 1.496094, 0 } }, { "SONY", "DSLR-A550", Shade, 0, { 2.519531, 1, 1.234375, 0 } }, { "SONY", "DSLR-A550", Cloudy, 0, { 2.312500, 1, 1.375000, 0 } }, { "SONY", "DSLR-A550", Tungsten, 0, { 1.367188, 1, 2.632813, 0 } }, { "SONY", "DSLR-A550", Fluorescent, 0, { 1.902344, 1, 2.117188, 0 } }, { "SONY", "DSLR-A550", Flash, 0, { 2.390625, 1, 1.335938, 0 } }, /* Sony A700 presets - firmware v4 */ { "SONY", "DSLR-A700", Daylight, -3, { 1.972656, 1, 1.777344, 0 } }, { "SONY", "DSLR-A700", Daylight, -2, { 2.027344, 1, 1.718750, 0 } }, { "SONY", "DSLR-A700", Daylight, -1, { 2.089844, 1, 1.664063, 0 } }, { "SONY", "DSLR-A700", Daylight, 0, { 2.140625, 1, 1.605469, 0 } }, { "SONY", "DSLR-A700", Daylight, 1, { 2.195313, 1, 1.550781, 0 } }, { "SONY", "DSLR-A700", Daylight, 2, { 2.257813, 1, 1.500000, 0 } }, { "SONY", "DSLR-A700", Daylight, 3, { 2.320313, 1, 1.449219, 0 } }, { "SONY", "DSLR-A700", Shade, -3, { 2.304688, 1, 1.464844, 0 } }, { "SONY", "DSLR-A700", Shade, -2, { 2.359375, 1, 1.414063, 0 } }, { "SONY", "DSLR-A700", Shade, -1, { 2.429688, 1, 1.367188, 0 } }, { "SONY", "DSLR-A700", Shade, 0, { 2.500000, 1, 1.320313, 0 } }, { "SONY", "DSLR-A700", Shade, 1, { 2.570313, 1, 1.277344, 0 } }, { "SONY", "DSLR-A700", Shade, 2, { 2.636719, 1, 1.234375, 0 } }, { "SONY", "DSLR-A700", Shade, 3, { 2.714844, 1, 1.191406, 0 } }, { "SONY", "DSLR-A700", Cloudy, -3, { 2.109375, 1, 1.632813, 0 } }, { "SONY", "DSLR-A700", Cloudy, -2, { 2.171875, 1, 1.578125, 0 } }, { "SONY", "DSLR-A700", Cloudy, -1, { 2.234375, 1, 1.527344, 0 } }, { "SONY", "DSLR-A700", Cloudy, 0, { 2.296875, 1, 1.472656, 0 } }, { "SONY", "DSLR-A700", Cloudy, 1, { 2.359375, 1, 1.421875, 0 } }, { "SONY", "DSLR-A700", Cloudy, 2, { 2.429688, 1, 1.375000, 0 } }, { "SONY", "DSLR-A700", Cloudy, 3, { 2.484375, 1, 1.328125, 0 } }, { "SONY", "DSLR-A700", Tungsten, -3, { 1.238281, 1, 3.140625, 0 } }, { "SONY", "DSLR-A700", Tungsten, -2, { 1.273438, 1, 3.035156, 0 } }, { "SONY", "DSLR-A700", Tungsten, -1, { 1.312500, 1, 2.933594, 0 } }, { "SONY", "DSLR-A700", Tungsten, 0, { 1.347656, 1, 2.847656, 0 } }, { "SONY", "DSLR-A700", Tungsten, 1, { 1.390625, 1, 2.746094, 0 } }, { "SONY", "DSLR-A700", Tungsten, 2, { 1.425781, 1, 2.660156, 0 } }, { "SONY", "DSLR-A700", Tungsten, 3, { 1.464844, 1, 2.562500, 0 } }, { "SONY", "DSLR-A700", Fluorescent, -2, { 1.304688, 1, 3.515625, 0 } }, { "SONY", "DSLR-A700", Fluorescent, -1, { 1.535156, 1, 2.878906, 0 } }, { "SONY", "DSLR-A700", Fluorescent, 0, { 1.910156, 1, 2.351563, 0 } }, { "SONY", "DSLR-A700", Fluorescent, 1, { 2.132813, 1, 1.949219, 0 } }, { "SONY", "DSLR-A700", Fluorescent, 2, { 2.058594, 1, 1.675781, 0 } }, { "SONY", "DSLR-A700", Fluorescent, 3, { 2.488281, 1, 1.667969, 0 } }, { "SONY", "DSLR-A700", Fluorescent, 4, { 2.320313, 1, 1.453125, 0 } }, { "SONY", "DSLR-A700", Flash, -3, { 2.171875, 1, 1.578125, 0 } }, { "SONY", "DSLR-A700", Flash, -2, { 2.234375, 1, 1.527344, 0 } }, { "SONY", "DSLR-A700", Flash, -1, { 2.281250, 1, 1.472656, 0 } }, { "SONY", "DSLR-A700", Flash, 0, { 2.324219, 1, 1.414063, 0 } }, { "SONY", "DSLR-A700", Flash, 1, { 2.414063, 1, 1.375000, 0 } }, { "SONY", "DSLR-A700", Flash, 2, { 2.484375, 1, 1.328125, 0 } }, { "SONY", "DSLR-A700", Flash, 3, { 2.554688, 1, 1.285156, 0 } }, /* Sony A850 presets - firmware v1.00 */ { "SONY", "DSLR-A850", Daylight, -3, { 2.445313, 1, 1.515625, 0 } }, { "SONY", "DSLR-A850", Daylight, 0, { 2.683594, 1, 1.359375, 0 } }, { "SONY", "DSLR-A850", Daylight, 3, { 2.929688, 1, 1.222656, 0 } }, { "SONY", "DSLR-A850", Shade, -3, { 2.898438, 1, 1.242188, 0 } }, { "SONY", "DSLR-A850", Shade, 0, { 3.164062, 1, 1.121094, 0 } }, { "SONY", "DSLR-A850", Shade, 3, { 3.457031, 1, 1.011719, 0 } }, { "SONY", "DSLR-A850", Cloudy, -3, { 2.644531, 1, 1.386719, 0 } }, { "SONY", "DSLR-A850", Cloudy, 0, { 2.898438, 1, 1.250000, 0 } }, { "SONY", "DSLR-A850", Cloudy, 3, { 3.164062, 1, 1.121094, 0 } }, { "SONY", "DSLR-A850", Tungsten, -3, { 1.468750, 1, 2.703125, 0 } }, { "SONY", "DSLR-A850", Tungsten, 0, { 1.617188, 1, 2.421875, 0 } }, { "SONY", "DSLR-A850", Tungsten, 3, { 1.785156, 1, 2.175781, 0 } }, { "SONY", "DSLR-A850", Fluorescent, -2, { 1.531250, 1, 2.925781, 0 } }, { "SONY", "DSLR-A850", Fluorescent, 0, { 2.324219, 1, 1.882813, 0 } }, { "SONY", "DSLR-A850", Fluorescent, 4, { 2.945313, 1, 1.238281, 0 } }, { "SONY", "DSLR-A850", Flash, -3, { 2.757813, 1, 1.324219, 0 } }, { "SONY", "DSLR-A850", Flash, 0, { 3.015625, 1, 1.191406, 0 } }, { "SONY", "DSLR-A850", Flash, 3, { 3.296875, 1, 1.070312, 0 } }, { "SONY", "DSLR-A900", Daylight, -3, { 2.351563, 1, 1.511719, 0 } }, { "SONY", "DSLR-A900", Daylight, 0, { 2.585938, 1, 1.355469, 0 } }, { "SONY", "DSLR-A900", Daylight, 3, { 2.824219, 1, 1.218750, 0 } }, { "SONY", "DSLR-A900", Shade, -3, { 2.792969, 1, 1.238281, 0 } }, { "SONY", "DSLR-A900", Shade, 0, { 3.054688, 1, 1.113281, 0 } }, { "SONY", "DSLR-A900", Shade, 3, { 3.339844, 1, 1.003906, 0 } }, { "SONY", "DSLR-A900", Cloudy, -3, { 2.546875, 1, 1.382813, 0 } }, { "SONY", "DSLR-A900", Cloudy, 0, { 2.792969, 1, 1.242187, 0 } }, { "SONY", "DSLR-A900", Cloudy, 3, { 3.054688, 1, 1.113281, 0 } }, { "SONY", "DSLR-A900", Tungsten, -3, { 1.402344, 1, 2.707031, 0 } }, { "SONY", "DSLR-A900", Tungsten, 0, { 1.546875, 1, 2.425781, 0 } }, { "SONY", "DSLR-A900", Tungsten, 3, { 1.710938, 1, 2.179688, 0 } }, { "SONY", "DSLR-A900", Fluorescent, -2, { 1.460938, 1, 2.933594, 0 } }, { "SONY", "DSLR-A900", Fluorescent, 0, { 2.234375, 1, 1.882812, 0 } }, { "SONY", "DSLR-A900", Fluorescent, 4, { 2.839844, 1, 1.230469, 0 } }, { "SONY", "DSLR-A900", Flash, -3, { 2.656250, 1, 1.316406, 0 } }, { "SONY", "DSLR-A900", Flash, 0, { 2.910156, 1, 1.183594, 0 } }, { "SONY", "DSLR-A900", Flash, 3, { 3.183594, 1, 1.062500, 0 } }, { "SONY", "NEX-3", Daylight, -3, { 2.0742, 1, 1.6289, 0 } }, { "SONY", "NEX-3", Daylight, -2, { 2.1328, 1, 1.5742, 0 } }, { "SONY", "NEX-3", Daylight, -1, { 2.1914, 1, 1.5195, 0 } }, { "SONY", "NEX-3", Daylight, 0, { 2.2539, 1, 1.4727, 0 } }, { "SONY", "NEX-3", Daylight, 1, { 2.3164, 1, 1.4219, 0 } }, { "SONY", "NEX-3", Daylight, 2, { 2.3828, 1, 1.3750, 0 } }, { "SONY", "NEX-3", Daylight, 3, { 2.4492, 1, 1.3281, 0 } }, { "SONY", "NEX-3", Shade, -3, { 2.4180, 1, 1.3516, 0 } }, { "SONY", "NEX-3", Shade, -2, { 2.4844, 1, 1.3047, 0 } }, { "SONY", "NEX-3", Shade, -1, { 2.5508, 1, 1.2617, 0 } }, { "SONY", "NEX-3", Shade, 0, { 2.6289, 1, 1.2188, 0 } }, { "SONY", "NEX-3", Shade, 1, { 2.6992, 1, 1.1797, 0 } }, { "SONY", "NEX-3", Shade, 2, { 2.7773, 1, 1.1445, 0 } }, { "SONY", "NEX-3", Shade, 3, { 2.8555, 1, 1.1055, 0 } }, { "SONY", "NEX-3", Cloudy, -3, { 2.2188, 1, 1.4961, 0 } }, { "SONY", "NEX-3", Cloudy, -2, { 2.2813, 1, 1.4453, 0 } }, { "SONY", "NEX-3", Cloudy, -1, { 2.3477, 1, 1.3984, 0 } }, { "SONY", "NEX-3", Cloudy, 0, { 2.4141, 1, 1.3516, 0 } }, { "SONY", "NEX-3", Cloudy, 1, { 2.4805, 1, 1.3086, 0 } }, { "SONY", "NEX-3", Cloudy, 2, { 2.5508, 1, 1.2656, 0 } }, { "SONY", "NEX-3", Cloudy, 3, { 2.6250, 1, 1.2227, 0 } }, { "SONY", "NEX-3", Incandescent, -3, { 1.3164, 1, 2.8594, 0 } }, { "SONY", "NEX-3", Incandescent, -2, { 1.3516, 1, 2.7617, 0 } }, { "SONY", "NEX-3", Incandescent, -1, { 1.3906, 1, 2.6641, 0 } }, { "SONY", "NEX-3", Incandescent, 0, { 1.4336, 1, 2.5742, 0 } }, { "SONY", "NEX-3", Incandescent, 1, { 1.4766, 1, 2.4883, 0 } }, { "SONY", "NEX-3", Incandescent, 2, { 1.5156, 1, 2.4023, 0 } }, { "SONY", "NEX-3", Incandescent, 3, { 1.5586, 1, 2.3203, 0 } }, { "SONY", "NEX-3", Fluorescent, -1, { 1.6250, 1, 2.6172, 0 } }, { "SONY", "NEX-3", Fluorescent, 0, { 1.9883, 1, 2.0742, 0 } }, { "SONY", "NEX-3", Fluorescent, 1, { 2.1875, 1, 1.5273, 0 } }, { "SONY", "NEX-3", Fluorescent, 2, { 2.4531, 1, 1.3711, 0 } }, { "SONY", "NEX-3", Flash, -3, { 2.5352, 1, 1.3633, 0 } }, { "SONY", "NEX-3", Flash, -2, { 2.6016, 1, 1.3242, 0 } }, { "SONY", "NEX-3", Flash, -1, { 2.6758, 1, 1.2773, 0 } }, { "SONY", "NEX-3", Flash, 0, { 2.7500, 1, 1.2383, 0 } }, { "SONY", "NEX-3", Flash, 1, { 2.8281, 1, 1.1953, 0 } }, { "SONY", "NEX-3", Flash, 2, { 2.9063, 1, 1.1602, 0 } }, { "SONY", "NEX-3", Flash, 3, { 2.9883, 1, 1.1211, 0 } }, { "SONY", "NEX-5", Daylight, -3, { 2.1250, 1, 1.6055, 0 } }, { "SONY", "NEX-5", Daylight, -2, { 2.1836, 1, 1.5508, 0 } }, { "SONY", "NEX-5", Daylight, -1, { 2.2500, 1, 1.4961, 0 } }, { "SONY", "NEX-5", Daylight, 0, { 2.3125, 1, 1.4453, 0 } }, { "SONY", "NEX-5", Daylight, 1, { 2.3750, 1, 1.3984, 0 } }, { "SONY", "NEX-5", Daylight, 2, { 2.4453, 1, 1.3477, 0 } }, { "SONY", "NEX-5", Daylight, 3, { 2.5156, 1, 1.3008, 0 } }, { "SONY", "NEX-5", Shade, -3, { 2.4805, 1, 1.3242, 0 } }, { "SONY", "NEX-5", Shade, -2, { 2.5508, 1, 1.2773, 0 } }, { "SONY", "NEX-5", Shade, -1, { 2.6211, 1, 1.2344, 0 } }, { "SONY", "NEX-5", Shade, 0, { 2.6992, 1, 1.1914, 0 } }, { "SONY", "NEX-5", Shade, 1, { 2.7734, 1, 1.1523, 0 } }, { "SONY", "NEX-5", Shade, 2, { 2.8555, 1, 1.1133, 0 } }, { "SONY", "NEX-5", Shade, 3, { 2.9336, 1, 1.0742, 0 } }, { "SONY", "NEX-5", Cloudy, -3, { 2.2734, 1, 1.4727, 0 } }, { "SONY", "NEX-5", Cloudy, -2, { 2.3398, 1, 1.4219, 0 } }, { "SONY", "NEX-5", Cloudy, -1, { 2.4063, 1, 1.3711, 0 } }, { "SONY", "NEX-5", Cloudy, 0, { 2.4766, 1, 1.3281, 0 } }, { "SONY", "NEX-5", Cloudy, 1, { 2.5469, 1, 1.2813, 0 } }, { "SONY", "NEX-5", Cloudy, 2, { 2.6211, 1, 1.2383, 0 } }, { "SONY", "NEX-5", Cloudy, 3, { 2.6953, 1, 1.1953, 0 } }, { "SONY", "NEX-5", Incandescent, -3, { 1.3398, 1, 2.8594, 0 } }, { "SONY", "NEX-5", Incandescent, -2, { 1.3750, 1, 2.7617, 0 } }, { "SONY", "NEX-5", Incandescent, -1, { 1.4180, 1, 2.6641, 0 } }, { "SONY", "NEX-5", Incandescent, 0, { 1.4609, 1, 2.5703, 0 } }, { "SONY", "NEX-5", Incandescent, 1, { 1.5039, 1, 2.4805, 0 } }, { "SONY", "NEX-5", Incandescent, 2, { 1.5469, 1, 2.3945, 0 } }, { "SONY", "NEX-5", Incandescent, 3, { 1.5898, 1, 2.3125, 0 } }, { "SONY", "NEX-5", Fluorescent, -1, { 1.6563, 1, 2.6133, 0 } }, { "SONY", "NEX-5", Fluorescent, 0, { 2.0352, 1, 2.0625, 0 } }, { "SONY", "NEX-5", Fluorescent, 1, { 2.2422, 1, 1.5039, 0 } }, { "SONY", "NEX-5", Fluorescent, 2, { 2.5195, 1, 1.3438, 0 } }, { "SONY", "NEX-5", Flash, -3, { 2.6055, 1, 1.3398, 0 } }, { "SONY", "NEX-5", Flash, -2, { 2.6719, 1, 1.2969, 0 } }, { "SONY", "NEX-5", Flash, -1, { 2.7500, 1, 1.2500, 0 } }, { "SONY", "NEX-5", Flash, 0, { 2.8281, 1, 1.2109, 0 } }, { "SONY", "NEX-5", Flash, 1, { 2.9063, 1, 1.1641, 0 } }, { "SONY", "NEX-5", Flash, 2, { 2.9883, 1, 1.1289, 0 } }, { "SONY", "NEX-5", Flash, 3, { 3.0742, 1, 1.0938, 0 } }, { "SONY", "NEX-5N", Daylight, -7, { 2.023438, 1, 1.964844, 0 } }, { "SONY", "NEX-5N", Daylight, -6, { 2.085938, 1, 1.898438, 0 } }, { "SONY", "NEX-5N", Daylight, -5, { 2.148438, 1, 1.832031, 0 } }, { "SONY", "NEX-5N", Daylight, -4, { 2.210938, 1, 1.769531, 0 } }, { "SONY", "NEX-5N", Daylight, -3, { 2.277344, 1, 1.710938, 0 } }, { "SONY", "NEX-5N", Daylight, -2, { 2.347656, 1, 1.652344, 0 } }, { "SONY", "NEX-5N", Daylight, -1, { 2.417969, 1, 1.597656, 0 } }, { "SONY", "NEX-5N", Daylight, 0, { 2.492188, 1, 1.542969, 0 } }, { "SONY", "NEX-5N", Daylight, 1, { 2.566406, 1, 1.492188, 0 } }, { "SONY", "NEX-5N", Daylight, 2, { 2.644531, 1, 1.441406, 0 } }, { "SONY", "NEX-5N", Daylight, 3, { 2.726563, 1, 1.394531, 0 } }, { "SONY", "NEX-5N", Daylight, 4, { 2.808594, 1, 1.347656, 0 } }, { "SONY", "NEX-5N", Daylight, 5, { 2.898438, 1, 1.300781, 0 } }, { "SONY", "NEX-5N", Daylight, 6, { 2.988281, 1, 1.257813, 0 } }, { "SONY", "NEX-5N", Daylight, 7, { 3.082031, 1, 1.218750, 0 } }, { "SONY", "NEX-5N", Shade, -7, { 2.382813, 1, 1.621094, 0 } }, { "SONY", "NEX-5N", Shade, -6, { 2.457031, 1, 1.566406, 0 } }, { "SONY", "NEX-5N", Shade, -5, { 2.531250, 1, 1.515625, 0 } }, { "SONY", "NEX-5N", Shade, -4, { 2.609375, 1, 1.464844, 0 } }, { "SONY", "NEX-5N", Shade, -3, { 2.687500, 1, 1.414063, 0 } }, { "SONY", "NEX-5N", Shade, -2, { 2.769531, 1, 1.367188, 0 } }, { "SONY", "NEX-5N", Shade, -1, { 2.855469, 1, 1.324219, 0 } }, { "SONY", "NEX-5N", Shade, 0, { 2.945313, 1, 1.277344, 0 } }, { "SONY", "NEX-5N", Shade, 1, { 3.039063, 1, 1.234375, 0 } }, { "SONY", "NEX-5N", Shade, 2, { 3.136719, 1, 1.195313, 0 } }, { "SONY", "NEX-5N", Shade, 3, { 3.234375, 1, 1.156250, 0 } }, { "SONY", "NEX-5N", Shade, 4, { 3.339844, 1, 1.117188, 0 } }, { "SONY", "NEX-5N", Shade, 5, { 3.445313, 1, 1.082031, 0 } }, { "SONY", "NEX-5N", Shade, 6, { 3.558594, 1, 1.046875, 0 } }, { "SONY", "NEX-5N", Shade, 7, { 3.675781, 1, 1.011719, 0 } }, { "SONY", "NEX-5N", Cloudy, -7, { 2.175781, 1, 1.804688, 0 } }, { "SONY", "NEX-5N", Cloudy, -6, { 2.242188, 1, 1.742188, 0 } }, { "SONY", "NEX-5N", Cloudy, -5, { 2.308594, 1, 1.683594, 0 } }, { "SONY", "NEX-5N", Cloudy, -4, { 2.378906, 1, 1.625000, 0 } }, { "SONY", "NEX-5N", Cloudy, -3, { 2.449219, 1, 1.570313, 0 } }, { "SONY", "NEX-5N", Cloudy, -2, { 2.527344, 1, 1.519531, 0 } }, { "SONY", "NEX-5N", Cloudy, -1, { 2.601563, 1, 1.468750, 0 } }, { "SONY", "NEX-5N", Cloudy, 0, { 2.683594, 1, 1.417969, 0 } }, { "SONY", "NEX-5N", Cloudy, 1, { 2.765625, 1, 1.371094, 0 } }, { "SONY", "NEX-5N", Cloudy, 2, { 2.851563, 1, 1.324219, 0 } }, { "SONY", "NEX-5N", Cloudy, 3, { 2.941406, 1, 1.281250, 0 } }, { "SONY", "NEX-5N", Cloudy, 4, { 3.035156, 1, 1.238281, 0 } }, { "SONY", "NEX-5N", Cloudy, 5, { 3.128906, 1, 1.199219, 0 } }, { "SONY", "NEX-5N", Cloudy, 6, { 3.226563, 1, 1.156250, 0 } }, { "SONY", "NEX-5N", Cloudy, 7, { 3.332031, 1, 1.121094, 0 } }, { "SONY", "NEX-5N", Incandescent, -7, { 1.277344, 1, 3.503906, 0 } }, { "SONY", "NEX-5N", Incandescent, -6, { 1.316406, 1, 3.378906, 0 } }, { "SONY", "NEX-5N", Incandescent, -5, { 1.351563, 1, 3.257813, 0 } }, { "SONY", "NEX-5N", Incandescent, -4, { 1.390625, 1, 3.140625, 0 } }, { "SONY", "NEX-5N", Incandescent, -3, { 1.429688, 1, 3.027344, 0 } }, { "SONY", "NEX-5N", Incandescent, -2, { 1.468750, 1, 2.917969, 0 } }, { "SONY", "NEX-5N", Incandescent, -1, { 1.511719, 1, 2.816406, 0 } }, { "SONY", "NEX-5N", Incandescent, 0, { 1.554688, 1, 2.718750, 0 } }, { "SONY", "NEX-5N", Incandescent, 1, { 1.601563, 1, 2.621094, 0 } }, { "SONY", "NEX-5N", Incandescent, 2, { 1.644531, 1, 2.531250, 0 } }, { "SONY", "NEX-5N", Incandescent, 3, { 1.695313, 1, 2.441406, 0 } }, { "SONY", "NEX-5N", Incandescent, 4, { 1.742188, 1, 2.359375, 0 } }, { "SONY", "NEX-5N", Incandescent, 5, { 1.792969, 1, 2.277344, 0 } }, { "SONY", "NEX-5N", Incandescent, 6, { 1.843750, 1, 2.199219, 0 } }, { "SONY", "NEX-5N", Incandescent, 7, { 1.898438, 1, 2.121094, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -7, { 1.503906, 1, 3.433594, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -6, { 1.542969, 1, 3.320313, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -5, { 1.585938, 1, 3.203125, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -4, { 1.628906, 1, 3.097656, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -3, { 1.671875, 1, 2.992188, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -2, { 1.718750, 1, 2.894531, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, -1, { 1.765625, 1, 2.792969, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 0, { 1.816406, 1, 2.703125, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 1, { 1.863281, 1, 2.613281, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 2, { 1.914063, 1, 2.527344, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 3, { 1.968750, 1, 2.445313, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 4, { 2.023438, 1, 2.363281, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 5, { 2.078125, 1, 2.285156, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 6, { 2.136719, 1, 2.210938, 0 } }, { "SONY", "NEX-5N", WarmWhiteFluorescent, 7, { 2.199219, 1, 2.140625, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -7, { 1.878906, 1, 2.734375, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -6, { 1.929688, 1, 2.648438, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -5, { 1.980469, 1, 2.558594, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -4, { 2.035156, 1, 2.476563, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -3, { 2.093750, 1, 2.398438, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -2, { 2.148438, 1, 2.320313, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, -1, { 2.210938, 1, 2.246094, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 0, { 2.269531, 1, 2.175781, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 1, { 2.332031, 1, 2.105469, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 2, { 2.398438, 1, 2.039063, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 3, { 2.468750, 1, 1.972656, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 4, { 2.535156, 1, 1.910156, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 5, { 2.609375, 1, 1.851563, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 6, { 2.683594, 1, 1.792969, 0 } }, { "SONY", "NEX-5N", CoolWhiteFluorescent, 7, { 2.757813, 1, 1.734375, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -7, { 1.992188, 1, 2.062500, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -6, { 2.050781, 1, 1.992188, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -5, { 2.109375, 1, 1.921875, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -4, { 2.175781, 1, 1.859375, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -3, { 2.238281, 1, 1.796875, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -2, { 2.304688, 1, 1.734375, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, -1, { 2.375000, 1, 1.679688, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 0, { 2.445313, 1, 1.621094, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 1, { 2.519531, 1, 1.566406, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 2, { 2.593750, 1, 1.515625, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 3, { 2.671875, 1, 1.464844, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 4, { 2.753906, 1, 1.417969, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 5, { 2.839844, 1, 1.371094, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 6, { 2.929688, 1, 1.324219, 0 } }, { "SONY", "NEX-5N", DayWhiteFluorescent, 7, { 3.019531, 1, 1.281250, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -7, { 2.253906, 1, 1.800781, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -6, { 2.320313, 1, 1.742188, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -5, { 2.390625, 1, 1.683594, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -4, { 2.460938, 1, 1.628906, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -3, { 2.535156, 1, 1.574219, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -2, { 2.613281, 1, 1.519531, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, -1, { 2.691406, 1, 1.472656, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 0, { 2.773438, 1, 1.421875, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 1, { 2.859375, 1, 1.375000, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 2, { 2.945313, 1, 1.332031, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 3, { 3.039063, 1, 1.285156, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 4, { 3.132813, 1, 1.246094, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 5, { 3.230469, 1, 1.203125, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 6, { 3.335938, 1, 1.164063, 0 } }, { "SONY", "NEX-5N", DaylightFluorescent, 7, { 3.441406, 1, 1.125000, 0 } }, { "SONY", "NEX-5N", Flash, -7, { 2.265625, 1, 1.726563, 0 } }, { "SONY", "NEX-5N", Flash, -6, { 2.332031, 1, 1.667969, 0 } }, { "SONY", "NEX-5N", Flash, -5, { 2.402344, 1, 1.613281, 0 } }, { "SONY", "NEX-5N", Flash, -4, { 2.476563, 1, 1.558594, 0 } }, { "SONY", "NEX-5N", Flash, -3, { 2.550781, 1, 1.507813, 0 } }, { "SONY", "NEX-5N", Flash, -2, { 2.628906, 1, 1.457031, 0 } }, { "SONY", "NEX-5N", Flash, -1, { 2.710938, 1, 1.406250, 0 } }, { "SONY", "NEX-5N", Flash, 0, { 2.792969, 1, 1.359375, 0 } }, { "SONY", "NEX-5N", Flash, 1, { 2.878906, 1, 1.316406, 0 } }, { "SONY", "NEX-5N", Flash, 2, { 2.972656, 1, 1.273438, 0 } }, { "SONY", "NEX-5N", Flash, 3, { 3.062500, 1, 1.230469, 0 } }, { "SONY", "NEX-5N", Flash, 4, { 3.164063, 1, 1.187500, 0 } }, { "SONY", "NEX-5N", Flash, 5, { 3.261719, 1, 1.148438, 0 } }, { "SONY", "NEX-5N", Flash, 6, { 3.367188, 1, 1.113281, 0 } }, { "SONY", "NEX-5N", Flash, 7, { 3.476563, 1, 1.074219, 0 } }, { "SONY", "NEX-7", Daylight, 0, { 2.5820, 1, 1.5273, 0 } }, { "SONY", "NEX-7", Shade, 0, { 3.0781, 1, 1.2734, 0 } }, { "SONY", "NEX-7", Cloudy, 0, { 2.7930, 1, 1.4102, 0 } }, { "SONY", "NEX-7", Tungsten, 0, { 1.5859, 1, 2.6133, 0 } }, { "SONY", "NEX-7", WarmWhiteFluorescent, 0, { 1.8203, 1, 2.5703, 0 } }, { "SONY", "NEX-7", CoolWhiteFluorescent, 0, { 2.3164, 1, 2.0937, 0 } }, { "SONY", "NEX-7", DayWhiteFluorescent, 0, { 2.4570, 1, 1.6055, 0 } }, { "SONY", "NEX-7", DaylightFluorescent, 0, { 2.7734, 1, 1.4258, 0 } }, { "SONY", "NEX-7", Flash, 0, { 2.9219, 1, 1.4453, 0 } }, // firmware NEX-C3 Ver.02 { "SONY", "NEX-C3", Daylight, 0, { 2.699219, 1, 1.527344, 0 } }, { "SONY", "NEX-C3", Shade, 0, { 3.191406, 1, 1.257813, 0 } }, { "SONY", "NEX-C3", Cloudy, 0, { 2.906250, 1, 1.402344, 0 } }, { "SONY", "NEX-C3", Tungsten, 0, { 1.617188, 1, 2.718750, 0 } }, { "SONY", "NEX-C3", Fluorescent, 0, { 2.359375, 1, 2.136719, 0 } }, { "SONY", "NEX-C3", Flash, 0, { 3.015625, 1, 1.335938, 0 } }, { "SONY", "NEX-C3", "5000K", 0, { 2.605469, 1, 1.589844, 0 } }, { "SONY", "NEX-C3", "5500K", 0, { 2.753906, 1, 1.492188, 0 } }, { "SONY", "NEX-C3", "6500K", 0, { 2.996094, 1, 1.351563, 0 } }, { "SONY", "SLT-A55V", Daylight, -3, { 2.3320, 1, 1.6758, 0 } }, { "SONY", "SLT-A55V", Daylight, -2, { 2.3984, 1, 1.6172, 0 } }, { "SONY", "SLT-A55V", Daylight, -1, { 2.4727, 1, 1.5625, 0 } }, { "SONY", "SLT-A55V", Daylight, 0, { 2.5469, 1, 1.5117, 0 } }, { "SONY", "SLT-A55V", Daylight, 1, { 2.6172, 1, 1.4609, 0 } }, { "SONY", "SLT-A55V", Daylight, 2, { 2.6992, 1, 1.4102, 0 } }, { "SONY", "SLT-A55V", Daylight, 3, { 2.7773, 1, 1.3633, 0 } }, { "SONY", "SLT-A55V", Shade, -3, { 2.7422, 1, 1.3867, 0 } }, { "SONY", "SLT-A55V", Shade, -2, { 2.8203, 1, 1.3398, 0 } }, { "SONY", "SLT-A55V", Shade, -1, { 2.8984, 1, 1.2969, 0 } }, { "SONY", "SLT-A55V", Shade, 0, { 2.9922, 1, 1.2500, 0 } }, { "SONY", "SLT-A55V", Shade, 1, { 3.0781, 1, 1.2109, 0 } }, { "SONY", "SLT-A55V", Shade, 2, { 3.1680, 1, 1.1719, 0 } }, { "SONY", "SLT-A55V", Shade, 3, { 3.2578, 1, 1.1328, 0 } }, { "SONY", "SLT-A55V", Cloudy, -3, { 2.5039, 1, 1.5352, 0 } }, { "SONY", "SLT-A55V", Cloudy, -2, { 2.5781, 1, 1.4844, 0 } }, { "SONY", "SLT-A55V", Cloudy, -1, { 2.6562, 1, 1.4375, 0 } }, { "SONY", "SLT-A55V", Cloudy, 0, { 2.7344, 1, 1.3906, 0 } }, { "SONY", "SLT-A55V", Cloudy, 1, { 2.8125, 1, 1.3437, 0 } }, { "SONY", "SLT-A55V", Cloudy, 2, { 2.8984, 1, 1.2969, 0 } }, { "SONY", "SLT-A55V", Cloudy, 3, { 2.9844, 1, 1.2539, 0 } }, { "SONY", "SLT-A55V", Incandescent, -3, { 1.4297, 1, 2.9453, 0 } }, { "SONY", "SLT-A55V", Incandescent, -2, { 1.4727, 1, 2.8477, 0 } }, { "SONY", "SLT-A55V", Incandescent, -1, { 1.5234, 1, 2.7461, 0 } }, { "SONY", "SLT-A55V", Incandescent, 0, { 1.5703, 1, 2.6523, 0 } }, { "SONY", "SLT-A55V", Incandescent, 1, { 1.6172, 1, 2.5625, 0 } }, { "SONY", "SLT-A55V", Incandescent, 2, { 1.6680, 1, 2.4727, 0 } }, { "SONY", "SLT-A55V", Incandescent, 3, { 1.7148, 1, 2.3906, 0 } }, { "SONY", "SLT-A55V", Fluorescent, -1, { 1.8008, 1, 2.6562, 0 } }, { "SONY", "SLT-A55V", Fluorescent, 0, { 2.2305, 1, 2.1094, 0 } }, { "SONY", "SLT-A55V", Fluorescent, 1, { 2.4648, 1, 1.5508, 0 } }, { "SONY", "SLT-A55V", Fluorescent, 2, { 2.7969, 1, 1.3828, 0 } }, { "SONY", "SLT-A55V", Flash, -3, { 2.6055, 1, 1.4805, 0 } }, { "SONY", "SLT-A55V", Flash, -2, { 2.6797, 1, 1.4297, 0 } }, { "SONY", "SLT-A55V", Flash, -1, { 2.7578, 1, 1.3828, 0 } }, { "SONY", "SLT-A55V", Flash, 0, { 2.8437, 1, 1.3359, 0 } }, { "SONY", "SLT-A55V", Flash, 1, { 2.9258, 1, 1.2930, 0 } }, { "SONY", "SLT-A55V", Flash, 2, { 3.0156, 1, 1.2461, 0 } }, { "SONY", "SLT-A55V", Flash, 3, { 3.1016, 1, 1.2070, 0 } }, { "SONY", "SLT-A57", Daylight, -7, { 2.160156, 1, 2.000000, 0 } }, { "SONY", "SLT-A57", Daylight, -6, { 2.226563, 1, 1.929688, 0 } }, { "SONY", "SLT-A57", Daylight, -5, { 2.296875, 1, 1.863281, 0 } }, { "SONY", "SLT-A57", Daylight, -4, { 2.367188, 1, 1.800781, 0 } }, { "SONY", "SLT-A57", Daylight, -3, { 2.437500, 1, 1.738281, 0 } }, { "SONY", "SLT-A57", Daylight, -2, { 2.515625, 1, 1.679688, 0 } }, { "SONY", "SLT-A57", Daylight, -1, { 2.593750, 1, 1.621094, 0 } }, { "SONY", "SLT-A57", Daylight, 0, { 2.671875, 1, 1.566406, 0 } }, { "SONY", "SLT-A57", Daylight, 1, { 2.757813, 1, 1.511719, 0 } }, { "SONY", "SLT-A57", Daylight, 2, { 2.843750, 1, 1.460938, 0 } }, { "SONY", "SLT-A57", Daylight, 3, { 2.937500, 1, 1.414063, 0 } }, { "SONY", "SLT-A57", Daylight, 4, { 3.031250, 1, 1.363281, 0 } }, { "SONY", "SLT-A57", Daylight, 5, { 3.128906, 1, 1.320313, 0 } }, { "SONY", "SLT-A57", Daylight, 6, { 3.230469, 1, 1.273438, 0 } }, { "SONY", "SLT-A57", Daylight, 7, { 3.335938, 1, 1.230469, 0 } }, { "SONY", "SLT-A57", Shade, -7, { 2.554688, 1, 1.648438, 0 } }, { "SONY", "SLT-A57", Shade, -6, { 2.636719, 1, 1.593750, 0 } }, { "SONY", "SLT-A57", Shade, -5, { 2.718750, 1, 1.539063, 0 } }, { "SONY", "SLT-A57", Shade, -4, { 2.804688, 1, 1.484375, 0 } }, { "SONY", "SLT-A57", Shade, -3, { 2.894531, 1, 1.433594, 0 } }, { "SONY", "SLT-A57", Shade, -2, { 2.988281, 1, 1.386719, 0 } }, { "SONY", "SLT-A57", Shade, -1, { 3.082031, 1, 1.339844, 0 } }, { "SONY", "SLT-A57", Shade, 0, { 3.183594, 1, 1.296875, 0 } }, { "SONY", "SLT-A57", Shade, 1, { 3.285156, 1, 1.250000, 0 } }, { "SONY", "SLT-A57", Shade, 2, { 3.394531, 1, 1.210938, 0 } }, { "SONY", "SLT-A57", Shade, 3, { 3.507813, 1, 1.167969, 0 } }, { "SONY", "SLT-A57", Shade, 4, { 3.625000, 1, 1.128906, 0 } }, { "SONY", "SLT-A57", Shade, 5, { 3.746094, 1, 1.093750, 0 } }, { "SONY", "SLT-A57", Shade, 6, { 3.875000, 1, 1.054688, 0 } }, { "SONY", "SLT-A57", Shade, 7, { 4.007813, 1, 1.019531, 0 } }, { "SONY", "SLT-A57", Cloudy, -7, { 2.328125, 1, 1.832031, 0 } }, { "SONY", "SLT-A57", Cloudy, -6, { 2.402344, 1, 1.769531, 0 } }, { "SONY", "SLT-A57", Cloudy, -5, { 2.472656, 1, 1.710938, 0 } }, { "SONY", "SLT-A57", Cloudy, -4, { 2.550781, 1, 1.652344, 0 } }, { "SONY", "SLT-A57", Cloudy, -3, { 2.628906, 1, 1.593750, 0 } }, { "SONY", "SLT-A57", Cloudy, -2, { 2.714844, 1, 1.542969, 0 } }, { "SONY", "SLT-A57", Cloudy, -1, { 2.796875, 1, 1.488281, 0 } }, { "SONY", "SLT-A57", Cloudy, 0, { 2.886719, 1, 1.437500, 0 } }, { "SONY", "SLT-A57", Cloudy, 1, { 2.980469, 1, 1.390625, 0 } }, { "SONY", "SLT-A57", Cloudy, 2, { 3.078125, 1, 1.343750, 0 } }, { "SONY", "SLT-A57", Cloudy, 3, { 3.175781, 1, 1.296875, 0 } }, { "SONY", "SLT-A57", Cloudy, 4, { 3.281250, 1, 1.253906, 0 } }, { "SONY", "SLT-A57", Cloudy, 5, { 3.386719, 1, 1.210938, 0 } }, { "SONY", "SLT-A57", Cloudy, 6, { 3.500000, 1, 1.171875, 0 } }, { "SONY", "SLT-A57", Cloudy, 7, { 3.617188, 1, 1.132813, 0 } }, { "SONY", "SLT-A57", Incandescent, -7, { 1.351563, 1, 3.613281, 0 } }, { "SONY", "SLT-A57", Incandescent, -6, { 1.390625, 1, 3.476563, 0 } }, { "SONY", "SLT-A57", Incandescent, -5, { 1.433594, 1, 3.351563, 0 } }, { "SONY", "SLT-A57", Incandescent, -4, { 1.472656, 1, 3.226563, 0 } }, { "SONY", "SLT-A57", Incandescent, -3, { 1.515625, 1, 3.109375, 0 } }, { "SONY", "SLT-A57", Incandescent, -2, { 1.558594, 1, 2.996094, 0 } }, { "SONY", "SLT-A57", Incandescent, -1, { 1.605469, 1, 2.886719, 0 } }, { "SONY", "SLT-A57", Incandescent, 0, { 1.652344, 1, 2.785156, 0 } }, { "SONY", "SLT-A57", Incandescent, 1, { 1.699219, 1, 2.683594, 0 } }, { "SONY", "SLT-A57", Incandescent, 2, { 1.750000, 1, 2.589844, 0 } }, { "SONY", "SLT-A57", Incandescent, 3, { 1.800781, 1, 2.496094, 0 } }, { "SONY", "SLT-A57", Incandescent, 4, { 1.855469, 1, 2.410156, 0 } }, { "SONY", "SLT-A57", Incandescent, 5, { 1.910156, 1, 2.324219, 0 } }, { "SONY", "SLT-A57", Incandescent, 6, { 1.964844, 1, 2.242188, 0 } }, { "SONY", "SLT-A57", Incandescent, 7, { 2.023438, 1, 2.164063, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -7, { 1.593750, 1, 3.539063, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -6, { 1.640625, 1, 3.414063, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -5, { 1.683594, 1, 3.296875, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -4, { 1.730469, 1, 3.183594, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -3, { 1.777344, 1, 3.074219, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -2, { 1.828125, 1, 2.968750, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, -1, { 1.878906, 1, 2.867188, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 0, { 1.933594, 1, 2.769531, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 1, { 1.984375, 1, 2.675781, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 2, { 2.042969, 1, 2.585938, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 3, { 2.101563, 1, 2.500000, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 4, { 2.160156, 1, 2.414063, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 5, { 2.222656, 1, 2.335938, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 6, { 2.285156, 1, 2.257813, 0 } }, { "SONY", "SLT-A57", WarmWhiteFluorescent, 7, { 2.351563, 1, 2.183594, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -7, { 2.003906, 1, 2.800781, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -6, { 2.058594, 1, 2.710938, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -5, { 2.113281, 1, 2.621094, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -4, { 2.175781, 1, 2.535156, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -3, { 2.234375, 1, 2.449219, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -2, { 2.296875, 1, 2.371094, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, -1, { 2.363281, 1, 2.292969, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 0, { 2.433594, 1, 2.218750, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 1, { 2.500000, 1, 2.144531, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 2, { 2.574219, 1, 2.078125, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 3, { 2.648438, 1, 2.007813, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 4, { 2.726563, 1, 1.945313, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 5, { 2.804688, 1, 1.882813, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 6, { 2.886719, 1, 1.820313, 0 } }, { "SONY", "SLT-A57", CoolWhiteFluorescent, 7, { 2.972656, 1, 1.765625, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -7, { 2.125000, 1, 2.101563, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -6, { 2.191406, 1, 2.027344, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -5, { 2.257813, 1, 1.957031, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -4, { 2.324219, 1, 1.890625, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -3, { 2.394531, 1, 1.828125, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -2, { 2.468750, 1, 1.765625, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, -1, { 2.542969, 1, 1.703125, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 0, { 2.625000, 1, 1.648438, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 1, { 2.707031, 1, 1.589844, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 2, { 2.789063, 1, 1.539063, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 3, { 2.878906, 1, 1.484375, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 4, { 2.968750, 1, 1.437500, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 5, { 3.062500, 1, 1.386719, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 6, { 3.164063, 1, 1.343750, 0 } }, { "SONY", "SLT-A57", DayWhiteFluorescent, 7, { 3.265625, 1, 1.296875, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -7, { 2.414063, 1, 1.832031, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -6, { 2.488281, 1, 1.769531, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -5, { 2.562500, 1, 1.710938, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -4, { 2.640625, 1, 1.652344, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -3, { 2.722656, 1, 1.597656, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -2, { 2.808594, 1, 1.542969, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, -1, { 2.898438, 1, 1.492188, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 0, { 2.988281, 1, 1.441406, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 1, { 3.085938, 1, 1.394531, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 2, { 3.183594, 1, 1.347656, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 3, { 3.285156, 1, 1.304688, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 4, { 3.394531, 1, 1.261719, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 5, { 3.503906, 1, 1.218750, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 6, { 3.621094, 1, 1.179688, 0 } }, { "SONY", "SLT-A57", DaylightFluorescent, 7, { 3.742188, 1, 1.140625, 0 } }, { "SONY", "SLT-A57", Flash, -7, { 2.464844, 1, 1.707031, 0 } }, { "SONY", "SLT-A57", Flash, -6, { 2.542969, 1, 1.648438, 0 } }, { "SONY", "SLT-A57", Flash, -5, { 2.621094, 1, 1.589844, 0 } }, { "SONY", "SLT-A57", Flash, -4, { 2.707031, 1, 1.539063, 0 } }, { "SONY", "SLT-A57", Flash, -3, { 2.792969, 1, 1.484375, 0 } }, { "SONY", "SLT-A57", Flash, -2, { 2.878906, 1, 1.433594, 0 } }, { "SONY", "SLT-A57", Flash, -1, { 2.972656, 1, 1.386719, 0 } }, { "SONY", "SLT-A57", Flash, 0, { 3.066406, 1, 1.339844, 0 } }, { "SONY", "SLT-A57", Flash, 1, { 3.167969, 1, 1.292969, 0 } }, { "SONY", "SLT-A57", Flash, 2, { 3.269531, 1, 1.250000, 0 } }, { "SONY", "SLT-A57", Flash, 3, { 3.378906, 1, 1.210938, 0 } }, { "SONY", "SLT-A57", Flash, 4, { 3.488281, 1, 1.167969, 0 } }, { "SONY", "SLT-A57", Flash, 5, { 3.605469, 1, 1.128906, 0 } }, { "SONY", "SLT-A57", Flash, 6, { 3.726563, 1, 1.093750, 0 } }, { "SONY", "SLT-A57", Flash, 7, { 3.855469, 1, 1.054688, 0 } }, { "SONY", "SLT-A65V", Daylight, 0, { 2.628906, 1, 1.433594, 0 } }, { "SONY", "SLT-A65V", Shade, 0, { 3.132813, 1, 1.191406, 0 } }, { "SONY", "SLT-A65V", Cloudy, 0, { 2.839844, 1, 1.316406, 0 } }, { "SONY", "SLT-A65V", Tungsten, 0, { 1.617188, 1, 2.488281, 0 } }, { "SONY", "SLT-A65V", Fluorescent, 0, { 2.363281, 1, 1.980469, 0 } }, { "SONY", "SLT-A65V", Flash, 0, { 3.070313, 1, 1.238281, 0 } }, { "SONY", "SLT-A77V", Daylight, 0, { 2.726563, 1, 1.390625, 0 } }, { "SONY", "SLT-A77V", Shade, 0, { 3.296875, 1, 1.156250, 0 } }, { "SONY", "SLT-A77V", Cloudy, 0, { 2.964844, 1, 1.281250, 0 } }, { "SONY", "SLT-A77V", Tungsten, 0, { 1.636719, 1, 2.417969, 0 } }, { "SONY", "SLT-A77V", Fluorescent, -1, { 1.886719, 1, 2.375000, 0 } }, { "SONY", "SLT-A77V", Fluorescent, 0, { 2.433594, 1, 1.925781, 0 } }, { "SONY", "SLT-A77V", Fluorescent, 1, { 2.589844, 1, 1.464844, 0 } }, { "SONY", "SLT-A77V", Fluorescent, 2, { 2.945313, 1, 1.300781, 0 } }, { "SONY", "SLT-A77V", Flash, 0, { 3.222656, 1, 1.207031, 0 } }, }; const int wb_preset_count = sizeof(wb_preset) / sizeof(wb_data); ufraw-0.19.2/uf_glib.h0000664000175000017500000000264212122217612011432 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_glib.h - glib compatibility header * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UF_GLIB_H #define _UF_GLIB_H #ifdef __cplusplus extern "C" { #endif #include #include // g_win32_locale_filename_from_utf8 is needed only on win32 #ifdef _WIN32 #define uf_win32_locale_filename_from_utf8(__some_string__) \ g_win32_locale_filename_from_utf8(__some_string__) #define uf_win32_locale_filename_free(__some_string__) g_free(__some_string__) #else #define uf_win32_locale_filename_from_utf8(__some_string__) (__some_string__) #define uf_win32_locale_filename_free(__some_string__) (void)(__some_string__) #endif // On win32 command-line arguments need to be translated to UTF-8 #ifdef _WIN32 #define uf_win32_locale_to_utf8(__some_string__) \ g_locale_to_utf8(__some_string__, -1, NULL, NULL, NULL) #define uf_win32_locale_free(__some_string__) g_free(__some_string__) #else #define uf_win32_locale_to_utf8(__some_string__) (__some_string__) #define uf_win32_locale_free(__some_string__) (void)(__some_string__) #endif #ifdef __cplusplus } #endif #endif /*_UF_GLIB_H*/ ufraw-0.19.2/ufraw_chooser.c0000664000175000017500000001554512115264507012701 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_chooser.c - A very simple file chooser for UFRaw. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #include #include void ufraw_chooser_toggle(GtkToggleButton *button, GtkFileChooser *fileChooser) { gtk_file_chooser_set_show_hidden(fileChooser, gtk_toggle_button_get_active(button)); } /* Create a GtkFileChooser dialog for selecting raw files */ GtkFileChooser *ufraw_raw_chooser(conf_data *conf, const char *defPath, const gchar *label, GtkWindow *toplevel, const gchar *cancel, gboolean multiple) { GtkFileChooser *fileChooser; GtkFileFilter *filter; char *cp; char **extList, **l, ext[max_name]; fileChooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new(label, toplevel, GTK_FILE_CHOOSER_ACTION_OPEN, cancel, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL)); if (toplevel == NULL) gtk_window_set_type_hint(GTK_WINDOW(fileChooser), GDK_WINDOW_TYPE_HINT_NORMAL); else ufraw_focus(fileChooser, TRUE); gtk_window_set_icon_name(GTK_WINDOW(fileChooser), "ufraw"); ufraw_message(UFRAW_SET_PARENT, (char *)fileChooser); if (defPath != NULL) { char *fullPath = uf_file_set_absolute(defPath); gtk_file_chooser_set_current_folder(fileChooser, fullPath); g_free(fullPath); } filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Raw images")); extList = g_strsplit(raw_ext, ",", 100); for (l = extList; *l != NULL; l++) if (strcmp(*l, "jpeg") && strcmp(*l, "jpg") && strcmp(*l, "tif") && strcmp(*l, "tiff") && strcmp(*l, "ufraw")) { snprintf(ext, max_name, "*.%s", *l); gtk_file_filter_add_pattern(filter, ext); gtk_file_filter_add_pattern(filter, cp = g_ascii_strup(ext, -1)); g_free(cp); #ifdef HAVE_LIBZ snprintf(ext, max_name, "*.%s.gz", *l); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.GZ", *l); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.gz", cp = g_ascii_strup(*l, -1)); g_free(cp); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.GZ", cp = g_ascii_strup(*l, -1)); g_free(cp); gtk_file_filter_add_pattern(filter, ext); #endif #ifdef HAVE_LIBBZ2 snprintf(ext, max_name, "*.%s.bz2", *l); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.BZ2", *l); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.bz2", cp = g_ascii_strup(*l, -1)); g_free(cp); gtk_file_filter_add_pattern(filter, ext); snprintf(ext, max_name, "*.%s.BZ2", cp = g_ascii_strup(*l, -1)); g_free(cp); gtk_file_filter_add_pattern(filter, ext); #endif } g_strfreev(extList); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("UFRaw ID files")); gtk_file_filter_add_pattern(filter, "*.ufraw"); gtk_file_filter_add_pattern(filter, "*.UFRAW"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Raw jpeg's")); gtk_file_filter_add_pattern(filter, "*.jpeg"); gtk_file_filter_add_pattern(filter, "*.jpg"); gtk_file_filter_add_pattern(filter, "*.JPEG"); gtk_file_filter_add_pattern(filter, "*.JPG"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("Raw tiff's")); gtk_file_filter_add_pattern(filter, "*.tif"); gtk_file_filter_add_pattern(filter, "*.tiff"); gtk_file_filter_add_pattern(filter, "*.TIF"); gtk_file_filter_add_pattern(filter, "*.TIFF"); gtk_file_chooser_add_filter(fileChooser, filter); filter = GTK_FILE_FILTER(gtk_file_filter_new()); gtk_file_filter_set_name(filter, _("All files")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(fileChooser, filter); gtk_file_chooser_set_show_hidden(fileChooser, FALSE); GtkWidget *button = gtk_check_button_new_with_label(_("Show hidden files")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(ufraw_chooser_toggle), fileChooser); gtk_file_chooser_set_extra_widget(fileChooser, button); if (multiple) gtk_file_chooser_set_select_multiple(fileChooser, TRUE); /* Add shortcut to folder of last opened file */ if (strlen(conf->inputFilename) > 0) { char *cp = g_path_get_dirname(conf->inputFilename); gtk_file_chooser_add_shortcut_folder(fileChooser, cp, NULL); g_free(cp); } gtk_widget_show(GTK_WIDGET(fileChooser)); return fileChooser; } void ufraw_chooser(conf_data *rc, conf_data *conf, conf_data *cmd, const char *defPath) { ufraw_data *uf; GtkFileChooser *fileChooser; GSList *list, *saveList; char *filename; fileChooser = ufraw_raw_chooser(rc, defPath, "UFRaw", NULL, GTK_STOCK_QUIT, TRUE); while (gtk_dialog_run(GTK_DIALOG(fileChooser)) == GTK_RESPONSE_ACCEPT) { for (list = saveList = gtk_file_chooser_get_filenames(fileChooser); list != NULL; list = g_slist_next(list)) { filename = list->data; uf = ufraw_open(filename); if (uf == NULL) { ufraw_message(UFRAW_REPORT, NULL); continue; } int status = ufraw_config(uf, rc, conf, cmd); if (status == UFRAW_ERROR) { ufraw_close_darkframe(uf->conf); ufraw_close(uf); } else { ufraw_preview(uf, rc, FALSE, NULL); } g_free(uf); g_free(filename); } g_slist_free(saveList); } if (rc->darkframe != NULL) ufraw_close_darkframe(rc); gtk_widget_destroy(GTK_WIDGET(fileChooser)); ufraw_message(UFRAW_SET_PARENT, NULL); } ufraw-0.19.2/dcraw_api.cc0000664000175000017500000007571712122217612012127 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_api.cc - API for DCRaw * Copyright 2004-2013 by Udi Fuchs * * based on dcraw by Dave Coffin * http://www.cybercom.net/~dcoffin/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include /* for sqrt() */ #include #include #include #include "uf_glib.h" #include /*For _(String) definition - NKBJ*/ #include #include "dcraw_api.h" #include "dcraw.h" #define FORC(cnt) for (c=0; c < cnt; c++) #define FORC3 FORC(3) #define FORC4 FORC(4) #define FORCC FORC(colors) extern "C" { int fcol_INDI(const unsigned filters, const int row, const int col); void wavelet_denoise_INDI(gushort(*image)[4], const int black, const int iheight, const int iwidth, const int height, const int width, const int colors, const int shrink, const float pre_mul[4], const float threshold, const unsigned filters); void scale_colors_INDI(const int maximum, const int black, const int use_camera_wb, const float cam_mul[4], const int colors, float pre_mul[4], const unsigned filters, /*const*/ gushort white[8][8], const char *ifname_display, void *dcraw); void lin_interpolate_INDI(gushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, void *dcraw); void vng_interpolate_INDI(gushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, const int rgb_max, void *dcraw); void ahd_interpolate_INDI(gushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, float rgb_cam[3][4], void *dcraw); void color_smooth(gushort(*image)[4], const int width, const int height, const int passes); void ppg_interpolate_INDI(gushort(*image)[4], const unsigned filters, const int width, const int height, const int colors, void *dcraw); void flip_image_INDI(gushort(*image)[4], int *height_p, int *width_p, const int flip); void fuji_rotate_INDI(gushort(**image_p)[4], int *height_p, int *width_p, int *fuji_width_p, const int colors, const double step, void *dcraw); int dcraw_open(dcraw_data *h, char *filename) { DCRaw *d = new DCRaw; int c, i; #ifndef LOCALTIME putenv(const_cast("TZ=UTC")); #endif g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; d->verbose = 1; d->ifname = g_strdup(filename); d->ifname_display = g_filename_display_name(d->ifname); if (setjmp(d->failure)) { d->dcraw_message(DCRAW_ERROR, _("Fatal internal error\n")); h->message = d->messageBuffer; delete d; return DCRAW_ERROR; } if (!(d->ifp = g_fopen(d->ifname, "rb"))) { gchar *err_u8 = g_locale_to_utf8(strerror(errno), -1, NULL, NULL, NULL); d->dcraw_message(DCRAW_OPEN_ERROR, _("Cannot open file %s: %s\n"), d->ifname_display, err_u8); g_free(err_u8); h->message = d->messageBuffer; delete d; return DCRAW_OPEN_ERROR; } d->identify(); #ifndef UFRAW_X_TRANS if (d->filters == 2) d->is_raw = 0; #endif /* We first check if dcraw recognizes the file, this is equivalent * to 'dcraw -i' succeeding */ if (!d->make[0]) { d->dcraw_message(DCRAW_OPEN_ERROR, _("%s: unsupported file format.\n"), d->ifname_display); fclose(d->ifp); h->message = d->messageBuffer; int lastStatus = d->lastStatus; delete d; return lastStatus; } /* Next we check if dcraw can decode the file */ if (!d->is_raw) { d->dcraw_message(DCRAW_OPEN_ERROR, _("Cannot decode file %s\n"), d->ifname_display); fclose(d->ifp); h->message = d->messageBuffer; int lastStatus = d->lastStatus; delete d; return lastStatus; } if (d->load_raw == &DCRaw::kodak_ycbcr_load_raw) { d->height += d->height & 1; d->width += d->width & 1; } /* Pass class variables to the handler on two conditions: * 1. They are needed at this stage. * 2. They where set in identify() and won't change in load_raw() */ h->dcraw = d; h->ifp = d->ifp; h->height = d->height; h->width = d->width; h->fuji_width = d->fuji_width; h->fuji_step = sqrt(0.5); h->colors = d->colors; h->filters = d->filters; h->raw_color = d->raw_color; memcpy(h->cam_mul, d->cam_mul, sizeof d->cam_mul); // maximum and black might change during load_raw. We need them for the // camera-wb. If they'll change we will recalculate the camera-wb. h->rgbMax = d->maximum; i = d->cblack[3]; FORC3 if ((unsigned)i > d->cblack[c]) i = d->cblack[c]; FORC4 d->cblack[c] -= i; d->black += i; h->black = d->black; h->shrink = d->shrink = (h->filters != 0); h->pixel_aspect = d->pixel_aspect; /* copied from dcraw's main() */ switch ((d->flip + 3600) % 360) { case 270: d->flip = 5; break; case 180: d->flip = 3; break; case 90: d->flip = 6; } h->flip = d->flip; h->toneCurveSize = d->tone_curve_size; h->toneCurveOffset = d->tone_curve_offset; h->toneModeOffset = d->tone_mode_offset; h->toneModeSize = d->tone_mode_size; g_strlcpy(h->make, d->make, 80); g_strlcpy(h->model, d->model, 80); h->iso_speed = d->iso_speed; h->shutter = d->shutter; h->aperture = d->aperture; h->focal_len = d->focal_len; h->timestamp = d->timestamp; h->raw.image = NULL; h->thumbType = unknown_thumb_type; h->message = d->messageBuffer; return d->lastStatus; } void dcraw_image_dimensions(dcraw_data *raw, int flip, int shrink, int *height, int *width) { // Effect of dcraw_finilize_shrink() *width = raw->width / shrink; *height = raw->height / shrink; // Effect of fuji_rotate_INDI() */ if (raw->fuji_width) { int fuji_width = raw->fuji_width / shrink - 1; *width = fuji_width / raw->fuji_step; *height = (*height - fuji_width) / raw->fuji_step; } // Effect of dcraw_image_stretch() if (raw->pixel_aspect < 1) *height = *height / raw->pixel_aspect + 0.5; if (raw->pixel_aspect > 1) *width = *width * raw->pixel_aspect + 0.5; // Effect of dcraw_flip_image() if (flip & 4) { int tmp = *height; *height = *width; *width = tmp; } } int dcraw_load_raw(dcraw_data *h) { DCRaw *d = (DCRaw *)h->dcraw; int c, i, j; double dmin; g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; d->raw_image = 0; if (setjmp(d->failure)) { d->dcraw_message(DCRAW_ERROR, _("Fatal internal error\n")); h->message = d->messageBuffer; delete d; return DCRAW_ERROR; } h->raw.height = d->iheight = (h->height + h->shrink) >> h->shrink; h->raw.width = d->iwidth = (h->width + h->shrink) >> h->shrink; /* copied from the end of dcraw's identify() */ if (d->filters && d->colors == 3) { d->filters |= ((d->filters >> 2 & 0x22222222) | (d->filters << 2 & 0x88888888)) & d->filters << 1; } h->raw.colors = d->colors; h->fourColorFilters = d->filters; if (d->filters || d->colors == 1) { d->raw_image = (ushort *) g_malloc((d->raw_height + 7) * d->raw_width * 2); } else { h->raw.image = d->image = g_new0(dcraw_image_type, d->iheight * d->iwidth + d->meta_length); d->meta_data = (char *)(d->image + d->iheight * d->iwidth); } d->dcraw_message(DCRAW_VERBOSE, _("Loading %s %s image from %s ...\n"), d->make, d->model, d->ifname_display); fseek(d->ifp, 0, SEEK_END); d->ifpSize = ftell(d->ifp); fseek(d->ifp, d->data_offset, SEEK_SET); (d->*d->load_raw)(); h->raw.height = d->iheight = (h->height + h->shrink) >> h->shrink; h->raw.width = d->iwidth = (h->width + h->shrink) >> h->shrink; if (d->raw_image) { h->raw.image = d->image = g_new0(dcraw_image_type, d->iheight * d->iwidth + d->meta_length); d->meta_data = (char *)(d->image + d->iheight * d->iwidth); d->crop_masked_pixels(); g_free(d->raw_image); } if (!--d->data_error) d->lastStatus = DCRAW_ERROR; if (d->zero_is_bad) d->remove_zeroes(); d->bad_pixels(NULL); if (d->is_foveon) { if (d->load_raw == &DCRaw::foveon_dp_load_raw) { for (i = 0; i < d->height * d->width * 4; i++) if ((short) d->image[0][i] < 0) d->image[0][i] = 0; } else d->foveon_interpolate(); h->raw.width = h->width = d->width; h->raw.height = h->height = d->height; } fclose(d->ifp); h->ifp = NULL; // TODO: Go over the following settings to see if they change during // load_raw. If they change, document where. If not, move to dcraw_open(). h->rgbMax = d->maximum; i = d->cblack[3]; FORC3 if ((unsigned)i > d->cblack[c]) i = d->cblack[c]; FORC4 d->cblack[c] -= i; d->black += i; h->black = d->black; d->dcraw_message(DCRAW_VERBOSE, _("Black: %d, Maximum: %d\n"), d->black, d->maximum); dmin = DBL_MAX; for (i = 0; i < h->colors; i++) if (dmin > d->pre_mul[i]) dmin = d->pre_mul[i]; for (i = 0; i < h->colors; i++) h->pre_mul[i] = d->pre_mul[i] / dmin; if (h->colors == 3) h->pre_mul[3] = 0; memcpy(h->rgb_cam, d->rgb_cam, sizeof d->rgb_cam); double rgb_cam_transpose[4][3]; for (i = 0; i < 4; i++) for (j = 0; j < 3; j++) rgb_cam_transpose[i][j] = d->rgb_cam[j][i]; d->pseudoinverse(rgb_cam_transpose, h->cam_rgb, d->colors); h->message = d->messageBuffer; return d->lastStatus; } int dcraw_load_thumb(dcraw_data *h, dcraw_image_data *thumb) { DCRaw *d = (DCRaw *)h->dcraw; g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; thumb->height = d->thumb_height; thumb->width = d->thumb_width; h->thumbOffset = d->thumb_offset; h->thumbBufferLength = d->thumb_length; if (d->thumb_offset == 0) { dcraw_message(d, DCRAW_ERROR, _("%s has no thumbnail."), d->ifname_display); } else if (d->thumb_load_raw != NULL) { dcraw_message(d, DCRAW_ERROR, _("Unsupported thumb format (load_raw) for %s"), d->ifname_display); } else if (d->write_thumb == &DCRaw::jpeg_thumb) { h->thumbType = jpeg_thumb_type; } else if (d->write_thumb == &DCRaw::ppm_thumb) { h->thumbType = ppm_thumb_type; // Copied from dcraw's ppm_thumb() h->thumbBufferLength = thumb->width * thumb->height * 3; } else { dcraw_message(d, DCRAW_ERROR, _("Unsupported thumb format for %s"), d->ifname_display); } h->message = d->messageBuffer; return d->lastStatus; } /* Grab a pixel from the raw data, doing dark frame removal on the fly. * * The most obvious algorithm for dark frame removal is to simply * subtract the dark frame from the image (rounding negative values to * zero). However, this leaves holes in the resulting image that need * to be interpolated from the surrounding pixels. * * The processing works by subtracting the dark frame as usual for most * pixels. For all pixels where the dark frame is brighter than a given * threshold, the result is instead calculated as the average of the * dark-adjusted values of the 4 surrounding pixels. By this method, * only hot pixels (as determined by the threshold) are examined and * recalculated. */ static int get_dark_pixel(const dcraw_data *h, const dcraw_data *dark, int i, int cl) { return MAX(h->raw.image[i][cl] - dark->raw.image[i][cl], 0); } static int get_pixel(const dcraw_data *h, const dcraw_data *dark, int i, int cl, int pixels) { int pixel = h->raw.image[i][cl]; if (dark != 0) { int w = h->raw.width; pixel = (dark->raw.image[i][cl] <= dark->thresholds[cl]) ? MAX(pixel - dark->raw.image[i][cl], 0) : (get_dark_pixel(h, dark, i + ((i >= 1) ? -1 : 1), cl) + get_dark_pixel(h, dark, i + ((i < pixels - 1) ? 1 : -1), cl) + get_dark_pixel(h, dark, i + ((i >= w) ? -w : w), cl) + get_dark_pixel(h, dark, i + ((i < pixels - w) ? w : -w), cl)) / 4; } return pixel; } /* * fcol_INDI() optimizing wrapper. * fcol_sequence() cooks up the filter color sequence for a row knowing that * it doesn't have to store more than 16 values. The result can be indexed * by the column using fcol_color() and that part must of course be inlined * for maximum performance. The inner loop for image processing should * always try to index the column and not the row in order to reduce the * data cache footprint. */ static unsigned fcol_sequence(int filters, int row) { unsigned sequence = 0; int c; for (c = 15; c >= 0; --c) sequence = (sequence << 2) | fcol_INDI(filters, row, c); return sequence; } /* * Note: smart compilers will inline anyway in most cases: the "inline" * below is a comment reminding not to make it an external function. */ static inline int fcol_color(unsigned sequence, int col) { return (sequence >> ((col << 1) & 0x1f)) & 3; } static inline void shrink_accumulate_row(unsigned *sum, int size, dcraw_image_type *base, int scale, int color) { int i, j; unsigned v; for (i = 0; i < size; ++i) { v = 0; for (j = 0; j < scale; ++j) v += base[i * scale + j][color]; sum[i] += v; } } static inline void shrink_row(dcraw_image_type *obase, int osize, dcraw_image_type *ibase, int isize, int colors, int scale) { unsigned *sum; dcraw_image_type *iptr; int cl, i; sum = (unsigned*) g_malloc(osize * sizeof(unsigned)); for (cl = 0; cl < colors; ++cl) { memset(sum, 0, osize * sizeof(unsigned)); iptr = ibase; for (i = 0; i < scale; ++i) { shrink_accumulate_row(sum, osize, iptr, scale, cl); iptr += isize; } for (i = 0; i < osize; ++i) obase[i][cl] = sum[i] / (scale * scale); } g_free(sum); } static inline void shrink_pixel(dcraw_image_type pixp, int row, int col, dcraw_data *hh, unsigned *fseq, int scale) { unsigned sum[4], count[4]; int ri, ci, cl; dcraw_image_type *ibase; memset(sum, 0, 4 * sizeof(unsigned)); memset(count, 0, 4 * sizeof(unsigned)); for (ri = 0; ri < scale; ++ri) { ibase = hh->raw.image + ((row * scale + ri) / 2) * hh->raw.width; for (ci = 0; ci < scale; ++ci) { cl = fcol_color(fseq[ri], col * scale + ci); sum[cl] += ibase[(col * scale + ci) / 2][cl]; ++count[cl]; } } for (cl = 0; cl < hh->raw.colors; ++cl) pixp[cl] = sum[cl] / count[cl]; } int dcraw_finalize_shrink(dcraw_image_data *f, dcraw_data *hh, int scale) { DCRaw *d = (DCRaw *)hh->dcraw; int h, w, fujiWidth, r, c, ri, recombine, f4; dcraw_image_type *ibase, *obase; unsigned *fseq; unsigned short *pixp; g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; recombine = (hh->colors == 3 && hh->raw.colors == 4); /* the last row/column will be skipped if input is incomplete */ f->height = h = hh->height / scale; f->width = w = hh->width / scale; f->colors = hh->colors; /* hh->raw.image is shrunk in half if there are filters. * If scale is odd we need to "unshrink" it using the info in * hh->fourColorFilters before scaling it. */ if (hh->filters != 0 && scale % 2 == 1) { fujiWidth = hh->fuji_width / scale; f->image = (dcraw_image_type *) g_realloc(f->image, h * w * sizeof(dcraw_image_type)); f4 = hh->fourColorFilters; #ifdef _OPENMP #pragma omp parallel for schedule(static) private(r,ri,fseq,c,pixp) #endif for (r = 0; r < h; ++r) { fseq = (unsigned*) g_malloc(scale * sizeof(unsigned)); for (ri = 0; ri < scale; ++ri) fseq[ri] = fcol_sequence(f4, r + ri); for (c = 0; c < w; ++c) { pixp = f->image[r * w + c]; shrink_pixel(pixp, r, c, hh, fseq, scale); if (recombine) pixp[1] = (pixp[1] + pixp[3]) / 2; } g_free(fseq); } } else { if (hh->filters != 0) scale /= 2; fujiWidth = ((hh->fuji_width + hh->shrink) >> hh->shrink) / scale; f->image = (dcraw_image_type *)g_realloc( f->image, h * w * sizeof(dcraw_image_type)); #ifdef _OPENMP #pragma omp parallel for schedule(static) private(r,ibase,obase,c) #endif for (r = 0; r < h; ++r) { ibase = hh->raw.image + r * hh->raw.width * scale; obase = f->image + r * w; if (scale == 1) memcpy(obase, ibase, sizeof(dcraw_image_type) * w); else shrink_row(obase, w, ibase, hh->raw.width, hh->raw.colors, scale); if (recombine) { for (c = 0; c < w; c++) obase[c][1] = (obase[c][1] + obase[c][3]) / 2; } } } fuji_rotate_INDI(&f->image, &f->height, &f->width, &fujiWidth, f->colors, hh->fuji_step, d); hh->message = d->messageBuffer; return d->lastStatus; } int dcraw_image_resize(dcraw_image_data *image, int size) { int h, w, wid, r, ri, rii, c, ci, cii, cl, norm; guint64 riw, riiw, ciw, ciiw; guint64(*iBuf)[4]; int mul = size, div = MAX(image->height, image->width); if (mul > div) return DCRAW_ERROR; if (mul == div) return DCRAW_SUCCESS; /* I'm skiping the last row/column if it is not a full row/column */ h = image->height * mul / div; w = image->width * mul / div; wid = image->width; iBuf = (guint64(*)[4])g_new0(guint64, h * w * 4); norm = div * div; for (r = 0; r < image->height; r++) { /* r should be divided between ri and rii */ ri = r * mul / div; rii = (r + 1) * mul / div; /* with weights riw and riiw (riw+riiw==mul) */ riw = rii * div - r * mul; riiw = (r + 1) * mul - rii * div; if (rii >= h) { rii = h - 1; riiw = 0; } if (ri >= h) { ri = h - 1; riw = 0; } for (c = 0; c < image->width; c++) { ci = c * mul / div; cii = (c + 1) * mul / div; ciw = cii * div - c * mul; ciiw = (c + 1) * mul - cii * div; if (cii >= w) { cii = w - 1; ciiw = 0; } if (ci >= w) { ci = w - 1; ciw = 0; } for (cl = 0; cl < image->colors; cl++) { iBuf[ri * w + ci ][cl] += image->image[r * wid + c][cl] * riw * ciw ; iBuf[ri * w + cii][cl] += image->image[r * wid + c][cl] * riw * ciiw; iBuf[rii * w + ci ][cl] += image->image[r * wid + c][cl] * riiw * ciw ; iBuf[rii * w + cii][cl] += image->image[r * wid + c][cl] * riiw * ciiw; } } } for (c = 0; c < h * w; c++) for (cl = 0; cl < image->colors; cl++) image->image[c][cl] = iBuf[c][cl] / norm; g_free(iBuf); image->height = h; image->width = w; return DCRAW_SUCCESS; } /* Adapted from dcraw.c stretch() - NKBJ */ int dcraw_image_stretch(dcraw_image_data *image, double pixel_aspect) { int newdim, row, col, c, colors = image->colors; double rc, frac; ushort *pix0, *pix1; dcraw_image_type *iBuf; if (pixel_aspect == 1) return DCRAW_SUCCESS; if (pixel_aspect < 1) { newdim = (int)(image->height / pixel_aspect + 0.5); iBuf = g_new(dcraw_image_type, image->width * newdim); for (rc = row = 0; row < newdim; row++, rc += pixel_aspect) { frac = rc - (c = (int)rc); pix0 = pix1 = image->image[c * image->width]; if (c + 1 < image->height) pix1 += image->width * 4; for (col = 0; col < image->width; col++, pix0 += 4, pix1 += 4) FORCC iBuf[row * image->width + col][c] = (guint16)(pix0[c] * (1 - frac) + pix1[c] * frac + 0.5); } image->height = newdim; } else { newdim = (int)(image->width * pixel_aspect + 0.5); iBuf = g_new(dcraw_image_type, image->height * newdim); for (rc = col = 0; col < newdim; col++, rc += 1 / pixel_aspect) { frac = rc - (c = (int)rc); pix0 = pix1 = image->image[c]; if (c + 1 < image->width) pix1 += 4; for (row = 0; row < image->height; row++, pix0 += image->width * 4, pix1 += image->width * 4) FORCC iBuf[row * newdim + col][c] = (guint16)(pix0[c] * (1 - frac) + pix1[c] * frac + 0.5); } image->width = newdim; } g_free(image->image); image->image = iBuf; return DCRAW_SUCCESS; } int dcraw_flip_image(dcraw_image_data *image, int flip) { if (flip) flip_image_INDI(image->image, &image->height, &image->width, flip); return DCRAW_SUCCESS; } int dcraw_set_color_scale(dcraw_data *h, int useCameraWB) { DCRaw *d = (DCRaw *)h->dcraw; g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; memcpy(h->post_mul, h->pre_mul, sizeof h->post_mul); if (d->is_foveon) { // foveon_interpolate() applies the camera-wb already. for (int c = 0; c < 4; c++) h->post_mul[c] = 1.0; } else { scale_colors_INDI(h->rgbMax, h->black, useCameraWB, h->cam_mul, h->colors, h->post_mul, h->filters, d->white, d->ifname_display, d); } h->message = d->messageBuffer; return d->lastStatus; } void dcraw_wavelet_denoise(dcraw_data *h, float threshold) { if (threshold) wavelet_denoise_INDI(h->raw.image, h->black, h->raw.height, h->raw.width, h->height, h->width, h->colors, h->shrink, h->post_mul, threshold, h->fourColorFilters); } void dcraw_wavelet_denoise_shrinked(dcraw_image_data *f, float threshold) { if (threshold) wavelet_denoise_INDI(f->image, 0, f->height, f->width, 0, 0, 4, 0, NULL, threshold, 0); } /* * Do black level adjustment, dark frame subtraction and white balance * (plus normalization to use the full 16 bit pixel value range) in one * pass. * * TODO: recode and optimize dark frame path */ void dcraw_finalize_raw(dcraw_data *h, dcraw_data *dark, int rgbWB[4]) { const int pixels = h->raw.width * h->raw.height; const unsigned black = dark ? MAX(h->black - dark->black, 0) : h->black; if (h->colors == 3) rgbWB[3] = rgbWB[1]; if (dark) { #ifdef _OPENMP #pragma omp parallel for schedule(static) default(none) \ shared(h,dark,rgbWB) #endif for (int i = 0; i < pixels; i++) { int cc; for (cc = 0; cc < 4; cc++) { gint32 p = (gint64)(get_pixel(h, dark, i, cc, pixels) - black) * rgbWB[cc] / 0x10000; h->raw.image[i][cc] = MIN(MAX(p, 0), 0xFFFF); } } } else { #ifdef _OPENMP #pragma omp parallel for schedule(static) default(none) \ shared(h,dark,rgbWB) #endif for (int i = 0; i < pixels; i++) { int cc; for (cc = 0; cc < 4; cc++) h->raw.image[i][cc] = MIN(MAX( ((gint64)h->raw.image[i][cc] - black) * rgbWB[cc] / 0x10000, 0), 0xFFFF); } } } int dcraw_finalize_interpolate(dcraw_image_data *f, dcraw_data *h, int interpolation, int smoothing) { DCRaw *d = (DCRaw *)h->dcraw; int fujiWidth, i, r, c, cl; unsigned ff, f4; g_free(d->messageBuffer); d->messageBuffer = NULL; d->lastStatus = DCRAW_SUCCESS; f->width = h->width; f->height = h->height; fujiWidth = h->fuji_width; f->colors = h->colors; f->image = (dcraw_image_type *) g_realloc(f->image, f->height * f->width * sizeof(dcraw_image_type)); memset(f->image, 0, f->height * f->width * sizeof(dcraw_image_type)); if (h->filters == 0) return DCRAW_ERROR; cl = h->colors; if (interpolation == dcraw_four_color_interpolation || h->colors == 4) { ff = h->fourColorFilters; cl = 4; interpolation = dcraw_vng_interpolation; } else { ff = h->filters &= ~((h->filters & 0x55555555) << 1); } /* It might be better to report an error here: */ /* (dcraw also forbids AHD for Fuji rotated images) */ if (interpolation == dcraw_ahd_interpolation && (h->colors > 3 || h->filters < 1000)) interpolation = dcraw_vng_interpolation; if (interpolation == dcraw_ppg_interpolation && (h->colors > 3 || h->filters < 1000)) interpolation = dcraw_vng_interpolation; f4 = h->fourColorFilters; for (r = 0; r < h->height; r++) for (c = 0; c < h->width; c++) { int cc = fcol_INDI(f4, r, c); f->image[r * f->width + c][fcol_INDI(ff, r, c)] = h->raw.image[r / 2 * h->raw.width + c / 2][cc]; } int smoothPasses = 1; if (interpolation == dcraw_bilinear_interpolation) lin_interpolate_INDI(f->image, ff, f->width, f->height, cl, d); #ifdef ENABLE_INTERP_NONE else if (interpolation == dcraw_none_interpolation) smoothing = 0; #endif else if (interpolation == dcraw_vng_interpolation) vng_interpolate_INDI(f->image, ff, f->width, f->height, cl, 0xFFFF, d); else if (interpolation == dcraw_ahd_interpolation) { ahd_interpolate_INDI(f->image, ff, f->width, f->height, cl, h->rgb_cam, d); smoothPasses = 3; } else if (interpolation == dcraw_ppg_interpolation) ppg_interpolate_INDI(f->image, ff, f->width, f->height, cl, d); if (smoothing) color_smooth(f->image, f->width, f->height, smoothPasses); if (cl == 4 && h->colors == 3) { for (i = 0; i < f->height * f->width; i++) f->image[i][1] = (f->image[i][1] + f->image[i][3]) / 2; } fuji_rotate_INDI(&f->image, &f->height, &f->width, &fujiWidth, f->colors, h->fuji_step, d); h->message = d->messageBuffer; return d->lastStatus; } void dcraw_close(dcraw_data *h) { DCRaw *d = (DCRaw *)h->dcraw; g_free(h->raw.image); delete d; } char *ufraw_message(int code, char *message, ...); void DCRaw::dcraw_message(int code, const char *format, ...) { char *buf, *message; va_list ap; va_start(ap, format); message = g_strdup_vprintf(format, ap); va_end(ap); #ifdef DEBUG fprintf(stderr, message); #endif if (code == DCRAW_VERBOSE) ufraw_message(code, message); else { if (messageBuffer == NULL) messageBuffer = g_strdup(message); else { buf = g_strconcat(messageBuffer, message, NULL); g_free(messageBuffer); messageBuffer = buf; } lastStatus = code; } g_free(message); } void dcraw_message(void *dcraw, int code, char *format, ...) { char *message; DCRaw *d = (DCRaw *)dcraw; va_list ap; va_start(ap, format); message = g_strdup_vprintf(format, ap); d->dcraw_message(code, message); va_end(ap); g_free(message); } } /*extern "C"*/ ufraw-0.19.2/ufraw_settings.cc0000664000175000017500000003537112115264507013241 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_settings.cc - define all UFObject settings. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ufraw.h" #include "dcraw_api.h" #include #include #include namespace UFRaw { // Shortcut for UFString definitions #define UF_STRING(Class, Name, String, ...) \ extern "C" { UFName Name = String; } \ class Class : public UFString { \ public: \ Class() : UFString(Name, __VA_ARGS__) { } \ } // We could have also used a template: /* template class UF_STRING : public UFString { public: UF_STRING() : UFString(name) { } }; typedef UF_STRING UFCameraMake; */ // Shortcut for UFNumber definitions #define UF_NUMBER(Class, Name, String, ...) \ extern "C" { UFName Name = String; } \ class Class : public UFNumber { \ public: \ Class() : UFNumber(Name, __VA_ARGS__) { } \ } // ufRawImage is short for 'raw image processing parameters'. extern "C" { UFName ufRawImage = "Image"; } // Common class for Image and CommandLineImage class ImageCommon : public UFGroup { private: public: // uf should be private ufraw_data *uf; ImageCommon() : UFGroup(ufRawImage), uf(NULL) { } }; class Image : public ImageCommon { private: public: explicit Image(UFObject *root = NULL); void SetUFRawData(ufraw_data *data); static ufraw_data *UFRawData(UFObject *object) { if (object->Name() == ufRawImage) return dynamic_cast(object)->uf; if (!object->HasParent()) return NULL; return Image::UFRawData(&object->Parent()); } void SetWB(const char *mode = NULL); void Message(const char *Format, ...) const { if (Format == NULL) return; va_list ap; va_start(ap, Format); char *message = g_strdup_vprintf(Format, ap); va_end(ap); ufraw_message(UFRAW_ERROR, "%s: %s\n", Name(), message); g_free(message); } }; static Image &ParentImage(UFObject *obj) { return static_cast(obj->Parent()); } //UF_STRING(CameraMake, ufCameraMake, "Make", ""); extern "C" { UFName ufWB = "WB"; } extern "C" { UFName ufPreset = "Preset"; } class WB : public UFArray { public: WB() : UFArray(ufWB, uf_camera_wb) { } void Event(UFEventType type) { // spot_wb is a temporary value, that would be changed in SetWB() if (!this->IsEqual(uf_spot_wb)) UFObject::Event(type); } void OriginalValueChangedEvent() { /* Keep compatibility with old numbers from ufraw-0.6 */ int i; if (strlen(StringValue()) <= 2 && sscanf(StringValue(), "%d", &i) == 1) { switch (i) { case -1: Set(uf_spot_wb); break; case 0: Set(uf_manual_wb); break; case 1: Set(uf_camera_wb); break; case 2: Set(uf_auto_wb); break; case 3: Set("Incandescent"); break; case 4: Set("Fluorescent"); break; case 5: Set("Direct sunlight"); break; case 6: Set("Flash"); break; case 7: Set("Cloudy"); break; case 8: Set("Shade"); break; default: Set(""); } } if (HasParent()) ParentImage(this).SetWB(); } // Use the original XML format instead of UFArray's format. // Output XML block even if IsDefault(). std::string XML(const char *indent) const { char *value = g_markup_escape_text(StringValue(), -1); std::string str = (std::string)indent + "<" + Name() + ">" + value + "\n"; g_free(value); return str; } }; extern "C" { UFName ufWBFineTuning = "WBFineTuning"; } class WBFineTuning : public UFNumber { public: WBFineTuning() : UFNumber(ufWBFineTuning, -9, 9, 0, 0, 1, 1) { } void OriginalValueChangedEvent() { if (!HasParent()) return; UFArray &wb = ParentImage(this)[ufWB]; if (wb.IsEqual(uf_auto_wb) || wb.IsEqual(uf_camera_wb)) /* Prevent recalculation of Camera/Auto WB on WBTuning events */ Set(0.0); else ParentImage(this).SetWB(); } // Output XML block even if IsDefault(). std::string XML(const char *indent) const { char *value = g_markup_escape_text(StringValue(), -1); std::string str = (std::string)indent + "<" + Name() + ">" + value + "\n"; g_free(value); return str; } }; extern "C" { UFName ufTemperature = "Temperature"; } class Temperature : public UFNumber { public: Temperature() : UFNumber(ufTemperature, 2000, 23000, 6500, 0, 50, 200) { } void OriginalValueChangedEvent() { if (HasParent()) ParentImage(this).SetWB(uf_manual_wb); } }; extern "C" { UFName ufGreen = "Green"; } class Green : public UFNumber { public: Green() : UFNumber(ufGreen, 0.2, 2.5, 1.0, 3, 0.01, 0.05) { }; void OriginalValueChangedEvent() { if (HasParent()) ParentImage(this).SetWB(uf_manual_wb); } }; extern "C" { UFName ufChannelMultipliers = "ChannelMultipliers"; } class ChannelMultipliers : public UFNumberArray { public: ChannelMultipliers() : UFNumberArray(ufChannelMultipliers, 4, 0.010, 99.000, 1.0, 3, 0.001, 0.001) { }; void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); if (!HasParent()) return UFObject::Event(type); ufraw_data *uf = Image::UFRawData(this); if (uf == NULL) return UFObject::Event(type); /* Normalize chanMul so that min(chanMul) will be 1.0 */ double min = Maximum(); for (int c = 0; c < uf->colors; c++) if (DoubleValue(c) < min) min = DoubleValue(c); assert(min > 0.0); double chanMulArray[4] = { 1.0, 1.0, 1.0, 1.0 }; for (int c = 0; c < uf->colors; c++) chanMulArray[c] = DoubleValue(c) / min; Set(chanMulArray); if (uf->conf->autoExposure == enabled_state) uf->conf->autoExposure = apply_state; if (uf->conf->autoBlack == enabled_state) uf->conf->autoBlack = apply_state; UFObject::Event(type); } void OriginalValueChangedEvent() { if (HasParent()) ParentImage(this).SetWB(uf_spot_wb); } // Output XML block even if IsDefault(). std::string XML(const char *indent) const { std::string str = ""; char num[10]; for (int i = 0; i < Size(); i++) { g_snprintf(num, 10, "%.4lf", DoubleValue(i)); str += num; if (i < Size() - 1) str += " "; } char *value = g_markup_escape_text(str.c_str(), -1); str = (std::string)indent + "<" + Name() + ">" + value + "\n"; g_free(value); return str; } }; extern "C" { UFName ufLensfunAuto = "LensfunAuto"; } class LensfunAuto : public UFString { public: LensfunAuto() : UFString(ufLensfunAuto, "yes") { } void OriginalValueChangedEvent() { if (!HasParent()) return; if (IsEqual("auto")) { Set("yes"); return; } if (IsEqual("none")) { Set("no"); return; } if (!IsEqual("yes") && !IsEqual("no")) Throw("Invalid value '%s'", StringValue()); #ifdef HAVE_LENSFUN if (!Parent().Has(ufLensfun)) return; if (IsEqual("yes")) ufraw_lensfun_init(&Parent()[ufLensfun], TRUE); #endif } }; Image::Image(UFObject *root) : ImageCommon() { *this << new WB << new WBFineTuning << new Temperature << new Green << new ChannelMultipliers ; #ifdef HAVE_LENSFUN *this << new LensfunAuto; if (root == NULL || root->Name() != ufRawResources) *this << ufraw_lensfun_new(); // Lensfun data is not saved to .ufrawrc #else (void)root; #endif } void Image::SetWB(const char *mode) { UFArray &wb = (*this)[ufWB]; if (wb.IsEqual(uf_manual_wb) || wb.IsEqual(uf_camera_wb) || wb.IsEqual(uf_auto_wb) || wb.IsEqual(uf_spot_wb)) { if (!Has(ufWBFineTuning)) *this << new WBFineTuning; UFNumber &wbTuning = (*this)[ufWBFineTuning]; wbTuning.Set(0.0); } // While loading rc/cmd/conf data we do not want to alter the raw data. if (uf == NULL) return; if (uf->rgbMax == 0) { // Raw file was not loaded yet. if (!wb.IsEqual(uf_manual_wb)) uf->WBDirty = true; // ChannelMultipliers should be calculated later return; } if (mode != NULL) wb.Set(mode); ufraw_set_wb(uf); if (wb.IsEqual(uf_spot_wb)) wb.Set(uf_manual_wb); } void Image::SetUFRawData(ufraw_data *data) { uf = data; if (uf == NULL) return; dcraw_data *raw = static_cast(uf->raw); if (strcmp(uf->conf->make, raw->make) != 0 || strcmp(uf->conf->model, raw->model) != 0) uf->WBDirty = TRUE; // Re-calculate channel multipliers. if (uf->LoadingID) uf->WBDirty = TRUE; // Re-calculate channel multipliers. g_strlcpy(uf->conf->make, raw->make, max_name); g_strlcpy(uf->conf->model, raw->model, max_name); if (!uf->LoadingID) uf->WBDirty = TRUE; // Re-calculate channel multipliers. const wb_data *lastPreset = NULL; uf->wb_presets_make_model_match = FALSE; char model[max_name]; if (strcmp(uf->conf->make, "MINOLTA") == 0 && (strncmp(uf->conf->model, "ALPHA", 5) == 0 || strncmp(uf->conf->model, "MAXXUM", 6) == 0)) { /* Canonize Minolta model names (copied from dcraw) */ g_snprintf(model, max_name, "DYNAX %s", uf->conf->model + 6 + (uf->conf->model[0] == 'M')); } else { g_strlcpy(model, uf->conf->model, max_name); } UFArray &wb = (*this)[ufWB]; for (int i = 0; i < wb_preset_count; i++) { if (strcmp(wb_preset[i].make, "") == 0) { /* Common presets */ if (strcmp(wb_preset[i].name, uf_camera_wb) == 0) { // Get the camera's presets. int status = dcraw_set_color_scale(raw, TRUE); // Failure means that dcraw does not support this model. if (status != DCRAW_SUCCESS) { if (wb.IsEqual(uf_camera_wb)) { ufraw_message(UFRAW_SET_LOG, _("Cannot use camera white balance, " "reverting to auto white balance.\n")); wb.Set(uf_auto_wb); } continue; } } wb << new UFString(ufPreset, wb_preset[i].name); } else if (strcmp(wb_preset[i].make, uf->conf->make) == 0 && strcmp(wb_preset[i].model, model) == 0) { /* Camera specific presets */ uf->wb_presets_make_model_match = TRUE; if (lastPreset == NULL || strcmp(wb_preset[i].name, lastPreset->name) != 0) { wb << new UFString(ufPreset, wb_preset[i].name); } lastPreset = &wb_preset[i]; } } } extern "C" { UFName ufRawResources = "Resources"; } class Resources : public UFGroup { public: Resources(): UFGroup(ufRawResources) { *this << new Image(this); } }; class CommandLineImage : public ImageCommon { public: CommandLineImage(): ImageCommon() { } void Event(UFEventType type) { if (type != uf_element_added) return UFObject::Event(type); if (Has(ufTemperature) || Has(ufGreen)) { if (Has(ufWB)) { UFArray &wb = (*this)[ufWB]; if (!wb.IsEqual(uf_manual_wb) && !wb.IsEqual(uf_camera_wb)) { ufraw_message(UFRAW_WARNING, _("--temperature and --green options override " "the --wb=%s option."), wb.StringValue()); } } else { *this << new WB; } (*this)[ufWB].Set(uf_manual_wb); } else { if (Has(ufWB)) { // We don't have green or temperature so this must be from --wb UFArray &wb = (*this)[ufWB]; if (wb.IsEqual(uf_auto_wb) || wb.IsEqual(uf_camera_wb)) return UFObject::Event(type); if (wb.IsEqual("camera")) wb.Set(uf_camera_wb); else if (wb.IsEqual("auto")) wb.Set(uf_auto_wb); else Throw(_("'%s' is not a valid white balance setting."), wb.StringValue()); } } return UFObject::Event(type); } }; extern "C" { UFName ufCommandLine = "CommandLine"; } class CommandLine : public UFGroup { public: CommandLine(): UFGroup(ufCommandLine) { *this << new CommandLineImage; } void Message(const char *Format, ...) const { if (Format == NULL) return; va_list ap; va_start(ap, Format); char *message = g_strdup_vprintf(Format, ap); va_end(ap); ufraw_message(UFRAW_ERROR, "%s: %s\n", Name(), message); g_free(message); } }; } // namespace UFRaw extern "C" { UFObject *ufraw_image_new() { return new UFRaw::Image; } void ufraw_image_set_data(UFObject *obj, struct ufraw_struct *uf) { dynamic_cast(obj)->SetUFRawData(uf); } struct ufraw_struct *ufraw_image_get_data(UFObject *obj) { return UFRaw::Image::UFRawData(obj); } UFObject *ufraw_resources_new() { return new UFRaw::Resources; } UFObject *ufraw_command_line_new() { return new UFRaw::CommandLine; } } // extern "C" ufraw-0.19.2/config.sub0000755000175000017500000010532712057543462011653 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-04-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ufraw-0.19.2/ufraw_developer.c0000664000175000017500000010215512115264507013216 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_developer.c - functions for developing images or more exactly pixels. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #ifdef _OPENMP #include #endif #include #include static int lcms_message(int ErrorCode, const char *ErrorText) { /* Possible ErrorCode: * LCMS_ERRC_WARNING 0x1000 * LCMS_ERRC_RECOVERABLE 0x2000 * LCMS_ERRC_ABORTED 0x3000 */ (void)ErrorCode; ufraw_message(UFRAW_ERROR, "%s", ErrorText); return 1; /* Tell lcms that we handled the error */ } developer_data *developer_init() { int i; developer_data *d = g_new(developer_data, 1); d->mode = -1; d->gamma = -1; d->linear = -1; d->saturation = -1; #ifdef UFRAW_CONTRAST d->contrast = -1; #endif for (i = 0; i < profile_types; i++) { d->profile[i] = NULL; strcpy(d->profileFile[i], "no such file"); } memset(&d->baseCurveData, 0, sizeof(d->baseCurveData)); d->baseCurveData.m_gamma = -1.0; memset(&d->luminosityCurveData, 0, sizeof(d->luminosityCurveData)); d->luminosityCurveData.m_gamma = -1.0; d->luminosityProfile = NULL; LPGAMMATABLE *TransferFunction = (LPGAMMATABLE *)d->TransferFunction; TransferFunction[0] = cmsAllocGamma(0x100); TransferFunction[1] = TransferFunction[2] = cmsBuildGamma(0x100, 1.0); d->saturationProfile = NULL; d->adjustmentProfile = NULL; d->intent[out_profile] = -1; d->intent[display_profile] = -1; d->updateTransform = TRUE; d->colorTransform = NULL; d->working2displayTransform = NULL; d->rgbtolabTransform = NULL; d->grayscaleMode = -1; d->grayscaleMixer[0] = d->grayscaleMixer[1] = d->grayscaleMixer[2] = -1; for (i = 0; i < max_adjustments; i++) { /* Suppress valgrind error. */ d->lightnessAdjustment[i].adjustment = 0.0; d->lightnessAdjustment[i].hue = 0.0; d->lightnessAdjustment[i].hueWidth = 0.0; } cmsSetErrorHandler(lcms_message); return d; } void developer_destroy(developer_data *d) { int i; if (d == NULL) return; for (i = 0; i < profile_types; i++) if (d->profile[i] != NULL) cmsCloseProfile(d->profile[i]); cmsCloseProfile(d->luminosityProfile); cmsFreeGamma(d->TransferFunction[0]); cmsFreeGamma(d->TransferFunction[1]); cmsCloseProfile(d->saturationProfile); cmsCloseProfile(d->adjustmentProfile); if (d->colorTransform != NULL) cmsDeleteTransform(d->colorTransform); if (d->working2displayTransform != NULL) cmsDeleteTransform(d->working2displayTransform); if (d->rgbtolabTransform != NULL) cmsDeleteTransform(d->rgbtolabTransform); g_free(d); } static const char *embedded_display_profile = "embedded display profile"; /* Update the profile in the developer * and init values in the profile if needed */ void developer_profile(developer_data *d, int type, profile_data *p) { // embedded_display_profile were handled by developer_display_profile() if (strcmp(d->profileFile[type], embedded_display_profile) == 0) return; if (strcmp(p->file, d->profileFile[type])) { g_strlcpy(d->profileFile[type], p->file, max_path); if (d->profile[type] != NULL) cmsCloseProfile(d->profile[type]); if (!strcmp(d->profileFile[type], "")) d->profile[type] = cmsCreate_sRGBProfile(); else { char *filename = uf_win32_locale_filename_from_utf8(d->profileFile[type]); d->profile[type] = cmsOpenProfileFromFile(filename, "r"); uf_win32_locale_filename_free(filename); if (d->profile[type] == NULL) d->profile[type] = cmsCreate_sRGBProfile(); } d->updateTransform = TRUE; } if (d->updateTransform) { if (d->profile[type] != NULL) g_strlcpy(p->productName, cmsTakeProductName(d->profile[type]), max_name); else strcpy(p->productName, ""); } } void developer_display_profile(developer_data *d, unsigned char *profile, int size, char productName[]) { int type = display_profile; if (profile != NULL) { if (d->profile[type] != NULL) cmsCloseProfile(d->profile[type]); d->profile[type] = cmsOpenProfileFromMem(profile, size); // If embedded profile is invalid fall-back to sRGB if (d->profile[type] == NULL) d->profile[type] = cmsCreate_sRGBProfile(); if (strcmp(d->profileFile[type], embedded_display_profile) != 0) { // start using embedded profile g_strlcpy(d->profileFile[type], embedded_display_profile, max_path); d->updateTransform = TRUE; } } else { if (strcmp(d->profileFile[type], embedded_display_profile) == 0) { // embedded profile is no longer used if (d->profile[type] != NULL) cmsCloseProfile(d->profile[type]); d->profile[type] = cmsCreate_sRGBProfile(); strcpy(d->profileFile[type], ""); d->updateTransform = TRUE; } } if (d->updateTransform) { if (d->profile[type] != NULL) g_strlcpy(productName, cmsTakeProductName(d->profile[type]), max_name); else strcpy(productName, ""); } } static double clamp(double in, double min, double max) { return (in < min) ? min : (in > max) ? max : in; } struct contrast_saturation { double contrast; double saturation; }; /* Scale in along a curve from min to max by scale */ static double scale_curve(double in, double min, double max, double scale) { double halfrange = (max - min) / 2.0; /* Normalize in to [ -1, 1 ] */ double value = clamp((in - min) / halfrange - 1.0, -1.0, 1.0); /* Linear scaling makes more visual sense for low contrast values. */ if (scale > 1.0) { double n = fabs(value); if (n > 1.0) n = 1.0; scale = n <= 0.0 ? 0.0 : (1.0 - pow(1.0 - n, scale)) / n; } return clamp((value * scale + 1.0) * halfrange + min, min, max); } static const double max_luminance = 100.0; static const double max_colorfulness = 181.019336; /* sqrt(128*128+128*128) */ static int contrast_saturation_sampler(WORD In[], WORD Out[], LPVOID Cargo) { cmsCIELab Lab; cmsCIELCh LCh; const struct contrast_saturation* cs = Cargo; cmsLabEncoded2Float(&Lab, In); cmsLab2LCh(&LCh, &Lab); LCh.L = scale_curve(LCh.L, 0.0, max_luminance, cs->contrast); LCh.C = scale_curve(LCh.C, -max_colorfulness, max_colorfulness, cs->saturation); cmsLCh2Lab(&Lab, &LCh); cmsFloat2LabEncoded(Out, &Lab); return TRUE; } /* Based on lcms' cmsCreateBCHSWabstractProfile() */ static cmsHPROFILE create_contrast_saturation_profile(double contrast, double saturation) { cmsHPROFILE hICC; LPLUT Lut; struct contrast_saturation cs = { contrast, saturation }; hICC = _cmsCreateProfilePlaceholder(); if (hICC == NULL) return NULL; // can't allocate cmsSetDeviceClass(hICC, icSigAbstractClass); cmsSetColorSpace(hICC, icSigLabData); cmsSetPCS(hICC, icSigLabData); cmsSetRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a LUT with 3D grid only Lut = cmsAllocLUT(); cmsAlloc3DGrid(Lut, 11, 3, 3); if (!cmsSample3DGrid(Lut, contrast_saturation_sampler, &cs , 0)) { // Shouldn't reach here cmsFreeLUT(Lut); cmsCloseProfile(hICC); return NULL; } // Create tags cmsAddTag(hICC, icSigMediaWhitePointTag, (LPVOID) cmsD50_XYZ()); cmsAddTag(hICC, icSigAToB0Tag, (LPVOID) Lut); // LUT is already on virtual profile cmsFreeLUT(Lut); return hICC; } static int luminance_adjustment_sampler(WORD In[], WORD Out[], LPVOID Cargo) { cmsCIELab Lab; cmsCIELCh LCh; const developer_data *d = Cargo; const lightness_adjustment *a; cmsLabEncoded2Float(&Lab, In); cmsLab2LCh(&LCh, &Lab); double adj = 0.0; int i; for (i = 0, a = d->lightnessAdjustment; i < max_adjustments; i++, a++) { double deltaHue = fabs(LCh.h - a->hue); double hueWidth = MAX(a->hueWidth, 360.0 / 33.0); if (deltaHue > 180.0) deltaHue = 360.0 - deltaHue; if (deltaHue > hueWidth) continue; /* This assigns the scales on a nice curve. */ double scale = cos(deltaHue / hueWidth * (M_PI / 2)); adj += (a->adjustment - 1) * (scale * scale); } /* The adjustment is scaled based on the colorfulness of the point, * since uncolored pixels should not be adjusted. However, few * (s)RGB colors have a colorfulness value larger than 1/2 of * max_colorfulness, so use that as an actual maximum colorfulness. */ adj = adj * MIN(LCh.C / (max_colorfulness / 2), 1.0) + 1; LCh.L *= adj; cmsLCh2Lab(&Lab, &LCh); cmsFloat2LabEncoded(Out, &Lab); return TRUE; } /* Based on lcms' cmsCreateBCHSWabstractProfile() */ static cmsHPROFILE create_adjustment_profile(const developer_data *d) { cmsHPROFILE hICC; LPLUT Lut; hICC = _cmsCreateProfilePlaceholder(); if (hICC == NULL) return NULL; // can't allocate cmsSetDeviceClass(hICC, icSigAbstractClass); cmsSetColorSpace(hICC, icSigLabData); cmsSetPCS(hICC, icSigLabData); cmsSetRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a LUT with 3D grid only Lut = cmsAllocLUT(); cmsAlloc3DGrid(Lut, 33, 3, 3); if (!cmsSample3DGrid(Lut, luminance_adjustment_sampler, (void*)d, 0)) { // Shouldn't reach here cmsFreeLUT(Lut); cmsCloseProfile(hICC); return NULL; } // Create tags cmsAddTag(hICC, icSigMediaWhitePointTag, (LPVOID) cmsD50_XYZ()); cmsAddTag(hICC, icSigAToB0Tag, (LPVOID) Lut); // LUT is already on virtual profile cmsFreeLUT(Lut); return hICC; } /* Find a for which (1-exp(-a x)/(1-exp(-a)) has derivative b at x=0 */ /* In other words, solve a/(1-exp(-a))==b */ static double findExpCoeff(double b) { double a, bg; int try; if (b <= 1) return 0; if (b < 2) a = (b - 1) / 2; else a = b; bg = a / (1 - exp(-a)); /* The limit on try is just to be sure there is no infinite loop. */ for (try = 0; abs(bg - b) > 0.001 || try < 100; try++) { a = a + (b - bg); bg = a / (1 - exp(-a)); } return a; } static void developer_create_transform(developer_data *d, DeveloperMode mode) { if (!d->updateTransform) return; d->updateTransform = FALSE; /* Create transformations according to mode: * auto_developer|output_developer: * colorTransformation from in to out * working2displayTransform is null * display_developer: * with softproofing: * colorTransformation from in to out * working2displayTransform from out to display * without softproofing: * colorTransformation from in to display * working2displayTransform is null */ int targetProfile; if (mode == display_developer && d->intent[display_profile] == disable_intent) { targetProfile = display_profile; } else { targetProfile = out_profile; } if (d->colorTransform != NULL) cmsDeleteTransform(d->colorTransform); if (strcmp(d->profileFile[in_profile], "") == 0 && strcmp(d->profileFile[targetProfile], "") == 0 && d->luminosityProfile == NULL && d->adjustmentProfile == NULL && d->saturationProfile == NULL) { /* No transformation at all. */ d->colorTransform = NULL; } else { cmsHPROFILE prof[5]; int i = 0; prof[i++] = d->profile[in_profile]; if (d->luminosityProfile != NULL) prof[i++] = d->luminosityProfile; if (d->adjustmentProfile != NULL) prof[i++] = d->adjustmentProfile; if (d->saturationProfile != NULL) prof[i++] = d->saturationProfile; prof[i++] = d->profile[targetProfile]; d->colorTransform = cmsCreateMultiprofileTransform(prof, i, TYPE_RGB_16, TYPE_RGB_16, d->intent[out_profile], 0); } if (d->working2displayTransform != NULL) cmsDeleteTransform(d->working2displayTransform); if (mode == display_developer && d->intent[display_profile] != disable_intent && strcmp(d->profileFile[out_profile], d->profileFile[display_profile]) != 0) { // TODO: We should use TYPE_RGB_'bit_depth' for working profile. d->working2displayTransform = cmsCreateTransform( d->profile[out_profile], TYPE_RGB_8, d->profile[display_profile], TYPE_RGB_8, d->intent[display_profile], 0); } else { d->working2displayTransform = NULL; } if (d->rgbtolabTransform == NULL) { cmsHPROFILE labProfile = cmsCreateLabProfile(cmsD50_xyY()); d->rgbtolabTransform = cmsCreateTransform(d->profile[in_profile], TYPE_RGB_16, labProfile, TYPE_Lab_16, INTENT_ABSOLUTE_COLORIMETRIC, 0); cmsCloseProfile(labProfile); } } static gboolean test_adjustments(const lightness_adjustment values[max_adjustments], gdouble reference, gdouble threshold) { int i; for (i = 0; i < max_adjustments; ++i) if (fabs(values[i].adjustment - reference) >= threshold) return TRUE; return FALSE; } void developer_prepare(developer_data *d, conf_data *conf, int rgbMax, float rgb_cam[3][4], int colors, int useMatrix, DeveloperMode mode) { unsigned c, i; profile_data *in, *out, *display; CurveData *baseCurve, *curve; double total; if (mode != d->mode) { d->mode = mode; d->updateTransform = TRUE; } in = &conf->profile[in_profile][conf->profileIndex[in_profile]]; /* For auto-tools we create an sRGB output. */ if (mode == auto_developer) out = &conf->profile[out_profile][0]; else out = &conf->profile[out_profile][conf->profileIndex[out_profile]]; display = &conf->profile[display_profile] [conf->profileIndex[display_profile]]; baseCurve = &conf->BaseCurve[conf->BaseCurveIndex]; curve = &conf->curve[conf->curveIndex]; d->rgbMax = rgbMax; d->colors = colors; d->useMatrix = useMatrix; double max = 0; UFObject *chanMul = ufgroup_element(conf->ufobject, ufChannelMultipliers); /* We assume that min(chanMul)==1.0 */ for (c = 0; c < d->colors; c++) max = MAX(max, ufnumber_array_value(chanMul, c)); d->max = 0x10000 / max; /* rgbWB is used in dcraw_finalized_interpolation() before the Bayer * Interpolation. It is normalized to guaranty that values do not * exceed 0xFFFF */ for (c = 0; c < d->colors; c++) d->rgbWB[c] = ufnumber_array_value(chanMul, c) * d->max * 0xFFFF / d->rgbMax; if (d->useMatrix) for (i = 0; i < 3; i++) for (c = 0; c < d->colors; c++) d->colorMatrix[i][c] = rgb_cam[i][c] * 0x10000; switch (conf->grayscaleMode) { case grayscale_mixer: d->grayscaleMode = grayscale_mixer; for (c = 0, total = 0.0; c < 3; ++c) total += fabs(conf->grayscaleMixer[c]); total = total == 0.0 ? 1.0 : total; for (c = 0; c < 3; ++c) d->grayscaleMixer[c] = conf->grayscaleMixer[c] / total; break; case grayscale_lightness: case grayscale_value: d->grayscaleMode = conf->grayscaleMode; break; default: d->grayscaleMode = grayscale_none; } d->restoreDetails = conf->restoreDetails; int clipHighlights = conf->clipHighlights; unsigned exposure = pow(2, conf->exposure) * 0x10000; /* Handle the exposure normalization for Canon EOS cameras. */ if (conf->ExposureNorm > 0) exposure = (guint64)exposure * d->rgbMax / conf->ExposureNorm; if (exposure >= 0x10000) d->restoreDetails = clip_details; if (exposure <= 0x10000) clipHighlights = digital_highlights; /* Check if gamma curve data has changed. */ if (in->gamma != d->gamma || in->linear != d->linear || exposure != d->exposure || clipHighlights != d->clipHighlights || memcmp(baseCurve, &d->baseCurveData, sizeof(CurveData)) != 0) { d->baseCurveData = *baseCurve; guint16 BaseCurve[0x10000]; CurveSample *cs = CurveSampleInit(0x10000, 0x10000); ufraw_message(UFRAW_RESET, NULL); if (CurveDataSample(baseCurve, cs) != UFRAW_SUCCESS) { ufraw_message(UFRAW_REPORT, NULL); for (i = 0; i < 0x10000; i++) cs->m_Samples[i] = i; } for (i = 0; i < 0x10000; i++) BaseCurve[i] = cs->m_Samples[i]; CurveSampleFree(cs); d->gamma = in->gamma; d->linear = in->linear; d->exposure = exposure; d->clipHighlights = clipHighlights; guint16 FilmCurve[0x10000]; if (d->clipHighlights == film_highlights) { /* Exposure is set by FilmCurve[]. * Set initial slope to d->exposuse/0x10000 */ double a = findExpCoeff((double)d->exposure / 0x10000); for (i = 0; i < 0x10000; i++) FilmCurve[i] = (1 - exp(-a * i / 0x10000)) / (1 - exp(-a)) * 0xFFFF; } else { /* digital highlights */ for (i = 0; i < 0x10000; i++) FilmCurve[i] = i; } double a, b, c, g; /* The parameters of the linearized gamma curve are set in a way that * keeps the curve continuous and smooth at the connecting point. * d->linear also changes the real gamma used for the curve (g) in * a way that keeps the derivative at i=0x10000 constant. * This way changing the linearity changes the curve behaviour in * the shadows, but has a minimal effect on the rest of the range. */ if (d->linear < 1.0) { g = d->gamma * (1.0 - d->linear) / (1.0 - d->gamma * d->linear); a = 1.0 / (1.0 + d->linear * (g - 1)); b = d->linear * (g - 1) * a; c = pow(a * d->linear + b, g) / d->linear; } else { a = b = g = 0.0; c = 1.0; } for (i = 0; i < 0x10000; i++) if (BaseCurve[FilmCurve[i]] < 0x10000 * d->linear) d->gammaCurve[i] = MIN(c * BaseCurve[FilmCurve[i]], 0xFFFF); else d->gammaCurve[i] = MIN(pow(a * BaseCurve[FilmCurve[i]] / 0x10000 + b, g) * 0x10000, 0xFFFF); } developer_profile(d, in_profile, in); developer_profile(d, out_profile, out); if (conf->intent[out_profile] != d->intent[out_profile]) { d->intent[out_profile] = conf->intent[out_profile]; d->updateTransform = TRUE; } /* For auto-tools we ignore all the output settings: * luminosity, saturation, output profile and proofing. */ if (mode == auto_developer) { developer_create_transform(d, mode); return; } developer_profile(d, display_profile, display); if (conf->intent[display_profile] != d->intent[display_profile]) { d->intent[display_profile] = conf->intent[display_profile]; d->updateTransform = TRUE; } /* Check if curve data has changed. */ if (memcmp(curve, &d->luminosityCurveData, sizeof(CurveData))) { d->luminosityCurveData = *curve; /* Trivial curve does not require a profile */ if (CurveDataIsTrivial(curve)) { d->luminosityProfile = NULL; } else { cmsCloseProfile(d->luminosityProfile); CurveSample *cs = CurveSampleInit(0x100, 0x10000); ufraw_message(UFRAW_RESET, NULL); if (CurveDataSample(curve, cs) != UFRAW_SUCCESS) { ufraw_message(UFRAW_REPORT, NULL); d->luminosityProfile = NULL; } else { LPGAMMATABLE *TransferFunction = (LPGAMMATABLE *)d->TransferFunction; for (i = 0; i < 0x100; i++) TransferFunction[0]->GammaTable[i] = cs->m_Samples[i]; d->luminosityProfile = cmsCreateLinearizationDeviceLink( icSigLabData, TransferFunction); cmsSetDeviceClass(d->luminosityProfile, icSigAbstractClass); } CurveSampleFree(cs); } d->updateTransform = TRUE; } if (memcmp(d->lightnessAdjustment, conf->lightnessAdjustment, sizeof d->lightnessAdjustment) != 0) { /* Adjustments have changed, need to update them. */ d->updateTransform = TRUE; memcpy(d->lightnessAdjustment, conf->lightnessAdjustment, sizeof d->lightnessAdjustment); cmsCloseProfile(d->adjustmentProfile); d->adjustmentProfile = test_adjustments(d->lightnessAdjustment, 1.0, 0.01) ? create_adjustment_profile(d) : NULL; } if (conf->saturation != d->saturation #ifdef UFRAW_CONTRAST || conf->contrast != d->contrast #endif || conf->grayscaleMode == grayscale_luminance) { #ifdef UFRAW_CONTRAST d->contrast = conf->contrast; #endif d->saturation = (conf->grayscaleMode == grayscale_luminance) ? 0 : conf->saturation; cmsCloseProfile(d->saturationProfile); if (d->saturation == 1.0 #ifdef UFRAW_CONTRAST && d->contrast == 1.0 #endif ) d->saturationProfile = NULL; else d->saturationProfile = create_contrast_saturation_profile( #ifdef UFRAW_CONTRAST d->contrast, #else 1.0, #endif d->saturation); d->updateTransform = TRUE; } developer_create_transform(d, mode); } static void apply_matrix(const developer_data *d, const gint64 in[4], gint64 out[3]) { gint64 tmp[3]; unsigned c, cc; for (cc = 0; cc < 3; cc++) { tmp[cc] = 0; for (c = 0; c < d->colors; c++) tmp[cc] += in[c] * d->colorMatrix[cc][c]; } for (cc = 0; cc < 3; cc++) out[cc] = MAX(tmp[cc] / 0x10000, 0); } static void cond_apply_matrix(const developer_data *d, const gint64 in[4], gint64 out[3]) { if (d->useMatrix) apply_matrix(d, in, out); else memcpy(out, in, 3 * sizeof out[0]); } extern const double xyz_rgb[3][3]; static const double rgb_xyz[3][3] = { /* RGB from XYZ */ { 3.24048, -1.53715, -0.498536 }, { -0.969255, 1.87599, 0.0415559 }, { 0.0556466, -0.204041, 1.05731 } }; // Convert linear RGB to CIE-LCh void uf_rgb_to_cielch(gint64 rgb[3], float lch[3]) { int c, cc, i; float r, xyz[3], lab[3]; // The use of static varibles here should be thread safe. // In the worst case cbrt[] will be calculated more than once. static gboolean firstRun = TRUE; static float cbrt[0x10000]; if (firstRun) { for (i = 0; i < 0x10000; i++) { r = i / 65535.0; cbrt[i] = r > 0.008856 ? pow(r, 1 / 3.0) : 7.787 * r + 16 / 116.0; } firstRun = FALSE; } xyz[0] = xyz[1] = xyz[2] = 0.5; for (c = 0; c < 3; c++) for (cc = 0; cc < 3; cc++) xyz[cc] += xyz_rgb[cc][c] * rgb[c]; for (c = 0; c < 3; c++) xyz[c] = cbrt[MAX(MIN((int)xyz[c], 0xFFFF), 0)]; lab[0] = 116 * xyz[1] - 16; lab[1] = 500 * (xyz[0] - xyz[1]); lab[2] = 200 * (xyz[1] - xyz[2]); lch[0] = lab[0]; lch[1] = sqrt(lab[1] * lab[1] + lab[2] * lab[2]); lch[2] = atan2(lab[2], lab[1]); } // Convert CIE-LCh to linear RGB void uf_cielch_to_rgb(float lch[3], gint64 rgb[3]) { int c, cc; float xyz[3], fx, fy, fz, xr, yr, zr, kappa, epsilon, tmpf, lab[3]; epsilon = 0.008856; kappa = 903.3; lab[0] = lch[0]; lab[1] = lch[1] * cos(lch[2]); lab[2] = lch[1] * sin(lch[2]); yr = (lab[0] <= kappa * epsilon) ? (lab[0] / kappa) : (pow((lab[0] + 16.0) / 116.0, 3.0)); fy = (yr <= epsilon) ? ((kappa * yr + 16.0) / 116.0) : ((lab[0] + 16.0) / 116.0); fz = fy - lab[2] / 200.0; fx = lab[1] / 500.0 + fy; zr = (pow(fz, 3.0) <= epsilon) ? ((116.0 * fz - 16.0) / kappa) : (pow(fz, 3.0)); xr = (pow(fx, 3.0) <= epsilon) ? ((116.0 * fx - 16.0) / kappa) : (pow(fx, 3.0)); xyz[0] = xr * 65535.0 - 0.5; xyz[1] = yr * 65535.0 - 0.5; xyz[2] = zr * 65535.0 - 0.5; for (c = 0; c < 3; c++) { tmpf = 0; for (cc = 0; cc < 3; cc++) tmpf += rgb_xyz[c][cc] * xyz[cc]; rgb[c] = MAX(tmpf, 0); } } void uf_raw_to_cielch(const developer_data *d, const guint16 raw[4], float lch[3]) { gint64 tmp[4]; guint16 rgbpixel[3]; guint16 labpixel[3]; cmsCIELab Lab; cmsCIELCh LCh; unsigned int c; for (c = 0; c < d->colors; ++c) { tmp[c] = raw[c]; tmp[c] *= d->rgbWB[c]; tmp[c] /= 0x10000; } cond_apply_matrix(d, tmp, tmp); for (c = 0; c < 3; ++c) rgbpixel[c] = tmp[c]; cmsDoTransform(d->rgbtolabTransform, rgbpixel, labpixel, 1); cmsLabEncoded2Float(&Lab, labpixel); cmsLab2LCh(&LCh, &Lab); lch[0] = LCh.L; lch[1] = LCh.C; lch[2] = LCh.h; } static void MaxMidMin(const gint64 p[3], int *maxc, int *midc, int *minc) { gint64 a = p[0]; gint64 b = p[1]; gint64 c = p[2]; int max = 0; int mid = 1; int min = 2; if (a < b) { gint64 tmp = b; b = a; a = tmp; max = 1; mid = 0; } if (b < c) { b = c; min = mid; mid = 2; if (a < b) { int tmp = max; max = mid; mid = tmp; } } *maxc = max; *midc = mid; *minc = min; } void develop(void *po, guint16 pix[4], developer_data *d, int mode, int count) { guint16 c, tmppix[3], *buf; int i; if (mode == 16) buf = po; else buf = g_alloca(count * 6); #ifdef _OPENMP #pragma omp parallel \ if (count > 16) \ default(none) \ shared(d, buf, count, pix) \ private(i, tmppix, c) { int chunk = count / omp_get_num_threads() + 1; int offset = chunk * omp_get_thread_num(); int width = (chunk > count - offset) ? count - offset : chunk; for (i = offset; i < offset + width; i++) { develop_linear(pix + i * 4, tmppix, d); for (c = 0; c < 3; c++) buf[i * 3 + c] = d->gammaCurve[tmppix[c]]; } if (d->colorTransform != NULL) cmsDoTransform(d->colorTransform, buf + offset * 3, buf + offset * 3, width); } #else for (i = 0; i < count; i++) { develop_linear(pix + i * 4, tmppix, d); for (c = 0; c < 3; c++) buf[i * 3 + c] = d->gammaCurve[tmppix[c]]; } if (d->colorTransform != NULL) cmsDoTransform(d->colorTransform, buf, buf, count); #endif if (mode != 16) { guint8 *p8 = po; for (i = 0; i < 3 * count; i++) p8[i] = buf[i] >> 8; } } void develop_display(void *pout, void *pin, developer_data *d, int count) { if (d->working2displayTransform == NULL) g_error("develop_display: working2displayTransform == NULL"); cmsDoTransform(d->working2displayTransform, pin, pout, count); } static void develop_grayscale(guint16 *pixel, const developer_data *d) { gint32 spot; guint16 min; guint16 max; switch (d->grayscaleMode) { case grayscale_mixer: spot = pixel[0] * d->grayscaleMixer[0] + pixel[1] * d->grayscaleMixer[1] + pixel[2] * d->grayscaleMixer[2]; if (spot > 65535) spot = 65535; else if (spot < 0) spot = 0; break; case grayscale_lightness: min = max = pixel[0]; if (pixel[1] > max) max = pixel[1]; if (pixel[2] > max) max = pixel[2]; if (pixel[1] < min) min = pixel[1]; if (pixel[2] < min) min = pixel[2]; spot = ((int)min + (int)max) / 2; break; case grayscale_value: max = pixel[0]; if (pixel[1] > max) max = pixel[1]; if (pixel[2] > max) max = pixel[2]; spot = max; break; default: return; } pixel[0] = pixel[1] = pixel[2] = spot; } void develop_linear(guint16 in[4], guint16 out[3], developer_data *d) { unsigned c; gint64 tmppix[4]; gboolean clipped = FALSE; for (c = 0; c < d->colors; c++) { /* Set WB, normalizing tmppix[c]<0x10000 */ tmppix[c] = in[c]; tmppix[c] *= d->rgbWB[c]; tmppix[c] /= 0x10000; if (d->restoreDetails != clip_details && tmppix[c] > d->max) { clipped = TRUE; } else { tmppix[c] = MIN(tmppix[c], d->max); } /* We are counting on the fact that film_highlights * and !clip_highlights cannot be set simultaneously. */ if (d->clipHighlights == film_highlights) tmppix[c] = tmppix[c] * 0x10000 / d->max; else tmppix[c] = tmppix[c] * d->exposure / d->max; } if (clipped) { /* At this point a value of d->exposure in tmppix[c] corresponds * to "1.0" (full exposure). Still the maximal value can be * d->exposure * 0x10000 / d->max */ gint64 unclippedPix[3], clippedPix[3]; cond_apply_matrix(d, tmppix, unclippedPix); for (c = 0; c < 3; c++) tmppix[c] = MIN(tmppix[c], d->exposure); cond_apply_matrix(d, tmppix, clippedPix); if (d->restoreDetails == restore_lch_details) { float lch[3], clippedLch[3], unclippedLch[3]; uf_rgb_to_cielch(unclippedPix, unclippedLch); uf_rgb_to_cielch(clippedPix, clippedLch); //lch[0] = clippedLch[0] + (unclippedLch[0]-clippedLch[0]) * x; lch[0] = unclippedLch[0]; lch[1] = clippedLch[1]; lch[2] = clippedLch[2]; uf_cielch_to_rgb(lch, tmppix); } else { /* restore_hsv_details */ int maxc, midc, minc; MaxMidMin(unclippedPix, &maxc, &midc, &minc); gint64 unclippedLum = unclippedPix[maxc]; gint64 clippedLum = clippedPix[maxc]; /*gint64 unclippedSat; if ( unclippedPix[maxc]==0 ) unclippedSat = 0; else unclippedSat = 0x10000 - unclippedPix[minc] * 0x10000 / unclippedPix[maxc];*/ gint64 clippedSat; if (clippedPix[maxc] < clippedPix[minc] || clippedPix[maxc] == 0) clippedSat = 0; else clippedSat = 0x10000 - clippedPix[minc] * 0x10000 / clippedPix[maxc]; gint64 clippedHue; if (clippedPix[maxc] == clippedPix[minc]) clippedHue = 0; else clippedHue = (clippedPix[midc] - clippedPix[minc]) * 0x10000 / (clippedPix[maxc] - clippedPix[minc]); gint64 unclippedHue; if (unclippedPix[maxc] == unclippedPix[minc]) unclippedHue = clippedHue; else unclippedHue = (unclippedPix[midc] - unclippedPix[minc]) * 0x10000 / (unclippedPix[maxc] - unclippedPix[minc]); /* Here we decide how to mix the clipped and unclipped values. * The general equation is clipped + (unclipped - clipped) * x, * where x is between 0 and 1. */ /* For lum we set x=1/2. Thus hightlights are not too bright. */ gint64 lum = clippedLum + (unclippedLum - clippedLum) * 1 / 2; /* For sat we should set x=0 to prevent color artifacts. */ //gint64 sat = clippedSat + (unclippedSat - clippedSat) * 0/1 ; gint64 sat = clippedSat; /* For hue we set x=1. This doesn't seem to have much effect. */ gint64 hue = unclippedHue; tmppix[maxc] = lum; tmppix[minc] = lum * (0x10000 - sat) / 0x10000; tmppix[midc] = lum * (0x10000 - sat + sat * hue / 0x10000) / 0x10000; } } else { /* !clipped */ if (d->useMatrix) apply_matrix(d, tmppix, tmppix); gint64 max = tmppix[0]; for (c = 1; c < 3; c++) max = MAX(tmppix[c], max); if (max > 0xFFFF) { gint64 unclippedLum = max; gint64 clippedLum = 0xFFFF; gint64 lum = clippedLum + (unclippedLum - clippedLum) * 1 / 4; for (c = 0; c < 3; c++) tmppix[c] = tmppix[c] * lum / max; } } for (c = 0; c < 3; c++) out[c] = MIN(MAX(tmppix[c], 0), 0xFFFF); develop_grayscale(out, d); } ufraw-0.19.2/config.guess0000755000175000017500000012743212057543462012211 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ufraw-0.19.2/ufraw_ui.h0000664000175000017500000001651712115264507011661 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_ui.h - Common definitions for UFRaw's GUI. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UFRAW_UI_H #define _UFRAW_UI_H #define raw_his_size 320 #define live_his_size 256 #define max_scale 20 typedef struct { GtkLabel *labels[5]; int num; int format; gboolean zonep; /* non-zero to display value/zone */ } colorLabels; typedef enum { render_default, render_overexposed, render_underexposed } RenderModeType; typedef enum { options_button, cancel_button, ok_button, save_button, gimp_button, delete_button, num_buttons } ControlButtons; typedef enum { spot_cursor, crop_cursor, left_cursor, right_cursor, top_cursor, bottom_cursor, top_left_cursor, top_right_cursor, bottom_left_cursor, bottom_right_cursor, move_cursor, cursor_num } CursorType; enum { base_curve, luminosity_curve }; /* All the "global" information is here: */ typedef struct { ufraw_data *UF; conf_data *rc; int raw_his[raw_his_size][4]; int TypeComboMap[num_types]; GdkPixbuf *PreviewPixbuf; GdkCursor *Cursor[cursor_num]; /* Remember the Gtk Widgets that we need to access later */ GtkWidget *Controls, *PreviewWidget, *RawHisto, *LiveHisto; GtkLabel *DarkFrameLabel; GtkWidget *BaseCurveWidget, *CurveWidget, *BlackLabel; GtkComboBox *BaseCurveCombo, *CurveCombo, *ProfileCombo[profile_types], *BitDepthCombo, *TypeCombo; GtkWidget *GrayscaleButtons[6]; GtkTable *SpotTable; GtkTable *GrayscaleMixerTable; GtkLabel *GrayscaleMixerColor; GtkLabel *SpotPatch; GtkLabel *HotpixelCount; colorLabels *SpotLabels, *AvrLabels, *DevLabels, *OverLabels, *UnderLabels; GtkToggleButton *AutoExposureButton, *AutoBlackButton; GtkToggleButton *AutoCropButton, *LockAspectButton; GtkWidget *AutoCurveButton; GtkWidget *ResetGammaButton, *ResetLinearButton; GtkWidget *ResetExposureButton, *ResetSaturationButton; GtkWidget *ResetThresholdButton; GtkWidget *ResetHotpixelButton; #ifdef UFRAW_CONTRAST GtkWidget *ResetContrastButton; #endif GtkWidget *ResetBlackButton, *ResetBaseCurveButton, *ResetCurveButton; GtkWidget *ResetGrayscaleChannelMixerButton; GtkWidget *ResetDespeckleButton; GtkWidget *SaveButton; GtkWidget *ControlButton[num_buttons]; guint16 ButtonMnemonic[num_buttons]; GtkProgressBar *ProgressBar; GtkSpinButton *CropX1Spin; GtkSpinButton *CropY1Spin; GtkSpinButton *CropX2Spin; GtkSpinButton *CropY2Spin; GtkSpinButton *ShrinkSpin; GtkSpinButton *HeightSpin; GtkSpinButton *WidthSpin; /* We need the adjustments for update_scale() */ GtkAdjustment *GammaAdjustment; GtkAdjustment *LinearAdjustment; GtkAdjustment *ExposureAdjustment; GtkAdjustment *ThresholdAdjustment; GtkAdjustment *HotpixelAdjustment; GtkAdjustment *SaturationAdjustment; #ifdef UFRAW_CONTRAST GtkAdjustment *ContrastAdjustment; #endif GtkWidget *LightnessHueSelectNewButton; GtkTable *LightnessAdjustmentTable[max_adjustments]; GtkAdjustment *LightnessAdjustment[max_adjustments]; GtkWidget *ResetLightnessAdjustmentButton[max_adjustments]; GtkWidget *LightnessHueSelectButton[max_adjustments]; GtkWidget *LightnessHueRemoveButton[max_adjustments]; GtkAdjustment *CropX1Adjustment; GtkAdjustment *CropY1Adjustment; GtkAdjustment *CropX2Adjustment; GtkAdjustment *CropY2Adjustment; GtkAdjustment *ZoomAdjustment; GtkAdjustment *ShrinkAdjustment; GtkAdjustment *HeightAdjustment; GtkAdjustment *WidthAdjustment; GtkAdjustment *RotationAdjustment; GtkWidget *ResetRotationAdjustment; GtkAdjustment *GrayscaleMixers[3]; GtkAdjustment *DespeckleWindowAdj[4]; GtkAdjustment *DespeckleDecayAdj[4]; GtkAdjustment *DespecklePassesAdj[4]; GtkToggleButton *DespeckleLockChannelsButton; GtkToggleButton *ChannelSelectButton[4]; int ChannelSelect; #ifdef HAVE_LENSFUN /* The GtkEntry with camera maker/model name */ GtkWidget *CameraModel; /* The menu used to choose camera - either full or limited by search criteria */ GtkWidget *CameraMenu; /* The GtkEntry with lens maker/model name */ GtkWidget *LensModel; /* The menu used to choose lens - either full or limited by search criteria */ GtkWidget *LensMenu; /* The lens fix notebook distortion page */ GtkWidget *LensDistortionTable, *LensDistortionDesc; /* The lens fix notebook TCA page */ GtkWidget *LensTCATable, *LensTCADesc; /* The lens fix notebook vignetting page */ GtkWidget *LensVignettingTable, *LensVignettingDesc; /* The hbox containing focal, aperture, distance combos */ GtkWidget *LensParamBox; #endif /* HAVE_LENSFUN */ long(*SaveFunc)(); RenderModeType RenderMode; /* Current subarea index (0-31). If negative, rendering has stopped */ int RenderSubArea; /* Some actions update the progress bar while working, but meanwhile we * want to freeze all other actions. After we thaw the dialog we must * call update_scales() which was also frozen. */ gboolean FreezeDialog; /* Since the event-box can be larger than the preview pixbuf we need: */ gboolean PreviewButtonPressed, SpotDraw; int SpotX1, SpotY1, SpotX2, SpotY2; CursorType CropMotionType; int DrawnCropX1, DrawnCropX2, DrawnCropY1, DrawnCropY2; double shrink, height, width; gboolean OptionsChanged; int PageNum; int PageNumSpot; int PageNumGray; int PageNumLensfun; int PageNumLightness; int PageNumCrop; int HisMinHeight; int UnnormalizedOrientation; /* Original aspect ratio (0) or actual aspect ratio */ /* The aspect ratio entry field */ GtkEntry *AspectEntry; /* Output base filename (without the path) */ GtkEntry *OutFileEntry; /* Mouse coordinates in previous frame (used when dragging crop area) */ int OldMouseX, OldMouseY; int OverUnderTicker; /* The event source number when the highlight blink function is enabled. */ guint BlinkTimer; guint DrawCropID; } preview_data; /* Response can be any unique positive integer */ #define UFRAW_RESPONSE_DELETE 1 #define UFRAW_NO_RESPONSE 2 /* These #defines are not very elegant, but otherwise things get tooo long */ #define CFG data->UF->conf #define RC data->rc #define Developer data->UF->developer #define CFG_cameraCurve (CFG->BaseCurve[camera_curve].m_numAnchors>0) /* Start the render preview refresh thread for invalid layers in background */ void render_preview(preview_data *data); void lens_fill_interface(preview_data *data, GtkWidget *page); GtkWidget *table_with_frame(GtkWidget *box, char *label, gboolean expand); GtkWidget *notebook_page_new(GtkNotebook *notebook, char *text, char *icon); GtkWidget *stock_icon_button(const gchar *stock_id, const char *tip, GCallback callback, void *data); void ufnumber_adjustment_scale(UFObject *obj, GtkTable *table, int x, int y, const char *label, const char *tip); #endif /* _UFRAW_UI_H */ ufraw-0.19.2/TODO0000664000175000017500000000421312122217612010336 00000000000000$Id: TODO,v 1.33 2013/03/13 13:30:06 nkbj Exp $ These items are not ordered or prioritized, but are roughly grouped by kind of change. For the next release ==================== For the future ============== * Master reset button to set all adjustments to default. * Help (based on the webpage). * Calculate width of the dialog control column and set raw histogram to that width. * Curve corrections per channel. * Show camera overexposures. * Add the UFRaw parameters used to the Exif data in saved images. * Display "exposure value" in Exif (Av, Tv, and also with ISO). * Display scene zones and scene luminance (raw data with input profile but no other adjustments. * Display "developed raw zone", which is zone relative to the working colorspace after all adjustments but before the output profile. * Spot query - mark on histograms. * Multi spot query (when pressing the control key). * Show WB spot/area values in HSV (in addition to output colorspace pixels). * Add the ability to save a spot measurement, and then to adjust WB to make a new measurement match the old. Usage is shooting a whitish wall with a white card, doing WB to card, saving wall, and then later adjusting wall to wall's color, e.g. for actual shots with no white card. * Leaf embedded profiles. * fuji sqrt(0.5) factor in size. * Canon 10D presets from ExifTool. * Add the ability to have groups of saved values, perhaps one for flash and one not, so one can save 2 color temperatures and exposure adjustments for a batch of photos. * Automatic profile selection based on camera model and serial#. * Create or obtain an input profile which uses the sRGB primaries but is linear. * Build with lcms2 if present. * Understand why the default gamma/linearity values are pleasing, despite them being different from the sRGB standard. Resolve those issues, and then link gamma/linearity to profile selection. * Understand differences between ufraw with defaults and in-camera with defaults. Document them, or fix them as bugs. In particular, exposure compensation of 0 should probably approximate in-camera processing, and there are significant variations. ufraw-0.19.2/ufraw_saver.c0000664000175000017500000001336612122217612012347 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_saver.c - The GUI file saver. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #include #include #include static int ufraw_overwrite_dialog(char *filename, GtkWidget *widget) { char message[max_path]; int response; GtkWidget *dialog = gtk_dialog_new_with_buttons(_("File exists"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_NO, GTK_RESPONSE_NO, GTK_STOCK_YES, GTK_RESPONSE_YES, NULL); char *utf8 = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); if (utf8 == NULL) utf8 = g_strdup("Unknown file name"); snprintf(message, max_path, _("File '%s' already exists.\nOverwrite?"), utf8); g_free(utf8); GtkWidget *label = gtk_label_new(message); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all(dialog); response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return (response == GTK_RESPONSE_YES); } long ufraw_save_now(ufraw_data *uf, void *widget) { if (!uf->conf->overwrite && uf->conf->createID != only_id && g_file_test(uf->conf->outputFilename, G_FILE_TEST_EXISTS)) { if (!ufraw_overwrite_dialog(uf->conf->outputFilename, widget)) return UFRAW_ERROR; } int status = ufraw_write_image(uf); if (status == UFRAW_ERROR) { ufraw_message(status, ufraw_get_message(uf)); return UFRAW_ERROR; } if (status == UFRAW_WARNING) { ufraw_message(status, ufraw_get_message(uf)); } if (ufraw_get_message(uf) != NULL) ufraw_message(UFRAW_SET_LOG, ufraw_get_message(uf)); return UFRAW_SUCCESS; } long ufraw_send_to_gimp(ufraw_data *uf) { char *basename = g_path_get_basename(uf->conf->inputFilename); char *template = g_strconcat(basename, "_XXXXXX", NULL); g_free(basename); char *confFilename = NULL; GError *err = NULL; int fd = g_file_open_tmp(template, &confFilename, &err); g_free(template); if (fd == -1) { g_free(confFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error creating temporary file."), err->message); g_error_free(err); return UFRAW_ERROR; } FILE *out = fdopen(fd, "w"); if (out == NULL) { g_free(confFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error creating temporary file."), g_strerror(errno)); return UFRAW_ERROR; } char *buffer; int saveCreateID = uf->conf->createID; uf->conf->createID = send_id; conf_save(uf->conf, confFilename, &buffer); uf->conf->createID = saveCreateID; if (fwrite(buffer, strlen(buffer), 1, out) != 1) { g_free(buffer); g_free(confFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error creating temporary file."), g_strerror(errno)); return UFRAW_ERROR; } g_free(buffer); if (fclose(out) != 0) { g_free(confFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error creating temporary file."), g_strerror(errno)); return UFRAW_ERROR; } char *fullConfFilename = g_strconcat(confFilename, ".ufraw", NULL); if (g_rename(confFilename, fullConfFilename) == -1) { g_free(confFilename); g_free(fullConfFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error creating temporary file."), g_strerror(errno)); return UFRAW_ERROR; } g_free(confFilename); char *commandLine = g_strdup_printf("%s \"%s\"", uf->conf->remoteGimpCommand, fullConfFilename); /* gimp-remote starts the gimp in a fork(). * Therefore we must call it asynchronously. */ if (!g_spawn_command_line_async(commandLine, &err)) { g_free(commandLine); #ifdef _WIN32 if (strcmp(uf->conf->remoteGimpCommand, conf_default.remoteGimpCommand) == 0) { /* If the user didn't play with the remoteGimpCommand, * try to run Gimp-2.6 instead of Gimp-2.8 */ g_strlcpy(uf->conf->remoteGimpCommand, "gimp-2.6.exe", max_path); commandLine = g_strdup_printf("%s \"%s\"", uf->conf->remoteGimpCommand, fullConfFilename); g_error_free(err); err = NULL; /* gimp-remote starts the gimp in a fork(). * Therefore we must call it asynchronously. */ if (!g_spawn_command_line_async(commandLine, &err)) { g_free(commandLine); g_free(fullConfFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error activating Gimp."), err->message); g_error_free(err); return UFRAW_ERROR; } } else #endif { g_free(fullConfFilename); ufraw_message(UFRAW_ERROR, "%s\n%s", _("Error activating Gimp."), err->message); g_error_free(err); return UFRAW_ERROR; } } g_free(fullConfFilename); g_free(commandLine); // Sleep for 0.2 seconds, giving time for gimp-remote to do the X query. g_usleep(200 * 1000); return UFRAW_SUCCESS; } ufraw-0.19.2/configure.ac0000664000175000017500000003225412123734456012155 00000000000000dnl $Id: configure.ac,v 1.175 2013/03/23 14:15:11 nkbj Exp $ AC_INIT(UFRaw, 0.19.2) AC_PREREQ(2.57) # Create host_os, host_cpu, host_alias variables. AC_CANONICAL_HOST AM_INIT_AUTOMAKE([foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_CONFIG_HEADERS(config.h) AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_PROGS(POD2MAN, pod2man, [ echo pod2man is missing on this system; \ echo you can ignore this problem by typing: touch ufraw.1; \ echo cannot execute: pod2man], $PATH) AC_FUNC_FSEEKO # Ensure that getopt_long is available. It is included in GNU libc and # in at least most BSD libcs. If not found, search for it in libgnugetopt. AC_SEARCH_LIBS(getopt_long, gnugetopt, , AC_MSG_ERROR(can not build UFRaw without getopt_long)) # Make sure that pow is available, trying libm if necessary. AC_SEARCH_LIBS(pow, m) AC_CHECK_FUNCS(canonicalize_file_name) AC_CHECK_FUNCS(memmem) # For binary package creation, adjusting for the build CPU is not appropriate. case $host_cpu in i686) UFRAW_MARCH="-march=i686" ;; * ) UFRAW_MARCH="" ;; esac # Default CFLAGS, CXXFLAGS for GCC in case they were not set by the user. if test "$GCC" = "yes"; then if test "$ac_test_CFLAGS" != "set"; then CFLAGS="-W -Wall -g -O3 -fomit-frame-pointer -D_FORTIFY_SOURCE=2 $UFRAW_MARCH" fi if test "$ac_test_CXXFLAGS" != "set"; then CXXFLAGS="-W -Wall -g -O3 -fomit-frame-pointer -D_FORTIFY_SOURCE=2 $UFRAW_MARCH" fi fi m4_ifndef([AC_OPENMP], [m4_include([ac_openmp.m4])]) AC_OPENMP CFLAGS="$CFLAGS $OPENMP_CFLAGS" CXXFLAGS="$CXXFLAGS $OPENMP_CFLAGS" # Point to programs/libraries installed in a non-default place. AC_ARG_WITH(prefix, [ --with-prefix=PREFIX use also PREFIX as an input prefix for the build], [ with_prefix=$withval echo "Adding pkgconfig/cppflags/ldflags for $with_prefix." export PKG_CONFIG_PATH="$with_prefix/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" CPPFLAGS="$CPPFLAGS -I$with_prefix/include" LDFLAGS="$LDFLAGS -L$with_prefix/lib" ], [ with_prefix=NONE ] ) PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.12 gthread-2.0) PKG_CHECK_MODULES(LCMS, lcms >= 1.14) AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk], [build the GTK GUI @<:@default=check@:>@])], [], [with_gtk=check]) have_gtk=no AS_IF([test "x$with_gtk" != xno], [PKG_CHECK_MODULES(GTKBASE, gtk+-2.0 >= 2.12, [ have_gtk=yes ], [ have_gtk=no if test "x$with_gtk" != xcheck; then AC_MSG_FAILURE( [--with-gtk was given, but test for gtk failed]) fi ] ) ] ) have_gimp=no have_cinepaint=no if test "$have_gtk" = "yes"; then PKG_CHECK_MODULES(GTK, gtkimageview >= 1.6) # It is not clear if we should install the GIMP and Cinepaint plugins # in the corresponding place in our prefix, or in GIMP's or # Cinepaint's lib dir in their prefixes. Currently, we install the # plugin in our prefix. If the gimp/cinepaint prefix and the # configured UFRaw prefix are the same, this doesn't matter. pkg_prefix="$PKG_CONFIG" test $prefix = NONE || pkg_prefix="$pkg_prefix --define-variable=prefix=$prefix" test $exec_prefix = NONE || pkg_prefix="$pkg_prefix --define-variable=exec_prefix=$exec_prefix" AC_ARG_WITH([gimp], [AS_HELP_STRING([--with-gimp], [build gimp plugin @<:@default=check@:>@])], [], [with_gimp=check]) AS_IF([test "x$with_gimp" != xno], [PKG_CHECK_MODULES(GIMP, gimpui-2.0 >= 2.2.0, [ have_gimp=yes GIMP_LIBDIR=`$pkg_prefix --variable=gimplibdir gimp-2.0` ], [ have_gimp=no GIMP_LIBDIR= if test "x$with_gimp" != xcheck; then AC_MSG_FAILURE( [--with-gimp was given, but test for gimp failed]) fi ] ) ] ) if test "$have_gimp" = "yes"; then PKG_CHECK_MODULES(GIMP_2_4, gimpui-2.0 >= 2.4.0, [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_4, 1, have Gimp 2.4 or later) ], [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_4, 0, have Gimp 2.4 or later) ]) PKG_CHECK_MODULES(GIMP_2_9, gimpui-2.0 >= 2.9.0, [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_9, 1, have Gimp 2.9 or later) ], [ AC_DEFINE_UNQUOTED(HAVE_GIMP_2_9, 0, have Gimp 2.9 or later) ]) fi AC_ARG_WITH([cinepaint], [AS_HELP_STRING([--with-cinepaint], [build cinepaint plugin @<:@default=check@:>@])], [], [with_cinepaint=check]) AS_IF([test "x$with_cinepaint" != xno], [PKG_CHECK_MODULES(CINEPAINT, cinepaint-gtk >= 0.22, [ have_cinepaint=yes CINEPAINT_LIBDIR=`$pkg_prefix --variable=libdir cinepaint-gtk` CINEPAINT_PROGRAMPLUGINDIR=`$pkg_prefix --variable=programplugindir cinepaint-gtk` ], [ have_cinepaint=no CINEPAINT_LIBDIR= CINEPAINT_PROGRAMPLUGINDIR= if test "x$with_cinepaint" != xcheck; then AC_MSG_FAILURE( [--with-cinepaint was given, but test for cinepaint failed]) fi ] ) ] ) # Disable deprecated functions on tested versions of GTK. if $PKG_CONFIG --max-version=2.18.99 gtk+-2.0; then AC_DEFINE(G_DISABLE_DEPRECATED, [], disable deprecated glib features) AC_DEFINE(GDK_DISABLE_DEPRECATED, [], disable deprecated gdk features) AC_DEFINE(GTK_DISABLE_DEPRECATED, [], disable deprecated gtk+ features) AC_DEFINE(GTK_DISABLE_SINGLE_INCLUDES, [], disable deprecated gtk headers) AC_DEFINE(GDK_PIXBUF_DISABLE_SINGLE_INCLUDES, [], disable deprecated gdk headers) fi fi AM_CONDITIONAL(MAKE_GTK, test $have_gtk = yes) AC_SUBST(GTK_LIBS) AM_CONDITIONAL(MAKE_GIMP, test $have_gimp = yes) AC_SUBST(GIMP_CFLAGS) AC_SUBST(GIMP_LIBS) AC_SUBST(GIMP_LIBDIR) AM_CONDITIONAL(MAKE_CINEPAINT, test $have_cinepaint = yes) AC_SUBST(CINEPAINT_CFLAGS) AC_SUBST(CINEPAINT_LIBS) AC_SUBST(CINEPAINT_PROGRAMPLUGINDIR) # Check for zlib. AC_CHECK_LIB(z, deflate) have_zlib=${ac_cv_lib_z_deflate:-no} # Check for libbz2. AC_CHECK_LIB(bz2, BZ2_bzReadOpen) have_libbz2=${ac_cv_lib_bz2_BZ2_bzReadOpen:-no} # Check for jpeg headers and library. AC_CHECK_HEADER(jpeglib.h, AC_CHECK_LIB(jpeg, jpeg_CreateCompress)) have_jpeg=${ac_cv_lib_jpeg_jpeg_CreateCompress:-no} # Check for libjasper. AC_CHECK_LIB(jasper, jas_image_decode) have_jasper=${ac_cv_lib_jasper_jas_image_decode:-no} # Check for tiff headers and library. PKG_CHECK_MODULES(LIBTIFF, libtiff-4, [ have_tiff=yes AC_DEFINE(HAVE_LIBTIFF, 1, have the tiff library) ], [ have_tiff=no AC_MSG_RESULT($LIBTIFF_PKG_ERRORS) ] ) if test $have_tiff = no; then AC_CHECK_HEADER(tiffio.h, AC_CHECK_LIB(tiff, TIFFSetErrorHandler)) have_tiff=${ac_cv_lib_tiff_TIFFSetErrorHandler:-no} fi PKG_CHECK_MODULES(LIBPNG, libpng >= 1.2, [ have_png=yes AC_DEFINE(HAVE_LIBPNG, 1, have the png library) ], [ have_png=no AC_MSG_RESULT($LIBPNG_PKG_ERRORS) ] ) PKG_CHECK_MODULES(CFITSIO, cfitsio, [ have_cfitsio=yes AC_DEFINE(HAVE_LIBCFITSIO, 1, have the cfitsio library) ], [ have_cfitsio=no AC_MSG_RESULT($CFITSIO_PKG_ERRORS) ] ) PKG_CHECK_MODULES(EXIV2, exiv2 >= 0.20, [ have_exiv2=yes AC_DEFINE(HAVE_EXIV2, 1, have the exiv2 library) ], [ have_exiv2=no AC_MSG_RESULT($EXIV2_PKG_ERRORS) ] ) PKG_CHECK_MODULES(LENSFUN, lensfun >= 0.2.5, [ have_lensfun=yes AC_DEFINE(HAVE_LENSFUN, 1, have the lensfun library) ], [ have_lensfun=no AC_MSG_RESULT($LENSFUN_PKG_ERRORS) ] ) # Make sure MSGFMT_OPTS is defined for all combinations of autoconf and glib. MSGFMT_OPTS= ALL_LINGUAS="ca cs da de es fr it ja ko nb nl pl pt ru sr sr@latin sv zh_CN zh_TW" AM_GLIB_GNU_GETTEXT LIBS="$LIBS $INTLLIBS" # The following might not work with some combinations of autoconf and glib due # to a missing update of the glib-gettext.m4 file. #AM_GLIB_DEFINE_LOCALEDIR(UFRAW_LOCALEDIR) GETTEXT_PACKAGE=ufraw AC_SUBST(GETTEXT_PACKAGE) AC_SUBST(MSGFMT_OPTS) # UFRAW_CPPFLAGS is added to the preprocessor flags AM_CPPFLAGS, # affecting also the C and C++ compilers. UFRAW_CPPFLAGS="$UFRAW_CPPFLAGS $EXIV2_CFLAGS $GTK_CFLAGS $GLIB_CFLAGS $LCMS_CFLAGS $LENSFUN_CFLAGS $LIBTIFF_CFLAGS $LIBPNG_CFLAGS $CFITSIO_CFLAGS" AC_SUBST(UFRAW_CPPFLAGS) # UFRAW_LDADD is added to the linker flags LDADD. UFRAW_LDADD="$UFRAW_LDADD $EXIV2_LIBS $GLIB_LIBS $LCMS_LIBS $LENSFUN_LIBS $LIBTIFF_LIBS $LIBPNG_LIBS $CFITSIO_LIBS $CARBON_LIBS" AC_SUBST(UFRAW_LDADD) # Windows and Darwin (Mac OS X) will require some special attention. case $host_os in *mingw* ) ufraw_win32=yes ufraw_darwin=no ;; *darwin* ) ufraw_win32=no ufraw_darwin=yes ;; * ) ufraw_win32=no ufraw_darwin=no ;; esac AM_CONDITIONAL(UFRAW_WIN32, test x$ufraw_win32 = xyes) if test $ufraw_win32 = yes; then CFLAGS="$CFLAGS -mwindows -mms-bitfields" CXXFLAGS="$CXXFLAGS -mwindows -mms-bitfields" CONSOLE="-mconsole" AC_MSG_CHECKING(whether to add the -mno-cygwin flag to CFLAGS and CXXFLAGS) AC_ARG_ENABLE(no_cygwin, [ --enable-no-cygwin add the -mno-cygwin flag to CFLAGS and CXXFLAGS (only in Windows) ], , enable_no_cygwin=no) AC_MSG_RESULT($enable_no_cygwin) if test $enable_no_cygwin = yes; then CFLAGS="$CFLAGS -mno-cygwin" CXXFLAGS="$CXXFLAGS -mno-cygwin" fi else CONSOLE= fi AC_SUBST(CONSOLE) # Check for the Apple Carbon framework (needed for GDK_WINDOWING_QUARTZ). CARBON_LIBS= if test $ufraw_darwin = yes; then carbon_ok=no AC_MSG_CHECKING([for Mac OS X Carbon support]) AC_TRY_CPP([ #include #include #include ], carbon_ok=yes) AC_MSG_RESULT($carbon_ok) if test "x$carbon_ok" = "xyes"; then CARBON_LIBS="-framework Carbon -framework Cocoa" fi fi AC_SUBST(CARBON_LIBS) AC_ARG_WITH(dosprefix, [ --with-dosprefix=PREFIX PREFIX is the prefix in dos format (needed only in Windows) ], [ with_dosprefix=$withval], [ with_dosprefix=NONE ] ) # The ws2_32 library is required for the ntohs symbol on win32. if test $ufraw_win32 = yes; then LIBS="$LIBS -lws2_32" fi if test $ufraw_win32 = yes; then AC_CHECK_PROGS(WINDRES, $host_alias-windres $target_alias-windres windres, , $PATH) AC_SUBST(WINDRES) # For the Windows-installer make needs the location of the DLLs PREFIX=$with_prefix AC_SUBST(PREFIX) # and ISCC (ufraw-setup.iss.in) needs them in DOS format... DOSPREFIX=$with_dosprefix AC_SUBST(DOSPREFIX) ISCC="\"\$(PROGRAMFILES)\"/Inno\ Setup\ 5/ISCC.exe" AC_SUBST(ISCC) case $build_os in *cygwin* | *mingw* ) WINE="" COMMENT_ICON="" ;; * ) # Only needed if you plan to cross-build Windows-installer from Linux. test -z "$PROGRAMFILES" && PROGRAMFILES="C:\\Program Files" AC_SUBST(PROGRAMFILES) WINE="wine" COMMENT_ICON=";" esac AC_SUBST(WINE) AC_SUBST(COMMENT_ICON) fi AC_MSG_CHECKING(whether to install mime types) AC_ARG_ENABLE(mime, [ --enable-mime install mime files, see README for more information], , enable_mime=no) AC_MSG_RESULT($enable_mime) AM_CONDITIONAL(INSTALL_MIME, test $enable_mime = yes) AC_MSG_CHECKING(whether to build extras) AC_ARG_ENABLE(extras, [ --enable-extras build extra (dcraw, nikon-curve) executables], , enable_extras=no) AC_MSG_RESULT($enable_extras) AM_CONDITIONAL(MAKE_EXTRAS, test $enable_extras = yes) AC_MSG_CHECKING(whether to enable DST correction for file timestamps) AC_ARG_ENABLE(dst_correction, [ --enable-dst-correction enable DST correction for file timestamps], AC_DEFINE(LOCALTIME, 1, DST correction enabled), enable_dst_correction=no) AC_MSG_RESULT($enable_dst_correction) AC_MSG_CHECKING(whether to enable the contrast setting option) AC_ARG_ENABLE(contrast, [ --enable-contrast enable the contrast setting option], AC_DEFINE(UFRAW_CONTRAST, 1, Contrast setting option enabled), enable_contrast=no) AC_MSG_RESULT($enable_contrast) AC_MSG_CHECKING(whether to enable support for the FUJIFILM 'X-Trans' sensor) AC_ARG_ENABLE(x_trans, [ --enable-x-trans enable support for the FUJIFILM 'X-Trans' sensor], AC_DEFINE(UFRAW_X_TRANS, 1, FUJIFILM 'X-Trans' sensor support enabled), enable_x_trans=no) AC_MSG_RESULT($enable_x_trans) AC_MSG_CHECKING(whether to enable 'None' interpolation) AC_ARG_ENABLE(interp_none, [ --enable-interp-none enable 'None' interpolation (mostly for debugging)], AC_DEFINE(ENABLE_INTERP_NONE, 1, 'None' interpolation enabled), enable_interp_none=no) AC_MSG_RESULT($enable_interp_none) AC_MSG_CHECKING(whether to enable debugging with valgrind) AC_ARG_ENABLE(valgrind, [ --enable-valgrind enable debugging with valgrind], AC_DEFINE(UFRAW_VALGRIND, 1, Debugging with valgrind enabled), enable_valgrind=no) AC_MSG_RESULT($enable_valgrind) AC_CONFIG_FILES(Makefile) AC_CONFIG_FILES(icons/Makefile) AC_CONFIG_FILES(po/Makefile.in) AC_CONFIG_FILES(ufraw-setup.iss) AC_OUTPUT AC_MSG_NOTICE(====================== summary =====================) AC_MSG_NOTICE(build GTK GUI: $have_gtk) AC_MSG_NOTICE(build GIMP plug-in: $have_gimp) AC_MSG_NOTICE(build CinePaint plug-in: $have_cinepaint) AC_MSG_NOTICE(EXIF support using exiv2: $have_exiv2) AC_MSG_NOTICE(JPEG support: $have_jpeg) AC_MSG_NOTICE(JPEG2000 (libjasper) support: $have_jasper) AC_MSG_NOTICE(TIFF support: $have_tiff) AC_MSG_NOTICE(PNG support: $have_png) AC_MSG_NOTICE(FITS support: $have_cfitsio) AC_MSG_NOTICE(gzip compressed raw support: $have_zlib) AC_MSG_NOTICE(bzip2 compressed raw support: $have_libbz2) AC_MSG_NOTICE(Lens defects correction via lensfun: $have_lensfun) ufraw-0.19.2/ufraw-gimp.c0000664000175000017500000004313512117516560012106 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw-gimp.c - The GIMP plug-in. * Copyright 2004-2013 by Udi Fuchs * * based on the GIMP plug-in by Pawel T. Jochym jochym at ifj edu pl, * * based on the GIMP plug-in by Dave Coffin * http://www.cybercom.net/~dcoffin/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #ifdef UFRAW_CINEPAINT /* Bypass a bug in CinePaint header files */ #define RNH_FLOAT #include #define GIMP_CONST /* Fix some compatibility issues between CinePaint and GIMP */ typedef GimpRunModeType GimpRunMode; #define PLUGIN_MODE 2 #define DEPTH_TO_BASETYPE(depth) (depth == 3 ? RGB : U16_RGB) #define DEPTH_TO_IMAGETYPE(depth) (depth == 3 ? RGB_IMAGE : U16_RGB_IMAGE) #else /* GIMP */ #if HAVE_GIMP_2_9 #include #define PLUGIN_MODE 2 #else #define PLUGIN_MODE 1 #endif #include #include #include #define GIMP_CONST const /* Missing and irrelevant definitions in GIMP */ #define U16_RGB 0 #define U16_RGB_IMAGE 0 #define DEPTH_TO_BASETYPE(depth) GIMP_RGB #define DEPTH_TO_IMAGETYPE(depth) GIMP_RGB_IMAGE #define DEPTH_TO_PRECISION(depth) (depth == 3 ? GIMP_PRECISION_U8 : GIMP_PRECISION_U16) #endif #include #include void query(); void run(GIMP_CONST gchar *name, gint nparams, GIMP_CONST GimpParam *param, gint *nreturn_vals, GimpParam **return_vals); long ufraw_save_gimp_image(ufraw_data *uf, GtkWidget *widget); GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_procedure */ NULL, /* quit_procedure */ query, /* query_procedure */ run, /* run_procedure */ }; MAIN() void query() { static GIMP_CONST GimpParamDef load_args[] = { { GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" }, { GIMP_PDB_STRING, "filename", "The name of the file to load" }, { GIMP_PDB_STRING, "raw_filename", "The name of the file to load" }, }; static GIMP_CONST GimpParamDef load_return_vals[] = { { GIMP_PDB_IMAGE, "image", "Output image" }, }; #ifndef UFRAW_CINEPAINT static GIMP_CONST GimpParamDef thumb_args[] = { { GIMP_PDB_STRING, "filename", "The name of the file to load" }, { GIMP_PDB_INT32, "thumb_size", "Preferred thumbnail size" } }; static GIMP_CONST GimpParamDef thumb_return_vals[] = { { GIMP_PDB_IMAGE, "image", "Thumbnail image" }, { GIMP_PDB_INT32, "image_width", "Width of full-sized image" }, { GIMP_PDB_INT32, "image_height", "Height of full-sized image" } }; #endif gimp_install_procedure("file_ufraw_load", "Loads digital camera raw files", "Loads digital camera raw files.", "Udi Fuchs", "Copyright 2003 by Dave Coffin\n" "Copyright 2004 by Pawel Jochym\n" "Copyright 2004-2013 by Udi Fuchs", "ufraw-" VERSION, #ifndef UFRAW_CINEPAINT "raw image", #else "/UFRaw", #endif NULL, GIMP_PLUGIN, G_N_ELEMENTS(load_args), G_N_ELEMENTS(load_return_vals), load_args, load_return_vals); gimp_register_load_handler("file_ufraw_load", (char *)raw_ext, ""); #ifndef UFRAW_CINEPAINT gimp_install_procedure("file_ufraw_load_thumb", "Loads thumbnails from digital camera raw files.", "Loads thumbnails from digital camera raw files.", "Udi Fuchs", "Copyright 2004-2013 by Udi Fuchs", "ufraw-" VERSION, NULL, NULL, GIMP_PLUGIN, G_N_ELEMENTS(thumb_args), G_N_ELEMENTS(thumb_return_vals), thumb_args, thumb_return_vals); gimp_register_thumbnail_loader("file_ufraw_load", "file_ufraw_load_thumb"); #endif } char *ufraw_binary; #ifdef UFRAW_CINEPAINT /* There is no way to get the full executable path in Cinepaint. * It is only needed for windows, so no big deal. */ char *gimp_get_progname() { return "ufraw-cinepaint"; } #endif gboolean sendToGimpMode; void run(GIMP_CONST gchar *name, gint nparams, GIMP_CONST GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) { // TODO: Check if the static variable here is really needed. // In any case this should cause no issues with threads. static GimpParam values[4]; GimpRunMode run_mode; char *filename; int size; ufraw_data *uf; conf_data rc; int status; #if !GLIB_CHECK_VERSION(2,31,0) g_thread_init(NULL); #endif gdk_threads_init(); gdk_threads_enter(); ufraw_binary = g_path_get_basename(gimp_get_progname()); uf_init_locale(gimp_get_progname()); #if HAVE_GIMP_2_9 gegl_init(NULL, NULL); #endif *nreturn_vals = 1; *return_vals = values; if (!strcmp(name, "file_ufraw_load_thumb")) { run_mode = 0; filename = param[0].data.d_string; size = param[1].data.d_int32; } else if (!strcmp(name, "file_ufraw_load")) { run_mode = (GimpRunMode)param[0].data.d_int32; filename = param[1].data.d_string; size = 0; } else { values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = GIMP_PDB_CALLING_ERROR; gdk_threads_leave(); return; } gboolean loadThumbnail = size > 0; char *gtkrcfile = g_build_filename(uf_get_home_dir(), ".ufraw-gtkrc", NULL); gtk_rc_add_default_file(gtkrcfile); g_free(gtkrcfile); gimp_ui_init("ufraw-gimp", TRUE); uf = ufraw_open(filename); /* if UFRaw fails on jpg/jpeg or tif/tiff then open with GIMP */ if (uf == NULL) { if (!strcasecmp(filename + strlen(filename) - 4, ".jpg") || !strcasecmp(filename + strlen(filename) - 5, ".jpeg")) { if (loadThumbnail) *return_vals = gimp_run_procedure2("file_jpeg_load_thumb", nreturn_vals, nparams, param); else *return_vals = gimp_run_procedure2("file_jpeg_load", nreturn_vals, nparams, param); gdk_threads_leave(); return; } else if (!strcasecmp(filename + strlen(filename) - 4, ".tif") || !strcasecmp(filename + strlen(filename) - 5, ".tiff")) { if (!loadThumbnail) *return_vals = gimp_run_procedure2("file_tiff_load", nreturn_vals, nparams, param); else { /* There is no "file_tiff_load_thumb". * The call to "file_ufraw_load" will handle the thumbnail */ /* Following is another solution for tiff thumbnails GimpParam tiffParam[3]; tiffParam[0].type = GIMP_PDB_INT32; tiffParam[0].data.d_int32 = GIMP_RUN_NONINTERACTIVE; tiffParam[1].type = GIMP_PDB_STRING; tiffParam[1].data.d_string = filename; tiffParam[2].type = GIMP_PDB_STRING; tiffParam[2].data.d_string = filename; *return_vals = gimp_run_procedure2 ("file_tiff_load", nreturn_vals, 3, tiffParam); */ } gdk_threads_leave(); return; } else { /* Don't issue a message on thumbnail failure, since ufraw-gimp * will be called again with "file_ufraw_load" */ if (loadThumbnail) { gdk_threads_leave(); return; } ufraw_icons_init(); GtkWidget *dummyWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_icon_name(GTK_WINDOW(dummyWindow), "ufraw"); ufraw_message(UFRAW_SET_PARENT, (char *)dummyWindow); ufraw_message(UFRAW_REPORT, NULL); values[0].type = GIMP_PDB_STATUS; /* With GIMP_PDB_CANCEL, Gimp won't issue a warning */ values[0].data.d_status = GIMP_PDB_CANCEL; gtk_widget_destroy(dummyWindow); gdk_threads_leave(); return; } } /* Load $HOME/.ufrawrc */ conf_load(&rc, NULL); ufraw_config(uf, &rc, NULL, NULL); sendToGimpMode = (uf->conf->createID == send_id); #if !defined(UFRAW_CINEPAINT) && !HAVE_GIMP_2_9 if (loadThumbnail) { uf->conf->size = size; uf->conf->embeddedImage = TRUE; } #else if (run_mode == GIMP_RUN_NONINTERACTIVE) uf->conf->shrink = 8; #endif /* UFRaw already issues warnings. * With GIMP_PDB_CANCEL, Gimp won't issue another one. */ values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = GIMP_PDB_CANCEL; /* BUG - what should be done with GIMP_RUN_WITH_LAST_VALS */ if (run_mode == GIMP_RUN_INTERACTIVE && !loadThumbnail && !sendToGimpMode) { /* Show the preview in interactive mode, unless if we are * in thumbnail mode or 'send to gimp' mode. */ status = ufraw_preview(uf, &rc, PLUGIN_MODE, ufraw_save_gimp_image); } else { if (sendToGimpMode) { char *text = g_strdup_printf(_("Loading raw file '%s'"), uf->filename); gimp_progress_init(text); g_free(text); } if (sendToGimpMode) gimp_progress_update(0.1); status = ufraw_load_raw(uf); if (status != UFRAW_SUCCESS) { values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR; gdk_threads_leave(); return; } if (sendToGimpMode) gimp_progress_update(0.3); ufraw_save_gimp_image(uf, NULL); if (sendToGimpMode) gimp_progress_update(1.0); ufraw_close_darkframe(uf->conf); ufraw_close(uf); /* To make sure we don't delete the raw file by mistake we check * that the file is really an ID file. */ if (sendToGimpMode && strcasecmp(filename + strlen(filename) - 6, ".ufraw") == 0) g_unlink(filename); } if (status != UFRAW_SUCCESS || uf->gimpImage == -1) { values[0].type = GIMP_PDB_STATUS; if (status == UFRAW_CANCEL) values[0].data.d_status = GIMP_PDB_CANCEL; else values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR; gdk_threads_leave(); return; } *nreturn_vals = 2; values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = GIMP_PDB_SUCCESS; values[1].type = GIMP_PDB_IMAGE; values[1].data.d_image = uf->gimpImage; if (loadThumbnail) { *nreturn_vals = 4; values[2].type = GIMP_PDB_INT32; values[2].data.d_int32 = uf->initialWidth; values[3].type = GIMP_PDB_INT32; values[3].data.d_int32 = uf->initialHeight; } gdk_threads_leave(); return; } int gimp_row_writer(ufraw_data *uf, void *volatile out, void *pixbuf, int row, int width, int height, int grayscale, int bitDepth) { (void)uf; (void)grayscale; (void)bitDepth; #if HAVE_GIMP_2_9 gegl_buffer_set(out, GEGL_RECTANGLE(0, row, width, height), 0, NULL, pixbuf, GEGL_AUTO_ROWSTRIDE); #else gimp_pixel_rgn_set_rect(out, pixbuf, 0, row, width, height); #endif return UFRAW_SUCCESS; } long ufraw_save_gimp_image(ufraw_data *uf, GtkWidget *widget) { #if HAVE_GIMP_2_9 GeglBuffer *buffer; #else GimpDrawable *drawable; GimpPixelRgn pixel_region; int tile_height, row, nrows; #endif gint32 layer; UFRectangle Crop; int depth; (void)widget; uf->gimpImage = -1; if (uf->conf->embeddedImage) { if (ufraw_convert_embedded(uf) != UFRAW_SUCCESS) return UFRAW_ERROR; Crop.height = uf->thumb.height; Crop.width = uf->thumb.width; Crop.y = 0; Crop.x = 0; depth = 3; } else { if (ufraw_convert_image(uf) != UFRAW_SUCCESS) return UFRAW_ERROR; ufraw_get_scaled_crop(uf, &Crop); #if defined(UFRAW_CINEPAINT) || HAVE_GIMP_2_9 if (uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].BitDepth == 16) depth = 6; else depth = 3; #else depth = 3; #endif } #if HAVE_GIMP_2_9 uf->gimpImage = gimp_image_new_with_precision(Crop.width, Crop.height, DEPTH_TO_BASETYPE(depth), DEPTH_TO_PRECISION(depth)); #else uf->gimpImage = gimp_image_new(Crop.width, Crop.height, DEPTH_TO_BASETYPE(depth)); #endif if (uf->gimpImage == -1) { ufraw_message(UFRAW_ERROR, _("Can't allocate new image.")); return UFRAW_ERROR; } gimp_image_set_filename(uf->gimpImage, uf->filename); /* Create the "background" layer to hold the image... */ layer = gimp_layer_new(uf->gimpImage, _("Background"), Crop.width, Crop.height, DEPTH_TO_IMAGETYPE(depth), 100.0, GIMP_NORMAL_MODE); #ifdef UFRAW_CINEPAINT gimp_image_add_layer(uf->gimpImage, layer, 0); #else #if defined(GIMP_CHECK_VERSION) && GIMP_CHECK_VERSION(2,7,3) gimp_image_insert_layer(uf->gimpImage, layer, 0, 0); #else gimp_image_add_layer(uf->gimpImage, layer, 0); #endif #endif /* Get the drawable and set the pixel region for our load... */ #if HAVE_GIMP_2_9 buffer = gimp_drawable_get_buffer(layer); #else drawable = gimp_drawable_get(layer); gimp_pixel_rgn_init(&pixel_region, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); tile_height = gimp_tile_height(); #endif if (uf->conf->embeddedImage) { #if HAVE_GIMP_2_9 gegl_buffer_set(buffer, GEGL_RECTANGLE(0, 0, Crop.width, Crop.height), 0, NULL, uf->thumb.buffer, GEGL_AUTO_ROWSTRIDE); #else for (row = 0; row < Crop.height; row += tile_height) { nrows = MIN(Crop.height - row, tile_height); gimp_pixel_rgn_set_rect(&pixel_region, uf->thumb.buffer + 3 * row * Crop.width, 0, row, Crop.width, nrows); } #endif } else { #if HAVE_GIMP_2_9 ufraw_write_image_data(uf, buffer, &Crop, depth == 3 ? 8 : 16, 0, gimp_row_writer); #else ufraw_write_image_data(uf, &pixel_region, &Crop, depth == 3 ? 8 : 16, 0, gimp_row_writer); #endif } #if HAVE_GIMP_2_9 gegl_buffer_flush(buffer); #else gimp_drawable_flush(drawable); gimp_drawable_detach(drawable); #endif if (uf->conf->embeddedImage) return UFRAW_SUCCESS; #ifdef UFRAW_CINEPAINT /* No parasites in CinePaint. * We need to disable EXIF export. * ICC profile export works differently. */ if (strcmp(uf->developer->profileFile[out_profile], "") == 0) { gimp_image_set_srgb_profile(uf->gimpImage); } else { char *buf; gsize len; if (g_file_get_contents(uf->developer->profileFile[out_profile], &buf, &len, NULL)) { gimp_image_set_icc_profile_by_mem(uf->gimpImage, len, buf, ICC_IMAGE_PROFILE); g_free(buf); } else { ufraw_message(UFRAW_WARNING, _("Failed to embed output profile '%s' in image."), uf->developer->profileFile[out_profile]); } } #else ufraw_exif_prepare_output(uf); if (uf->outputExifBuf != NULL) { if (uf->outputExifBufLen > 65533) { ufraw_message(UFRAW_SET_WARNING, _("EXIF buffer length %d, too long, ignored."), uf->outputExifBufLen); } else { GimpParasite *exif_parasite; exif_parasite = gimp_parasite_new("exif-data", GIMP_PARASITE_PERSISTENT, uf->outputExifBufLen, uf->outputExifBuf); gimp_image_parasite_attach(uf->gimpImage, exif_parasite); gimp_parasite_free(exif_parasite); } } /* Create "icc-profile" parasite from output profile * if it is not the internal sRGB.*/ if (strcmp(uf->developer->profileFile[out_profile], "")) { char *buf; gsize len; if (g_file_get_contents(uf->developer->profileFile[out_profile], &buf, &len, NULL)) { GimpParasite *icc_parasite; icc_parasite = gimp_parasite_new("icc-profile", GIMP_PARASITE_PERSISTENT, len, buf); gimp_image_parasite_attach(uf->gimpImage, icc_parasite); gimp_parasite_free(icc_parasite); g_free(buf); } else { ufraw_message(UFRAW_WARNING, _("Failed to embed output profile '%s' in image."), uf->developer->profileFile[out_profile]); } } #endif return UFRAW_SUCCESS; } ufraw-0.19.2/ufraw_ufraw.c0000664000175000017500000025104712122217612012353 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_ufraw.c - program interface to all the components * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "dcraw_api.h" #ifdef HAVE_LENSFUN #include #endif #include #include #include /* for fstat() */ #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_LIBZ #include #endif #ifdef HAVE_LIBBZ2 #include #endif void (*ufraw_progress)(int what, int ticks) = NULL; #ifdef HAVE_LENSFUN #define UF_LF_TRANSFORM ( \ LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE) static void ufraw_convert_image_vignetting(ufraw_data *uf, ufraw_image_data *img, UFRectangle *area); static void ufraw_convert_image_tca(ufraw_data *uf, ufraw_image_data *img, ufraw_image_data *outimg, UFRectangle *area); void ufraw_prepare_tca(ufraw_data *uf); #endif static void ufraw_image_format(int *colors, int *bytes, ufraw_image_data *img, const char *formats, const char *caller); static void ufraw_convert_image_raw(ufraw_data *uf, UFRawPhase phase); static void ufraw_convert_image_first(ufraw_data *uf, UFRawPhase phase); static void ufraw_convert_image_transform(ufraw_data *uf, ufraw_image_data *img, ufraw_image_data *outimg, UFRectangle *area); static void ufraw_convert_prepare_first_buffer(ufraw_data *uf, ufraw_image_data *img); static void ufraw_convert_prepare_transform_buffer(ufraw_data *uf, ufraw_image_data *img, int width, int height); static void ufraw_convert_reverse_wb(ufraw_data *uf, UFRawPhase phase); static void ufraw_convert_import_buffer(ufraw_data *uf, UFRawPhase phase, dcraw_image_data *dcimg); static int make_temporary(char *basefilename, char **tmpfilename) { int fd; char *basename = g_path_get_basename(basefilename); char *template = g_strconcat(basename, ".tmp.XXXXXX", NULL); fd = g_file_open_tmp(template, tmpfilename, NULL); g_free(template); g_free(basename); return fd; } static ssize_t writeall(int fd, const char *buf, ssize_t size) { ssize_t written; ssize_t wr; for (written = 0; size > 0; size -= wr, written += wr, buf += wr) if ((wr = write(fd, buf, size)) < 0) break; return written; } static char *decompress_gz(char *origfilename) { #ifdef HAVE_LIBZ char *tempfilename; int tmpfd; gzFile gzfile; char buf[8192]; ssize_t size; if ((tmpfd = make_temporary(origfilename, &tempfilename)) == -1) return NULL; char *filename = uf_win32_locale_filename_from_utf8(origfilename); gzfile = gzopen(filename, "rb"); uf_win32_locale_filename_free(filename); if (gzfile != NULL) { while ((size = gzread(gzfile, buf, sizeof buf)) > 0) { if (writeall(tmpfd, buf, size) != size) break; } gzclose(gzfile); if (size == 0) if (close(tmpfd) == 0) return tempfilename; } close(tmpfd); g_unlink(tempfilename); g_free(tempfilename); return NULL; #else (void)origfilename; ufraw_message(UFRAW_SET_ERROR, "Cannot open gzip compressed images.\n"); return NULL; #endif } static char *decompress_bz2(char *origfilename) { #ifdef HAVE_LIBBZ2 char *tempfilename; int tmpfd; FILE *compfile; BZFILE *bzfile; int bzerror; char buf[8192]; ssize_t size; if ((tmpfd = make_temporary(origfilename, &tempfilename)) == -1) return NULL; compfile = g_fopen(origfilename, "rb"); if (compfile != NULL) { if ((bzfile = BZ2_bzReadOpen(&bzerror, compfile, 0, 0, 0, 0)) != 0) { while ((size = BZ2_bzRead(&bzerror, bzfile, buf, sizeof buf)) > 0) if (writeall(tmpfd, buf, size) != size) break; BZ2_bzReadClose(&bzerror, bzfile); fclose(compfile); if (size == 0) { close(tmpfd); return tempfilename; } } } close(tmpfd); g_unlink(tempfilename); g_free(tempfilename); return NULL; #else (void)origfilename; ufraw_message(UFRAW_SET_ERROR, "Cannot open bzip2 compressed images.\n"); return NULL; #endif } ufraw_data *ufraw_open(char *filename) { int status; ufraw_data *uf; dcraw_data *raw; ufraw_message(UFRAW_CLEAN, NULL); conf_data *conf = NULL; char *fname, *hostname; char *origfilename; gchar *unzippedBuf = NULL; gsize unzippedBufLen = 0; fname = g_filename_from_uri(filename, &hostname, NULL); if (fname != NULL) { if (hostname != NULL) { ufraw_message(UFRAW_SET_ERROR, _("Remote URI is not supported")); g_free(hostname); g_free(fname); return NULL; } g_strlcpy(filename, fname, max_path); g_free(fname); } /* First handle ufraw ID files. */ if (strcasecmp(filename + strlen(filename) - 6, ".ufraw") == 0) { conf = g_new(conf_data, 1); status = conf_load(conf, filename); if (status != UFRAW_SUCCESS) { g_free(conf); return NULL; } /* If inputFilename and outputFilename have the same path, * then inputFilename is searched for in the path of the ID file. * This allows moving raw and ID files together between folders. */ char *inPath = g_path_get_dirname(conf->inputFilename); char *outPath = g_path_get_dirname(conf->outputFilename); if (strcmp(inPath, outPath) == 0) { char *path = g_path_get_dirname(filename); char *inName = g_path_get_basename(conf->inputFilename); char *inFile = g_build_filename(path, inName , NULL); if (g_file_test(inFile, G_FILE_TEST_EXISTS)) { g_strlcpy(conf->inputFilename, inFile, max_path); } g_free(path); g_free(inName); g_free(inFile); } g_free(inPath); g_free(outPath); /* Output image should be created in the path of the ID file */ char *path = g_path_get_dirname(filename); g_strlcpy(conf->outputPath, path, max_path); g_free(path); filename = conf->inputFilename; } origfilename = filename; if (!strcasecmp(filename + strlen(filename) - 3, ".gz")) filename = decompress_gz(filename); else if (!strcasecmp(filename + strlen(filename) - 4, ".bz2")) filename = decompress_bz2(filename); if (filename == 0) { ufraw_message(UFRAW_SET_ERROR, "Error creating temporary file for compressed data."); return NULL; } raw = g_new(dcraw_data, 1); status = dcraw_open(raw, filename); if (filename != origfilename) { g_file_get_contents(filename, &unzippedBuf, &unzippedBufLen, NULL); g_unlink(filename); g_free(filename); filename = origfilename; } if (status != DCRAW_SUCCESS) { /* Hold the message without displaying it */ ufraw_message(UFRAW_SET_WARNING, raw->message); if (status != DCRAW_WARNING) { g_free(raw); g_free(unzippedBuf); return NULL; } } uf = g_new0(ufraw_data, 1); ufraw_message_init(uf); uf->rgbMax = 0; // This indicates that the raw file was not loaded yet. uf->unzippedBuf = unzippedBuf; uf->unzippedBufLen = unzippedBufLen; uf->conf = conf; g_strlcpy(uf->filename, filename, max_path); int i; for (i = ufraw_raw_phase; i < ufraw_phases_num; i++) { uf->Images[i].buffer = NULL; uf->Images[i].width = 0; uf->Images[i].height = 0; uf->Images[i].valid = 0; uf->Images[i].invalidate_event = TRUE; } uf->thumb.buffer = NULL; uf->raw = raw; uf->colors = raw->colors; uf->raw_color = raw->raw_color; uf->developer = NULL; uf->AutoDeveloper = NULL; uf->displayProfile = NULL; uf->displayProfileSize = 0; uf->RawHistogram = NULL; uf->HaveFilters = raw->filters != 0; #ifdef HAVE_LENSFUN uf->modFlags = 0; uf->TCAmodifier = NULL; uf->modifier = NULL; #endif uf->inputExifBuf = NULL; uf->outputExifBuf = NULL; ufraw_message(UFRAW_SET_LOG, "ufraw_open: w:%d h:%d curvesize:%d\n", raw->width, raw->height, raw->toneCurveSize); return uf; } int ufraw_load_darkframe(ufraw_data *uf) { if (strlen(uf->conf->darkframeFile) == 0) return UFRAW_SUCCESS; if (uf->conf->darkframe != NULL) { // If the same file was already openned, there is nothing to do. if (strcmp(uf->conf->darkframeFile, uf->conf->darkframe->filename) == 0) return UFRAW_SUCCESS; // Otherwise we need to close the previous darkframe ufraw_close_darkframe(uf->conf); } ufraw_data *dark = uf->conf->darkframe = ufraw_open(uf->conf->darkframeFile); if (dark == NULL) { ufraw_message(UFRAW_ERROR, _("darkframe error: %s is not a raw file\n"), uf->conf->darkframeFile); uf->conf->darkframeFile[0] = '\0'; return UFRAW_ERROR; } dark->conf = g_new(conf_data, 1); conf_init(dark->conf); /* initialize ufobject member */ dark->conf->ufobject = ufraw_image_new(); /* disable all auto settings on darkframe */ dark->conf->autoExposure = disabled_state; dark->conf->autoBlack = disabled_state; if (ufraw_load_raw(dark) != UFRAW_SUCCESS) { ufraw_message(UFRAW_ERROR, _("error loading darkframe '%s'\n"), uf->conf->darkframeFile); ufraw_close(dark); g_free(dark); uf->conf->darkframe = NULL; uf->conf->darkframeFile[0] = '\0'; return UFRAW_ERROR; } // Make sure the darkframe matches the main data dcraw_data *raw = uf->raw; dcraw_data *darkRaw = dark->raw; if (raw->width != darkRaw->width || raw->height != darkRaw->height || raw->colors != darkRaw->colors) { ufraw_message(UFRAW_WARNING, _("Darkframe '%s' is incompatible with main image"), uf->conf->darkframeFile); ufraw_close(dark); g_free(dark); uf->conf->darkframe = NULL; uf->conf->darkframeFile[0] = '\0'; return UFRAW_ERROR; } ufraw_message(UFRAW_BATCH_MESSAGE, _("using darkframe '%s'\n"), uf->conf->darkframeFile); /* Calculate dark frame hot pixel thresholds as the 99.99th percentile * value. That is, the value at which 99.99% of the pixels are darker. * Pixels below this threshold are considered to be bias noise, and * those above are "hot". */ int color; int i; long frequency[65536]; long sum; long point = darkRaw->raw.width * darkRaw->raw.height / 10000; for (color = 0; color < darkRaw->raw.colors; ++color) { memset(frequency, 0, sizeof frequency); for (i = 0; i < darkRaw->raw.width * darkRaw->raw.height; ++i) frequency[darkRaw->raw.image[i][color]]++; for (sum = 0, i = 65535; i > 1; --i) { sum += frequency[i]; if (sum >= point) break; } darkRaw->thresholds[color] = i + 1; } return UFRAW_SUCCESS; } // Get the dimensions of the unshrunk, rotated image. // The crop coordinates are calculated based on these dimensions. void ufraw_get_image_dimensions(ufraw_data *uf) { dcraw_image_dimensions(uf->raw, uf->conf->orientation, 1, &uf->initialHeight, &uf->initialWidth); ufraw_get_image(uf, ufraw_transform_phase, FALSE); if (uf->conf->CropX1 < 0) uf->conf->CropX1 = 0; if (uf->conf->CropY1 < 0) uf->conf->CropY1 = 0; if (uf->conf->CropX2 < 0) uf->conf->CropX2 = uf->rotatedWidth; if (uf->conf->CropY2 < 0) uf->conf->CropY2 = uf->rotatedHeight; if (uf->conf->aspectRatio <= 0) { if (uf->conf->autoCrop) /* preserve the initial aspect ratio - this should be consistent with ufraw_convert_prepare_transform */ uf->conf->aspectRatio = ((double)uf->initialWidth) / uf->initialHeight; else /* full rotated image / manually entered crop */ uf->conf->aspectRatio = ((double)uf->conf->CropX2 - uf->conf->CropX1) / (uf->conf->CropY2 - uf->conf->CropY1); } else { /* given aspectRatio */ int cropWidth = uf->conf->CropX2 - uf->conf->CropX1; int cropHeight = uf->conf->CropY2 - uf->conf->CropY1; if (cropWidth != (int)floor(cropHeight * uf->conf->aspectRatio + 0.5)) { /* aspectRatio does not match the crop area - shrink the area */ if ((double)cropWidth / cropHeight > uf->conf->aspectRatio) { cropWidth = floor(cropHeight * uf->conf->aspectRatio + 0.5); uf->conf->CropX1 = (uf->conf->CropX1 + uf->conf->CropX2 - cropWidth) / 2; uf->conf->CropX2 = uf->conf->CropX1 + cropWidth; } else { cropHeight = floor(cropWidth / uf->conf->aspectRatio + 0.5); uf->conf->CropY1 = (uf->conf->CropY1 + uf->conf->CropY2 - cropHeight) / 2; uf->conf->CropY2 = uf->conf->CropY1 + cropHeight; } } } } /* Get scaled crop coordinates in final image coordinates */ void ufraw_get_scaled_crop(ufraw_data *uf, UFRectangle *crop) { ufraw_image_data *img = ufraw_get_image(uf, ufraw_transform_phase, FALSE); float scale_x = ((float)img->width) / uf->rotatedWidth; float scale_y = ((float)img->height) / uf->rotatedHeight; crop->x = MAX(floor(uf->conf->CropX1 * scale_x), 0); int x2 = MIN(ceil(uf->conf->CropX2 * scale_x), img->width); crop->width = x2 - crop->x; crop->y = MAX(floor(uf->conf->CropY1 * scale_y), 0); int y2 = MIN(ceil(uf->conf->CropY2 * scale_y), img->height); crop->height = y2 - crop->y; } int ufraw_config(ufraw_data *uf, conf_data *rc, conf_data *conf, conf_data *cmd) { int status; if (rc->autoExposure == enabled_state) rc->autoExposure = apply_state; if (rc->autoBlack == enabled_state) rc->autoBlack = apply_state; g_assert(uf != NULL); /* Check if we are loading an ID file */ if (uf->conf != NULL) { /* ID file configuration is put "on top" of the rc data */ uf->LoadingID = TRUE; conf_data tmp = *rc; tmp.ufobject = uf->conf->ufobject; conf_copy_image(&tmp, uf->conf); conf_copy_transform(&tmp, uf->conf); conf_copy_save(&tmp, uf->conf); g_strlcpy(tmp.outputFilename, uf->conf->outputFilename, max_path); g_strlcpy(tmp.outputPath, uf->conf->outputPath, max_path); *uf->conf = tmp; } else { uf->LoadingID = FALSE; uf->conf = g_new(conf_data, 1); *uf->conf = *rc; uf->conf->ufobject = ufraw_image_new(); ufobject_copy(uf->conf->ufobject, ufgroup_element(rc->ufobject, ufRawImage)); } if (conf != NULL && conf->version != 0) { conf_copy_image(uf->conf, conf); conf_copy_save(uf->conf, conf); if (uf->conf->autoExposure == enabled_state) uf->conf->autoExposure = apply_state; if (uf->conf->autoBlack == enabled_state) uf->conf->autoBlack = apply_state; } if (cmd != NULL) { status = conf_set_cmd(uf->conf, cmd); if (status != UFRAW_SUCCESS) return status; } dcraw_data *raw = uf->raw; if (ufobject_name(uf->conf->ufobject) != ufRawImage) g_warning("uf->conf->ufobject is not a ufRawImage"); /*Reset EXIF data text fields to avoid spill over between images.*/ strcpy(uf->conf->isoText, ""); strcpy(uf->conf->shutterText, ""); strcpy(uf->conf->apertureText, ""); strcpy(uf->conf->focalLenText, ""); strcpy(uf->conf->focalLen35Text, ""); strcpy(uf->conf->lensText, ""); strcpy(uf->conf->flashText, ""); // lensText is used in ufraw_lensfun_init() if (!uf->conf->embeddedImage) { if (ufraw_exif_read_input(uf) != UFRAW_SUCCESS) { ufraw_message(UFRAW_SET_LOG, "Error reading EXIF data from %s\n", uf->filename); // If exiv2 fails to read the EXIF data, use the EXIF tags read // by dcraw. g_strlcpy(uf->conf->exifSource, "DCRaw", max_name); uf->conf->iso_speed = raw->iso_speed; g_snprintf(uf->conf->isoText, max_name, "%d", (int)uf->conf->iso_speed); uf->conf->shutter = raw->shutter; if (uf->conf->shutter > 0 && uf->conf->shutter < 1) g_snprintf(uf->conf->shutterText, max_name, "1/%0.1f s", 1 / uf->conf->shutter); else g_snprintf(uf->conf->shutterText, max_name, "%0.1f s", uf->conf->shutter); uf->conf->aperture = raw->aperture; g_snprintf(uf->conf->apertureText, max_name, "F/%0.1f", uf->conf->aperture); uf->conf->focal_len = raw->focal_len; g_snprintf(uf->conf->focalLenText, max_name, "%0.1f mm", uf->conf->focal_len); } } ufraw_image_set_data(uf->conf->ufobject, uf); #ifdef HAVE_LENSFUN // Do not reset lensfun settings while loading ID. UFBoolean reset = !uf->LoadingID; if (conf != NULL && conf->version > 0 && conf->ufobject != NULL) { UFObject *conf_lensfun_auto = ufgroup_element(conf->ufobject, ufLensfunAuto); // Do not reset lensfun settings from conf file. if (ufstring_is_equal(conf_lensfun_auto, "no")) reset = FALSE; } ufraw_lensfun_init(ufgroup_element(uf->conf->ufobject, ufLensfun), reset); #endif char *absname = uf_file_set_absolute(uf->filename); g_strlcpy(uf->conf->inputFilename, absname, max_path); g_free(absname); if (!uf->LoadingID) { g_snprintf(uf->conf->inputURI, max_path, "file://%s", uf->conf->inputFilename); struct stat s; fstat(fileno(raw->ifp), &s); g_snprintf(uf->conf->inputModTime, max_name, "%d", (int)s.st_mtime); } if (strlen(uf->conf->outputFilename) == 0) { /* If output filename wasn't specified use input filename */ char *filename = uf_file_set_type(uf->filename, file_type[uf->conf->type]); if (strlen(uf->conf->outputPath) > 0) { char *cp = g_path_get_basename(filename); g_free(filename); filename = g_build_filename(uf->conf->outputPath, cp , NULL); g_free(cp); } g_strlcpy(uf->conf->outputFilename, filename, max_path); g_free(filename); } g_free(uf->unzippedBuf); uf->unzippedBuf = NULL; /* Set the EXIF data */ #ifdef __MINGW32__ /* MinG32 does not have ctime_r(). */ g_strlcpy(uf->conf->timestampText, ctime(&raw->timestamp), max_name); #elif defined(__sun) && !defined(_POSIX_PTHREAD_SEMANTICS) /* Solaris */ /* * Some versions of Solaris followed a draft POSIX.1c standard * where ctime_r took a third length argument. */ ctime_r(&raw->timestamp, uf->conf->timestampText, sizeof(uf->conf->timestampText)); #else /* POSIX.1c version of ctime_r() */ ctime_r(&raw->timestamp, uf->conf->timestampText); #endif if (uf->conf->timestampText[strlen(uf->conf->timestampText) - 1] == '\n') uf->conf->timestampText[strlen(uf->conf->timestampText) - 1] = '\0'; uf->conf->timestamp = raw->timestamp; uf->conf->CameraOrientation = raw->flip; if (!uf->conf->rotate) { uf->conf->orientation = 0; uf->conf->rotationAngle = 0; } else { if (!uf->LoadingID || uf->conf->orientation < 0) uf->conf->orientation = uf->conf->CameraOrientation; // Normalise rotations to a flip, then rotation of 0 < a < 90 degrees. ufraw_normalize_rotation(uf); } /* If there is an embeded curve we "turn on" the custom/camera curve * mechanism */ if (raw->toneCurveSize != 0) { CurveData nc; long pos = ftell(raw->ifp); if (RipNikonNEFCurve(raw->ifp, raw->toneCurveOffset, &nc, NULL) != UFRAW_SUCCESS) { ufraw_message(UFRAW_ERROR, _("Error reading NEF curve")); return UFRAW_WARNING; } fseek(raw->ifp, pos, SEEK_SET); if (nc.m_numAnchors < 2) nc = conf_default.BaseCurve[0]; g_strlcpy(nc.name, uf->conf->BaseCurve[custom_curve].name, max_name); uf->conf->BaseCurve[custom_curve] = nc; int use_custom_curve = 0; if (raw->toneModeSize) { // "AUTO " "HIGH " "CS " "MID.L " "MID.H "NORMAL " "LOW " long pos = ftell(raw->ifp); char buf[9]; fseek(raw->ifp, raw->toneModeOffset, SEEK_SET); // read it in. size_t num = fread(&buf, 9, 1, raw->ifp); if (num != 1) // Maybe this should be a UFRAW_WARNING ufraw_message(UFRAW_SET_LOG, "Warning: tone mode fread %d != %d\n", num, 1); fseek(raw->ifp, pos, SEEK_SET); if (!strncmp(buf, "CS ", sizeof(buf))) use_custom_curve = 1; // down the line, we need to translate the other values into // tone curves! } if (use_custom_curve) { uf->conf->BaseCurve[camera_curve] = uf->conf->BaseCurve[custom_curve]; g_strlcpy(uf->conf->BaseCurve[camera_curve].name, conf_default.BaseCurve[camera_curve].name, max_name); } else { uf->conf->BaseCurve[camera_curve] = conf_default.BaseCurve[camera_curve]; } } else { /* If there is no embeded curve we "turn off" the custom/camera curve * mechanism */ uf->conf->BaseCurve[camera_curve].m_numAnchors = 0; uf->conf->BaseCurve[custom_curve].m_numAnchors = 0; if (uf->conf->BaseCurveIndex == custom_curve || uf->conf->BaseCurveIndex == camera_curve) uf->conf->BaseCurveIndex = linear_curve; } ufraw_load_darkframe(uf); ufraw_get_image_dimensions(uf); return UFRAW_SUCCESS; } /* Scale pixel values: occupy 16 bits to get more precision. In addition * this normalizes the pixel values which is good for non-linear algorithms * which forget to check rgbMax or assume a particular value. */ static unsigned ufraw_scale_raw(dcraw_data *raw) { guint16 *p, *end; int scale; scale = 0; while ((raw->rgbMax << 1) <= 0xffff) { raw->rgbMax <<= 1; ++scale; } if (scale) { end = (guint16 *)(raw->raw.image + raw->raw.width * raw->raw.height); /* OpenMP overhead appears to be too large in this case */ int max = 0x10000 >> scale; for (p = (guint16 *)raw->raw.image; p < end; ++p) if (*p < max) *p <<= scale; else *p = 0xffff; raw->black <<= scale; } return 1 << scale; } int ufraw_load_raw(ufraw_data *uf) { int status; dcraw_data *raw = uf->raw; if (uf->conf->embeddedImage) { dcraw_image_data thumb; if ((status = dcraw_load_thumb(raw, &thumb)) != DCRAW_SUCCESS) { ufraw_message(status, raw->message); return status; } uf->thumb.height = thumb.height; uf->thumb.width = thumb.width; return ufraw_read_embedded(uf); } if ((status = dcraw_load_raw(raw)) != DCRAW_SUCCESS) { ufraw_message(UFRAW_SET_LOG, raw->message); ufraw_message(status, raw->message); if (status != DCRAW_WARNING) return status; } uf->raw_multiplier = ufraw_scale_raw(raw); /* Canon EOS cameras require special exposure normalization */ if (strcmp(uf->conf->make, "Canon") == 0 && strncmp(uf->conf->model, "EOS", 3) == 0) { int c, max = raw->cam_mul[0]; for (c = 1; c < raw->colors; c++) max = MAX(raw->cam_mul[c], max); /* Camera multipliers in DNG file are normalized to 1. * Therefore, they can not be used to normalize exposure. * Also, for some Canon DSLR cameras dcraw cannot read the * camera multipliers (1D for example). */ if (max < 100) { uf->conf->ExposureNorm = 0; ufraw_message(UFRAW_SET_LOG, "Failed to normalizing exposure\n"); } else { /* Convert exposure value from old ID files from before * ExposureNorm */ if (uf->LoadingID && uf->conf->ExposureNorm == 0) uf->conf->exposure -= log(1.0 * raw->rgbMax / max) / log(2); uf->conf->ExposureNorm = max * raw->rgbMax / 4095; ufraw_message(UFRAW_SET_LOG, "Exposure Normalization set to %d (%.2f EV)\n", uf->conf->ExposureNorm, log(1.0 * raw->rgbMax / uf->conf->ExposureNorm) / log(2)); } } else { uf->conf->ExposureNorm = 0; } uf->rgbMax = raw->rgbMax - raw->black; memcpy(uf->rgb_cam, raw->rgb_cam, sizeof uf->rgb_cam); /* Foveon image dimensions are knows only after load_raw()*/ ufraw_get_image_dimensions(uf); if (uf->conf->CropX2 > uf->rotatedWidth) uf->conf->CropX2 = uf->rotatedWidth; if (uf->conf->CropY2 > uf->rotatedHeight) uf->conf->CropY2 = uf->rotatedHeight; // Now we can finally calculate the channel multipliers. if (uf->WBDirty) { UFObject *wb = ufgroup_element(uf->conf->ufobject, ufWB); char *oldWB = g_strdup(ufobject_string_value(wb)); UFObject *wbTuning = ufgroup_element(uf->conf->ufobject, ufWBFineTuning); double oldTuning = ufnumber_value(wbTuning); ufraw_set_wb(uf); /* Here ufobject's automation goes against us. A change in * ChannelMultipliers might change ufWB to uf_manual_wb. * So we need to change it back. */ if (ufarray_is_equal(wb, uf_manual_wb)) ufobject_set_string(wb, oldWB); ufnumber_set(wbTuning, oldTuning); g_free(oldWB); } ufraw_auto_expose(uf); ufraw_auto_black(uf); return UFRAW_SUCCESS; } /* Free any darkframe associated with conf */ void ufraw_close_darkframe(conf_data *conf) { if (conf && conf->darkframe != NULL) { ufraw_close(conf->darkframe); g_free(conf->darkframe); conf->darkframe = NULL; conf->darkframeFile[0] = '\0'; } } void ufraw_close(ufraw_data *uf) { dcraw_close(uf->raw); g_free(uf->unzippedBuf); g_free(uf->raw); g_free(uf->inputExifBuf); g_free(uf->outputExifBuf); int i; for (i = ufraw_raw_phase; i < ufraw_phases_num; i++) g_free(uf->Images[i].buffer); g_free(uf->thumb.buffer); developer_destroy(uf->developer); developer_destroy(uf->AutoDeveloper); g_free(uf->displayProfile); g_free(uf->RawHistogram); #ifdef HAVE_LENSFUN lf_modifier_destroy(uf->TCAmodifier); lf_modifier_destroy(uf->modifier); #endif ufobject_delete(uf->conf->ufobject); g_free(uf->conf); ufraw_message_reset(uf); ufraw_message(UFRAW_CLEAN, NULL); } /* Return the coordinates and the size of given image subarea. * There are always 32 subareas, numbered 0 to 31, ordered in a 4x8 matrix. */ UFRectangle ufraw_image_get_subarea_rectangle(ufraw_image_data *img, unsigned saidx) { int saw = (img->width + 3) / 4; int sah = (img->height + 7) / 8; int sax = saidx % 4; int say = saidx / 4; UFRectangle area; area.x = saw * sax; area.y = sah * say; area.width = (sax < 3) ? saw : (img->width - saw * 3); area.height = (say < 7) ? sah : (img->height - sah * 7); return area; } /* Return the subarea index given some X,Y image coordinates. */ unsigned ufraw_img_get_subarea_idx(ufraw_image_data *img, int x, int y) { int saw = (img->width + 3) / 4; int sah = (img->height + 7) / 8; return (x / saw) + (y / sah) * 4; } void ufraw_developer_prepare(ufraw_data *uf, DeveloperMode mode) { int useMatrix = uf->conf->profileIndex[0] == 1 || uf->colors == 4; if (mode == auto_developer) { if (uf->AutoDeveloper == NULL) uf->AutoDeveloper = developer_init(); developer_prepare(uf->AutoDeveloper, uf->conf, uf->rgbMax, uf->rgb_cam, uf->colors, useMatrix, mode); } else { if (uf->developer == NULL) uf->developer = developer_init(); if (mode == display_developer) { if (uf->conf->profileIndex[display_profile] != 0) { g_free(uf->displayProfile); uf->displayProfile = NULL; } developer_display_profile(uf->developer, uf->displayProfile, uf->displayProfileSize, uf->conf->profile[display_profile] [uf->conf->profileIndex[display_profile]].productName); } developer_prepare(uf->developer, uf->conf, uf->rgbMax, uf->rgb_cam, uf->colors, useMatrix, mode); } } int ufraw_convert_image(ufraw_data *uf) { uf->mark_hotpixels = FALSE; ufraw_developer_prepare(uf, file_developer); ufraw_convert_image_raw(uf, ufraw_raw_phase); ufraw_image_data *img = &uf->Images[ufraw_first_phase]; ufraw_convert_prepare_first_buffer(uf, img); ufraw_convert_image_first(uf, ufraw_first_phase); UFRectangle area = { 0, 0, img->width, img->height }; // prepare_transform has to be called before applying vignetting ufraw_image_data *img2 = &uf->Images[ufraw_transform_phase]; ufraw_convert_prepare_transform_buffer(uf, img2, img->width, img->height); #ifdef HAVE_LENSFUN if (uf->modifier != NULL) { ufraw_convert_image_vignetting(uf, img, &area); } #endif if (img2->buffer != NULL) { area.width = img2->width; area.height = img2->height; /* Apply distortion, geometry and rotation */ ufraw_convert_image_transform(uf, img, img2, &area); g_free(img->buffer); *img = *img2; img2->buffer = NULL; } if (uf->conf->autoCrop && !uf->LoadingID) { ufraw_get_image_dimensions(uf); uf->conf->CropX1 = (uf->rotatedWidth - uf->autoCropWidth) / 2; uf->conf->CropX2 = uf->conf->CropX1 + uf->autoCropWidth; uf->conf->CropY1 = (uf->rotatedHeight - uf->autoCropHeight) / 2; uf->conf->CropY2 = uf->conf->CropY1 + uf->autoCropHeight; } return UFRAW_SUCCESS; } #ifdef HAVE_LENSFUN static void ufraw_convert_image_vignetting(ufraw_data *uf, ufraw_image_data *img, UFRectangle *area) { /* Apply vignetting correction first, before distorting the image */ if (uf->modFlags & LF_MODIFY_VIGNETTING) lf_modifier_apply_color_modification( uf->modifier, img->buffer, area->x, area->y, area->width, area->height, LF_CR_4(RED, GREEN, BLUE, UNKNOWN), img->rowstride); } #endif /* Apply distortion, geometry and rotation in a single pass */ static void ufraw_convert_image_transform(ufraw_data *uf, ufraw_image_data *img, ufraw_image_data *outimg, UFRectangle *area) { float sine = sin(uf->conf->rotationAngle * 2 * M_PI / 360); float cosine = cos(uf->conf->rotationAngle * 2 * M_PI / 360); // If we rotate around the center: // srcX = (X-outimg->width/2)*cosine + (Y-outimg->height/2)*sine; // srcY = -(X-outimg->width/2)*sine + (Y-outimg->height/2)*cosine; // Then the base offset is: // baseX = img->width/2; // baseY = img->height/2; // Since we rotate around the top-left corner, the base offset is: float baseX = img->width / 2 - outimg->width / 2 * cosine - outimg->height / 2 * sine; float baseY = img->height / 2 + outimg->width / 2 * sine - outimg->height / 2 * cosine; #ifdef HAVE_LENSFUN gboolean applyLF = uf->modifier != NULL && (uf->modFlags & UF_LF_TRANSFORM); #endif int x, y, c; for (y = area->y; y < area->y + area->height; y++) { guint8 *cur0 = outimg->buffer + y * outimg->rowstride; float srcX0 = y * sine + baseX; float srcY0 = y * cosine + baseY; for (x = area->x; x < area->x + area->width; x++) { guint16 *cur = (guint16 *)(cur0 + x * outimg->depth); float srcX = srcX0 + x * cosine; float srcY = srcY0 - x * sine; #ifdef HAVE_LENSFUN if (applyLF) { float buff[2]; lf_modifier_apply_geometry_distortion(uf->modifier, srcX, srcY, 1, 1, buff); srcX = buff[0]; srcY = buff[1]; } #endif gint32 xx = (gint32)srcX; gint32 yy = (gint32)srcY; // TODO: better handling of the borders. if (xx < 0 || yy < 0 || xx + 1 >= img->width || yy + 1 >= img->height) { for (c = 0; c < uf->colors; c++) cur[c] = 0; continue; } ufraw_image_type *src = (ufraw_image_type *)(img->buffer + yy * img->rowstride + xx * img->depth); guint64 dx = (gint32)(srcX * 4096.0) - (xx << 12); guint64 dy = (gint32)(srcY * 4096.0) - (yy << 12); for (c = 0; c < uf->colors; c++) cur[c] = ((4096 - dy) * ((4096 - dx) * src[0][c] + dx * src[1][c]) + dy * ((4096 - dx) * src[img->width][c] + (dx) * src[img->width + 1][c])) >> 24; } } } /* * A pixel with a significantly larger value than all of its four direct * neighbours is considered "hot". It will be replaced by the maximum value * of its neighbours. For simplicity border pixels are not considered. * * Reasonable values for uf->conf->hotpixel are in the range 0.5-10. * * Note that the algorithm uses pixel values from previous (processed) and * next (unprocessed) row and whether or not pixels are marked may make a * difference for the hot pixel count. * * Cleanup issue: * - change prototype to void x(ufraw_data *uf, UFRawPhase phase) * - use ufraw_image_format() * - use uf->rgbMax (check, must be about 64k) */ static void ufraw_shave_hotpixels(ufraw_data *uf, dcraw_image_type *img, int width, int height, int colors, unsigned rgbMax) { int w, h, c, i, count; unsigned delta, t, v, hi; dcraw_image_type *p; uf->hotpixels = 0; if (uf->conf->hotpixel <= 0.0) return; delta = rgbMax / (uf->conf->hotpixel + 1.0); count = 0; #ifdef _OPENMP #pragma omp parallel for schedule(static) default(none) \ shared(uf,img,width,height,colors,rgbMax,delta) \ reduction(+:count) \ private(h,p,w,c,t,v,hi,i) #endif for (h = 1; h < height - 1; ++h) { p = img + 1 + h * width; for (w = 1; w < width - 1; ++w, ++p) { for (c = 0; c < colors; ++c) { t = p[0][c]; if (t <= delta) continue; t -= delta; v = p[-1][c]; if (v > t) continue; hi = v; v = p[1][c]; if (v > t) continue; if (v > hi) hi = v; v = p[-width][c]; if (v > t) continue; if (v > hi) hi = v; v = p[width][c]; if (v > t) continue; if (v > hi) hi = v; /* mark the pixel using the original hot value */ if (uf->mark_hotpixels) { for (i = -10; i >= -20 && w + i >= 0; --i) memcpy(p[i], p[0], sizeof(p[i])); for (i = 10; i <= 20 && w + i < width; ++i) memcpy(p[i], p[0], sizeof(p[i])); } p[0][c] = hi; ++count; } } } uf->hotpixels = count; } static void ufraw_despeckle_line(guint16 *base, int step, int size, int window, double decay, int colors, int c) { unsigned lum[size]; int i, j, start, end, next, v, cold, hot, coldj, hotj, fix; guint16 *p; if (colors == 4) { for (i = 0; i < size; ++i) { p = base + i * step; lum[i] = (p[0] + p[1] + p[2] + p[3] - p[c]) / 3; } } else { for (i = 0; i < size; ++i) { p = base + i * step; lum[i] = (p[0] + p[1] + p[2] - p[c]) / 2; } } p = base + c; for (i = 1 - window; i < size; i = next) { start = i; end = i + window; if (start < 0) start = 0; if (end > size) end = size; cold = hot = p[start * step] - lum[start]; coldj = hotj = start; for (j = start + 1; j < end; ++j) { v = p[j * step] - lum[j]; if (v < cold) { cold = v; coldj = j; } else if (v > hot) { hot = v; hotj = j; } } if (cold < 0 && hot > 0) { fix = -cold; if (fix > hot) fix = hot; p[coldj * step] += fix; p[hotj * step] -= fix; hot -= fix; } if (hot > 0 && decay) p[hotj * step] -= hot * decay; next = coldj < hotj ? coldj : hotj; if (next == start) ++next; } } void ufraw_despeckle(ufraw_data *uf, UFRawPhase phase) { ufraw_image_data *img = &uf->Images[phase]; const int depth = img->depth / 2, rowstride = img->rowstride / 2; int passes[4], pass, maxpass; int win[4], i, c, colors; guint16 *base; double decay[4]; ufraw_image_format(&colors, NULL, img, "68", G_STRFUNC); maxpass = 0; for (c = 0; c < colors; ++c) { win[c] = uf->conf->despeckleWindow[c < 3 ? c : 1] + 0.01; decay[c] = uf->conf->despeckleDecay[c < 3 ? c : 1]; passes[c] = uf->conf->despecklePasses[c < 3 ? c : 1] + 0.01; if (!win[c]) passes[c] = 0; if (passes[c] > maxpass) maxpass = passes[c]; } progress(PROGRESS_DESPECKLE, -maxpass * colors); for (pass = maxpass - 1; pass >= 0; --pass) { for (c = 0; c < colors; ++c) { progress(PROGRESS_DESPECKLE, 1); if (pass >= passes[c]) continue; #ifdef _OPENMP #pragma omp parallel for default(shared) private(i,base) #endif for (i = 0; i < img->height; ++i) { base = (guint16 *)img->buffer + i * rowstride; ufraw_despeckle_line(base, depth, img->width, win[c], decay[c], colors, c); } #ifdef _OPENMP #pragma omp parallel for default(shared) private(i,base) #endif for (i = 0; i < img->width; ++i) { base = (guint16 *)img->buffer + i * depth; ufraw_despeckle_line(base, rowstride, img->height, win[c], decay[c], colors, c); } } } } static gboolean ufraw_despeckle_active(ufraw_data *uf) { int i; gboolean active = FALSE; for (i = 0; i < 3; ++i) { if (uf->conf->despeckleWindow[i] && uf->conf->despecklePasses[i]) active = TRUE; } return active; } static int ufraw_calculate_scale(ufraw_data *uf) { /* In the first call to ufraw_calculate_scale() the crop coordinates * are not set. They cannot be set, since uf->rotatedHeight/Width are * only calculated later in ufraw_convert_prepare_transform_buffer(). * Therefore, if size > 0, scale = 1 will be returned. * Since the first call is from ufraw_convert_prepare_first_buffer(), * this is not a real issue. There should always be a second call to * this function before the actual buffer allocation. */ dcraw_data *raw = uf->raw; int scale = 1; /* We can do a simple interpolation in the following cases: * We shrink by an integer value. * If pixel_aspect<1 (e.g. NIKON D1X) shrink must be at least 4. */ if (uf->conf->size == 0 && uf->conf->shrink > 1) { scale = uf->conf->shrink * MIN(raw->pixel_aspect, 1 / raw->pixel_aspect); } else if (uf->conf->interpolation == half_interpolation) { scale = 2; /* Wanted size is smaller than raw size (size is after a raw->shrink) * (assuming there are filters). */ } else if (uf->conf->size > 0 && uf->HaveFilters) { int cropHeight = uf->conf->CropY2 - uf->conf->CropY1; int cropWidth = uf->conf->CropX2 - uf->conf->CropX1; int cropSize = MAX(cropHeight, cropWidth); if (cropSize / uf->conf->size >= 2) scale = cropSize / uf->conf->size; } return scale; } // Any change to ufraw_convertshrink() that might change the final image // dimensions should also be applied to ufraw_convert_prepare_first_buffer(). static void ufraw_convertshrink(ufraw_data *uf, dcraw_image_data *final) { dcraw_data *raw = uf->raw; int scale = ufraw_calculate_scale(uf); if (uf->HaveFilters && scale == 1) dcraw_finalize_interpolate(final, raw, uf->conf->interpolation, uf->conf->smoothing); else dcraw_finalize_shrink(final, raw, scale); dcraw_image_stretch(final, raw->pixel_aspect); if (uf->conf->size == 0 && uf->conf->shrink > 1) { dcraw_image_resize(final, scale * MAX(final->height, final->width) / uf->conf->shrink); } if (uf->conf->size > 0) { int finalSize = scale * MAX(final->height, final->width); int cropSize; if (uf->conf->CropX1 == -1) { cropSize = finalSize; } else { int cropHeight = uf->conf->CropY2 - uf->conf->CropY1; int cropWidth = uf->conf->CropX2 - uf->conf->CropX1; cropSize = MAX(cropHeight, cropWidth); } // cropSize needs to be a integer multiplier of scale cropSize = cropSize / scale * scale; if (uf->conf->size > cropSize) { ufraw_message(UFRAW_ERROR, _("Can not downsize from %d to %d."), cropSize, uf->conf->size); } else { /* uf->conf->size holds the size of the cropped image. * We need to calculate from it the desired size of * the uncropped image. */ dcraw_image_resize(final, uf->conf->size * finalSize / cropSize); } } } /* * Interface of ufraw_shave_hotpixels(), dcraw_finalize_raw() and preferably * dcraw_wavelet_denoise() too should change to accept a phase argument and * no longer require type casts. */ static void ufraw_convert_image_raw(ufraw_data *uf, UFRawPhase phase) { ufraw_image_data *img = &uf->Images[phase]; dcraw_data *dark = uf->conf->darkframe ? uf->conf->darkframe->raw : NULL; dcraw_data *raw = uf->raw; dcraw_image_type *rawimage; ufraw_convert_import_buffer(uf, phase, &raw->raw); img->rgbg = raw->raw.colors == 4; ufraw_shave_hotpixels(uf, (dcraw_image_type *)(img->buffer), img->width, img->height, raw->raw.colors, raw->rgbMax); rawimage = raw->raw.image; raw->raw.image = (dcraw_image_type *)img->buffer; /* The threshold is scaled for compatibility */ dcraw_wavelet_denoise(raw, uf->conf->threshold * sqrt(uf->raw_multiplier)); dcraw_finalize_raw(raw, dark, uf->developer->rgbWB); raw->raw.image = rawimage; ufraw_despeckle(uf, phase); #ifdef HAVE_LENSFUN ufraw_prepare_tca(uf); if (uf->TCAmodifier != NULL) { ufraw_image_data inImg = *img; img->buffer = g_malloc(img->height * img->rowstride); UFRectangle area = {0, 0, img->width, img->height }; ufraw_convert_image_tca(uf, &inImg, img, &area); g_free(inImg.buffer); } #endif } /* * Interface of ufraw_convertshrink() and dcraw_flip_image() should change * to accept a phase argument and no longer require type casts. */ static void ufraw_convert_image_first(ufraw_data *uf, UFRawPhase phase) { ufraw_image_data *in = &uf->Images[phase - 1]; ufraw_image_data *out = &uf->Images[phase]; dcraw_data *raw = uf->raw; dcraw_image_data final; final.image = (ufraw_image_type *)out->buffer; dcraw_image_type *rawimage = raw->raw.image; raw->raw.image = (dcraw_image_type *)in->buffer; ufraw_convertshrink(uf, &final); raw->raw.image = rawimage; dcraw_flip_image(&final, uf->conf->orientation); // The 'out' image contains the predicted image dimensions. // We want to be sure that our predictions were correct. if (out->height != final.height) { g_warning("ufraw_convert_image_first: height mismatch %d!=%d", out->height, final.height); out->height = final.height; } if (out->width != final.width) { g_warning("ufraw_convert_image_first: width mismatch %d!=%d", out->width, final.width); out->width = final.width; } out->depth = sizeof(dcraw_image_type); out->rowstride = out->width * out->depth; out->buffer = (guint8 *)final.image; ufraw_convert_reverse_wb(uf, phase); } static void ufraw_convert_reverse_wb(ufraw_data *uf, UFRawPhase phase) { ufraw_image_data *img = &uf->Images[phase]; guint32 mul[4], px; guint16 *p16; int i, size, c; ufraw_image_format(NULL, NULL, img, "6", G_STRFUNC); /* The speedup trick is to keep the non-constant (or ugly constant) * divider out of the pixel iteration. If you really have to then * use double division (can be much faster, apparently). */ for (i = 0; i < uf->colors; ++i) mul[i] = (guint64)0x10000 * 0x10000 / uf->developer->rgbWB[i]; size = img->height * img->width; #ifdef _OPENMP #pragma omp parallel for schedule(static) default(none) \ shared(uf,phase,img,mul,size) \ private(i,p16,c,px) #endif for (i = 0; i < size; ++i) { p16 = (guint16 *)&img->buffer[i * img->depth]; for (c = 0; c < uf->colors; ++c) { px = p16[c] * (guint64)mul[c] / 0x10000; if (px > 0xffff) px = 0xffff; p16[c] = px; } } } #ifdef HAVE_LENSFUN /* Apply TCA */ static void ufraw_convert_image_tca(ufraw_data *uf, ufraw_image_data *img, ufraw_image_data *outimg, UFRectangle *area) { if (uf->TCAmodifier == NULL) return; int y; #ifdef _OPENMP #pragma omp parallel for schedule(static) default(none) \ shared(uf,img,outimg,area) #endif for (y = area->y; y < area->y + area->height; y++) { guint16 *dst = (guint16*)(outimg->buffer + y * outimg->rowstride + area->x * outimg->depth); ufraw_image_type *src = (ufraw_image_type *)(img->buffer + y * img->rowstride + area->x * img->depth); ufraw_image_type *srcEnd = (ufraw_image_type *)(img->buffer + y * img->rowstride + (area->x + area->width) * img->depth); float buff[3 * 2 * area->width]; lf_modifier_apply_subpixel_distortion(uf->TCAmodifier, area->x, y, area->width, 1, buff); float *modcoord = buff; for (; src < srcEnd; src++, dst += outimg->depth / 2) { int c; // Only red and blue channels get corrected for (c = 0; c <= 2; c += 2, modcoord += 4) { float srcX = modcoord[0]; float srcY = modcoord[1]; /* Do it in integer arithmetic, it's faster */ int xx = (int)srcX; int yy = (int)srcY; // TODO: better handling of the borders. if (xx < 0 || yy < 0 || xx + 1 >= img->width || yy + 1 >= img->height) { dst[c] = 0; continue; } ufraw_image_type *lf_src = (ufraw_image_type *)(img->buffer + yy * img->rowstride + xx * img->depth); guint64 dx = (int)(srcX * 4096.0) - (xx << 12); guint64 dy = (int)(srcY * 4096.0) - (yy << 12); dst[c] = ((4096 - dy) * ((4096 - dx) * lf_src[0][c] + dx * lf_src[1][c]) + dy * ((4096 - dx) * lf_src[img->width][c] + (dx) * lf_src[img->width + 1][c])) >> 24; } modcoord -= 2; // Green channels are intact for (c = 1; c <= 3; c += 2) dst[c] = src[0][c]; } } } #endif // HAVE_LENSFUN static void ufraw_convert_import_buffer(ufraw_data *uf, UFRawPhase phase, dcraw_image_data *dcimg) { ufraw_image_data *img = &uf->Images[phase]; img->height = dcimg->height; img->width = dcimg->width; img->depth = sizeof(dcraw_image_type); img->rowstride = img->width * img->depth; g_free(img->buffer); img->buffer = g_memdup(dcimg->image, img->height * img->rowstride); } static void ufraw_image_init(ufraw_image_data *img, int width, int height, int bitdepth) { if (img->height == height && img->width == width && img->depth == bitdepth && img->buffer != NULL) return; img->valid = 0; img->height = height; img->width = width; img->depth = bitdepth; img->rowstride = img->width * img->depth; img->buffer = g_realloc(img->buffer, img->height * img->rowstride); } static void ufraw_convert_prepare_first_buffer(ufraw_data *uf, ufraw_image_data *img) { // The actual buffer allocation is done in ufraw_convertshrink(). int scale = ufraw_calculate_scale(uf); dcraw_image_dimensions(uf->raw, uf->conf->orientation, scale, &img->height, &img->width); // The final resizing in ufraw_convertshrink() is calculate here: if (uf->conf->size == 0 && uf->conf->shrink > 1) { // This is the effect of first call to dcraw_image_resize(). // It only relevant when raw->pixel_aspect != 1. img->width = img->width * scale / uf->conf->shrink; img->height = img->height * scale / uf->conf->shrink; } if (uf->conf->size > 0) { int finalSize = scale * MAX(img->height, img->width); int cropSize; if (uf->conf->CropX1 == -1) { cropSize = finalSize; } else { int cropHeight = uf->conf->CropY2 - uf->conf->CropY1; int cropWidth = uf->conf->CropX2 - uf->conf->CropX1; cropSize = MAX(cropHeight, cropWidth); } // cropSize needs to be a integer multiplier of scale cropSize = cropSize / scale * scale; if (uf->conf->size > cropSize) { ufraw_message(UFRAW_ERROR, _("Can not downsize from %d to %d."), cropSize, uf->conf->size); } else { /* uf->conf->size holds the size of the cropped image. * We need to calculate from it the desired size of * the uncropped image. */ int mul = uf->conf->size * finalSize / cropSize; int div = MAX(img->height, img->width); img->height = img->height * mul / div; img->width = img->width * mul / div; } } } #ifdef HAVE_LENSFUN void ufraw_convert_prepare_transform(ufraw_data *uf, int width, int height, gboolean reverse, float scale); #endif static void ufraw_convert_prepare_transform_buffer(ufraw_data *uf, ufraw_image_data *img, int width, int height) { const int iWidth = uf->initialWidth; const int iHeight = uf->initialHeight; double aspectRatio = uf->conf->aspectRatio; if (aspectRatio == 0) aspectRatio = ((double)iWidth) / iHeight; #ifdef HAVE_LENSFUN ufraw_convert_prepare_transform(uf, iWidth, iHeight, TRUE, 1.0); if (uf->conf->rotationAngle == 0 && (uf->modifier == NULL || !(uf->modFlags & UF_LF_TRANSFORM))) { #else if (uf->conf->rotationAngle == 0) { #endif g_free(img->buffer); img->buffer = NULL; img->width = width; img->height = height; // We still need the transform for vignetting #ifdef HAVE_LENSFUN ufraw_convert_prepare_transform(uf, width, height, FALSE, 1.0); #endif uf->rotatedWidth = iWidth; uf->rotatedHeight = iHeight; uf->autoCropWidth = iWidth; uf->autoCropHeight = iHeight; if ((double)uf->autoCropWidth / uf->autoCropHeight > aspectRatio) uf->autoCropWidth = floor(uf->autoCropHeight * aspectRatio + 0.5); else uf->autoCropHeight = floor(uf->autoCropWidth / aspectRatio + 0.5); return; } const double sine = sin(uf->conf->rotationAngle * 2 * M_PI / 360); const double cosine = cos(uf->conf->rotationAngle * 2 * M_PI / 360); const float midX = iWidth / 2.0 - 0.5; const float midY = iHeight / 2.0 - 0.5; #ifdef HAVE_LENSFUN gboolean applyLF = uf->modifier != NULL && (uf->modFlags & UF_LF_TRANSFORM); #endif float maxX = 0, maxY = 0; float minX = 999999, minY = 999999; double lastX = 0, lastY = 0, area = 0; int i; for (i = 0; i < iWidth + iHeight - 1; i++) { int x, y; if (i < iWidth) { // Trace the left border of the image x = i; y = 0; } else { // Trace the bottom border of the image x = iWidth - 1; y = i - iWidth + 1; } float buff[2]; #ifdef HAVE_LENSFUN if (applyLF) { lf_modifier_apply_geometry_distortion(uf->modifier, x, y, 1, 1, buff); } else { buff[0] = x; buff[1] = y; } #else buff[0] = x; buff[1] = y; #endif double srcX = (buff[0] - midX) * cosine - (buff[1] - midY) * sine; double srcY = (buff[0] - midX) * sine + (buff[1] - midY) * cosine; // A digital planimeter: area += srcY * lastX - srcX * lastY; lastX = srcX; lastY = srcY; maxX = MAX(maxX, fabs(srcX)); maxY = MAX(maxY, fabs(srcY)); if (fabs(srcX / srcY) > aspectRatio) minX = MIN(minX, fabs(srcX)); else minY = MIN(minY, fabs(srcY)); } float scale = sqrt((iWidth - 1) * (iHeight - 1) / area); // Do not allow increasing canvas size by more than a factor of 2 uf->rotatedWidth = MIN(ceil(2 * maxX + 1.0) * scale, 2 * iWidth); uf->rotatedHeight = MIN(ceil(2 * maxY + 1.0) * scale, 2 * iHeight); uf->autoCropWidth = MIN(floor(2 * minX) * scale, 2 * iWidth); uf->autoCropHeight = MIN(floor(2 * minY) * scale, 2 * iHeight); if ((double)uf->autoCropWidth / uf->autoCropHeight > aspectRatio) uf->autoCropWidth = floor(uf->autoCropHeight * aspectRatio + 0.5); else uf->autoCropHeight = floor(uf->autoCropWidth / aspectRatio + 0.5); int newWidth = uf->rotatedWidth * width / iWidth; int newHeight = uf->rotatedHeight * height / iHeight; ufraw_image_init(img, newWidth, newHeight, 8); #ifdef HAVE_LENSFUN ufraw_convert_prepare_transform(uf, width, height, FALSE, scale); #endif } /* * This function does not set img->invalidate_event because the * invalidation here is a secondary effect of the need to resize * buffers. The invalidate events should all have been set already. */ static void ufraw_convert_prepare_buffers(ufraw_data *uf, UFRawPhase phase) { ufraw_image_data *img = &uf->Images[phase]; if (!img->invalidate_event) return; img->invalidate_event = FALSE; int width = 0, height = 0; if (phase > ufraw_first_phase) { ufraw_convert_prepare_buffers(uf, phase - 1); width = uf->Images[phase - 1].width; height = uf->Images[phase - 1].height; } switch (phase) { case ufraw_raw_phase: return; case ufraw_first_phase: ufraw_convert_prepare_first_buffer(uf, img); return; case ufraw_transform_phase: ufraw_convert_prepare_transform_buffer(uf, img, width, height); return; case ufraw_develop_phase: ufraw_image_init(img, width, height, 3); return; case ufraw_display_phase: if (uf->developer->working2displayTransform == NULL) { g_free(img->buffer); img->buffer = NULL; img->width = width; img->height = height; } else { ufraw_image_init(img, width, height, 3); } return; default: g_warning("ufraw_convert_prepare_buffers: unsupported phase %d", phase); } } /* * This function is very permissive in accepting NULL pointers but it does * so to make it easy to call this function: consider it documentation with * a free consistency check. It is not necessarily good to change existing * algorithms all over the place to accept more image formats: replacing * constants by variables may turn off some compiler optimizations. */ static void ufraw_image_format(int *colors, int *bytes, ufraw_image_data *img, const char *formats, const char *caller) { int b, c; switch (img->depth) { case 3: c = 3; b = 1; break; case 4: c = img->rgbg ? 4 : 3; b = 1; break; case 6: c = 3; b = 2; break; case 8: c = img->rgbg ? 4 : 3; b = 2; break; default: g_error("%s -> %s: unsupported depth %d\n", caller, G_STRFUNC, img->depth); } if (!strchr(formats, '0' + c * b)) g_error("%s: unsupported depth %d (rgbg=%d)\n", caller, img->depth, img->rgbg); if (colors) *colors = c; if (bytes) *bytes = b; } ufraw_image_data *ufraw_get_image(ufraw_data *uf, UFRawPhase phase, gboolean bufferok) { ufraw_convert_prepare_buffers(uf, phase); // Find the closest phase that is actually rendered: while (phase > ufraw_raw_phase && uf->Images[phase].buffer == NULL) phase--; if (bufferok) { /* It should never be necessary to actually finish the conversion * because it can break render_preview_image() which uses the * final image "valid" mask for deciding what to update in the * pixbuf. That can be fixed but is suboptimal anyway. The best * we can do is print a warning in case we need to finish the * conversion and finish it here. */ if (uf->Images[phase].valid != 0xffffffff) { g_warning("%s: fixing unfinished conversion for phase %d.\n", G_STRFUNC, phase); int i; for (i = 0; i < 32; ++i) ufraw_convert_image_area(uf, i, phase); } } return &uf->Images[phase]; } ufraw_image_data *ufraw_convert_image_area(ufraw_data *uf, unsigned saidx, UFRawPhase phase) { int yy; ufraw_image_data *out = &uf->Images[phase]; if (out->valid & (1 << saidx)) return out; // the subarea has been already computed /* Get the subarea image for previous phase */ ufraw_image_data *in = NULL; if (phase > ufraw_raw_phase) { in = ufraw_convert_image_area(uf, saidx, phase - 1); } // ufraw_convert_prepare_buffers() may set out->buffer to NULL. ufraw_convert_prepare_buffers(uf, phase); if (phase > ufraw_first_phase && out->buffer == NULL) return in; // skip phase /* Get subarea coordinates */ UFRectangle area = ufraw_image_get_subarea_rectangle(out, saidx); guint8 *dest = out->buffer + area.y * out->rowstride + area.x * out->depth; guint8 *src = NULL; if (in != NULL) src = in->buffer + area.y * in->rowstride + area.x * in->depth; switch (phase) { case ufraw_raw_phase: ufraw_convert_image_raw(uf, phase); out->valid = 0xffffffff; return out; case ufraw_first_phase: ufraw_convert_image_first(uf, phase); out->valid = 0xffffffff; #ifdef HAVE_LENSFUN UFRectangle allArea = { 0, 0, out->width, out->height }; ufraw_convert_image_vignetting(uf, out, &allArea); #endif /* HAVE_LENSFUN */ return out; case ufraw_transform_phase: { /* Area calculation is not needed at the moment since * ufraw_first_phase is not tiled yet. */ /* int yy; float *buff = g_new (float, (w < 8) ? 8 * 2 * 3 : w * 2 * 3); // Compute the previous stage subareas, if needed lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x, y, 1, 1, buff); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x + w/2, y, 1, 1, buff + 2 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x + w-1, y, 1, 1, buff + 4 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x, y + h/2, 1, 1, buff + 6 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x + w-1, y + h/2, 1, 1, buff + 8 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x, y + h-1, 1, 1, buff + 10 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x + w/2, y + h-1, 1, 1, buff + 12 * 3); lf_modifier_apply_subpixel_geometry_distortion ( uf->modifier, x + w-1, y + h-1, 1, 1, buff + 14 * 3); for (yy = 0; yy < 8 * 2 * 3; yy += 2) { int idx = ufraw_img_get_subarea_idx (in, buff [yy], buff [yy + 1]); if (idx <= 31) ufraw_convert_image_area (uf, idx, phase - 1); } */ ufraw_convert_image_transform(uf, in, out, &area); } break; case ufraw_develop_phase: for (yy = 0; yy < area.height; yy++, dest += out->rowstride, src += in->rowstride) { develop(dest, (void *)src, uf->developer, 8, area.width); } break; case ufraw_display_phase: for (yy = 0; yy < area.height; yy++, dest += out->rowstride, src += in->rowstride) { develop_display(dest, src, uf->developer, area.width); } break; default: g_warning("%s: invalid phase %d\n", G_STRFUNC, phase); return in; } #ifdef _OPENMP #pragma omp critical #endif // Mark the subarea as valid out->valid |= (1 << saidx); return out; } static void ufraw_flip_image_buffer(ufraw_image_data *img, int flip) { if (img->buffer == NULL) return; /* Following code was copied from dcraw's flip_image() * and modified to work with any pixel depth. */ int base, dest, next, row, col; guint8 *image = img->buffer; int height = img->height; int width = img->width; int depth = img->depth; int size = height * width; guint8 hold[8]; unsigned *flag = g_new0(unsigned, (size + 31) >> 5); for (base = 0; base < size; base++) { if (flag[base >> 5] & (1 << (base & 31))) continue; dest = base; memcpy(hold, image + base * depth, depth); while (1) { if (flip & 4) { row = dest % height; col = dest / height; } else { row = dest / width; col = dest % width; } if (flip & 2) row = height - 1 - row; if (flip & 1) col = width - 1 - col; next = row * width + col; if (next == base) break; flag[next >> 5] |= 1 << (next & 31); memcpy(image + dest * depth, image + next * depth, depth); dest = next; } memcpy(image + dest * depth, hold, depth); } g_free(flag); if (flip & 4) { img->height = width; img->width = height; img->rowstride = height * depth; } } void ufraw_flip_orientation(ufraw_data *uf, int flip) { const char flipMatrix[8][8] = { { 0, 1, 2, 3, 4, 5, 6, 7 }, /* No flip */ { 1, 0, 3, 2, 5, 4, 7, 6 }, /* Flip horizontal */ { 2, 3, 0, 1, 6, 7, 4, 5 }, /* Flip vertical */ { 3, 2, 1, 0, 7, 6, 5, 4 }, /* Rotate 180 */ { 4, 6, 5, 7, 0, 2, 1, 3 }, /* Flip over diagonal "\" */ { 5, 7, 4, 6, 1, 3, 0, 2 }, /* Rotate 270 */ { 6, 4, 7, 5, 2, 0, 3, 1 }, /* Rotate 90 */ { 7, 5, 6, 4, 3, 1, 2, 0 } /* Flip over diagonal "/" */ }; uf->conf->orientation = flipMatrix[uf->conf->orientation][flip]; } /* * Normalize arbitrary rotations into a 0..90 degree range. */ void ufraw_normalize_rotation(ufraw_data *uf) { int angle, flip = 0; uf->conf->rotationAngle = fmod(uf->conf->rotationAngle, 360.0); if (uf->conf->rotationAngle < 0.0) uf->conf->rotationAngle += 360.0; angle = floor(uf->conf->rotationAngle / 90) * 90; switch (angle) { case 90: flip = 6; break; case 180: flip = 3; break; case 270: flip = 5; break; } ufraw_flip_orientation(uf, flip); uf->conf->rotationAngle -= angle; } /* * Unnormalize a normalized rotaion into a -180..180 degree range, * while orientation can be either 0 (normal) or 1 (flipped). * All image processing code assumes normalized rotation, therefore * each call to ufraw_unnormalize_rotation() must be followed by a call * to ufraw_normalize_rotation(). */ void ufraw_unnormalize_rotation(ufraw_data *uf) { switch (uf->conf->orientation) { case 5: /* Rotate 270 */ uf->conf->rotationAngle += 90; case 3: /* Rotate 180 */ uf->conf->rotationAngle += 90; case 6: /* Rotate 90 */ uf->conf->rotationAngle += 90; uf->conf->orientation = 0; case 0: /* No flip */ break; case 4: /* Flip over diagonal "\" */ uf->conf->rotationAngle += 90; case 2: /* Flip vertical */ uf->conf->rotationAngle += 90; case 7: /* Flip over diagonal "/" */ uf->conf->rotationAngle += 90; uf->conf->orientation = 1; case 1: /* Flip horizontal */ break; default: g_error("ufraw_unnormalized_roation(): orientation=%d out of range", uf->conf->orientation); } uf->conf->rotationAngle = remainder(uf->conf->rotationAngle, 360.0); } void ufraw_flip_image(ufraw_data *uf, int flip) { if (flip == 0) return; ufraw_flip_orientation(uf, flip); /* Usually orientation is applied before rotationAngle. * Here we are flipping after rotationAngle was applied. * We need to correct rotationAngle for this since these * operations do no commute. */ if (flip == 1 || flip == 2 || flip == 4 || flip == 7) { uf->conf->rotationAngle = -uf->conf->rotationAngle; ufraw_normalize_rotation(uf); } UFRawPhase phase; for (phase = ufraw_first_phase; phase < ufraw_phases_num; phase++) ufraw_flip_image_buffer(&uf->Images[phase], flip); } void ufraw_invalidate_layer(ufraw_data *uf, UFRawPhase phase) { for (; phase < ufraw_phases_num; phase++) { uf->Images[phase].valid = 0; uf->Images[phase].invalidate_event = TRUE; } } void ufraw_invalidate_tca_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_raw_phase); } void ufraw_invalidate_hotpixel_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_raw_phase); } void ufraw_invalidate_denoise_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_raw_phase); } void ufraw_invalidate_darkframe_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_raw_phase); } void ufraw_invalidate_despeckle_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_raw_phase); } /* * This one is special. The raw layer applies WB in preparation for optimal * interpolation but the first layer undoes it for develop() et.al. So, the * first layer stays valid but all the others must be invalidated upon WB * adjustments. */ void ufraw_invalidate_whitebalance_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_develop_phase); uf->Images[ufraw_raw_phase].valid = 0; uf->Images[ufraw_raw_phase].invalidate_event = TRUE; /* Despeckling is sensitive for WB changes because it is nonlinear. */ if (ufraw_despeckle_active(uf)) ufraw_invalidate_despeckle_layer(uf); } /* * This should be a no-op in case we don't interpolate but we don't care: the * delay will at least give the illusion that it matters. Color smoothing * implementation is a bit too simplistic. */ void ufraw_invalidate_smoothing_layer(ufraw_data *uf) { ufraw_invalidate_layer(uf, ufraw_first_phase); } int ufraw_set_wb(ufraw_data *uf) { dcraw_data *raw = uf->raw; double rgbWB[3]; int c, cc, i; UFObject *temperature = ufgroup_element(uf->conf->ufobject, ufTemperature); UFObject *green = ufgroup_element(uf->conf->ufobject, ufGreen); UFObject *chanMul = ufgroup_element(uf->conf->ufobject, ufChannelMultipliers); UFObject *wb = ufgroup_element(uf->conf->ufobject, ufWB); UFObject *wbTuning = ufgroup_element(uf->conf->ufobject, ufWBFineTuning); ufraw_invalidate_whitebalance_layer(uf); /* For uf_manual_wb we calculate chanMul from the temperature/green. */ /* For all other it is the other way around. */ if (ufarray_is_equal(wb, uf_manual_wb)) { Temperature_to_RGB(ufnumber_value(temperature), rgbWB); rgbWB[1] = rgbWB[1] / ufnumber_value(green); /* Suppose we shot a white card at some temperature: * rgbWB[3] = rgb_cam[3][4] * preMul[4] * camWhite[4] * Now we want to make it white (1,1,1), so we replace preMul * with chanMul, which is defined as: * chanMul[4][4] = cam_rgb[4][3] * (1/rgbWB[3][3]) * rgb_cam[3][4] * * preMul[4][4] * We "upgraded" preMul, chanMul and rgbWB to diagonal matrices. * This allows for the manipulation: * (1/chanMul)[4][4] = (1/preMul)[4][4] * cam_rgb[4][3] * rgbWB[3][3] * * rgb_cam[3][4] * We use the fact that rgb_cam[3][4] * (1,1,1,1) = (1,1,1) and get: * (1/chanMul)[4] = (1/preMul)[4][4] * cam_rgb[4][3] * rgbWB[3] */ if (uf->raw_color) { /* If there is no color matrix it is simple */ double chanMulArray[4]; for (c = 0; c < 3; c++) chanMulArray[c] = raw->pre_mul[c] / rgbWB[c]; ufnumber_array_set(chanMul, chanMulArray); } else { double chanMulArray[4] = {1, 1, 1, 1 }; for (c = 0; c < uf->colors; c++) { double chanMulInv = 0; for (cc = 0; cc < 3; cc++) chanMulInv += 1 / raw->pre_mul[c] * raw->cam_rgb[c][cc] * rgbWB[cc]; chanMulArray[c] = 1 / chanMulInv; } ufnumber_array_set(chanMul, chanMulArray); } ufnumber_set(wbTuning, 0); return UFRAW_SUCCESS; } if (ufarray_is_equal(wb, uf_spot_wb)) { /* do nothing */ ufnumber_set(wbTuning, 0); } else if (ufarray_is_equal(wb, uf_auto_wb)) { int p; /* Build a raw channel histogram */ ufraw_image_type *histogram = g_new0(ufraw_image_type, uf->rgbMax + 1); for (i = 0; i < raw->raw.height * raw->raw.width; i++) { gboolean countPixel = TRUE; /* The -25 bound was copied from dcraw */ for (c = 0; c < raw->raw.colors; c++) if (raw->raw.image[i][c] > uf->rgbMax + raw->black - 25) countPixel = FALSE; if (countPixel) { for (c = 0; c < raw->raw.colors; c++) { p = MIN(MAX(raw->raw.image[i][c] - raw->black, 0), uf->rgbMax); histogram[p][c]++; } } } double chanMulArray[4] = {1.0, 1.0, 1.0, 1.0 }; double min = 1.0; for (c = 0; c < uf->colors; c++) { gint64 sum = 0; for (i = 0; i < uf->rgbMax + 1; i++) sum += (gint64)i * histogram[i][c]; if (sum == 0) chanMulArray[c] = 1.0; else chanMulArray[c] = 1.0 / sum; if (chanMulArray[c] < min) min = chanMulArray[c]; } for (c = 0; c < uf->colors; c++) chanMulArray[c] /= min; g_free(histogram); ufnumber_array_set(chanMul, chanMulArray); ufnumber_set(wbTuning, 0); } else if (ufarray_is_equal(wb, uf_camera_wb)) { double chanMulArray[4] = { 1.0, 1.0, 1.0, 1.0 }; for (c = 0; c < uf->colors; c++) chanMulArray[c] = raw->post_mul[c]; ufnumber_array_set(chanMul, chanMulArray); ufnumber_set(wbTuning, 0); } else { int lastTuning = -1; char model[max_name]; if (strcmp(uf->conf->make, "MINOLTA") == 0 && (strncmp(uf->conf->model, "ALPHA", 5) == 0 || strncmp(uf->conf->model, "MAXXUM", 6) == 0)) { /* Canonize Minolta model names (copied from dcraw) */ g_snprintf(model, max_name, "DYNAX %s", uf->conf->model + 6 + (uf->conf->model[0] == 'M')); } else { g_strlcpy(model, uf->conf->model, max_name); } for (i = 0; i < wb_preset_count; i++) { if (ufarray_is_equal(wb, wb_preset[i].name) && !strcmp(uf->conf->make, wb_preset[i].make) && !strcmp(model, wb_preset[i].model)) { if (ufnumber_value(wbTuning) == wb_preset[i].tuning) { double chanMulArray[4] = {1, 1, 1, 1 }; for (c = 0; c < uf->colors; c++) chanMulArray[c] = wb_preset[i].channel[c]; ufnumber_array_set(chanMul, chanMulArray); break; } else if (ufnumber_value(wbTuning) < wb_preset[i].tuning) { if (lastTuning == -1) { /* wbTuning was set to a value smaller than possible */ ufnumber_set(wbTuning, wb_preset[i].tuning); double chanMulArray[4] = {1, 1, 1, 1 }; for (c = 0; c < uf->colors; c++) chanMulArray[c] = wb_preset[i].channel[c]; ufnumber_array_set(chanMul, chanMulArray); break; } else { /* Extrapolate WB tuning values: * f(x) = f(a) + (x-a)*(f(b)-f(a))/(b-a) */ double chanMulArray[4] = {1, 1, 1, 1 }; for (c = 0; c < uf->colors; c++) chanMulArray[c] = wb_preset[i].channel[c] + (ufnumber_value(wbTuning) - wb_preset[i].tuning) * (wb_preset[lastTuning].channel[c] - wb_preset[i].channel[c]) / (wb_preset[lastTuning].tuning - wb_preset[i].tuning); ufnumber_array_set(chanMul, chanMulArray); break; } } else if (ufnumber_value(wbTuning) > wb_preset[i].tuning) { lastTuning = i; } } else if (lastTuning != -1) { /* wbTuning was set to a value larger than possible */ ufnumber_set(wbTuning, wb_preset[lastTuning].tuning); double chanMulArray[4] = {1, 1, 1, 1 }; for (c = 0; c < uf->colors; c++) chanMulArray[c] = wb_preset[lastTuning].channel[c]; ufnumber_array_set(chanMul, chanMulArray); break; } } if (i == wb_preset_count) { if (lastTuning != -1) { /* wbTuning was set to a value larger than possible */ ufnumber_set(wbTuning, wb_preset[lastTuning].tuning); ufnumber_array_set(chanMul, wb_preset[lastTuning].channel); } else { ufobject_set_string(wb, uf_manual_wb); ufraw_set_wb(uf); return UFRAW_WARNING; } } } /* (1/chanMul)[4] = (1/preMul)[4][4] * cam_rgb[4][3] * rgbWB[3] * Therefore: * rgbWB[3] = rgb_cam[3][4] * preMul[4][4] * (1/chanMul)[4] */ if (uf->raw_color) { /* If there is no color matrix it is simple */ for (c = 0; c < 3; c++) { rgbWB[c] = raw->pre_mul[c] / ufnumber_array_value(chanMul, c); } } else { for (c = 0; c < 3; c++) { rgbWB[c] = 0; for (cc = 0; cc < uf->colors; cc++) rgbWB[c] += raw->rgb_cam[c][cc] * raw->pre_mul[cc] / ufnumber_array_value(chanMul, cc); } } /* From these values we calculate temperature, green values */ double temperatureValue, greenValue; RGB_to_Temperature(rgbWB, &temperatureValue, &greenValue); ufnumber_set(temperature, temperatureValue); ufnumber_set(green, greenValue); return UFRAW_SUCCESS; } static void ufraw_build_raw_histogram(ufraw_data *uf) { int i, c; dcraw_data *raw = uf->raw; gboolean updateHistogram = FALSE; if (uf->RawHistogram == NULL) { uf->RawHistogram = g_new(int, uf->rgbMax + 1); updateHistogram = TRUE; } double maxChan = 0; UFObject *chanMul = ufgroup_element(uf->conf->ufobject, ufChannelMultipliers); for (c = 0; c < uf->colors; c++) maxChan = MAX(ufnumber_array_value(chanMul, c), maxChan); for (c = 0; c < uf->colors; c++) { int tmp = floor(ufnumber_array_value(chanMul, c) / maxChan * 0x10000); if (uf->RawChanMul[c] != tmp) { updateHistogram = TRUE; uf->RawChanMul[c] = tmp; } } if (!updateHistogram) return; if (uf->colors == 3) uf->RawChanMul[3] = uf->RawChanMul[1]; memset(uf->RawHistogram, 0, (uf->rgbMax + 1)*sizeof(int)); int count = raw->raw.height * raw->raw.width; for (i = 0; i < count; i++) for (c = 0; c < raw->raw.colors; c++) uf->RawHistogram[MIN( (gint64)MAX(raw->raw.image[i][c] - raw->black, 0) * uf->RawChanMul[c] / 0x10000, uf->rgbMax)]++; uf->RawCount = count * raw->raw.colors; } void ufraw_auto_expose(ufraw_data *uf) { int sum, stop, wp, c, pMax, pMin, p; ufraw_image_type pix; guint16 p16[3]; if (uf->conf->autoExposure != apply_state) return; /* Reset the exposure and luminosityCurve */ uf->conf->exposure = 0; /* If we normalize the exposure then 0 EV also gets normalized */ if (uf->conf->ExposureNorm > 0) uf->conf->exposure = -log(1.0 * uf->rgbMax / uf->conf->ExposureNorm) / log(2); ufraw_developer_prepare(uf, auto_developer); /* Find the grey value that gives 99% luminosity */ double maxChan = 0; UFObject *chanMul = ufgroup_element(uf->conf->ufobject, ufChannelMultipliers); for (c = 0; c < uf->colors; c++) maxChan = MAX(ufnumber_array_value(chanMul, c), maxChan); for (pMax = uf->rgbMax, pMin = 0, p = (pMax + pMin) / 2; pMin < pMax - 1; p = (pMax + pMin) / 2) { for (c = 0; c < uf->colors; c++) pix[c] = MIN(p * maxChan / ufnumber_array_value(chanMul, c), uf->rgbMax); develop(p16, pix, uf->AutoDeveloper, 16, 1); for (c = 0, wp = 0; c < 3; c++) wp = MAX(wp, p16[c]); if (wp < 0x10000 * 99 / 100) pMin = p; else pMax = p; } /* set cutoff at 99% of the histogram */ ufraw_build_raw_histogram(uf); stop = uf->RawCount * 1 / 100; /* Calculate the white point */ for (wp = uf->rgbMax, sum = 0; wp > 1 && sum < stop; wp--) sum += uf->RawHistogram[wp]; /* Set 99% of the luminosity values with luminosity below 99% */ uf->conf->exposure = log((double)p / wp) / log(2); /* If we are going to normalize the exposure later, * we need to cancel its effect here. */ if (uf->conf->ExposureNorm > 0) uf->conf->exposure -= log(1.0 * uf->rgbMax / uf->conf->ExposureNorm) / log(2); uf->conf->autoExposure = enabled_state; // ufraw_message(UFRAW_SET_LOG, "ufraw_auto_expose: " // "Exposure %f (white point %d/%d)\n", uf->conf->exposure, wp, p); } void ufraw_auto_black(ufraw_data *uf) { int sum, stop, bp, c; ufraw_image_type pix; guint16 p16[3]; if (uf->conf->autoBlack == disabled_state) return; /* Reset the luminosityCurve */ ufraw_developer_prepare(uf, auto_developer); /* Calculate the black point */ ufraw_build_raw_histogram(uf); stop = uf->RawCount / 256 / 4; for (bp = 0, sum = 0; bp < uf->rgbMax && sum < stop; bp++) sum += uf->RawHistogram[bp]; double maxChan = 0; UFObject *chanMul = ufgroup_element(uf->conf->ufobject, ufChannelMultipliers); for (c = 0; c < uf->colors; c++) maxChan = MAX(ufnumber_array_value(chanMul, c), maxChan); for (c = 0; c < uf->colors; c++) pix[c] = MIN(bp * maxChan / ufnumber_array_value(chanMul, c), uf->rgbMax); develop(p16, pix, uf->AutoDeveloper, 16, 1); for (c = 0, bp = 0; c < 3; c++) bp = MAX(bp, p16[c]); CurveDataSetPoint(&uf->conf->curve[uf->conf->curveIndex], 0, (double)bp / 0x10000, 0); uf->conf->autoBlack = enabled_state; // ufraw_message(UFRAW_SET_LOG, "ufraw_auto_black: " // "Black %f (black point %d)\n", // uf->conf->curve[uf->conf->curveIndex].m_anchors[0].x, bp); } /* ufraw_auto_curve sets the black-point and then distribute the (step-1) * parts of the histogram with the weights: w_i = pow(decay,i). */ void ufraw_auto_curve(ufraw_data *uf) { int sum, stop, steps = 8, bp, p, i, j, c; ufraw_image_type pix; guint16 p16[3]; CurveData *curve = &uf->conf->curve[uf->conf->curveIndex]; double decay = 0.90; double norm = (1 - pow(decay, steps)) / (1 - decay); CurveDataReset(curve); ufraw_developer_prepare(uf, auto_developer); /* Calculate curve points */ ufraw_build_raw_histogram(uf); stop = uf->RawCount / 256 / 4; double maxChan = 0; UFObject *chanMul = ufgroup_element(uf->conf->ufobject, ufChannelMultipliers); for (c = 0; c < uf->colors; c++) maxChan = MAX(ufnumber_array_value(chanMul, c), maxChan); for (bp = 0, sum = 0, p = 0, i = j = 0; i < steps && bp < uf->rgbMax && p < 0xFFFF; i++) { for (; bp < uf->rgbMax && sum < stop; bp++) sum += uf->RawHistogram[bp]; for (c = 0; c < uf->colors; c++) pix[c] = MIN(bp * maxChan / ufnumber_array_value(chanMul, c), uf->rgbMax); develop(p16, pix, uf->AutoDeveloper, 16, 1); for (c = 0, p = 0; c < 3; c++) p = MAX(p, p16[c]); stop += uf->RawCount * pow(decay, i) / norm; /* Skip adding point if slope is too big (more than 4) */ if (j > 0 && p - curve->m_anchors[j - 1].x * 0x10000 < (i + 1 - j) * 0x04000 / steps) continue; curve->m_anchors[j].x = (double)p / 0x10000; curve->m_anchors[j].y = (double)i / steps; j++; } if (bp == 0x10000) { curve->m_numAnchors = j; } else { curve->m_anchors[j].x = 1.0; /* The last point can be up to twice the height of a linear * interpolation of the last two points */ if (j > 1) { curve->m_anchors[j].y = curve->m_anchors[j - 1].y + 2 * (1.0 - curve->m_anchors[j - 1].x) * (curve->m_anchors[j - 1].y - curve->m_anchors[j - 2].y) / (curve->m_anchors[j - 1].x - curve->m_anchors[j - 2].x); if (curve->m_anchors[j].y > 1.0) curve->m_anchors[j].y = 1.0; } else { curve->m_anchors[j].y = 1.0; } curve->m_numAnchors = j + 1; } } ufraw-0.19.2/dcraw.cc0000664000175000017500000113320712122217612011264 00000000000000/* dcraw.cc - Dave Coffin's raw photo decoder - C++ adaptation Copyright 1997-2012 by Dave Coffin, dcoffin a cybercom o net Copyright 2004-2013 by Udi Fuchs, udifuchs a gmail o com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This is a adaptation of Dave Coffin's original dcraw.c to C++. It can work as either a command-line tool or called by other programs. $Revision: 1.454 $ $Date: 2012/12/23 19:25:36 $ */ #ifdef HAVE_CONFIG_H /*For UFRaw config system - NKBJ*/ #include "config.h" #endif extern "C" { #include "uf_progress.h" } #define DCRAW_VERSION "9.17" #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #ifndef HAVE_CONFIG_H /*fseeko() is handled by the UFRaw config system - NKBJ*/ #if defined(DJGPP) || defined(__MINGW32__) #define fseeko fseek #define ftello ftell #else #define fgetc getc_unlocked #endif #endif #ifdef __CYGWIN__ #include #endif #ifdef _WIN32 #include #include #ifndef __MINGW32__ /* causes warnings in cygwin's gcc -mno-cygwin UF*/ #pragma comment(lib, "ws2_32.lib") #endif /* __MINGW32__ UF*/ #define snprintf _snprintf #define strcasecmp stricmp #define strncasecmp strnicmp typedef __int64 INT64; typedef unsigned __int64 UINT64; #else #include #include #include typedef long long INT64; typedef unsigned long long UINT64; #endif #ifdef NODEPS #define NO_JASPER #define NO_JPEG #define NO_LCMS #endif #ifdef HAVE_LIBJASPER #include /* Decode RED camera movies */ #endif #ifdef HAVE_LIBJPEG extern "C" { #include /* Decode compressed Kodak DC120 photos */ } #endif /* and Adobe Lossy DNGs */ #ifndef NO_LCMS #include /* Support color profiles */ #endif #ifndef DCRAW_NOMAIN #ifdef LOCALEDIR #include #include #define _(String) gettext(String) #else #define _(String) (String) #endif #else #include /*For _(String) definition - NKBJ*/ #endif #ifdef LJPEG_DECODE #error Please compile dcraw.c by itself. #error Do not link it with ljpeg_decode. #endif #ifndef LONG_BIT #define LONG_BIT (8 * sizeof (long)) #endif /* All definitions of global variables are defined inside a class in dcraw.h */ #include "dcraw.h" #ifdef DCRAW_NOMAIN extern #endif #if !defined(ushort) #define ushort unsigned short #endif /* All global variables are defined here, and all functions that access them are prefixed with "CLASS". Note that a thread-safe C++ class cannot have non-const static local variables. */ FILE *ifp, *ofp; short order; const char *ifname; char *meta_data; char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; time_t timestamp; unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; off_t strip_offset, data_offset; off_t thumb_offset, meta_offset, profile_offset; unsigned thumb_length, meta_length, profile_length; unsigned thumb_misc, *oprof, fuji_layout, shot_select=0, multi_out=0; unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; unsigned black, cblack[4], maximum, mix_green, raw_color, zero_is_bad; unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; unsigned tile_width, tile_length, gpsdata[32], load_flags; ushort raw_height, raw_width, height, width, top_margin, left_margin; ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; ushort *raw_image, (*image)[4]; ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; int mask[8][4], flip, tiff_flip, colors; double pixel_aspect, aber[4]={1,1,1,1}, gamm[6]={ 0.45,4.5,0,0,0,0 }; float bright=1, user_mul[4]={0,0,0,0}, threshold=0; int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; int output_color=1, output_bps=8, output_tiff=0, med_passes=0; int no_auto_bright=0; unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; #ifdef DCRAW_NOMAIN extern #endif const double xyz_rgb[3][3] = { /* XYZ from RGB */ { 0.412453, 0.357580, 0.180423 }, { 0.212671, 0.715160, 0.072169 }, { 0.019334, 0.119193, 0.950227 } }; #ifdef DCRAW_NOMAIN extern #endif const float d65_white[3] = { 0.950456, 1, 1.088754 }; int histogram[4][0x2000]; void (*write_thumb)(), (*write_fun)(); void (*load_raw)(), (*thumb_load_raw)(); jmp_buf failure; struct decode { struct decode *branch[2]; int leaf; } first_decode[2048], *second_decode, *free_decode; struct tiff_ifd { int width, height, bps, comp, phint, offset, flip, samples, bytes; int tile_width, tile_length; } tiff_ifd[10]; struct ph1 { int format, key_off, black, black_off, split_col, tag_21a; float tag_210; } ph1; #define DCRAW_SUCCESS 0 /* Centralize the error handling - UF*/ #define DCRAW_ERROR 1 #define DCRAW_UNSUPPORTED 2 #define DCRAW_NO_CAMERA_WB 3 #define DCRAW_VERBOSE 4 #define DCRAW_WARNING 5 #define CLASS DCRaw:: CLASS DCRaw() { order=0; /* Suppress valgrind error. */ shot_select=0, multi_out=0, aber[0] = aber[1] = aber[2] = aber[3] = 1; gamm[0] = 0.45, gamm[1] = 4.5, gamm[2] = gamm[3] = gamm[4] = gamm[5] = 0; bright=1, user_mul[0] = user_mul[1] = user_mul[2] = user_mul[3] = 0; threshold=0, half_size=0, four_color_rgb=0, document_mode=0, highlight=0; verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; output_color=1, output_bps=8, output_tiff=0, med_passes=0, no_auto_bright=0; greybox[0] = greybox[1] = 0, greybox[2] = greybox[3] = UINT_MAX; tone_curve_size = 0, tone_curve_offset = 0; /* Nikon Tone Curves UF*/ tone_mode_offset = 0, tone_mode_size = 0; /* Nikon ToneComp UF*/ messageBuffer = NULL; lastStatus = DCRAW_SUCCESS; ifname = NULL; ifname_display = NULL; ifpReadCount = 0; ifpSize = 0; ifpStepProgress = 0; eofCount = 0; } CLASS ~DCRaw() { free(ifname); free(ifname_display); } void CLASS ifpProgress(unsigned readCount) { ifpReadCount += readCount; if (ifpSize==0) return; unsigned newStepProgress = STEPS * ifpReadCount / ifpSize; if (newStepProgress > ifpStepProgress) { #ifdef DCRAW_NOMAIN if (ifpStepProgress) progress(PROGRESS_LOAD, newStepProgress - ifpStepProgress); else progress(PROGRESS_LOAD, -STEPS); #endif } ifpStepProgress = newStepProgress; } size_t CLASS fread(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t num = ::fread(ptr, size, nmemb, stream); if ( num != nmemb ) { if (eofCount < 10) // Maybe this should be a DCRAW_WARNING dcraw_message(DCRAW_VERBOSE, "%s: fread %d != %d\n", ifname_display, num, nmemb); if (eofCount == 10) dcraw_message(DCRAW_VERBOSE, "%s: fread eof reached 10 times\n", ifname_display); eofCount++; } if (stream==ifp) ifpProgress(size*nmemb); return num; } size_t CLASS fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t num = ::fwrite(ptr, size, nmemb, stream); if ( num != nmemb ) dcraw_message(DCRAW_WARNING, "%s: fwrite %d != %d\n", ifname_display, num, nmemb); return num; } char *CLASS fgets(char *s, int size, FILE *stream) { char *str = ::fgets(s, size, stream); if (str == NULL) { if (eofCount < 10) // Maybe this should be a DCRAW_WARNING dcraw_message(DCRAW_VERBOSE, "%s: fgets returned NULL\n", ifname_display); if (eofCount == 10) dcraw_message(DCRAW_VERBOSE, "%s: fgets eof reached 10 times\n", ifname_display); eofCount++; } if (stream==ifp) ifpProgress(strlen(s)); return str; } int CLASS fgetc(FILE *stream) { int chr = ::fgetc(stream); if (stream==ifp) ifpProgress(1); return chr; } int CLASS fscanf(FILE *stream, const char *format, void *ptr) { int count = ::fscanf(stream, format, ptr); if ( count != 1 ) dcraw_message(DCRAW_WARNING, "%s: fscanf %d != 1\n", ifname_display, count); return 1; } #define FORC(cnt) for (c=0; c < cnt; c++) #define FORC3 FORC(3) #define FORC4 FORC(4) #define FORCC FORC(colors) #define SQR(x) ((x)*(x)) #ifndef DCRAW_NOMAIN #ifndef ABS #define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31)) #endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifndef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #endif #define LIM(x,min,max) MAX(min,MIN(x,max)) #define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) #define CLIP(x) LIM(x,0,65535) #define SWAP(a,b) { a=a+b; b=a-b; a=a-b; } /* In order to inline this calculation, I make the risky assumption that all filter patterns can be described by a repeating pattern of eight rows and two columns Do not use the FC or BAYER macros with the Leaf CatchLight, because its pattern is 16x16, not 2x8. Return values are either 0/1/2/3 = G/M/C/Y or 0/1/2/3 = R/G1/B/G2 PowerShot 600 PowerShot A50 PowerShot Pro70 Pro90 & G1 0xe1e4e1e4: 0x1b4e4b1e: 0x1e4b4e1b: 0xb4b4b4b4: 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 G M G M G M 0 C Y C Y C Y 0 Y C Y C Y C 0 G M G M G M 1 C Y C Y C Y 1 M G M G M G 1 M G M G M G 1 Y C Y C Y C 2 M G M G M G 2 Y C Y C Y C 2 C Y C Y C Y 3 C Y C Y C Y 3 G M G M G M 3 G M G M G M 4 C Y C Y C Y 4 Y C Y C Y C PowerShot A5 5 G M G M G M 5 G M G M G M 0x1e4e1e4e: 6 Y C Y C Y C 6 C Y C Y C Y 7 M G M G M G 7 M G M G M G 0 1 2 3 4 5 0 C Y C Y C Y 1 G M G M G M 2 C Y C Y C Y 3 M G M G M G All RGB cameras use one of these Bayer grids: 0x16161616: 0x61616161: 0x49494949: 0x94949494: 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 B G B G B G 0 G R G R G R 0 G B G B G B 0 R G R G R G 1 G R G R G R 1 B G B G B G 1 R G R G R G 1 G B G B G B 2 B G B G B G 2 G R G R G R 2 G B G B G B 2 R G R G R G 3 G R G R G R 3 B G B G B G 3 R G R G R G 3 G B G B G B */ #define RAW(row,col) \ raw_image[(row)*raw_width+(col)] #define FC(row,col) \ (filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) #define BAYER(row,col) \ image[((row) >> shrink)*iwidth + ((col) >> shrink)][FC(row,col)] #define BAYER2(row,col) \ image[((row) >> shrink)*iwidth + ((col) >> shrink)][fcol(row,col)] int CLASS fcol (int row, int col) { static const char filter[16][16] = { { 2,1,1,3,2,3,2,0,3,2,3,0,1,2,1,0 }, { 0,3,0,2,0,1,3,1,0,1,1,2,0,3,3,2 }, { 2,3,3,2,3,1,1,3,3,1,2,1,2,0,0,3 }, { 0,1,0,1,0,2,0,2,2,0,3,0,1,3,2,1 }, { 3,1,1,2,0,1,0,2,1,3,1,3,0,1,3,0 }, { 2,0,0,3,3,2,3,1,2,0,2,0,3,2,2,1 }, { 2,3,3,1,2,1,2,1,2,1,1,2,3,0,0,1 }, { 1,0,0,2,3,0,0,3,0,3,0,3,2,1,2,3 }, { 2,3,3,1,1,2,1,0,3,2,3,0,2,3,1,3 }, { 1,0,2,0,3,0,3,2,0,1,1,2,0,1,0,2 }, { 0,1,1,3,3,2,2,1,1,3,3,0,2,1,3,2 }, { 2,3,2,0,0,1,3,0,2,0,1,2,3,0,1,0 }, { 1,3,1,2,3,2,3,2,0,2,0,1,1,0,3,0 }, { 0,2,0,3,1,0,0,1,1,3,3,2,3,2,2,1 }, { 2,1,3,2,3,1,2,1,0,3,0,2,0,2,0,2 }, { 0,3,1,0,0,2,0,3,2,1,3,1,1,3,1,3 } }; static const char filter2[6][6] = { { 1,1,0,1,1,2 }, { 1,1,2,1,1,0 }, { 2,0,1,0,2,1 }, { 1,1,2,1,1,0 }, { 1,1,0,1,1,2 }, { 0,2,1,2,0,1 } }; if (filters == 1) return filter[(row+top_margin)&15][(col+left_margin)&15]; if (filters == 2) return filter2[(row+6) % 6][(col+6) % 6]; return FC(row,col); } #ifndef HAVE_MEMMEM const char *memmem (const char *haystack, size_t haystacklen, const char *needle, size_t needlelen) { const char *c; for (c = haystack; c <= haystack + haystacklen - needlelen; c++) if (!memcmp (c, needle, needlelen)) return c; return 0; } #endif #ifndef DCRAW_NOMAIN #include void CLASS dcraw_message(int code, const char *format, ...) { if (verbose || code!=DCRAW_VERBOSE) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } } #endif /*DCRAW_NOMAIN*/ void CLASS merror (void *ptr, const char *where) { if (ptr) return; dcraw_message (DCRAW_ERROR,_("%s: Out of memory in %s\n"), ifname_display, where); longjmp (failure, 1); } void CLASS derror() { if (!data_error) { dcraw_message (DCRAW_WARNING, "%s: ", ifname_display); if (feof(ifp)) dcraw_message (DCRAW_WARNING,_("Unexpected end of file\n")); else #ifdef HAVE_FSEEKO dcraw_message (DCRAW_WARNING,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp)); #else dcraw_message (DCRAW_WARNING,_("Corrupt data near 0x%lx\n"), ftell(ifp)); #endif } data_error++; } ushort CLASS sget2 (uchar *s) { if (order == 0x4949) /* "II" means little-endian */ return s[0] | s[1] << 8; else /* "MM" means big-endian */ return s[0] << 8 | s[1]; } ushort CLASS get2() { uchar str[2] = { 0xff,0xff }; fread (str, 1, 2, ifp); return sget2(str); } unsigned CLASS sget4 (uchar *s) { if (order == 0x4949) return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24; else return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]; } #define sget4(s) sget4((uchar *)s) unsigned CLASS get4() { uchar str[4] = { 0xff,0xff,0xff,0xff }; fread (str, 1, 4, ifp); return sget4(str); } unsigned CLASS getint (int type) { return type == 3 ? get2() : get4(); } float CLASS int_to_float (int i) { union { int i; float f; } u; u.i = i; return u.f; } double CLASS getreal (int type) { union { char c[8]; double d; } u; int i, rev; switch (type) { case 3: return (unsigned short) get2(); case 4: return (unsigned int) get4(); case 5: u.d = (unsigned int) get4(); return u.d / (unsigned int) get4(); case 8: return (signed short) get2(); case 9: return (signed int) get4(); case 10: u.d = (signed int) get4(); return u.d / (signed int) get4(); case 11: return int_to_float (get4()); case 12: rev = 7 * ((order == 0x4949) == (ntohs(0x1234) == 0x1234)); for (i=0; i < 8; i++) u.c[i ^ rev] = fgetc(ifp); return u.d; default: return fgetc(ifp); } } void CLASS read_shorts (ushort *pixel, unsigned count) { if (fread (pixel, 2, count, ifp) < count) derror(); if ((order == 0x4949) == (ntohs(0x1234) == 0x1234)) swab ((const char *)pixel, (char *)pixel, count*2); /*mingw support UF*/ } void CLASS canon_600_fixed_wb (int temp) { static const short mul[4][5] = { { 667, 358,397,565,452 }, { 731, 390,367,499,517 }, { 1119, 396,348,448,537 }, { 1399, 485,431,508,688 } }; int lo, hi, i; float frac=0; for (lo=4; --lo; ) if (*mul[lo] <= temp) break; for (hi=0; hi < 3; hi++) if (*mul[hi] >= temp) break; if (lo != hi) frac = (float) (temp - *mul[lo]) / (*mul[hi] - *mul[lo]); for (i=1; i < 5; i++) pre_mul[i-1] = 1 / (frac * mul[hi][i] + (1-frac) * mul[lo][i]); } /* Return values: 0 = white 1 = near white 2 = not white */ int CLASS canon_600_color (int ratio[2], int mar) { int clipped=0, target, miss; if (flash_used) { if (ratio[1] < -104) { ratio[1] = -104; clipped = 1; } if (ratio[1] > 12) { ratio[1] = 12; clipped = 1; } } else { if (ratio[1] < -264 || ratio[1] > 461) return 2; if (ratio[1] < -50) { ratio[1] = -50; clipped = 1; } if (ratio[1] > 307) { ratio[1] = 307; clipped = 1; } } target = flash_used || ratio[1] < 197 ? -38 - (398 * ratio[1] >> 10) : -123 + (48 * ratio[1] >> 10); if (target - mar <= ratio[0] && target + 20 >= ratio[0] && !clipped) return 0; miss = target - ratio[0]; if (abs(miss) >= mar*4) return 2; if (miss < -20) miss = -20; if (miss > mar) miss = mar; ratio[0] = target - miss; return 1; } void CLASS canon_600_auto_wb() { int mar, row, col, i, j, st, count[] = { 0,0 }; int test[8], total[2][8], ratio[2][2], stat[2]; memset (&total, 0, sizeof total); i = canon_ev + 0.5; if (i < 10) mar = 150; else if (i > 12) mar = 20; else mar = 280 - 20 * i; if (flash_used) mar = 80; for (row=14; row < height-14; row+=4) for (col=10; col < width; col+=2) { for (i=0; i < 8; i++) test[(i & 4) + FC(row+(i >> 1),col+(i & 1))] = BAYER(row+(i >> 1),col+(i & 1)); for (i=0; i < 8; i++) if (test[i] < 150 || test[i] > 1500) goto next; for (i=0; i < 4; i++) if (abs(test[i] - test[i+4]) > 50) goto next; for (i=0; i < 2; i++) { for (j=0; j < 4; j+=2) ratio[i][j >> 1] = ((test[i*4+j+1]-test[i*4+j]) << 10) / test[i*4+j]; stat[i] = canon_600_color (ratio[i], mar); } if ((st = stat[0] | stat[1]) > 1) goto next; for (i=0; i < 2; i++) if (stat[i]) for (j=0; j < 2; j++) test[i*4+j*2+1] = test[i*4+j*2] * (0x400 + ratio[i][j]) >> 10; for (i=0; i < 8; i++) total[st][i] += test[i]; count[st]++; next: ; } if (count[0] | count[1]) { st = count[0]*200 < count[1]; for (i=0; i < 4; i++) pre_mul[i] = 1.0 / (total[st][i] + total[st][i+4]); } } void CLASS canon_600_coeff() { static const short table[6][12] = { { -190,702,-1878,2390, 1861,-1349,905,-393, -432,944,2617,-2105 }, { -1203,1715,-1136,1648, 1388,-876,267,245, -1641,2153,3921,-3409 }, { -615,1127,-1563,2075, 1437,-925,509,3, -756,1268,2519,-2007 }, { -190,702,-1886,2398, 2153,-1641,763,-251, -452,964,3040,-2528 }, { -190,702,-1878,2390, 1861,-1349,905,-393, -432,944,2617,-2105 }, { -807,1319,-1785,2297, 1388,-876,769,-257, -230,742,2067,-1555 } }; int t=0, i, c; float mc, yc; mc = pre_mul[1] / pre_mul[2]; yc = pre_mul[3] / pre_mul[2]; if (mc > 1 && mc <= 1.28 && yc < 0.8789) t=1; if (mc > 1.28 && mc <= 2) { if (yc < 0.8789) t=3; else if (yc <= 2) t=4; } if (flash_used) t=5; for (raw_color = i=0; i < 3; i++) FORCC rgb_cam[i][c] = table[t][i*4 + c] / 1024.0; } void CLASS canon_600_load_raw() { uchar data[1120], *dp; ushort *pix; int irow, row; for (irow=row=0; irow < height; irow++) { if (fread (data, 1, 1120, ifp) < 1120) derror(); pix = raw_image + row*raw_width; for (dp=data; dp < data+1120; dp+=10, pix+=8) { pix[0] = (dp[0] << 2) + (dp[1] >> 6 ); pix[1] = (dp[2] << 2) + (dp[1] >> 4 & 3); pix[2] = (dp[3] << 2) + (dp[1] >> 2 & 3); pix[3] = (dp[4] << 2) + (dp[1] & 3); pix[4] = (dp[5] << 2) + (dp[9] & 3); pix[5] = (dp[6] << 2) + (dp[9] >> 2 & 3); pix[6] = (dp[7] << 2) + (dp[9] >> 4 & 3); pix[7] = (dp[8] << 2) + (dp[9] >> 6 ); } if ((row+=2) > height) row = 1; } } void CLASS canon_600_correct() { int row, col, val; static const short mul[4][2] = { { 1141,1145 }, { 1128,1109 }, { 1178,1149 }, { 1128,1109 } }; for (row=0; row < height; row++) for (col=0; col < width; col++) { if ((val = BAYER(row,col) - black) < 0) val = 0; val = val * mul[row & 3][col & 1] >> 9; BAYER(row,col) = val; } canon_600_fixed_wb(1311); canon_600_auto_wb(); canon_600_coeff(); maximum = (0x3ff - black) * 1109 >> 9; black = 0; } int CLASS canon_s2is() { unsigned row; for (row=0; row < 100; row++) { fseek (ifp, row*3340 + 3284, SEEK_SET); if (getc(ifp) > 15) return 1; } return 0; } /* getbits(-1) initializes the buffer getbits(n) where 0 <= n <= 25 returns an n-bit integer */ unsigned CLASS getbithuff (int nbits, ushort *huff) { // TODO: The following static variables are not thread-safe static unsigned bitbuf=0; static int vbits=0, reset=0; int c; if (nbits == -1) return bitbuf = vbits = reset = 0; if (nbits == 0 || vbits < 0) return 0; while (!reset && vbits < nbits && (c = fgetc(ifp)) != EOF && !(reset = zero_after_ff && c == 0xff && fgetc(ifp))) { bitbuf = (bitbuf << 8) + (uchar) c; vbits += 8; } c = bitbuf << (32-vbits) >> (32-nbits); if (huff) { vbits -= huff[c] >> 8; c = (uchar) huff[c]; } else vbits -= nbits; if (vbits < 0) derror(); return c; } #define getbits(n) getbithuff(n,0) #define gethuff(h) getbithuff(*h,h+1) /* Construct a decode tree according the specification in *source. The first 16 bytes specify how many codes should be 1-bit, 2-bit 3-bit, etc. Bytes after that are the leaf values. For example, if the source is { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, 0x04,0x03,0x05,0x06,0x02,0x07,0x01,0x08,0x09,0x00,0x0a,0x0b,0xff }, then the code is 00 0x04 010 0x03 011 0x05 100 0x06 101 0x02 1100 0x07 1101 0x01 11100 0x08 11101 0x09 11110 0x00 111110 0x0a 1111110 0x0b 1111111 0xff */ ushort * CLASS make_decoder_ref (const uchar **source) { int max, len, h, i, j; const uchar *count; ushort *huff; count = (*source += 16) - 17; for (max=16; max && !count[max]; max--); huff = (ushort *) calloc (1 + (1 << max), sizeof *huff); merror (huff, "make_decoder()"); huff[0] = max; for (h=len=1; len <= max; len++) for (i=0; i < count[len]; i++, ++*source) for (j=0; j < 1 << (max-len); j++) if (h <= 1 << max) huff[h++] = len << 8 | **source; return huff; } ushort * CLASS make_decoder (const uchar *source) { return make_decoder_ref (&source); } void CLASS crw_init_tables (unsigned table, ushort *huff[2]) { static const uchar first_tree[3][29] = { { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, 0x04,0x03,0x05,0x06,0x02,0x07,0x01,0x08,0x09,0x00,0x0a,0x0b,0xff }, { 0,2,2,3,1,1,1,1,2,0,0,0,0,0,0,0, 0x03,0x02,0x04,0x01,0x05,0x00,0x06,0x07,0x09,0x08,0x0a,0x0b,0xff }, { 0,0,6,3,1,1,2,0,0,0,0,0,0,0,0,0, 0x06,0x05,0x07,0x04,0x08,0x03,0x09,0x02,0x00,0x0a,0x01,0x0b,0xff }, }; static const uchar second_tree[3][180] = { { 0,2,2,2,1,4,2,1,2,5,1,1,0,0,0,139, 0x03,0x04,0x02,0x05,0x01,0x06,0x07,0x08, 0x12,0x13,0x11,0x14,0x09,0x15,0x22,0x00,0x21,0x16,0x0a,0xf0, 0x23,0x17,0x24,0x31,0x32,0x18,0x19,0x33,0x25,0x41,0x34,0x42, 0x35,0x51,0x36,0x37,0x38,0x29,0x79,0x26,0x1a,0x39,0x56,0x57, 0x28,0x27,0x52,0x55,0x58,0x43,0x76,0x59,0x77,0x54,0x61,0xf9, 0x71,0x78,0x75,0x96,0x97,0x49,0xb7,0x53,0xd7,0x74,0xb6,0x98, 0x47,0x48,0x95,0x69,0x99,0x91,0xfa,0xb8,0x68,0xb5,0xb9,0xd6, 0xf7,0xd8,0x67,0x46,0x45,0x94,0x89,0xf8,0x81,0xd5,0xf6,0xb4, 0x88,0xb1,0x2a,0x44,0x72,0xd9,0x87,0x66,0xd4,0xf5,0x3a,0xa7, 0x73,0xa9,0xa8,0x86,0x62,0xc7,0x65,0xc8,0xc9,0xa1,0xf4,0xd1, 0xe9,0x5a,0x92,0x85,0xa6,0xe7,0x93,0xe8,0xc1,0xc6,0x7a,0x64, 0xe1,0x4a,0x6a,0xe6,0xb3,0xf1,0xd3,0xa5,0x8a,0xb2,0x9a,0xba, 0x84,0xa4,0x63,0xe5,0xc5,0xf3,0xd2,0xc4,0x82,0xaa,0xda,0xe4, 0xf2,0xca,0x83,0xa3,0xa2,0xc3,0xea,0xc2,0xe2,0xe3,0xff,0xff }, { 0,2,2,1,4,1,4,1,3,3,1,0,0,0,0,140, 0x02,0x03,0x01,0x04,0x05,0x12,0x11,0x06, 0x13,0x07,0x08,0x14,0x22,0x09,0x21,0x00,0x23,0x15,0x31,0x32, 0x0a,0x16,0xf0,0x24,0x33,0x41,0x42,0x19,0x17,0x25,0x18,0x51, 0x34,0x43,0x52,0x29,0x35,0x61,0x39,0x71,0x62,0x36,0x53,0x26, 0x38,0x1a,0x37,0x81,0x27,0x91,0x79,0x55,0x45,0x28,0x72,0x59, 0xa1,0xb1,0x44,0x69,0x54,0x58,0xd1,0xfa,0x57,0xe1,0xf1,0xb9, 0x49,0x47,0x63,0x6a,0xf9,0x56,0x46,0xa8,0x2a,0x4a,0x78,0x99, 0x3a,0x75,0x74,0x86,0x65,0xc1,0x76,0xb6,0x96,0xd6,0x89,0x85, 0xc9,0xf5,0x95,0xb4,0xc7,0xf7,0x8a,0x97,0xb8,0x73,0xb7,0xd8, 0xd9,0x87,0xa7,0x7a,0x48,0x82,0x84,0xea,0xf4,0xa6,0xc5,0x5a, 0x94,0xa4,0xc6,0x92,0xc3,0x68,0xb5,0xc8,0xe4,0xe5,0xe6,0xe9, 0xa2,0xa3,0xe3,0xc2,0x66,0x67,0x93,0xaa,0xd4,0xd5,0xe7,0xf8, 0x88,0x9a,0xd7,0x77,0xc4,0x64,0xe2,0x98,0xa5,0xca,0xda,0xe8, 0xf3,0xf6,0xa9,0xb2,0xb3,0xf2,0xd2,0x83,0xba,0xd3,0xff,0xff }, { 0,0,6,2,1,3,3,2,5,1,2,2,8,10,0,117, 0x04,0x05,0x03,0x06,0x02,0x07,0x01,0x08, 0x09,0x12,0x13,0x14,0x11,0x15,0x0a,0x16,0x17,0xf0,0x00,0x22, 0x21,0x18,0x23,0x19,0x24,0x32,0x31,0x25,0x33,0x38,0x37,0x34, 0x35,0x36,0x39,0x79,0x57,0x58,0x59,0x28,0x56,0x78,0x27,0x41, 0x29,0x77,0x26,0x42,0x76,0x99,0x1a,0x55,0x98,0x97,0xf9,0x48, 0x54,0x96,0x89,0x47,0xb7,0x49,0xfa,0x75,0x68,0xb6,0x67,0x69, 0xb9,0xb8,0xd8,0x52,0xd7,0x88,0xb5,0x74,0x51,0x46,0xd9,0xf8, 0x3a,0xd6,0x87,0x45,0x7a,0x95,0xd5,0xf6,0x86,0xb4,0xa9,0x94, 0x53,0x2a,0xa8,0x43,0xf5,0xf7,0xd4,0x66,0xa7,0x5a,0x44,0x8a, 0xc9,0xe8,0xc8,0xe7,0x9a,0x6a,0x73,0x4a,0x61,0xc7,0xf4,0xc6, 0x65,0xe9,0x72,0xe6,0x71,0x91,0x93,0xa6,0xda,0x92,0x85,0x62, 0xf3,0xc5,0xb2,0xa4,0x84,0xba,0x64,0xa5,0xb3,0xd2,0x81,0xe5, 0xd3,0xaa,0xc4,0xca,0xf2,0xb1,0xe4,0xd1,0x83,0x63,0xea,0xc3, 0xe2,0x82,0xf1,0xa3,0xc2,0xa1,0xc1,0xe3,0xa2,0xe1,0xff,0xff } }; if (table > 2) table = 2; huff[0] = make_decoder ( first_tree[table]); huff[1] = make_decoder (second_tree[table]); } /* Return 0 if the image starts with compressed data, 1 if it starts with uncompressed low-order bits. In Canon compressed data, 0xff is always followed by 0x00. */ int CLASS canon_has_lowbits() { uchar test[0x4000]; int ret=1, i; fseek (ifp, 0, SEEK_SET); fread (test, 1, sizeof test, ifp); for (i=540; i < (int) sizeof test - 1; i++) if (test[i] == 0xff) { if (test[i+1]) return 1; ret=0; } return ret; } void CLASS canon_load_raw() { ushort *pixel, *prow, *huff[2]; int nblocks, lowbits, i, c, row, r, save, val; int block, diffbuf[64], leaf, len, diff, carry=0, pnum=0, base[2]; crw_init_tables (tiff_compress, huff); lowbits = canon_has_lowbits(); if (!lowbits) maximum = 0x3ff; fseek (ifp, 540 + lowbits*raw_height*raw_width/4, SEEK_SET); zero_after_ff = 1; getbits(-1); for (row=0; row < raw_height; row+=8) { pixel = raw_image + row*raw_width; nblocks = MIN (8, raw_height-row) * raw_width >> 6; for (block=0; block < nblocks; block++) { memset (diffbuf, 0, sizeof diffbuf); for (i=0; i < 64; i++ ) { leaf = gethuff(huff[i > 0]); if (leaf == 0 && i) break; if (leaf == 0xff) continue; i += leaf >> 4; len = leaf & 15; if (len == 0) continue; diff = getbits(len); if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1; if (i < 64) diffbuf[i] = diff; } diffbuf[0] += carry; carry = diffbuf[0]; for (i=0; i < 64; i++ ) { if (pnum++ % raw_width == 0) base[0] = base[1] = 512; if ((pixel[(block << 6) + i] = base[i & 1] += diffbuf[i]) >> 10) derror(); } } if (lowbits) { save = ftell(ifp); fseek (ifp, 26 + row*raw_width/4, SEEK_SET); for (prow=pixel, i=0; i < raw_width*2; i++) { c = fgetc(ifp); for (r=0; r < 8; r+=2, prow++) { val = (*prow << 2) + ((c >> r) & 3); if (raw_width == 2672 && val < 512) val += 2; *prow = val; } } fseek (ifp, save, SEEK_SET); } } FORC(2) free (huff[c]); } /* Not a full implementation of Lossless JPEG, just enough to decode Canon, Kodak and Adobe DNG images. */ struct jhead { int bits, high, wide, clrs, sraw, psv, restart, vpred[6]; ushort *huff[6], *free[4], *row; }; int CLASS ljpeg_start (struct jhead *jh, int info_only) { int c, tag, len; uchar data[0x10000]; const uchar *dp; memset (jh, 0, sizeof *jh); jh->restart = INT_MAX; fread (data, 2, 1, ifp); if (data[1] != 0xd8) return 0; do { fread (data, 2, 2, ifp); tag = data[0] << 8 | data[1]; len = (data[2] << 8 | data[3]) - 2; if (tag <= 0xff00) return 0; fread (data, 1, len, ifp); switch (tag) { case 0xffc3: jh->sraw = ((data[7] >> 4) * (data[7] & 15) - 1) & 3; case 0xffc0: jh->bits = data[0]; jh->high = data[1] << 8 | data[2]; jh->wide = data[3] << 8 | data[4]; jh->clrs = data[5] + jh->sraw; if (len == 9 && !dng_version) getc(ifp); break; case 0xffc4: if (info_only) break; for (dp = data; dp < data+len && (c = *dp++) < 4; ) jh->free[c] = jh->huff[c] = make_decoder_ref (&dp); break; case 0xffda: jh->psv = data[1+data[0]*2]; jh->bits -= data[3+data[0]*2] & 15; break; case 0xffdd: jh->restart = data[0] << 8 | data[1]; } } while (tag != 0xffda); if (info_only) return 1; FORC(5) if (!jh->huff[c+1]) jh->huff[c+1] = jh->huff[c]; if (jh->sraw) { FORC(4) jh->huff[2+c] = jh->huff[1]; FORC(jh->sraw) jh->huff[1+c] = jh->huff[0]; } jh->row = (ushort *) calloc (jh->wide*jh->clrs, 4); merror (jh->row, "ljpeg_start()"); return zero_after_ff = 1; } void CLASS ljpeg_end (struct jhead *jh) { int c; FORC4 if (jh->free[c]) free (jh->free[c]); free (jh->row); } int CLASS ljpeg_diff (ushort *huff) { int len, diff; len = gethuff(huff); if (len == 16 && (!dng_version || dng_version >= 0x1010000)) return -32768; diff = getbits(len); if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1; return diff; } ushort * CLASS ljpeg_row (int jrow, struct jhead *jh) { int col, c, diff, pred, spred=0; ushort mark=0, *row[3]; if (jrow * jh->wide % jh->restart == 0) { FORC(6) jh->vpred[c] = 1 << (jh->bits-1); if (jrow) { fseek (ifp, -2, SEEK_CUR); do mark = (mark << 8) + (c = fgetc(ifp)); while (c != EOF && mark >> 4 != 0xffd); } getbits(-1); } FORC3 row[c] = jh->row + jh->wide*jh->clrs*((jrow+c) & 1); for (col=0; col < jh->wide; col++) FORC(jh->clrs) { diff = ljpeg_diff (jh->huff[c]); if (jh->sraw && c <= jh->sraw && (col | c)) pred = spred; else if (col) pred = row[0][-jh->clrs]; else pred = (jh->vpred[c] += diff) - diff; if (jrow && col) switch (jh->psv) { case 1: break; case 2: pred = row[1][0]; break; case 3: pred = row[1][-jh->clrs]; break; case 4: pred = pred + row[1][0] - row[1][-jh->clrs]; break; case 5: pred = pred + ((row[1][0] - row[1][-jh->clrs]) >> 1); break; case 6: pred = row[1][0] + ((pred - row[1][-jh->clrs]) >> 1); break; case 7: pred = (pred + row[1][0]) >> 1; break; default: pred = 0; } if ((**row = pred + diff) >> jh->bits) derror(); if (c <= jh->sraw) spred = **row; row[0]++; row[1]++; } return row[2]; } void CLASS lossless_jpeg_load_raw() { int jwide, jrow, jcol, val, jidx, i, j, row=0, col=0; struct jhead jh; ushort *rp; if (!ljpeg_start (&jh, 0)) return; jwide = jh.wide * jh.clrs; for (jrow=0; jrow < jh.high; jrow++) { rp = ljpeg_row (jrow, &jh); if (load_flags & 1) row = jrow & 1 ? height-1-jrow/2 : jrow/2; for (jcol=0; jcol < jwide; jcol++) { val = curve[*rp++]; if (cr2_slice[0]) { jidx = jrow*jwide + jcol; i = jidx / (cr2_slice[1]*jh.high); if ((j = i >= cr2_slice[0])) i = cr2_slice[0]; jidx -= i * (cr2_slice[1]*jh.high); row = jidx / cr2_slice[1+j]; col = jidx % cr2_slice[1+j] + i*cr2_slice[1]; } if (raw_width == 3984 && (col -= 2) < 0) col += (row--,raw_width); if (row >= 0) RAW(row,col) = val; if (++col >= raw_width) col = (row++,0); } } ljpeg_end (&jh); } void CLASS canon_sraw_load_raw() { struct jhead jh; short *rp=0, (*ip)[4]; int jwide, slice, scol, ecol, row, col, jrow=0, jcol=0, pix[3], c; int v[3]={0,0,0}, ver, hue; char *cp; if (!ljpeg_start (&jh, 0)) return; jwide = (jh.wide >>= 1) * jh.clrs; for (ecol=slice=0; slice <= cr2_slice[0]; slice++) { scol = ecol; ecol += cr2_slice[1] * 2 / jh.clrs; if (!cr2_slice[0] || ecol > raw_width-1) ecol = raw_width & -2; for (row=0; row < height; row += (jh.clrs >> 1) - 1) { ip = (short (*)[4]) image + row*width; for (col=scol; col < ecol; col+=2, jcol+=jh.clrs) { if ((jcol %= jwide) == 0) rp = (short *) ljpeg_row (jrow++, &jh); if (col >= width) continue; FORC (jh.clrs-2) ip[col + (c >> 1)*width + (c & 1)][0] = rp[jcol+c]; ip[col][1] = rp[jcol+jh.clrs-2] - 16384; ip[col][2] = rp[jcol+jh.clrs-1] - 16384; } } } for (cp=model2; *cp && !isdigit(*cp); cp++); sscanf (cp, "%d.%d.%d", v, v+1, v+2); ver = (v[0]*1000 + v[1])*1000 + v[2]; hue = (jh.sraw+1) << 2; if (unique_id >= 0x80000281 || (unique_id == 0x80000218 && ver > 1000006)) hue = jh.sraw << 1; ip = (short (*)[4]) image; rp = ip[0]; for (row=0; row < height; row++, ip+=width) { if (row & (jh.sraw >> 1)) for (col=0; col < width; col+=2) for (c=1; c < 3; c++) if (row == height-1) ip[col][c] = ip[col-width][c]; else ip[col][c] = (ip[col-width][c] + ip[col+width][c] + 1) >> 1; for (col=1; col < width; col+=2) for (c=1; c < 3; c++) if (col == width-1) ip[col][c] = ip[col-1][c]; else ip[col][c] = (ip[col-1][c] + ip[col+1][c] + 1) >> 1; } for ( ; rp < ip[0]; rp+=4) { if (unique_id == 0x80000218 || unique_id == 0x80000250 || unique_id == 0x80000261 || unique_id == 0x80000281 || unique_id == 0x80000287) { rp[1] = (rp[1] << 2) + hue; rp[2] = (rp[2] << 2) + hue; pix[0] = rp[0] + (( 50*rp[1] + 22929*rp[2]) >> 14); pix[1] = rp[0] + ((-5640*rp[1] - 11751*rp[2]) >> 14); pix[2] = rp[0] + ((29040*rp[1] - 101*rp[2]) >> 14); } else { if (unique_id < 0x80000218) rp[0] -= 512; pix[0] = rp[0] + rp[2]; pix[2] = rp[0] + rp[1]; pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12); } FORC3 rp[c] = CLIP(pix[c] * sraw_mul[c] >> 10); } ljpeg_end (&jh); maximum = 0x3fff; } void CLASS adobe_copy_pixel (unsigned row, unsigned col, ushort **rp) { unsigned c; if (is_raw == 2 && shot_select) (*rp)++; if (raw_image) { if (row < raw_height && col < raw_width) RAW(row,col) = curve[**rp]; *rp += is_raw; } else { if (row < height && col < width) FORC(tiff_samples) image[row*width+col][c] = curve[(*rp)[c]]; *rp += tiff_samples; } if (is_raw == 2 && shot_select) (*rp)--; } void CLASS lossless_dng_load_raw() { unsigned save, trow=0, tcol=0, jwide, jrow, jcol, row, col; struct jhead jh; ushort *rp; while (trow < raw_height) { save = ftell(ifp); if (tile_length < INT_MAX) fseek (ifp, get4(), SEEK_SET); if (!ljpeg_start (&jh, 0)) break; jwide = jh.wide; if (filters) jwide *= jh.clrs; jwide /= is_raw; for (row=col=jrow=0; (int) jrow < jh.high; jrow++) { rp = ljpeg_row (jrow, &jh); for (jcol=0; jcol < jwide; jcol++) { adobe_copy_pixel (trow+row, tcol+col, &rp); if (++col >= tile_width || col >= raw_width) row += 1 + (col = 0); } } fseek (ifp, save+4, SEEK_SET); if ((tcol += tile_width) >= raw_width) trow += tile_length + (tcol = 0); ljpeg_end (&jh); } } void CLASS packed_dng_load_raw() { ushort *pixel, *rp; unsigned row, col; pixel = (ushort *) calloc (raw_width * tiff_samples, sizeof *pixel); merror (pixel, "packed_dng_load_raw()"); for (row=0; row < raw_height; row++) { if (tiff_bps == 16) read_shorts (pixel, raw_width * tiff_samples); else { getbits(-1); for (col=0; col < raw_width * tiff_samples; col++) pixel[col] = getbits(tiff_bps); } for (rp=pixel, col=0; col < raw_width; col++) adobe_copy_pixel (row, col, &rp); } free (pixel); } void CLASS pentax_load_raw() { ushort bit[2][15], huff[4097]; int dep, row, col, diff, c, i; ushort vpred[2][2] = {{0,0},{0,0}}, hpred[2]; fseek (ifp, meta_offset, SEEK_SET); dep = (get2() + 12) & 15; fseek (ifp, 12, SEEK_CUR); FORC(dep) bit[0][c] = get2(); FORC(dep) bit[1][c] = fgetc(ifp); FORC(dep) for (i=bit[0][c]; i <= ((bit[0][c]+(4096 >> bit[1][c])-1) & 4095); ) huff[++i] = bit[1][c] << 8 | c; huff[0] = 12; fseek (ifp, data_offset, SEEK_SET); getbits(-1); for (row=0; row < raw_height; row++) for (col=0; col < raw_width; col++) { diff = ljpeg_diff (huff); if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; RAW(row,col) = hpred[col & 1]; if (hpred[col & 1] >> tiff_bps) derror(); } } void CLASS nikon_load_raw() { static const uchar nikon_tree[][32] = { { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */ 5,4,3,6,2,7,1,0,8,9,11,10,12 }, { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */ 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 }, { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */ 5,4,6,3,7,2,8,1,9,0,10,11,12 }, { 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */ 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 }, { 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */ 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 }, { 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */ 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 } }; ushort *huff, ver0, ver1, vpred[2][2], hpred[2], csize; int i, min, max, step=0, tree=0, split=0, row, col, len, shl, diff; fseek (ifp, meta_offset, SEEK_SET); ver0 = fgetc(ifp); ver1 = fgetc(ifp); if (ver0 == 0x49 || ver1 == 0x58) fseek (ifp, 2110, SEEK_CUR); if (ver0 == 0x46) tree = 2; if (tiff_bps == 14) tree += 3; read_shorts (vpred[0], 4); max = 1 << tiff_bps & 0x7fff; if ((csize = get2()) > 1) step = max / (csize-1); if (ver0 == 0x44 && ver1 == 0x20 && step > 0) { for (i=0; i < csize; i++) curve[i*step] = get2(); for (i=0; i < max; i++) curve[i] = ( curve[i-i%step]*(step-i%step) + curve[i-i%step+step]*(i%step) ) / step; fseek (ifp, meta_offset+562, SEEK_SET); split = get2(); } else if (ver0 != 0x46 && csize <= 0x4001) read_shorts (curve, max=csize); while (curve[max-2] == curve[max-1]) max--; huff = make_decoder (nikon_tree[tree]); fseek (ifp, data_offset, SEEK_SET); getbits(-1); for (min=row=0; row < height; row++) { if (split && row == split) { free (huff); huff = make_decoder (nikon_tree[tree+1]); max += (min = 16) << 1; } for (col=0; col < raw_width; col++) { i = gethuff(huff); len = i & 15; shl = i >> 4; diff = ((getbits(len-shl) << 1) + 1) << shl >> 1; if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - !shl; if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; if ((ushort)(hpred[col & 1] + min) >= max) derror(); RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; } } free (huff); } /* Returns 1 for a Coolpix 995, 0 for anything else. */ int CLASS nikon_e995() { int i, histo[256]; const uchar often[] = { 0x00, 0x55, 0xaa, 0xff }; memset (histo, 0, sizeof histo); fseek (ifp, -2000, SEEK_END); for (i=0; i < 2000; i++) histo[fgetc(ifp)]++; for (i=0; i < 4; i++) if (histo[often[i]] < 200) return 0; return 1; } /* Returns 1 for a Coolpix 2100, 0 for anything else. */ int CLASS nikon_e2100() { uchar t[12]; int i; fseek (ifp, 0, SEEK_SET); for (i=0; i < 1024; i++) { fread (t, 1, 12, ifp); if (((t[2] & t[4] & t[7] & t[9]) >> 4 & t[1] & t[6] & t[8] & t[11] & 3) != 3) return 0; } return 1; } void CLASS nikon_3700() { int bits, i; uchar dp[24]; static const struct { int bits; char make[12], model[15]; } table[] = { { 0x00, "PENTAX", "Optio 33WR" }, { 0x03, "NIKON", "E3200" }, { 0x32, "NIKON", "E3700" }, { 0x33, "OLYMPUS", "C740UZ" } }; fseek (ifp, 3072, SEEK_SET); fread (dp, 1, 24, ifp); bits = (dp[8] & 3) << 4 | (dp[20] & 3); for (i=0; i < (int) sizeof table / (int) sizeof *table; i++) if (bits == table[i].bits) { strcpy (make, table[i].make ); strcpy (model, table[i].model); } } /* Separates a Minolta DiMAGE Z2 from a Nikon E4300. */ int CLASS minolta_z2() { int i, nz; char tail[424]; fseek (ifp, -sizeof tail, SEEK_END); fread (tail, 1, sizeof tail, ifp); for (nz=i=0; i < (int) sizeof tail; i++) if (tail[i]) nz++; return nz > 20; } //void CLASS jpeg_thumb(); void CLASS ppm_thumb() { char *thumb; thumb_length = thumb_width*thumb_height*3; thumb = (char *) malloc (thumb_length); merror (thumb, "ppm_thumb()"); fprintf (ofp, "P6\n%d %d\n255\n", thumb_width, thumb_height); fread (thumb, 1, thumb_length, ifp); fwrite (thumb, 1, thumb_length, ofp); free (thumb); } void CLASS ppm16_thumb() { unsigned i; char *thumb; thumb_length = thumb_width*thumb_height*3; thumb = (char *) calloc (thumb_length,2); merror (thumb, "ppm16_thumb()"); read_shorts ((ushort *) thumb, thumb_length); for (i=0; i < thumb_length; i++) thumb[i] = ((ushort *) thumb)[i] >> 8; fprintf (ofp, "P6\n%d %d\n255\n", thumb_width, thumb_height); fwrite (thumb, 1, thumb_length, ofp); free (thumb); } void CLASS layer_thumb() { unsigned i; int c; char *thumb, map[][4] = { "012","102" }; colors = thumb_misc >> 5 & 7; thumb_length = thumb_width*thumb_height; thumb = (char *) calloc (colors, thumb_length); merror (thumb, "layer_thumb()"); fprintf (ofp, "P%d\n%d %d\n255\n", 5 + (colors >> 1), thumb_width, thumb_height); fread (thumb, thumb_length, colors, ifp); for (i=0; i < thumb_length; i++) FORCC putc (thumb[i+thumb_length*(map[thumb_misc >> 8][c]-'0')], ofp); free (thumb); } void CLASS rollei_thumb() { unsigned i; ushort *thumb; thumb_length = thumb_width * thumb_height; thumb = (ushort *) calloc (thumb_length, 2); merror (thumb, "rollei_thumb()"); fprintf (ofp, "P6\n%d %d\n255\n", thumb_width, thumb_height); read_shorts (thumb, thumb_length); for (i=0; i < thumb_length; i++) { putc (thumb[i] << 3, ofp); putc (thumb[i] >> 5 << 2, ofp); putc (thumb[i] >> 11 << 3, ofp); } free (thumb); } void CLASS rollei_load_raw() { uchar pixel[10]; unsigned iten=0, isix, i, buffer=0, todo[16]; isix = raw_width * raw_height * 5 / 8; while (fread (pixel, 1, 10, ifp) == 10) { for (i=0; i < 10; i+=2) { todo[i] = iten++; todo[i+1] = pixel[i] << 8 | pixel[i+1]; buffer = pixel[i] >> 2 | buffer << 6; } for ( ; i < 16; i+=2) { todo[i] = isix++; todo[i+1] = buffer >> (14-i)*5; } for (i=0; i < 16; i+=2) raw_image[todo[i]] = (todo[i+1] & 0x3ff); } maximum = 0x3ff; } int CLASS raw (unsigned row, unsigned col) { return (row < raw_height && col < raw_width) ? RAW(row,col) : 0; } void CLASS phase_one_flat_field (int is_float, int nc) { ushort head[8]; unsigned wide, y, x, rend, cend, row, col; int c; float *mrow, num, mult[4]; read_shorts (head, 8); wide = head[2] / head[4]; mrow = (float *) calloc (nc*wide, sizeof *mrow); merror (mrow, "phase_one_flat_field()"); for (y=0; y < (unsigned)(head[3] / head[5]); y++) { for (x=0; x < wide; x++) for (c=0; c < nc; c+=2) { num = is_float ? getreal(11) : get2()/32768.0; if (y==0) mrow[c*wide+x] = num; else mrow[(c+1)*wide+x] = (num - mrow[c*wide+x]) / head[5]; } if (y==0) continue; rend = head[1] + y*head[5]; for (row = rend-head[5]; row < raw_height && row < rend; row++) { for (x=1; x < wide; x++) { for (c=0; c < nc; c+=2) { mult[c] = mrow[c*wide+x-1]; mult[c+1] = (mrow[c*wide+x] - mult[c]) / head[4]; } cend = head[0] + x*head[4]; for (col = cend-head[4]; col < raw_width && col < cend; col++) { c = nc > 2 ? FC(row-top_margin,col-left_margin) : 0; if (!(c & 1)) { c = RAW(row,col) * mult[c]; RAW(row,col) = LIM(c,0,65535); } for (c=0; c < nc; c+=2) mult[c] += mult[c+1]; } } for (x=0; x < wide; x++) for (c=0; c < nc; c+=2) mrow[c*wide+x] += mrow[(c+1)*wide+x]; } } free (mrow); } void CLASS phase_one_correct() { unsigned entries, tag, data, save, col, row, type; int len, i, j, k, cip, val[4], dev[4], sum, max; int head[9], diff, mindiff=INT_MAX, off_412=0; static const signed char dir[12][2] = { {-1,-1}, {-1,1}, {1,-1}, {1,1}, {-2,0}, {0,-2}, {0,2}, {2,0}, {-2,-2}, {-2,2}, {2,-2}, {2,2} }; float poly[8], num, cfrac, frac, mult[2], *yval[2]; ushort *xval[2]; if (half_size || !meta_length) return; dcraw_message (DCRAW_VERBOSE,_("Phase One correction...\n")); fseek (ifp, meta_offset, SEEK_SET); order = get2(); fseek (ifp, 6, SEEK_CUR); fseek (ifp, meta_offset+get4(), SEEK_SET); entries = get4(); get4(); while (entries--) { tag = get4(); len = get4(); data = get4(); save = ftell(ifp); fseek (ifp, meta_offset+data, SEEK_SET); if (tag == 0x419) { /* Polynomial curve */ for (get4(), i=0; i < 8; i++) poly[i] = getreal(11); poly[3] += (ph1.tag_210 - poly[7]) * poly[6] + 1; for (i=0; i < 0x10000; i++) { num = (poly[5]*i + poly[3])*i + poly[1]; curve[i] = LIM(num,0,65535); } goto apply; /* apply to right half */ } else if (tag == 0x41a) { /* Polynomial curve */ for (i=0; i < 4; i++) poly[i] = getreal(11); for (i=0; i < 0x10000; i++) { for (num=0, j=4; j--; ) num = num * i + poly[j]; curve[i] = LIM(num+i,0,65535); } apply: /* apply to whole image */ for (row=0; row < raw_height; row++) for (col = (tag & 1)*ph1.split_col; col < raw_width; col++) RAW(row,col) = curve[RAW(row,col)]; } else if (tag == 0x400) { /* Sensor defects */ while ((len -= 8) >= 0) { col = get2(); row = get2(); type = get2(); get2(); if (col >= raw_width) continue; if (type == 131) /* Bad column */ for (row=0; row < raw_height; row++) if (FC(row-top_margin,col-left_margin) == 1) { for (sum=i=0; i < 4; i++) sum += val[i] = raw (row+dir[i][0], col+dir[i][1]); for (max=i=0; i < 4; i++) { dev[i] = abs((val[i] << 2) - sum); if (dev[max] < dev[i]) max = i; } RAW(row,col) = (sum - val[max])/3.0 + 0.5; } else { for (sum=0, i=8; i < 12; i++) sum += raw (row+dir[i][0], col+dir[i][1]); RAW(row,col) = 0.5 + sum * 0.0732233 + (raw(row,col-2) + raw(row,col+2)) * 0.3535534; } else if (type == 129) { /* Bad pixel */ if (row >= raw_height) continue; j = (FC(row-top_margin,col-left_margin) != 1) * 4; for (sum=0, i=j; i < j+8; i++) sum += raw (row+dir[i][0], col+dir[i][1]); RAW(row,col) = (sum + 4) >> 3; } } } else if (tag == 0x401) { /* All-color flat fields */ phase_one_flat_field (1, 2); } else if (tag == 0x416 || tag == 0x410) { phase_one_flat_field (0, 2); } else if (tag == 0x40b) { /* Red+blue flat field */ phase_one_flat_field (0, 4); } else if (tag == 0x412) { fseek (ifp, 36, SEEK_CUR); diff = abs (get2() - ph1.tag_21a); if (mindiff > diff) { mindiff = diff; off_412 = ftell(ifp) - 38; } } fseek (ifp, save, SEEK_SET); } if (off_412) { fseek (ifp, off_412, SEEK_SET); for (i=0; i < 9; i++) head[i] = get4() & 0x7fff; yval[0] = (float *) calloc (head[1]*head[3] + head[2]*head[4], 6); merror (yval[0], "phase_one_correct()"); yval[1] = (float *) (yval[0] + head[1]*head[3]); xval[0] = (ushort *) (yval[1] + head[2]*head[4]); xval[1] = (ushort *) (xval[0] + head[1]*head[3]); get2(); for (i=0; i < 2; i++) for (j=0; j < head[i+1]*head[i+3]; j++) yval[i][j] = getreal(11); for (i=0; i < 2; i++) for (j=0; j < head[i+1]*head[i+3]; j++) xval[i][j] = get2(); for (row=0; row < raw_height; row++) for (col=0; col < raw_width; col++) { cfrac = (float) col * head[3] / raw_width; cfrac -= cip = cfrac; num = RAW(row,col) * 0.5; for (i=cip; i < cip+2; i++) { for (k=j=0; j < head[1]; j++) if (num < xval[0][k = head[1]*i+j]) break; frac = (j == 0 || j == head[1]) ? 0 : (xval[0][k] - num) / (xval[0][k] - xval[0][k-1]); mult[i-cip] = yval[0][k-1] * frac + yval[0][k] * (1-frac); } i = ((mult[0] * (1-cfrac) + mult[1] * cfrac) * row + num) * 2; RAW(row,col) = LIM(i,0,65535); } free (yval[0]); } } void CLASS phase_one_load_raw() { int a, b, i; ushort akey, bkey, mask; fseek (ifp, ph1.key_off, SEEK_SET); akey = get2(); bkey = get2(); mask = ph1.format == 1 ? 0x5555:0x1354; fseek (ifp, data_offset, SEEK_SET); read_shorts (raw_image, raw_width*raw_height); if (ph1.format) for (i=0; i < raw_width*raw_height; i+=2) { a = raw_image[i+0] ^ akey; b = raw_image[i+1] ^ bkey; raw_image[i+0] = (a & mask) | (b & ~mask); raw_image[i+1] = (b & mask) | (a & ~mask); } } unsigned CLASS ph1_bithuff (int nbits, ushort *huff) { // TODO: The following static variables are not thread-safe static UINT64 bitbuf=0; static int vbits=0; unsigned c; if (nbits == -1) return bitbuf = vbits = 0; if (nbits == 0) return 0; if (vbits < nbits) { bitbuf = bitbuf << 32 | get4(); vbits += 32; } c = bitbuf << (64-vbits) >> (64-nbits); if (huff) { vbits -= huff[c] >> 8; return (uchar) huff[c]; } vbits -= nbits; return c; } #define ph1_bits(n) ph1_bithuff(n,0) #define ph1_huff(h) ph1_bithuff(*h,h+1) void CLASS phase_one_load_raw_c() { static const int length[] = { 8,7,6,9,11,10,5,12,14,13 }; int *offset, len[2], pred[2], row, col, i, j; ushort *pixel; short (*black)[2]; pixel = (ushort *) calloc (raw_width + raw_height*4, 2); merror (pixel, "phase_one_load_raw_c()"); offset = (int *) (pixel + raw_width); fseek (ifp, strip_offset, SEEK_SET); for (row=0; row < raw_height; row++) offset[row] = get4(); black = (short (*)[2]) offset + raw_height; fseek (ifp, ph1.black_off, SEEK_SET); if (ph1.black_off) read_shorts ((ushort *) black[0], raw_height*2); for (i=0; i < 256; i++) curve[i] = i*i / 3.969 + 0.5; for (row=0; row < raw_height; row++) { fseek (ifp, data_offset + offset[row], SEEK_SET); ph1_bits(-1); pred[0] = pred[1] = 0; for (col=0; col < raw_width; col++) { if (col >= (raw_width & -8)) len[0] = len[1] = 14; else if ((col & 7) == 0) for (i=0; i < 2; i++) { for (j=0; j < 5 && !ph1_bits(1); j++); if (j--) len[i] = length[j*2 + ph1_bits(1)]; } if ((i = len[col & 1]) == 14) pixel[col] = pred[col & 1] = ph1_bits(16); else pixel[col] = pred[col & 1] += ph1_bits(i) + 1 - (1 << (i - 1)); if (pred[col & 1] >> 16) derror(); if (ph1.format == 5 && pixel[col] < 256) pixel[col] = curve[pixel[col]]; } for (col=0; col < raw_width; col++) { i = (pixel[col] << 2) - ph1.black + black[row][col >= ph1.split_col]; if (i > 0) RAW(row,col) = i; } } free (pixel); maximum = 0xfffc - ph1.black; } void CLASS hasselblad_load_raw() { struct jhead jh; int row, col, pred[2], len[2], diff, c; if (!ljpeg_start (&jh, 0)) return; order = 0x4949; ph1_bits(-1); for (row=0; row < raw_height; row++) { pred[0] = pred[1] = 0x8000 + load_flags; for (col=0; col < raw_width; col+=2) { FORC(2) len[c] = ph1_huff(jh.huff[0]); FORC(2) { diff = ph1_bits(len[c]); if ((diff & (1 << (len[c]-1))) == 0) diff -= (1 << len[c]) - 1; if (diff == 65535) diff = -32768; RAW(row,col+c) = pred[c] += diff; } } } ljpeg_end (&jh); maximum = 0xffff; } void CLASS leaf_hdr_load_raw() { ushort *pixel=0; unsigned tile=0, r, c, row, col; if (!filters) { pixel = (ushort *) calloc (raw_width, sizeof *pixel); merror (pixel, "leaf_hdr_load_raw()"); } FORC(tiff_samples) for (r=0; r < raw_height; r++) { if (r % tile_length == 0) { fseek (ifp, data_offset + 4*tile++, SEEK_SET); fseek (ifp, get4(), SEEK_SET); } if (filters && c != shot_select) continue; if (filters) pixel = raw_image + r*raw_width; read_shorts (pixel, raw_width); if (!filters && (row = r - top_margin) < height) for (col=0; col < width; col++) image[row*width+col][c] = pixel[col+left_margin]; } if (!filters) { maximum = 0xffff; raw_color = 1; free (pixel); } } void CLASS unpacked_load_raw() { int row, col, bits=0; while (1 << ++bits < (int) maximum); read_shorts (raw_image, raw_width*raw_height); for (row=0; row < raw_height; row++) for (col=0; col < raw_width; col++) if ((RAW(row,col) >>= load_flags) >> bits && (unsigned) (row-top_margin) < height && (unsigned) (col-left_margin) < width) derror(); } void CLASS sinar_4shot_load_raw() { ushort *pixel; unsigned shot, row, col, r, c; if ((shot = shot_select) || half_size) { if (shot) shot--; if (shot > 3) shot = 3; fseek (ifp, data_offset + shot*4, SEEK_SET); fseek (ifp, get4(), SEEK_SET); unpacked_load_raw(); return; } free (raw_image); raw_image = 0; free (image); image = (ushort (*)[4]) calloc ((iheight=height)*(iwidth=width), sizeof *image); merror (image, "sinar_4shot_load_raw()"); pixel = (ushort *) calloc (raw_width, sizeof *pixel); merror (pixel, "sinar_4shot_load_raw()"); for (shot=0; shot < 4; shot++) { fseek (ifp, data_offset + shot*4, SEEK_SET); fseek (ifp, get4(), SEEK_SET); for (row=0; row < raw_height; row++) { read_shorts (pixel, raw_width); if ((r = row-top_margin - (shot >> 1 & 1)) >= height) continue; for (col=0; col < raw_width; col++) { if ((c = col-left_margin - (shot & 1)) >= width) continue; image[r*width+c][FC(row,col)] = pixel[col]; } } } free (pixel); shrink = filters = 0; } void CLASS imacon_full_load_raw() { int row, col; for (row=0; row < height; row++) for (col=0; col < width; col++) read_shorts (image[row*width+col], 3); } void CLASS packed_load_raw() { int vbits=0, bwide, pwide, rbits, bite, half, irow, row, col, val, i; UINT64 bitbuf=0; if ((ushort)(raw_width * 8) >= width * tiff_bps) /* Is raw_width in bytes? */ pwide = (bwide = raw_width) * 8 / tiff_bps; else bwide = (pwide = raw_width) * tiff_bps / 8; rbits = bwide * 8 - pwide * tiff_bps; if (load_flags & 1) bwide = bwide * 16 / 15; bite = 8 + (load_flags & 24); half = (raw_height+1) >> 1; for (irow=0; irow < raw_height; irow++) { row = irow; if (load_flags & 2 && (row = irow % half * 2 + irow / half) == 1 && load_flags & 4) { if (vbits=0, tiff_compress) fseek (ifp, data_offset - (-half*bwide & -2048), SEEK_SET); else { fseek (ifp, 0, SEEK_END); fseek (ifp, ftell(ifp) >> 3 << 2, SEEK_SET); } } for (col=0; col < pwide; col++) { for (vbits -= tiff_bps; vbits < 0; vbits += bite) { bitbuf <<= bite; for (i=0; i < bite; i+=8) bitbuf |= (unsigned) (fgetc(ifp) << i); } val = bitbuf << (64-tiff_bps-vbits) >> (64-tiff_bps); RAW(row,col ^ (load_flags >> 6)) = val; if (load_flags & 1 && (col % 10) == 9 && fgetc(ifp) && col < width+left_margin) derror(); } vbits -= rbits; } } void CLASS nokia_load_raw() { uchar *data, *dp; int rev, dwide, row, col, c; rev = 3 * (order == 0x4949); dwide = raw_width * 5 / 4; data = (uchar *) malloc (dwide*2); merror (data, "nokia_load_raw()"); for (row=0; row < raw_height; row++) { if ((int) fread (data+dwide, 1, dwide, ifp) < dwide) derror(); FORC(dwide) data[c] = data[dwide+(c ^ rev)]; for (dp=data, col=0; col < raw_width; dp+=5, col+=4) FORC4 RAW(row,col+c) = (dp[c] << 2) | (dp[4] >> (c << 1) & 3); } free (data); maximum = 0x3ff; } unsigned CLASS pana_bits (int nbits) { static uchar buf[0x4000]; static int vbits; int byte; if (!nbits) return vbits=0; if (!vbits) { fread (buf+load_flags, 1, 0x4000-load_flags, ifp); fread (buf, 1, load_flags, ifp); } vbits = (vbits - nbits) & 0x1ffff; byte = vbits >> 3 ^ 0x3ff0; return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); } void CLASS panasonic_load_raw() { int row, col, i, j, sh=0, pred[2], nonz[2]; pana_bits(0); for (row=0; row < height; row++) for (col=0; col < raw_width; col++) { if ((i = col % 14) == 0) pred[0] = pred[1] = nonz[0] = nonz[1] = 0; if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); if (nonz[i & 1]) { if ((j = pana_bits(8))) { if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) pred[i & 1] &= ~(-1 << sh); pred[i & 1] += j << sh; } } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror(); } } void CLASS olympus_load_raw() { ushort huff[4096]; int row, col, nbits, sign, low, high, i, c, w, n, nw; int acarry[2][3], *carry, pred, diff; huff[n=0] = 0xc0c; for (i=12; i--; ) FORC(2048 >> i) huff[++n] = (i+1) << 8 | i; fseek (ifp, 7, SEEK_CUR); getbits(-1); for (row=0; row < height; row++) { memset (acarry, 0, sizeof acarry); for (col=0; col < raw_width; col++) { carry = acarry[col & 1]; i = 2 * (carry[2] < 3); for (nbits=2+i; (ushort) carry[0] >> (nbits+i); nbits++); low = (sign = getbits(3)) & 3; sign = sign << 29 >> 31; if ((high = getbithuff(12,huff)) == 12) high = getbits(16-nbits) >> 1; carry[0] = (high << nbits) | getbits(nbits); diff = (carry[0] ^ sign) + carry[1]; carry[1] = (diff*3 + carry[1]) >> 5; carry[2] = carry[0] > 16 ? 0 : carry[2]+1; if (col >= width) continue; if (row < 2 && col < 2) pred = 0; else if (row < 2) pred = RAW(row,col-2); else if (col < 2) pred = RAW(row-2,col); else { w = RAW(row,col-2); n = RAW(row-2,col); nw = RAW(row-2,col-2); if ((w < nw && nw < n) || (n < nw && nw < w)) { if (ABS(w-nw) > 32 || ABS(n-nw) > 32) pred = w + n - nw; else pred = (w + n) >> 1; } else pred = ABS(w-nw) > ABS(n-nw) ? w : n; } if ((RAW(row,col) = pred + ((diff << 2) | low)) >> 12) derror(); } } } void CLASS minolta_rd175_load_raw() { uchar pixel[768]; unsigned irow, box, row, col; for (irow=0; irow < 1481; irow++) { if (fread (pixel, 1, 768, ifp) < 768) derror(); box = irow / 82; row = irow % 82 * 12 + ((box < 12) ? box | 1 : (box-12)*2); switch (irow) { case 1477: case 1479: continue; case 1476: row = 984; break; case 1480: row = 985; break; case 1478: row = 985; box = 1; } if ((box < 12) && (box & 1)) { for (col=0; col < 1533; col++, row ^= 1) if (col != 1) RAW(row,col) = (col+1) & 2 ? pixel[col/2-1] + pixel[col/2+1] : pixel[col/2] << 1; RAW(row,1) = pixel[1] << 1; RAW(row,1533) = pixel[765] << 1; } else for (col=row & 1; col < 1534; col+=2) RAW(row,col) = pixel[col/2] << 1; } maximum = 0xff << 1; } void CLASS quicktake_100_load_raw() { uchar pixel[484][644]; static const short gstep[16] = { -89,-60,-44,-32,-22,-15,-8,-2,2,8,15,22,32,44,60,89 }; static const short rstep[6][4] = { { -3,-1,1,3 }, { -5,-1,1,5 }, { -8,-2,2,8 }, { -13,-3,3,13 }, { -19,-4,4,19 }, { -28,-6,6,28 } }; static const short curve[256] = { 0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, 28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53, 54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,75,76,77,78, 79,80,81,82,83,84,86,88,90,92,94,97,99,101,103,105,107,110,112,114,116, 118,120,123,125,127,129,131,134,136,138,140,142,144,147,149,151,153,155, 158,160,162,164,166,168,171,173,175,177,179,181,184,186,188,190,192,195, 197,199,201,203,205,208,210,212,214,216,218,221,223,226,230,235,239,244, 248,252,257,261,265,270,274,278,283,287,291,296,300,305,309,313,318,322, 326,331,335,339,344,348,352,357,361,365,370,374,379,383,387,392,396,400, 405,409,413,418,422,426,431,435,440,444,448,453,457,461,466,470,474,479, 483,487,492,496,500,508,519,531,542,553,564,575,587,598,609,620,631,643, 654,665,676,687,698,710,721,732,743,754,766,777,788,799,810,822,833,844, 855,866,878,889,900,911,922,933,945,956,967,978,989,1001,1012,1023 }; int rb, row, col, sharp, val=0; getbits(-1); memset (pixel, 0x80, sizeof pixel); for (row=2; row < height+2; row++) { for (col=2+(row & 1); col < width+2; col+=2) { val = ((pixel[row-1][col-1] + 2*pixel[row-1][col+1] + pixel[row][col-2]) >> 2) + gstep[getbits(4)]; pixel[row][col] = val = LIM(val,0,255); if (col < 4) pixel[row][col-2] = pixel[row+1][~row & 1] = val; if (row == 2) pixel[row-1][col+1] = pixel[row-1][col+3] = val; } pixel[row][col] = val; } for (rb=0; rb < 2; rb++) for (row=2+rb; row < height+2; row+=2) for (col=3-(row & 1); col < width+2; col+=2) { if (row < 4 || col < 4) sharp = 2; else { val = ABS(pixel[row-2][col] - pixel[row][col-2]) + ABS(pixel[row-2][col] - pixel[row-2][col-2]) + ABS(pixel[row][col-2] - pixel[row-2][col-2]); sharp = val < 4 ? 0 : val < 8 ? 1 : val < 16 ? 2 : val < 32 ? 3 : val < 48 ? 4 : 5; } val = ((pixel[row-2][col] + pixel[row][col-2]) >> 1) + rstep[sharp][getbits(2)]; pixel[row][col] = val = LIM(val,0,255); if (row < 4) pixel[row-2][col+2] = val; if (col < 4) pixel[row+2][col-2] = val; } for (row=2; row < height+2; row++) for (col=3-(row & 1); col < width+2; col+=2) { val = ((pixel[row][col-1] + (pixel[row][col] << 2) + pixel[row][col+1]) >> 1) - 0x100; pixel[row][col] = LIM(val,0,255); } for (row=0; row < height; row++) for (col=0; col < width; col++) RAW(row,col) = curve[pixel[row+2][col+2]]; maximum = 0x3ff; } #define radc_token(tree) ((signed char) getbithuff(8,huff[tree])) #define FORYX for (y=1; y < 3; y++) for (x=col+1; x >= col; x--) #define PREDICTOR (c ? (buf[c][y-1][x] + buf[c][y][x+1]) / 2 \ : (buf[c][y-1][x+1] + 2*buf[c][y-1][x] + buf[c][y][x+1]) / 4) void CLASS kodak_radc_load_raw() { static const char src[] = { 1,1, 2,3, 3,4, 4,2, 5,7, 6,5, 7,6, 7,8, 1,0, 2,1, 3,3, 4,4, 5,2, 6,7, 7,6, 8,5, 8,8, 2,1, 2,3, 3,0, 3,2, 3,4, 4,6, 5,5, 6,7, 6,8, 2,0, 2,1, 2,3, 3,2, 4,4, 5,6, 6,7, 7,5, 7,8, 2,1, 2,4, 3,0, 3,2, 3,3, 4,7, 5,5, 6,6, 6,8, 2,3, 3,1, 3,2, 3,4, 3,5, 3,6, 4,7, 5,0, 5,8, 2,3, 2,6, 3,0, 3,1, 4,4, 4,5, 4,7, 5,2, 5,8, 2,4, 2,7, 3,3, 3,6, 4,1, 4,2, 4,5, 5,0, 5,8, 2,6, 3,1, 3,3, 3,5, 3,7, 3,8, 4,0, 5,2, 5,4, 2,0, 2,1, 3,2, 3,3, 4,4, 4,5, 5,6, 5,7, 4,8, 1,0, 2,2, 2,-2, 1,-3, 1,3, 2,-17, 2,-5, 2,5, 2,17, 2,-7, 2,2, 2,9, 2,18, 2,-18, 2,-9, 2,-2, 2,7, 2,-28, 2,28, 3,-49, 3,-9, 3,9, 4,49, 5,-79, 5,79, 2,-1, 2,13, 2,26, 3,39, 4,-16, 5,55, 6,-37, 6,76, 2,-26, 2,-13, 2,1, 3,-39, 4,16, 5,-55, 6,-76, 6,37 }; ushort huff[19][256]; int row, col, tree, nreps, rep, step, i, j, k, c, s, r, x, y, val; short last[3] = { 16,16,16 }, mul[3], buf[3][3][386]; static const ushort pt[] = { 0,0, 1280,1344, 2320,3616, 3328,8000, 4095,16383, 65535,16383 }; for (i=2; i < 12; i+=2) for (c=pt[i-2]; c <= pt[i]; c++) curve[c] = (float) (c-pt[i-2]) / (pt[i]-pt[i-2]) * (pt[i+1]-pt[i-1]) + pt[i-1] + 0.5; for (s=i=0; i < (int) sizeof src; i+=2) FORC(256 >> src[i]) huff[0][s++] = src[i] << 8 | (uchar) src[i+1]; s = kodak_cbpp == 243 ? 2 : 3; FORC(256) huff[18][c] = (8-s) << 8 | c >> s << s | 1 << (s-1); getbits(-1); for (i=0; i < 3; i++) for (j=0; j < 3; j++) for (k=0; k < 386; k++) buf[i][j][k] = 2048; for (row=0; row < height; row+=4) { FORC3 mul[c] = getbits(6); FORC3 { val = ((0x1000000/last[c] + 0x7ff) >> 12) * mul[c]; s = val > 65564 ? 10:12; x = ~(-1 << (s-1)); val <<= 12-s; for (i=0; i < (int) sizeof(buf[0])/(int) sizeof(short); i++) buf[c][0][i] = (buf[c][0][i] * val + x) >> s; last[c] = mul[c]; for (r=0; r <= !c; r++) { buf[c][1][width/2] = buf[c][2][width/2] = mul[c] << 7; for (tree=1, col=width/2; col > 0; ) { if ((tree = radc_token(tree))) { col -= 2; if (tree == 8) FORYX buf[c][y][x] = (uchar) radc_token(18) * mul[c]; else FORYX buf[c][y][x] = radc_token(tree+10) * 16 + PREDICTOR; } else do { nreps = (col > 2) ? radc_token(9) + 1 : 1; for (rep=0; rep < 8 && rep < nreps && col > 0; rep++) { col -= 2; FORYX buf[c][y][x] = PREDICTOR; if (rep & 1) { step = radc_token(10) << 4; FORYX buf[c][y][x] += step; } } } while (nreps == 9); } for (y=0; y < 2; y++) for (x=0; x < width/2; x++) { val = (buf[c][y+1][x] << 4) / mul[c]; if (val < 0) val = 0; if (c) RAW(row+y*2+c-1,x*2+2-c) = val; else RAW(row+r*2+y,x*2+y) = val; } memcpy (buf[c][0]+!c, buf[c][2], sizeof buf[c][0]-2*!c); } } for (y=row; y < row+4; y++) for (x=0; x < width; x++) if ((x+y) & 1) { r = x ? x-1 : x+1; s = x+1 < width ? x+1 : x-1; val = (RAW(y,x)-2048)*2 + (RAW(y,r)+RAW(y,s))/2; if (val < 0) val = 0; RAW(y,x) = val; } } for (i=0; i < height*width; i++) raw_image[i] = curve[raw_image[i]]; maximum = 0x3fff; } #undef FORYX #undef PREDICTOR #ifndef HAVE_LIBJPEG void CLASS kodak_jpeg_load_raw() {} void CLASS lossy_dng_load_raw() {} #else METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo) { // TODO: The following static variable is not thread-safe static uchar jpeg_buffer[4096]; size_t nbytes; DCRaw *d = (DCRaw*)cinfo->client_data; nbytes = fread (jpeg_buffer, 1, 4096, d->ifp); swab ((const char *)jpeg_buffer, (char *)jpeg_buffer, nbytes); /*mingw UF*/ cinfo->src->next_input_byte = jpeg_buffer; cinfo->src->bytes_in_buffer = nbytes; return TRUE; } void CLASS kodak_jpeg_load_raw() { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPARRAY buf; JSAMPLE (*pixel)[3]; int row, col; cinfo.err = jpeg_std_error (&jerr); cinfo.client_data = this; jpeg_create_decompress (&cinfo); jpeg_stdio_src (&cinfo, ifp); cinfo.src->fill_input_buffer = fill_input_buffer; jpeg_read_header (&cinfo, TRUE); jpeg_start_decompress (&cinfo); if ((cinfo.output_width != width ) || (cinfo.output_height*2 != height ) || (cinfo.output_components != 3 )) { dcraw_message (DCRAW_ERROR,_("%s: incorrect JPEG dimensions\n"), ifname_display); jpeg_destroy_decompress (&cinfo); longjmp (failure, 3); } buf = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, width*3, 1); while (cinfo.output_scanline < cinfo.output_height) { row = cinfo.output_scanline * 2; jpeg_read_scanlines (&cinfo, buf, 1); pixel = (JSAMPLE (*)[3]) buf[0]; for (col=0; col < width; col+=2) { RAW(row+0,col+0) = pixel[col+0][1] << 1; RAW(row+1,col+1) = pixel[col+1][1] << 1; RAW(row+0,col+1) = pixel[col][0] + pixel[col+1][0]; RAW(row+1,col+0) = pixel[col][2] + pixel[col+1][2]; } } jpeg_finish_decompress (&cinfo); jpeg_destroy_decompress (&cinfo); maximum = 0xff << 1; } void CLASS lossy_dng_load_raw() { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPARRAY buf; JSAMPLE (*pixel)[3]; unsigned sorder=order, ntags, opcode, deg, i, j, c; unsigned save=data_offset-4, trow=0, tcol=0, row, col; ushort curve[3][256]; double coeff[9], tot; fseek (ifp, meta_offset, SEEK_SET); order = 0x4d4d; ntags = get4(); while (ntags--) { opcode = get4(); get4(); get4(); if (opcode != 8) { fseek (ifp, get4(), SEEK_CUR); continue; } fseek (ifp, 20, SEEK_CUR); if ((c = get4()) > 2) break; fseek (ifp, 12, SEEK_CUR); if ((deg = get4()) > 8) break; for (i=0; i <= deg && i < 9; i++) coeff[i] = getreal(12); for (i=0; i < 256; i++) { for (tot=j=0; j <= deg; j++) tot += coeff[j] * pow(i/255.0, (double) j); curve[c][i] = tot*0xffff; } } order = sorder; cinfo.err = jpeg_std_error (&jerr); jpeg_create_decompress (&cinfo); while (trow < raw_height) { fseek (ifp, save+=4, SEEK_SET); if (tile_length < INT_MAX) fseek (ifp, get4(), SEEK_SET); jpeg_stdio_src (&cinfo, ifp); jpeg_read_header (&cinfo, TRUE); jpeg_start_decompress (&cinfo); buf = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, cinfo.output_width*3, 1); while (cinfo.output_scanline < cinfo.output_height && (row = trow + cinfo.output_scanline) < height) { jpeg_read_scanlines (&cinfo, buf, 1); pixel = (JSAMPLE (*)[3]) buf[0]; for (col=0; col < cinfo.output_width && tcol+col < width; col++) { FORC3 image[row*width+tcol+col][c] = curve[c][pixel[col][c]]; } } jpeg_abort_decompress (&cinfo); if ((tcol += tile_width) >= raw_width) trow += tile_length + (tcol = 0); } jpeg_destroy_decompress (&cinfo); maximum = 0xffff; } #endif void CLASS kodak_dc120_load_raw() { static const int mul[4] = { 162, 192, 187, 92 }; static const int add[4] = { 0, 636, 424, 212 }; uchar pixel[848]; int row, shift, col; for (row=0; row < height; row++) { if (fread (pixel, 1, 848, ifp) < 848) derror(); shift = row * mul[row & 3] + add[row & 3]; for (col=0; col < width; col++) RAW(row,col) = (ushort) pixel[(col + shift) % 848]; } maximum = 0xff; } void CLASS eight_bit_load_raw() { uchar *pixel; unsigned row, col; pixel = (uchar *) calloc (raw_width, sizeof *pixel); merror (pixel, "eight_bit_load_raw()"); for (row=0; row < raw_height; row++) { if (fread (pixel, 1, raw_width, ifp) < raw_width) derror(); for (col=0; col < raw_width; col++) RAW(row,col) = curve[pixel[col]]; } free (pixel); maximum = curve[0xff]; } void CLASS kodak_yrgb_load_raw() { uchar *pixel; int row, col, y, cb, cr, rgb[3], c; pixel = (uchar *) calloc (raw_width, 3*sizeof *pixel); merror (pixel, "kodak_yrgb_load_raw()"); for (row=0; row < height; row++) { if (~row & 1) if (fread (pixel, raw_width, 3, ifp) < 3) derror(); for (col=0; col < raw_width; col++) { y = pixel[width*2*(row & 1) + col]; cb = pixel[width + (col & -2)] - 128; cr = pixel[width + (col & -2)+1] - 128; rgb[1] = y-((cb + cr + 2) >> 2); rgb[2] = rgb[1] + cb; rgb[0] = rgb[1] + cr; FORC3 image[row*width+col][c] = curve[LIM(rgb[c],0,255)]; } } free (pixel); maximum = curve[0xff]; } void CLASS kodak_262_load_raw() { static const uchar kodak_tree[2][26] = { { 0,1,5,1,1,2,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9 }, { 0,3,1,1,1,1,1,2,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9 } }; ushort *huff[2]; uchar *pixel; int *strip, ns, c, row, col, chess, pi=0, pi1, pi2, pred, val; FORC(2) huff[c] = make_decoder (kodak_tree[c]); ns = (raw_height+63) >> 5; pixel = (uchar *) malloc (raw_width*32 + ns*4); merror (pixel, "kodak_262_load_raw()"); strip = (int *) (pixel + raw_width*32); order = 0x4d4d; FORC(ns) strip[c] = get4(); for (row=0; row < raw_height; row++) { if ((row & 31) == 0) { fseek (ifp, strip[row >> 5], SEEK_SET); getbits(-1); pi = 0; } for (col=0; col < raw_width; col++) { chess = (row + col) & 1; pi1 = chess ? pi-2 : pi-raw_width-1; pi2 = chess ? pi-2*raw_width : pi-raw_width+1; if (col <= chess) pi1 = -1; if (pi1 < 0) pi1 = pi2; if (pi2 < 0) pi2 = pi1; if (pi1 < 0 && col > 1) pi1 = pi2 = pi-2; pred = (pi1 < 0) ? 0 : (pixel[pi1] + pixel[pi2]) >> 1; pixel[pi] = val = pred + ljpeg_diff (huff[chess]); if (val >> 8) derror(); val = curve[pixel[pi++]]; RAW(row,col) = val; } } free (pixel); FORC(2) free (huff[c]); } int CLASS kodak_65000_decode (short *out, int bsize) { uchar c, blen[768]; ushort raw[6]; INT64 bitbuf=0; int save, bits=0, i, j, len, diff; save = ftell(ifp); bsize = (bsize + 3) & -4; for (i=0; i < bsize; i+=2) { c = fgetc(ifp); if ((blen[i ] = c & 15) > 12 || (blen[i+1] = c >> 4) > 12 ) { fseek (ifp, save, SEEK_SET); for (i=0; i < bsize; i+=8) { read_shorts (raw, 6); out[i ] = raw[0] >> 12 << 8 | raw[2] >> 12 << 4 | raw[4] >> 12; out[i+1] = raw[1] >> 12 << 8 | raw[3] >> 12 << 4 | raw[5] >> 12; for (j=0; j < 6; j++) out[i+2+j] = raw[j] & 0xfff; } return 1; } } if ((bsize & 7) == 4) { bitbuf = fgetc(ifp) << 8; bitbuf += fgetc(ifp); bits = 16; } for (i=0; i < bsize; i++) { len = blen[i]; if (bits < len) { for (j=0; j < 32; j+=8) bitbuf += (INT64) fgetc(ifp) << (bits+(j^8)); bits += 32; } diff = bitbuf & (0xffff >> (16-len)); bitbuf >>= len; bits -= len; if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1; out[i] = diff; } return 0; } void CLASS kodak_65000_load_raw() { short buf[256]; int row, col, len, pred[2], ret, i; for (row=0; row < height; row++) for (col=0; col < width; col+=256) { pred[0] = pred[1] = 0; len = MIN (256, width-col); ret = kodak_65000_decode (buf, len); for (i=0; i < len; i++) if ((RAW(row,col+i) = curve[ret ? buf[i] : (pred[i & 1] += buf[i])]) >> 12) derror(); } } void CLASS kodak_ycbcr_load_raw() { short buf[384], *bp; int row, col, len, c, i, j, k, y[2][2], cb, cr, rgb[3]; ushort *ip; for (row=0; row < height; row+=2) for (col=0; col < width; col+=128) { len = MIN (128, width-col); kodak_65000_decode (buf, len*3); y[0][1] = y[1][1] = cb = cr = 0; for (bp=buf, i=0; i < len; i+=2, bp+=2) { cb += bp[4]; cr += bp[5]; rgb[1] = -((cb + cr + 2) >> 2); rgb[2] = rgb[1] + cb; rgb[0] = rgb[1] + cr; for (j=0; j < 2; j++) for (k=0; k < 2; k++) { if ((y[j][k] = y[j][k^1] + *bp++) >> 10) derror(); ip = image[(row+j)*width + col+i+k]; FORC3 ip[c] = curve[LIM(y[j][k]+rgb[c], 0, 0xfff)]; } } } } void CLASS kodak_rgb_load_raw() { short buf[768], *bp; int row, col, len, c, i, rgb[3]; ushort *ip=image[0]; if (raw_image) free (raw_image); raw_image = 0; for (row=0; row < height; row++) for (col=0; col < width; col+=256) { len = MIN (256, width-col); kodak_65000_decode (buf, len*3); memset (rgb, 0, sizeof rgb); for (bp=buf, i=0; i < len; i++, ip+=4) FORC3 if ((ip[c] = rgb[c] += *bp++) >> 12) derror(); } } void CLASS kodak_thumb_load_raw() { int row, col; colors = thumb_misc >> 5; for (row=0; row < height; row++) for (col=0; col < width; col++) read_shorts (image[row*width+col], colors); maximum = (1 << (thumb_misc & 31)) - 1; } void CLASS sony_decrypt (unsigned *data, int len, int start, int key) { // TODO: The following static variables are not thread-safe static unsigned pad[128], p; if (start) { for (p=0; p < 4; p++) pad[p] = key = key * 48828125 + 1; pad[3] = pad[3] << 1 | (pad[0]^pad[2]) >> 31; for (p=4; p < 127; p++) pad[p] = (pad[p-4]^pad[p-2]) << 1 | (pad[p-3]^pad[p-1]) >> 31; for (p=0; p < 127; p++) pad[p] = htonl(pad[p]); } while (len--) *data++ ^= pad[p++ & 127] = pad[(p+1) & 127] ^ pad[(p+65) & 127]; } void CLASS sony_load_raw() { uchar head[40]; ushort *pixel; unsigned i, key, row, col; fseek (ifp, 200896, SEEK_SET); fseek (ifp, (unsigned) fgetc(ifp)*4 - 1, SEEK_CUR); order = 0x4d4d; key = get4(); fseek (ifp, 164600, SEEK_SET); fread (head, 1, 40, ifp); sony_decrypt ((unsigned int *) head, 10, 1, key); for (i=26; i-- > 22; ) key = key << 8 | head[i]; fseek (ifp, data_offset, SEEK_SET); for (row=0; row < raw_height; row++) { pixel = raw_image + row*raw_width; if (fread (pixel, 2, raw_width, ifp) < raw_width) derror(); sony_decrypt ((unsigned int *) pixel, raw_width/2, !row, key); for (col=0; col < raw_width; col++) if ((pixel[col] = ntohs(pixel[col])) >> 14) derror(); } maximum = 0x3ff0; } void CLASS sony_arw_load_raw() { ushort huff[32768]; static const ushort tab[18] = { 0xf11,0xf10,0xe0f,0xd0e,0xc0d,0xb0c,0xa0b,0x90a,0x809, 0x708,0x607,0x506,0x405,0x304,0x303,0x300,0x202,0x201 }; int i, c, n, col, row, len, diff, sum=0; for (n=i=0; i < 18; i++) FORC(32768 >> (tab[i] >> 8)) huff[n++] = tab[i]; getbits(-1); for (col = raw_width; col--; ) for (row=0; row < raw_height+1; row+=2) { if (row == raw_height) row = 1; len = getbithuff(15,huff); diff = getbits(len); if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1; if ((sum += diff) >> 12) derror(); if (row < height) RAW(row,col) = sum; } } void CLASS sony_arw2_load_raw() { uchar *data, *dp; ushort pix[16]; int row, col, val, max, min, imax, imin, sh, bit, i; data = (uchar *) malloc (raw_width); merror (data, "sony_arw2_load_raw()"); for (row=0; row < height; row++) { fread (data, 1, raw_width, ifp); for (dp=data, col=0; col < raw_width-30; dp+=16) { max = 0x7ff & (val = sget4(dp)); min = 0x7ff & val >> 11; imax = 0x0f & val >> 22; imin = 0x0f & val >> 26; for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++); for (bit=30, i=0; i < 16; i++) if (i == imax) pix[i] = max; else if (i == imin) pix[i] = min; else { pix[i] = ((sget2(dp+(bit >> 3)) >> (bit & 7) & 0x7f) << sh) + min; if (pix[i] > 0x7ff) pix[i] = 0x7ff; bit += 7; } for (i=0; i < 16; i++, col+=2) RAW(row,col) = curve[pix[i] << 1] >> 2; col -= col & 1 ? 1:31; } } free (data); } #define HOLE(row) ((holes >> (((row) - raw_height) & 7)) & 1) /* Kudos to Rich Taylor for figuring out SMaL's compression algorithm. */ void CLASS smal_decode_segment (unsigned seg[2][2], int holes) { uchar hist[3][13] = { { 7, 7, 0, 0, 63, 55, 47, 39, 31, 23, 15, 7, 0 }, { 7, 7, 0, 0, 63, 55, 47, 39, 31, 23, 15, 7, 0 }, { 3, 3, 0, 0, 63, 47, 31, 15, 0 } }; int low, high=0xff, carry=0, nbits=8; int s, count, bin, next, i, sym[3]; uchar diff, pred[]={0,0}; ushort data=0, range=0; unsigned pix; fseek (ifp, seg[0][1]+1, SEEK_SET); getbits(-1); for (pix=seg[0][0]; pix < seg[1][0]; pix++) { for (s=0; s < 3; s++) { data = data << nbits | getbits(nbits); if (carry < 0) carry = (nbits += carry+1) < 1 ? nbits-1 : 0; while (--nbits >= 0) if ((data >> nbits & 0xff) == 0xff) break; if (nbits > 0) data = ((data & ((1 << (nbits-1)) - 1)) << 1) | ((data + (((data & (1 << (nbits-1)))) << 1)) & (-1 << nbits)); if (nbits >= 0) { data += getbits(1); carry = nbits - 8; } count = ((((data-range+1) & 0xffff) << 2) - 1) / (high >> 4); for (bin=0; hist[s][bin+5] > count; bin++); low = hist[s][bin+5] * (high >> 4) >> 2; if (bin) high = hist[s][bin+4] * (high >> 4) >> 2; high -= low; for (nbits=0; high << nbits < 128; nbits++); range = (range+low) << nbits; high <<= nbits; next = hist[s][1]; if (++hist[s][2] > hist[s][3]) { next = (next+1) & hist[s][0]; hist[s][3] = (hist[s][next+4] - hist[s][next+5]) >> 2; hist[s][2] = 1; } if (hist[s][hist[s][1]+4] - hist[s][hist[s][1]+5] > 1) { if (bin < hist[s][1]) for (i=bin; i < hist[s][1]; i++) hist[s][i+5]--; else if (next <= bin) for (i=hist[s][1]; i < bin; i++) hist[s][i+5]++; } hist[s][1] = next; sym[s] = bin; } diff = sym[2] << 5 | sym[1] << 2 | (sym[0] & 3); if (sym[0] & 4) diff = diff ? -diff : 0x80; if ((unsigned) ftell(ifp) + 12 >= seg[1][1]) diff = 0; raw_image[pix] = pred[pix & 1] += diff; if (!(pix & 1) && HOLE(pix / raw_width)) pix += 2; } maximum = 0xff; } void CLASS smal_v6_load_raw() { unsigned seg[2][2]; fseek (ifp, 16, SEEK_SET); seg[0][0] = 0; seg[0][1] = get2(); seg[1][0] = raw_width * raw_height; seg[1][1] = INT_MAX; smal_decode_segment (seg, 0); } int CLASS median4 (int *p) { int min, max, sum, i; min = max = sum = p[0]; for (i=1; i < 4; i++) { sum += p[i]; if (min > p[i]) min = p[i]; if (max < p[i]) max = p[i]; } return (sum - min - max) >> 1; } void CLASS fill_holes (int holes) { int row, col, val[4]; for (row=2; row < height-2; row++) { if (!HOLE(row)) continue; for (col=1; col < width-1; col+=4) { val[0] = RAW(row-1,col-1); val[1] = RAW(row-1,col+1); val[2] = RAW(row+1,col-1); val[3] = RAW(row+1,col+1); RAW(row,col) = median4(val); } for (col=2; col < width-2; col+=4) if (HOLE(row-2) || HOLE(row+2)) RAW(row,col) = (RAW(row,col-2) + RAW(row,col+2)) >> 1; else { val[0] = RAW(row,col-2); val[1] = RAW(row,col+2); val[2] = RAW(row-2,col); val[3] = RAW(row+2,col); RAW(row,col) = median4(val); } } } void CLASS smal_v9_load_raw() { unsigned seg[256][2], offset, nseg, holes, i; fseek (ifp, 67, SEEK_SET); offset = get4(); nseg = fgetc(ifp); fseek (ifp, offset, SEEK_SET); for (i=0; i < nseg*2; i++) seg[0][i] = get4() + data_offset*(i & 1); fseek (ifp, 78, SEEK_SET); holes = fgetc(ifp); fseek (ifp, 88, SEEK_SET); seg[nseg][0] = raw_height * raw_width; seg[nseg][1] = get4() + data_offset; for (i=0; i < nseg; i++) smal_decode_segment (seg+i, holes); if (holes) fill_holes (holes); } void CLASS redcine_load_raw() { #ifdef HAVE_LIBJASPER int c, row, col; jas_stream_t *in; jas_image_t *jimg; jas_matrix_t *jmat; jas_seqent_t *data; ushort *img, *pix; jas_init(); in = jas_stream_fopen (ifname, "rb"); jas_stream_seek (in, data_offset+20, SEEK_SET); jimg = jas_image_decode (in, -1, 0); if (!jimg) longjmp (failure, 3); jmat = jas_matrix_create (height/2, width/2); merror (jmat, "redcine_load_raw()"); img = (ushort *) calloc ((height+2)*(width+2), 2); merror (img, "redcine_load_raw()"); FORC4 { jas_image_readcmpt (jimg, c, 0, 0, width/2, height/2, jmat); data = jas_matrix_getref (jmat, 0, 0); for (row = c >> 1; row < height; row+=2) for (col = c & 1; col < width; col+=2) img[(row+1)*(width+2)+col+1] = data[(row/2)*(width/2)+col/2]; } for (col=1; col <= width; col++) { img[col] = img[2*(width+2)+col]; img[(height+1)*(width+2)+col] = img[(height-1)*(width+2)+col]; } for (row=0; row < height+2; row++) { img[row*(width+2)] = img[row*(width+2)+2]; img[(row+1)*(width+2)-1] = img[(row+1)*(width+2)-3]; } for (row=1; row <= height; row++) { pix = img + row*(width+2) + (col = 1 + (FC(row,1) & 1)); for ( ; col <= width; col+=2, pix+=2) { c = (((pix[0] - 0x800) << 3) + pix[-(width+2)] + pix[width+2] + pix[-1] + pix[1]) >> 2; pix[0] = LIM(c,0,4095); } } for (row=0; row < height; row++) for (col=0; col < width; col++) RAW(row,col) = curve[img[(row+1)*(width+2)+col+1]]; free (img); jas_matrix_destroy (jmat); jas_image_destroy (jimg); jas_stream_close (in); #endif } /* RESTRICTED code starts here */ void CLASS foveon_decoder (unsigned size, unsigned code) { // TODO: The following static variable is not thread-safe static unsigned huff[1024]; struct decode *cur; unsigned i, len; if (!code) { for (i=0; i < size; i++) huff[i] = get4(); memset (first_decode, 0, sizeof first_decode); free_decode = first_decode; } cur = free_decode++; if (free_decode > first_decode+2048) { dcraw_message (DCRAW_ERROR,_("%s: decoder table overflow\n"), ifname_display); longjmp (failure, 2); } if (code) for (i=0; i < size; i++) if (huff[i] == code) { cur->leaf = i; return; } if ((len = code >> 27) > 26) return; code = (len+1) << 27 | (code & 0x3ffffff) << 1; cur->branch[0] = free_decode; foveon_decoder (size, code); cur->branch[1] = free_decode; foveon_decoder (size, code+1); } void CLASS foveon_thumb() { int bwide; unsigned row, col, bitbuf=0, bit=1, c, i; char *buf; struct decode *dindex; short pred[3]; bwide = get4(); fprintf (ofp, "P6\n%d %d\n255\n", thumb_width, thumb_height); if (bwide > 0) { if (bwide < thumb_width*3) return; buf = (char *) malloc (bwide); merror (buf, "foveon_thumb()"); for (row=0; row < thumb_height; row++) { fread (buf, 1, bwide, ifp); fwrite (buf, 3, thumb_width, ofp); } free (buf); return; } foveon_decoder (256, 0); for (row=0; row < thumb_height; row++) { memset (pred, 0, sizeof pred); if (!bit) get4(); for (bit=col=0; col < thumb_width; col++) FORC3 { for (dindex=first_decode; dindex->branch[0]; ) { if ((bit = (bit-1) & 31) == 31) for (i=0; i < 4; i++) bitbuf = (bitbuf << 8) + fgetc(ifp); dindex = dindex->branch[bitbuf >> bit & 1]; } pred[c] += dindex->leaf; fputc (pred[c], ofp); } } } void CLASS foveon_sd_load_raw() { struct decode *dindex; short diff[1024]; unsigned bitbuf=0; int pred[3], row, col, bit=-1, c, i; read_shorts ((ushort *) diff, 1024); if (!load_flags) foveon_decoder (1024, 0); for (row=0; row < height; row++) { memset (pred, 0, sizeof pred); if (!bit && !load_flags && atoi(model+2) < 14) get4(); for (col=bit=0; col < width; col++) { if (load_flags) { bitbuf = get4(); FORC3 pred[2-c] += diff[bitbuf >> c*10 & 0x3ff]; } else FORC3 { for (dindex=first_decode; dindex->branch[0]; ) { if ((bit = (bit-1) & 31) == 31) for (i=0; i < 4; i++) bitbuf = (bitbuf << 8) + fgetc(ifp); dindex = dindex->branch[bitbuf >> bit & 1]; } pred[c] += diff[dindex->leaf]; if (pred[c] >> 16 && ~pred[c] >> 16) derror(); } FORC3 image[row*width+col][c] = pred[c]; } } } void CLASS foveon_huff (ushort *huff) { int i, j, clen, code; huff[0] = 8; for (i=0; i < 13; i++) { clen = getc(ifp); code = getc(ifp); for (j=0; j < 256 >> clen; ) huff[code+ ++j] = clen << 8 | i; } get2(); } void CLASS foveon_dp_load_raw() { unsigned c, roff[4], row, col, diff; ushort huff[258], vpred[2][2], hpred[2]; fseek (ifp, 8, SEEK_CUR); foveon_huff (huff); roff[0] = 48; FORC3 roff[c+1] = -(-(roff[c] + get4()) & -16); FORC3 { fseek (ifp, data_offset+roff[c], SEEK_SET); getbits(-1); vpred[0][0] = vpred[0][1] = vpred[1][0] = vpred[1][1] = 512; for (row=0; row < height; row++) { for (col=0; col < width; col++) { diff = ljpeg_diff(huff); if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; image[row*width+col][c] = hpred[col & 1]; } } } } void CLASS foveon_load_camf() { unsigned type, wide, high, i, j, row, col, diff; ushort huff[258], vpred[2][2] = {{512,512},{512,512}}, hpred[2]; fseek (ifp, meta_offset, SEEK_SET); type = get4(); get4(); get4(); wide = get4(); high = get4(); if (type == 2) { fread (meta_data, 1, meta_length, ifp); for (i=0; i < meta_length; i++) { high = (high * 1597 + 51749) % 244944; wide = high * (INT64) 301593171 >> 24; meta_data[i] ^= ((((high << 8) - wide) >> 1) + wide) >> 17; } } else if (type == 4) { free (meta_data); meta_data = (char *) malloc (meta_length = wide*high*3/2); merror (meta_data, "foveon_load_camf()"); foveon_huff (huff); get4(); getbits(-1); for (j=row=0; row < high; row++) { for (col=0; col < wide; col++) { diff = ljpeg_diff(huff); if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; if (col & 1) { meta_data[j++] = hpred[0] >> 4; meta_data[j++] = hpred[0] << 4 | hpred[1] >> 8; meta_data[j++] = hpred[1]; } } } } else dcraw_message (DCRAW_ERROR,_("%s has unknown CAMF type %d.\n"), ifname_display, type); } const char * CLASS foveon_camf_param (const char *block, const char *param) { unsigned idx, num; char *pos, *cp, *dp; for (idx=0; idx < meta_length; idx += sget4(pos+8)) { pos = meta_data + idx; if (strncmp (pos, "CMb", 3)) break; if (pos[3] != 'P') continue; if (strcmp (block, pos+sget4(pos+12))) continue; cp = pos + sget4(pos+16); num = sget4(cp); dp = pos + sget4(cp+4); while (num--) { cp += 8; if (!strcmp (param, dp+sget4(cp))) return dp+sget4(cp+4); } } return 0; } void * CLASS foveon_camf_matrix (unsigned dim[3], const char *name) { unsigned i, idx, type, ndim, size, *mat; char *pos, *cp, *dp; double dsize; for (idx=0; idx < meta_length; idx += sget4(pos+8)) { pos = meta_data + idx; if (strncmp (pos, "CMb", 3)) break; if (pos[3] != 'M') continue; if (strcmp (name, pos+sget4(pos+12))) continue; dim[0] = dim[1] = dim[2] = 1; cp = pos + sget4(pos+16); type = sget4(cp); if ((ndim = sget4(cp+4)) > 3) break; dp = pos + sget4(cp+8); for (i=ndim; i--; ) { cp += 12; dim[i] = sget4(cp); } if ((dsize = (double) dim[0]*dim[1]*dim[2]) > meta_length/4) break; mat = (unsigned *) malloc ((size = dsize) * 4); merror (mat, "foveon_camf_matrix()"); for (i=0; i < size; i++) if (type && type != 6) mat[i] = sget4(dp + i*4); else mat[i] = sget4(dp + i*2) & 0xffff; return mat; } dcraw_message (DCRAW_WARNING,_("%s: \"%s\" matrix not found!\n"), ifname_display, name); return 0; } int CLASS foveon_fixed (void *ptr, int size, const char *name) { void *dp; unsigned dim[3]; if (!name) return 0; dp = foveon_camf_matrix (dim, name); if (!dp) return 0; memcpy (ptr, dp, size*4); free (dp); return 1; } #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif float CLASS foveon_avg (short *pix, int range[2], float cfilt) { int i; float val, min=FLT_MAX, max=-FLT_MAX, sum=0; for (i=range[0]; i <= range[1]; i++) { sum += val = pix[i*4] + (pix[i*4]-pix[(i-1)*4]) * cfilt; if (min > val) min = val; if (max < val) max = val; } if (range[1] - range[0] == 1) return sum/2; return (sum - min - max) / (range[1] - range[0] - 1); } #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) #pragma GCC diagnostic pop #endif short * CLASS foveon_make_curve (double max, double mul, double filt) { short *curve; unsigned i, size; double x; if (!filt) filt = 0.8; size = 4*M_PI*max / filt; if (size == UINT_MAX) size--; curve = (short *) calloc (size+1, sizeof *curve); merror (curve, "foveon_make_curve()"); curve[0] = size; for (i=0; i < size; i++) { x = i*filt/max/4; curve[i+1] = (cos(x)+1)/2 * tanh(i*filt/mul) * mul + 0.5; } return curve; } void CLASS foveon_make_curves (short **curvep, float dq[3], float div[3], float filt) { double mul[3], max=0; int c; FORC3 mul[c] = dq[c]/div[c]; FORC3 if (max < mul[c]) max = mul[c]; FORC3 curvep[c] = foveon_make_curve (max, mul[c], filt); } int CLASS foveon_apply_curve (short *curve, int i) { if (abs(i) >= curve[0]) return 0; return i < 0 ? -curve[1-i] : curve[1+i]; } #define image ((short (*)[4]) image) #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif void CLASS foveon_interpolate() { static const short hood[] = { -1,-1, -1,0, -1,1, 0,-1, 0,1, 1,-1, 1,0, 1,1 }; short *pix, prev[3], *curve[8], (*shrink)[3]; float cfilt=0, ddft[3][3][2], ppm[3][3][3]; float cam_xyz[3][3], correct[3][3], last[3][3], trans[3][3]; float chroma_dq[3], color_dq[3], diag[3][3], div[3]; float (*black)[3], (*sgain)[3], (*sgrow)[3]; float fsum[3], val, frow, num; int row, col, c, i, j, diff, sgx, irow, sum, min, max, limit; int dscr[2][2], dstb[4], (*smrow[7])[3], total[4], ipix[3]; int work[3][3], smlast, smred, smred_p=0, dev[3]; int satlev[3], keep[4], active[4]; unsigned dim[3], *badpix; double dsum=0, trsum[3]; char str[128]; const char* cp; dcraw_message (DCRAW_VERBOSE,_("Foveon interpolation...\n")); foveon_load_camf(); foveon_fixed (dscr, 4, "DarkShieldColRange"); foveon_fixed (ppm[0][0], 27, "PostPolyMatrix"); foveon_fixed (satlev, 3, "SaturationLevel"); foveon_fixed (keep, 4, "KeepImageArea"); foveon_fixed (active, 4, "ActiveImageArea"); foveon_fixed (chroma_dq, 3, "ChromaDQ"); foveon_fixed (color_dq, 3, foveon_camf_param ("IncludeBlocks", "ColorDQ") ? "ColorDQ" : "ColorDQCamRGB"); if (foveon_camf_param ("IncludeBlocks", "ColumnFilter")) foveon_fixed (&cfilt, 1, "ColumnFilter"); memset (ddft, 0, sizeof ddft); if (!foveon_camf_param ("IncludeBlocks", "DarkDrift") || !foveon_fixed (ddft[1][0], 12, "DarkDrift")) for (i=0; i < 2; i++) { foveon_fixed (dstb, 4, i ? "DarkShieldBottom":"DarkShieldTop"); for (row = dstb[1]; row <= dstb[3]; row++) for (col = dstb[0]; col <= dstb[2]; col++) FORC3 ddft[i+1][c][1] += (short) image[row*width+col][c]; FORC3 ddft[i+1][c][1] /= (dstb[3]-dstb[1]+1) * (dstb[2]-dstb[0]+1); } if (!(cp = foveon_camf_param ("WhiteBalanceIlluminants", model2))) { dcraw_message (DCRAW_ERROR,_("%s: Invalid white balance \"%s\"\n"), ifname_display, model2); return; } foveon_fixed (cam_xyz, 9, cp); foveon_fixed (correct, 9, foveon_camf_param ("WhiteBalanceCorrections", model2)); memset (last, 0, sizeof last); for (i=0; i < 3; i++) for (j=0; j < 3; j++) FORC3 last[i][j] += correct[i][c] * cam_xyz[c][j]; #define LAST(x,y) last[(i+x)%3][(c+y)%3] for (i=0; i < 3; i++) FORC3 diag[c][i] = LAST(1,1)*LAST(2,2) - LAST(1,2)*LAST(2,1); #undef LAST FORC3 div[c] = diag[c][0]*0.3127 + diag[c][1]*0.329 + diag[c][2]*0.3583; sprintf (str, "%sRGBNeutral", model2); if (foveon_camf_param ("IncludeBlocks", str)) foveon_fixed (div, 3, str); num = 0; FORC3 if (num < div[c]) num = div[c]; FORC3 div[c] /= num; memset (trans, 0, sizeof trans); for (i=0; i < 3; i++) for (j=0; j < 3; j++) FORC3 trans[i][j] += rgb_cam[i][c] * last[c][j] * div[j]; FORC3 trsum[c] = trans[c][0] + trans[c][1] + trans[c][2]; dsum = (6*trsum[0] + 11*trsum[1] + 3*trsum[2]) / 20; for (i=0; i < 3; i++) FORC3 last[i][c] = trans[i][c] * dsum / trsum[i]; memset (trans, 0, sizeof trans); for (i=0; i < 3; i++) for (j=0; j < 3; j++) FORC3 trans[i][j] += (i==c ? 32 : -1) * last[c][j] / 30; foveon_make_curves (curve, color_dq, div, cfilt); FORC3 chroma_dq[c] /= 3; foveon_make_curves (curve+3, chroma_dq, div, cfilt); FORC3 dsum += chroma_dq[c] / div[c]; curve[6] = foveon_make_curve (dsum, dsum, cfilt); curve[7] = foveon_make_curve (dsum*2, dsum*2, cfilt); sgain = (float (*)[3]) foveon_camf_matrix (dim, "SpatialGain"); if (!sgain) return; sgrow = (float (*)[3]) calloc (dim[1], sizeof *sgrow); sgx = (width + dim[1]-2) / (dim[1]-1); black = (float (*)[3]) calloc (height, sizeof *black); for (row=0; row < height; row++) { for (i=0; i < 3; i++) for (j=0; j < 2; j++) ddft[0][i][j] = ddft[1][i][j] + row / (height-1.0) * (ddft[2][i][j] - ddft[1][i][j]); FORC3 black[row][c] = ( foveon_avg (image[row*width]+c, dscr[0], cfilt) + foveon_avg (image[row*width]+c, dscr[1], cfilt) * 3 - ddft[0][c][0] ) / 4 - ddft[0][c][1]; } memcpy (black, black+8, sizeof *black*8); memcpy (black+height-11, black+height-22, 11*sizeof *black); memcpy (last, black, sizeof last); for (row=1; row < height-1; row++) { FORC3 if (last[1][c] > last[0][c]) { if (last[1][c] > last[2][c]) black[row][c] = (last[0][c] > last[2][c]) ? last[0][c]:last[2][c]; } else if (last[1][c] < last[2][c]) black[row][c] = (last[0][c] < last[2][c]) ? last[0][c]:last[2][c]; memmove (last, last+1, 2*sizeof last[0]); memcpy (last[2], black[row+1], sizeof last[2]); } FORC3 black[row][c] = (last[0][c] + last[1][c])/2; FORC3 black[0][c] = (black[1][c] + black[3][c])/2; val = 1 - exp(-1/24.0); memcpy (fsum, black, sizeof fsum); for (row=1; row < height; row++) FORC3 fsum[c] += black[row][c] = (black[row][c] - black[row-1][c])*val + black[row-1][c]; memcpy (last[0], black[height-1], sizeof last[0]); FORC3 fsum[c] /= height; for (row = height; row--; ) FORC3 last[0][c] = black[row][c] = (black[row][c] - fsum[c] - last[0][c])*val + last[0][c]; memset (total, 0, sizeof total); for (row=2; row < height; row+=4) for (col=2; col < width; col+=4) { FORC3 total[c] += (short) image[row*width+col][c]; total[3]++; } for (row=0; row < height; row++) FORC3 black[row][c] += fsum[c]/2 + total[c]/(total[3]*100.0); for (row=0; row < height; row++) { for (i=0; i < 3; i++) for (j=0; j < 2; j++) ddft[0][i][j] = ddft[1][i][j] + row / (height-1.0) * (ddft[2][i][j] - ddft[1][i][j]); pix = image[row*width]; memcpy (prev, pix, sizeof prev); frow = row / (height-1.0) * (dim[2]-1); if ((irow = frow) == (int) dim[2]-1) irow--; frow -= irow; for (i=0; i < (int) dim[1]; i++) FORC3 sgrow[i][c] = sgain[ irow *dim[1]+i][c] * (1-frow) + sgain[(irow+1)*dim[1]+i][c] * frow; for (col=0; col < width; col++) { FORC3 { diff = pix[c] - prev[c]; prev[c] = pix[c]; ipix[c] = pix[c] + floor ((diff + (diff*diff >> 14)) * cfilt - ddft[0][c][1] - ddft[0][c][0] * ((float) col/width - 0.5) - black[row][c] ); } FORC3 { work[0][c] = ipix[c] * ipix[c] >> 14; work[2][c] = ipix[c] * work[0][c] >> 14; work[1][2-c] = ipix[(c+1) % 3] * ipix[(c+2) % 3] >> 14; } FORC3 { for (val=i=0; i < 3; i++) for ( j=0; j < 3; j++) val += ppm[c][i][j] * work[i][j]; ipix[c] = floor ((ipix[c] + floor(val)) * ( sgrow[col/sgx ][c] * (sgx - col%sgx) + sgrow[col/sgx+1][c] * (col%sgx) ) / sgx / div[c]); if (ipix[c] > 32000) ipix[c] = 32000; pix[c] = ipix[c]; } pix += 4; } } free (black); free (sgrow); free (sgain); if ((badpix = (unsigned int *) foveon_camf_matrix (dim, "BadPixels"))) { for (i=0; i < (int) dim[0]; i++) { col = (badpix[i] >> 8 & 0xfff) - keep[0]; row = (badpix[i] >> 20 ) - keep[1]; if (row-1 < 0 || row-1 > height-3 || col-1 < 0 || col-1 > width-3) continue; memset (fsum, 0, sizeof fsum); for (sum=j=0; j < 8; j++) if (badpix[i] & (1 << j)) { FORC3 fsum[c] += (short) image[(row+hood[j*2])*width+col+hood[j*2+1]][c]; sum++; } if (sum) FORC3 image[row*width+col][c] = fsum[c]/sum; } free (badpix); } /* Array for 5x5 Gaussian averaging of red values */ smrow[6] = (int (*)[3]) calloc (width*5, sizeof **smrow); merror (smrow[6], "foveon_interpolate()"); for (i=0; i < 5; i++) smrow[i] = smrow[6] + i*width; /* Sharpen the reds against these Gaussian averages */ for (smlast=-1, row=2; row < height-2; row++) { while (smlast < row+2) { for (i=0; i < 6; i++) smrow[(i+5) % 6] = smrow[i]; pix = image[++smlast*width+2]; for (col=2; col < width-2; col++) { smrow[4][col][0] = (pix[0]*6 + (pix[-4]+pix[4])*4 + pix[-8]+pix[8] + 8) >> 4; pix += 4; } } pix = image[row*width+2]; for (col=2; col < width-2; col++) { smred = ( 6 * smrow[2][col][0] + 4 * (smrow[1][col][0] + smrow[3][col][0]) + smrow[0][col][0] + smrow[4][col][0] + 8 ) >> 4; if (col == 2) smred_p = smred; i = pix[0] + ((pix[0] - ((smred*7 + smred_p) >> 3)) >> 3); if (i > 32000) i = 32000; pix[0] = i; smred_p = smred; pix += 4; } } /* Adjust the brighter pixels for better linearity */ min = 0xffff; FORC3 { i = satlev[c] / div[c]; if (min > i) min = i; } limit = min * 9 >> 4; for (pix=image[0]; pix < image[height*width]; pix+=4) { if (pix[0] <= limit || pix[1] <= limit || pix[2] <= limit) continue; min = max = pix[0]; for (c=1; c < 3; c++) { if (min > pix[c]) min = pix[c]; if (max < pix[c]) max = pix[c]; } if (min >= limit*2) { pix[0] = pix[1] = pix[2] = max; } else { i = 0x4000 - ((min - limit) << 14) / limit; i = 0x4000 - (i*i >> 14); i = i*i >> 14; FORC3 pix[c] += (max - pix[c]) * i >> 14; } } /* Because photons that miss one detector often hit another, the sum R+G+B is much less noisy than the individual colors. So smooth the hues without smoothing the total. */ for (smlast=-1, row=2; row < height-2; row++) { while (smlast < row+2) { for (i=0; i < 6; i++) smrow[(i+5) % 6] = smrow[i]; pix = image[++smlast*width+2]; for (col=2; col < width-2; col++) { FORC3 smrow[4][col][c] = (pix[c-4]+2*pix[c]+pix[c+4]+2) >> 2; pix += 4; } } pix = image[row*width+2]; for (col=2; col < width-2; col++) { FORC3 dev[c] = -foveon_apply_curve (curve[7], pix[c] - ((smrow[1][col][c] + 2*smrow[2][col][c] + smrow[3][col][c]) >> 2)); sum = (dev[0] + dev[1] + dev[2]) >> 3; FORC3 pix[c] += dev[c] - sum; pix += 4; } } for (smlast=-1, row=2; row < height-2; row++) { while (smlast < row+2) { for (i=0; i < 6; i++) smrow[(i+5) % 6] = smrow[i]; pix = image[++smlast*width+2]; for (col=2; col < width-2; col++) { FORC3 smrow[4][col][c] = (pix[c-8]+pix[c-4]+pix[c]+pix[c+4]+pix[c+8]+2) >> 2; pix += 4; } } pix = image[row*width+2]; for (col=2; col < width-2; col++) { for (total[3]=375, sum=60, c=0; c < 3; c++) { for (total[c]=i=0; i < 5; i++) total[c] += smrow[i][col][c]; total[3] += total[c]; sum += pix[c]; } if (sum < 0) sum = 0; j = total[3] > 375 ? (sum << 16) / total[3] : sum * 174; FORC3 pix[c] += foveon_apply_curve (curve[6], ((j*total[c] + 0x8000) >> 16) - pix[c]); pix += 4; } } /* Transform the image to a different colorspace */ for (pix=image[0]; pix < image[height*width]; pix+=4) { FORC3 pix[c] -= foveon_apply_curve (curve[c], pix[c]); sum = (pix[0]+pix[1]+pix[1]+pix[2]) >> 2; FORC3 pix[c] -= foveon_apply_curve (curve[c], pix[c]-sum); FORC3 { for (dsum=i=0; i < 3; i++) dsum += trans[c][i] * pix[i]; if (dsum < 0) dsum = 0; if (dsum > 24000) dsum = 24000; ipix[c] = dsum + 0.5; } FORC3 pix[c] = ipix[c]; } /* Smooth the image bottom-to-top and save at 1/4 scale */ shrink = (short (*)[3]) calloc ((width/4) * (height/4), sizeof *shrink); merror (shrink, "foveon_interpolate()"); for (row = height/4; row--; ) for (col=0; col < width/4; col++) { ipix[0] = ipix[1] = ipix[2] = 0; for (i=0; i < 4; i++) for (j=0; j < 4; j++) FORC3 ipix[c] += image[(row*4+i)*width+col*4+j][c]; FORC3 if (row+2 > height/4) shrink[row*(width/4)+col][c] = ipix[c] >> 4; else shrink[row*(width/4)+col][c] = (shrink[(row+1)*(width/4)+col][c]*1840 + ipix[c]*141 + 2048) >> 12; } /* From the 1/4-scale image, smooth right-to-left */ for (row=0; row < (height & ~3); row++) { ipix[0] = ipix[1] = ipix[2] = 0; if ((row & 3) == 0) for (col = width & ~3 ; col--; ) FORC3 smrow[0][col][c] = ipix[c] = (shrink[(row/4)*(width/4)+col/4][c]*1485 + ipix[c]*6707 + 4096) >> 13; /* Then smooth left-to-right */ ipix[0] = ipix[1] = ipix[2] = 0; for (col=0; col < (width & ~3); col++) FORC3 smrow[1][col][c] = ipix[c] = (smrow[0][col][c]*1485 + ipix[c]*6707 + 4096) >> 13; /* Smooth top-to-bottom */ if (row == 0) memcpy (smrow[2], smrow[1], sizeof **smrow * width); else for (col=0; col < (width & ~3); col++) FORC3 smrow[2][col][c] = (smrow[2][col][c]*6707 + smrow[1][col][c]*1485 + 4096) >> 13; /* Adjust the chroma toward the smooth values */ for (col=0; col < (width & ~3); col++) { for (i=j=30, c=0; c < 3; c++) { i += smrow[2][col][c]; j += image[row*width+col][c]; } j = (j << 16) / i; for (sum=c=0; c < 3; c++) { ipix[c] = foveon_apply_curve (curve[c+3], ((smrow[2][col][c] * j + 0x8000) >> 16) - image[row*width+col][c]); sum += ipix[c]; } sum >>= 3; FORC3 { i = image[row*width+col][c] + ipix[c] - sum; if (i < 0) i = 0; image[row*width+col][c] = i; } } } free (shrink); free (smrow[6]); for (i=0; i < 8; i++) free (curve[i]); /* Trim off the black border */ active[1] -= keep[1]; active[3] -= 2; i = active[2] - active[0]; for (row=0; row < active[3]-active[1]; row++) memcpy (image[row*i], image[(row+active[1])*width+active[0]], i * sizeof *image); width = i; height = row; } #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) #pragma GCC diagnostic pop #endif #undef image /* RESTRICTED code ends here */ void CLASS crop_masked_pixels() { int row, col; unsigned r, c, m, mblack[8], zero, val; if (load_raw == &CLASS phase_one_load_raw || load_raw == &CLASS phase_one_load_raw_c) phase_one_correct(); if (fuji_width) { for (row=0; row < raw_height-top_margin*2; row++) { for (col=0; col < fuji_width << !fuji_layout; col++) { if (fuji_layout) { r = fuji_width - 1 - col + (row >> 1); c = col + ((row+1) >> 1); } else { r = fuji_width - 1 + row - (col >> 1); c = row + ((col+1) >> 1); } if (r < height && c < width) BAYER(r,c) = RAW(row+top_margin,col+left_margin); } } } else { for (row=0; row < height; row++) for (col=0; col < width; col++) BAYER2(row,col) = RAW(row+top_margin,col+left_margin); } if (mask[0][3]) goto mask_set; if (load_raw == &CLASS canon_load_raw || load_raw == &CLASS lossless_jpeg_load_raw) { mask[0][1] = mask[1][1] = 2; mask[0][3] = -2; goto sides; } if (load_raw == &CLASS canon_600_load_raw || load_raw == &CLASS sony_load_raw || (load_raw == &CLASS eight_bit_load_raw && strncmp(model,"DC2",3)) || load_raw == &CLASS kodak_262_load_raw || (load_raw == &CLASS packed_load_raw && (load_flags & 32))) { sides: mask[0][0] = mask[1][0] = top_margin; mask[0][2] = mask[1][2] = top_margin+height; mask[0][3] += left_margin; mask[1][1] += left_margin+width; mask[1][3] += raw_width; } if (load_raw == &CLASS nokia_load_raw) { mask[0][2] = top_margin; mask[0][3] = width; } mask_set: memset (mblack, 0, sizeof mblack); for (zero=m=0; m < 8; m++) for (row=mask[m][0]; row < mask[m][2]; row++) for (col=mask[m][1]; col < mask[m][3]; col++) { c = FC(row-top_margin,col-left_margin); mblack[c] += val = RAW(row,col); mblack[4+c]++; zero += !val; } if (load_raw == &CLASS canon_600_load_raw && width < raw_width) { black = (mblack[0]+mblack[1]+mblack[2]+mblack[3]) / (mblack[4]+mblack[5]+mblack[6]+mblack[7]) - 4; canon_600_correct(); } else if (zero < mblack[4] && mblack[5] && mblack[6] && mblack[7]) FORC4 cblack[c] = mblack[c] / mblack[4+c]; } void CLASS remove_zeroes() { unsigned row, col, tot, n, r, c; for (row=0; row < height; row++) for (col=0; col < width; col++) if (BAYER(row,col) == 0) { tot = n = 0; for (r = row-2; r <= row+2; r++) for (c = col-2; c <= col+2; c++) if (r < height && c < width && FC(r,c) == FC(row,col) && BAYER(r,c)) tot += (n++,BAYER(r,c)); if (n) BAYER(row,col) = tot/n; } } /* Seach from the current directory up to the root looking for a ".badpixels" file, and fix those pixels now. */ void CLASS bad_pixels (const char *cfname) { FILE *fp=0; char *fname, *cp, line[128]; int len, time, row, col, r, c, rad, tot, n, fixed=0; if (!filters) return; if (cfname) fp = fopen (cfname, "r"); else { for (len=32 ; ; len *= 2) { fname = (char *) malloc (len); if (!fname) return; if (getcwd (fname, len-16)) break; free (fname); if (errno != ERANGE) return; } #if defined(_WIN32) || defined(DJGPP) if (fname[1] == ':') memmove (fname, fname+2, len-2); for (cp=fname; *cp; cp++) if (*cp == '\\') *cp = '/'; #endif cp = fname + strlen(fname); if (cp[-1] == '/') cp--; while (*fname == '/') { strcpy (cp, "/.badpixels"); if ((fp = fopen (fname, "r"))) break; if (cp == fname) break; while (*--cp != '/'); } free (fname); } if (!fp) return; while (::fgets (line, 128, fp)) { cp = strchr (line, '#'); if (cp) *cp = 0; if (sscanf (line, "%d %d %d", &col, &row, &time) != 3) continue; if ((unsigned) col >= width || (unsigned) row >= height) continue; if (time > timestamp) continue; for (tot=n=0, rad=1; rad < 3 && n==0; rad++) for (r = row-rad; r <= row+rad; r++) for (c = col-rad; c <= col+rad; c++) if ((unsigned) r < height && (unsigned) c < width && (r != row || c != col) && fcol(r,c) == fcol(row,col)) { tot += BAYER2(r,c); n++; } BAYER2(row,col) = tot/n; if (!fixed++) dcraw_message(DCRAW_VERBOSE,_("Fixed dead pixels at:")); dcraw_message(DCRAW_VERBOSE, " %d,%d", col, row); } if (fixed) dcraw_message(DCRAW_VERBOSE, "\n"); fclose (fp); } void CLASS subtract (const char *fname) { FILE *fp; int dim[3]={0,0,0}, comment=0, number=0, error=0, nd=0, c, row, col; ushort *pixel; if (!(fp = fopen (fname, "rb"))) { perror (fname); return; } if (fgetc(fp) != 'P' || fgetc(fp) != '5') error = 1; while (!error && nd < 3 && (c = fgetc(fp)) != EOF) { if (c == '#') comment = 1; if (c == '\n') comment = 0; if (comment) continue; if (isdigit(c)) number = 1; if (number) { if (isdigit(c)) dim[nd] = dim[nd]*10 + c -'0'; else if (isspace(c)) { number = 0; nd++; } else error = 1; } } if (error || nd < 3) { dcraw_message (DCRAW_ERROR,_("%s is not a valid PGM file!\n"), fname); fclose (fp); return; } else if (dim[0] != width || dim[1] != height || dim[2] != 65535) { dcraw_message (DCRAW_ERROR,_("%s has the wrong dimensions!\n"), fname); fclose (fp); return; } pixel = (ushort *) calloc (width, sizeof *pixel); merror (pixel, "subtract()"); for (row=0; row < height; row++) { fread (pixel, 2, width, fp); for (col=0; col < width; col++) BAYER(row,col) = MAX (BAYER(row,col) - ntohs(pixel[col]), 0); } free (pixel); fclose (fp); memset (cblack, 0, sizeof cblack); black = 0; } void CLASS gamma_curve (double pwr, double ts, int mode, int imax) { int i; double g[6], bnd[2]={0,0}, r; g[0] = pwr; g[1] = ts; g[2] = g[3] = g[4] = 0; bnd[g[1] >= 1] = 1; if (g[1] && (g[1]-1)*(g[0]-1) <= 0) { for (i=0; i < 48; i++) { g[2] = (bnd[0] + bnd[1])/2; if (g[0]) bnd[(pow(g[2]/g[1],-g[0]) - 1)/g[0] - 1/g[2] > -1] = g[2]; else bnd[g[2]/exp(1-1/g[2]) < g[1]] = g[2]; } g[3] = g[2] / g[1]; if (g[0]) g[4] = g[2] * (1/g[0] - 1); } if (g[0]) g[5] = 1 / (g[1]*SQR(g[3])/2 - g[4]*(1 - g[3]) + (1 - pow(g[3],1+g[0]))*(1 + g[4])/(1 + g[0])) - 1; else g[5] = 1 / (g[1]*SQR(g[3])/2 + 1 - g[2] - g[3] - g[2]*g[3]*(log(g[3]) - 1)) - 1; if (!mode--) { memcpy (gamm, g, sizeof gamm); return; } for (i=0; i < 0x10000; i++) { curve[i] = 0xffff; if ((r = (double) i / imax) < 1) curve[i] = 0x10000 * ( mode ? (r < g[3] ? r*g[1] : (g[0] ? pow( r,g[0])*(1+g[4])-g[4] : log(r)*g[2]+1)) : (r < g[2] ? r/g[1] : (g[0] ? pow((r+g[4])/(1+g[4]),1/g[0]) : exp((r-1)/g[2])))); } } void CLASS pseudoinverse (double (*in)[3], double (*out)[3], int size) { double work[3][6], num; int i, j, k; for (i=0; i < 3; i++) { for (j=0; j < 6; j++) work[i][j] = j == i+3; for (j=0; j < 3; j++) for (k=0; k < size; k++) work[i][j] += in[k][i] * in[k][j]; } for (i=0; i < 3; i++) { num = work[i][i]; for (j=0; j < 6; j++) work[i][j] /= num; for (k=0; k < 3; k++) { if (k==i) continue; num = work[k][i]; for (j=0; j < 6; j++) work[k][j] -= work[i][j] * num; } } for (i=0; i < size; i++) for (j=0; j < 3; j++) for (out[i][j]=k=0; k < 3; k++) out[i][j] += work[j][k+3] * in[i][k]; } void CLASS cam_xyz_coeff (double cam_xyz[4][3]) { double cam_rgb[4][3], inverse[4][3], num; int i, j, k; for (i=0; i < colors; i++) /* Multiply out XYZ colorspace */ for (j=0; j < 3; j++) for (cam_rgb[i][j] = k=0; k < 3; k++) cam_rgb[i][j] += cam_xyz[i][k] * xyz_rgb[k][j]; for (i=0; i < colors; i++) { /* Normalize cam_rgb so that */ for (num=j=0; j < 3; j++) /* cam_rgb * (1,1,1) is (1,1,1,1) */ num += cam_rgb[i][j]; for (j=0; j < 3; j++) cam_rgb[i][j] /= num; pre_mul[i] = 1 / num; } pseudoinverse (cam_rgb, inverse, colors); for (raw_color = i=0; i < 3; i++) for (j=0; j < colors; j++) rgb_cam[i][j] = inverse[j][i]; } #ifdef COLORCHECK void CLASS colorcheck() { #define NSQ 24 // Coordinates of the GretagMacbeth ColorChecker squares // width, height, 1st_column, 1st_row int cut[NSQ][4]; // you must set these // ColorChecker Chart under 6500-kelvin illumination static const double gmb_xyY[NSQ][3] = { { 0.400, 0.350, 10.1 }, // Dark Skin { 0.377, 0.345, 35.8 }, // Light Skin { 0.247, 0.251, 19.3 }, // Blue Sky { 0.337, 0.422, 13.3 }, // Foliage { 0.265, 0.240, 24.3 }, // Blue Flower { 0.261, 0.343, 43.1 }, // Bluish Green { 0.506, 0.407, 30.1 }, // Orange { 0.211, 0.175, 12.0 }, // Purplish Blue { 0.453, 0.306, 19.8 }, // Moderate Red { 0.285, 0.202, 6.6 }, // Purple { 0.380, 0.489, 44.3 }, // Yellow Green { 0.473, 0.438, 43.1 }, // Orange Yellow { 0.187, 0.129, 6.1 }, // Blue { 0.305, 0.478, 23.4 }, // Green { 0.539, 0.313, 12.0 }, // Red { 0.448, 0.470, 59.1 }, // Yellow { 0.364, 0.233, 19.8 }, // Magenta { 0.196, 0.252, 19.8 }, // Cyan { 0.310, 0.316, 90.0 }, // White { 0.310, 0.316, 59.1 }, // Neutral 8 { 0.310, 0.316, 36.2 }, // Neutral 6.5 { 0.310, 0.316, 19.8 }, // Neutral 5 { 0.310, 0.316, 9.0 }, // Neutral 3.5 { 0.310, 0.316, 3.1 } }; // Black double gmb_cam[NSQ][4], gmb_xyz[NSQ][3]; double inverse[NSQ][3], cam_xyz[4][3], num; int c, i, j, k, sq, row, col, count[4]; memset (gmb_cam, 0, sizeof gmb_cam); for (sq=0; sq < NSQ; sq++) { FORCC count[c] = 0; for (row=cut[sq][3]; row < cut[sq][3]+cut[sq][1]; row++) for (col=cut[sq][2]; col < cut[sq][2]+cut[sq][0]; col++) { c = FC(row,col); if (c >= colors) c -= 2; gmb_cam[sq][c] += BAYER(row,col); count[c]++; } FORCC gmb_cam[sq][c] = gmb_cam[sq][c]/count[c] - black; gmb_xyz[sq][0] = gmb_xyY[sq][2] * gmb_xyY[sq][0] / gmb_xyY[sq][1]; gmb_xyz[sq][1] = gmb_xyY[sq][2]; gmb_xyz[sq][2] = gmb_xyY[sq][2] * (1 - gmb_xyY[sq][0] - gmb_xyY[sq][1]) / gmb_xyY[sq][1]; } pseudoinverse (gmb_xyz, inverse, NSQ); for (i=0; i < colors; i++) for (j=0; j < 3; j++) for (cam_xyz[i][j] = k=0; k < NSQ; k++) cam_xyz[i][j] += gmb_cam[k][i] * inverse[k][j]; cam_xyz_coeff (cam_xyz); if (verbose) { dcraw_message (DCRAW_VERBOSE, " { \"%s %s\", %d,\n\t{", make, model, black); num = 10000 / (cam_xyz[1][0] + cam_xyz[1][1] + cam_xyz[1][2]); FORCC for (j=0; j < 3; j++) dcraw_message (DCRAW_VERBOSE, "%c%d", (c | j) ? ',':' ', (int) (cam_xyz[c][j] * num + 0.5)); dcraw_message (DCRAW_VERBOSE, " } },\n"); } #undef NSQ } #endif /* Start of functions copied to dcraw_indi.c (UF) */ void CLASS hat_transform (float *temp, float *base, int st, int size, int sc) { int i; for (i=0; i < sc; i++) temp[i] = 2*base[st*i] + base[st*(sc-i)] + base[st*(i+sc)]; for (; i+sc < size; i++) temp[i] = 2*base[st*i] + base[st*(i-sc)] + base[st*(i+sc)]; for (; i < size; i++) temp[i] = 2*base[st*i] + base[st*(i-sc)] + base[st*(2*size-2-(i+sc))]; } void CLASS wavelet_denoise() { float *fimg=0, *temp, thold, mul[2], avg, diff; int scale=1, size, lev, hpass, lpass, row, col, nc, c, i, wlast, blk[2]; ushort *window[4]; static const float noise[] = { 0.8002,0.2735,0.1202,0.0585,0.0291,0.0152,0.0080,0.0044 }; dcraw_message (DCRAW_VERBOSE,_("Wavelet denoising...\n")); while (maximum << scale < 0x10000) scale++; maximum <<= --scale; black <<= scale; FORC4 cblack[c] <<= scale; if ((size = iheight*iwidth) < 0x15550000) fimg = (float *) malloc ((size*3 + iheight + iwidth) * sizeof *fimg); merror (fimg, "wavelet_denoise()"); temp = fimg + size*3; if ((nc = colors) == 3 && filters) nc++; FORC(nc) { /* denoise R,G1,B,G3 individually */ for (i=0; i < size; i++) fimg[i] = 256 * sqrt((float) (image[i][c] << scale)); for (hpass=lev=0; lev < 5; lev++) { lpass = size*((lev & 1)+1); for (row=0; row < iheight; row++) { hat_transform (temp, fimg+hpass+row*iwidth, 1, iwidth, 1 << lev); for (col=0; col < iwidth; col++) fimg[lpass + row*iwidth + col] = temp[col] * 0.25; } for (col=0; col < iwidth; col++) { hat_transform (temp, fimg+lpass+col, iwidth, iheight, 1 << lev); for (row=0; row < iheight; row++) fimg[lpass + row*iwidth + col] = temp[row] * 0.25; } thold = threshold * noise[lev]; for (i=0; i < size; i++) { fimg[hpass+i] -= fimg[lpass+i]; if (fimg[hpass+i] < -thold) fimg[hpass+i] += thold; else if (fimg[hpass+i] > thold) fimg[hpass+i] -= thold; else fimg[hpass+i] = 0; if (hpass) fimg[i] += fimg[hpass+i]; } hpass = lpass; } for (i=0; i < size; i++) image[i][c] = CLIP(SQR(fimg[i]+fimg[lpass+i])/0x10000); } if (filters && colors == 3) { /* pull G1 and G3 closer together */ for (row=0; row < 2; row++) { mul[row] = 0.125 * pre_mul[FC(row+1,0) | 1] / pre_mul[FC(row,0) | 1]; blk[row] = cblack[FC(row,0) | 1]; } for (i=0; i < 4; i++) window[i] = (ushort *) fimg + width*i; for (wlast=-1, row=1; row < height-1; row++) { while (wlast < row+1) { for (wlast++, i=0; i < 4; i++) window[(i+3) & 3] = window[i]; for (col = FC(wlast,1) & 1; col < width; col+=2) window[2][col] = BAYER(wlast,col); } thold = threshold/512; for (col = (FC(row,0) & 1)+1; col < width-1; col+=2) { avg = ( window[0][col-1] + window[0][col+1] + window[2][col-1] + window[2][col+1] - blk[~row & 1]*4 ) * mul[row & 1] + (window[1][col] + blk[row & 1]) * 0.5; avg = avg < 0 ? 0 : sqrt(avg); diff = sqrt((float) BAYER(row,col)) - avg; if (diff < -thold) diff += thold; else if (diff > thold) diff -= thold; else diff = 0; BAYER(row,col) = CLIP(SQR(avg+diff) + 0.5); } } } free (fimg); } void CLASS scale_colors() { unsigned bottom, right, size, row, col, ur, uc, i, x, y, c, sum[8]; int val, dark, sat; double dsum[8], dmin, dmax; float scale_mul[4], fr, fc; ushort *img=0, *pix; if (user_mul[0]) memcpy (pre_mul, user_mul, sizeof pre_mul); if (use_auto_wb || (use_camera_wb && cam_mul[0] == -1)) { memset (dsum, 0, sizeof dsum); bottom = MIN (greybox[1]+greybox[3], height); right = MIN (greybox[0]+greybox[2], width); for (row=greybox[1]; row < bottom; row += 8) for (col=greybox[0]; col < right; col += 8) { memset (sum, 0, sizeof sum); for (y=row; y < row+8 && y < bottom; y++) for (x=col; x < col+8 && x < right; x++) FORC4 { if (filters) { c = fcol(y,x); val = BAYER2(y,x); } else val = image[y*width+x][c]; if (val > (int)(maximum-25)) goto skip_block; if ((val -= cblack[c]) < 0) val = 0; sum[c] += val; sum[c+4]++; if (filters) break; } FORC(8) dsum[c] += sum[c]; skip_block: ; } FORC4 if (dsum[c]) pre_mul[c] = dsum[c+4] / dsum[c]; } if (use_camera_wb && cam_mul[0] != -1) { memset (sum, 0, sizeof sum); for (row=0; row < 8; row++) for (col=0; col < 8; col++) { c = FC(row,col); if ((val = white[row][col] - cblack[c]) > 0) sum[c] += val; sum[c+4]++; } if (sum[0] && sum[1] && sum[2] && sum[3]) FORC4 pre_mul[c] = (float) sum[c+4] / sum[c]; else if (cam_mul[0] && cam_mul[2]) memcpy (pre_mul, cam_mul, sizeof pre_mul); else dcraw_message (DCRAW_NO_CAMERA_WB,_("%s: Cannot use camera white balance.\n"), ifname_display); } if (pre_mul[3] == 0) pre_mul[3] = colors < 4 ? pre_mul[1] : 1; dark = black; sat = maximum; if (threshold) wavelet_denoise(); maximum -= black; for (dmin=DBL_MAX, dmax=c=0; c < 4; c++) { if (dmin > pre_mul[c]) dmin = pre_mul[c]; if (dmax < pre_mul[c]) dmax = pre_mul[c]; } if (!highlight) dmax = dmin; FORC4 scale_mul[c] = (pre_mul[c] /= dmax) * 65535.0 / maximum; dcraw_message(DCRAW_VERBOSE, _("Scaling with darkness %d, saturation %d, and\nmultipliers"), dark, sat); FORC4 dcraw_message(DCRAW_VERBOSE, " %f", pre_mul[c]); dcraw_message(DCRAW_VERBOSE, "\n"); size = iheight*iwidth; for (i=0; i < size*4; i++) { val = image[0][i]; if (!val) continue; val -= cblack[i & 3]; val *= scale_mul[i & 3]; image[0][i] = CLIP(val); } if ((aber[0] != 1 || aber[2] != 1) && colors == 3) { dcraw_message (DCRAW_VERBOSE,_("Correcting chromatic aberration...\n")); for (c=0; c < 4; c+=2) { if (aber[c] == 1) continue; img = (ushort *) malloc (size * sizeof *img); merror (img, "scale_colors()"); for (i=0; i < size; i++) img[i] = image[i][c]; for (row=0; row < iheight; row++) { ur = fr = (row - iheight*0.5) * aber[c] + iheight*0.5; if (ur > (unsigned)(iheight-2)) continue; fr -= ur; for (col=0; col < iwidth; col++) { uc = fc = (col - iwidth*0.5) * aber[c] + iwidth*0.5; if (uc > (unsigned)(iwidth-2)) continue; fc -= uc; pix = img + ur*iwidth + uc; image[row*iwidth+col][c] = (pix[ 0]*(1-fc) + pix[ 1]*fc) * (1-fr) + (pix[iwidth]*(1-fc) + pix[iwidth+1]*fc) * fr; } } free(img); } } } /* End of functions copied to dcraw_indi.c (UF) */ void CLASS pre_interpolate() { ushort (*img)[4]; int row, col, c; if (shrink) { if (half_size) { height = iheight; width = iwidth; } else { img = (ushort (*)[4]) calloc (height*width, sizeof *img); merror (img, "pre_interpolate()"); for (row=0; row < height; row++) for (col=0; col < width; col++) { c = fcol(row,col); img[row*width+col][c] = image[(row >> 1)*iwidth+(col >> 1)][c]; } free (image); image = img; shrink = 0; } } if (filters > 1000 && colors == 3) { if (four_color_rgb && colors++) mix_green = !half_size; else { for (row = FC(1,0) >> 1; row < height; row+=2) for (col = FC(row,1) & 1; col < width; col+=2) image[row*width+col][1] = image[row*width+col][3]; filters &= ~((filters & 0x55555555) << 1); } } if (half_size) filters = 0; } /* Start of functions copied to dcraw_indi.c (UF) */ void CLASS border_interpolate (int border) { int row, col, y, x, f, c, sum[8]; for (row=0; row < height; row++) for (col=0; col < width; col++) { if (col==border && row >= border && row < height-border) col = width-border; memset (sum, 0, sizeof sum); for (y=row-1; y != row+2; y++) for (x=col-1; x != col+2; x++) if (y >= 0 && y < height && x >= 0 && x < width) { f = fcol(y,x); sum[f] += image[y*width+x][f]; sum[f+4]++; } f = fcol(row,col); FORCC if (c != f && sum[c+4]) image[row*width+col][c] = sum[c] / sum[c+4]; } } void CLASS lin_interpolate() { int code[16][16][32], size=16, *ip, sum[4]; int f, c, i, x, y, row, col, shift, color; ushort *pix; dcraw_message (DCRAW_VERBOSE,_("Bilinear interpolation...\n")); if (filters == 2) size = 6; border_interpolate(1); for (row=0; row < size; row++) for (col=0; col < size; col++) { ip = code[row][col]+1; f = fcol(row,col); memset (sum, 0, sizeof sum); for (y=-1; y <= 1; y++) for (x=-1; x <= 1; x++) { shift = (y==0) + (x==0); color = fcol(row+y,col+x); if (color == f) continue; *ip++ = (width*y + x)*4 + color; *ip++ = shift; *ip++ = color; sum[color] += 1 << shift; } code[row][col][0] = (ip - code[row][col]) / 3; FORCC if (c != f) { *ip++ = c; *ip++ = 256 / sum[c]; } } for (row=1; row < height-1; row++) for (col=1; col < width-1; col++) { pix = image[row*width+col]; ip = code[row % size][col % size]; memset (sum, 0, sizeof sum); for (i=*ip++; i--; ip+=3) sum[ip[2]] += pix[ip[0]] << ip[1]; for (i=colors; --i; ip+=2) pix[ip[0]] = sum[ip[0]] * ip[1] >> 8; } } /* This algorithm is officially called: "Interpolation using a Threshold-based variable number of gradients" described in http://scien.stanford.edu/pages/labsite/1999/psych221/projects/99/tingchen/algodep/vargra.html I've extended the basic idea to work with non-Bayer filter arrays. Gradients are numbered clockwise from NW=0 to W=7. */ void CLASS vng_interpolate() { static const signed char *cp, terms[] = { -2,-2,+0,-1,0,0x01, -2,-2,+0,+0,1,0x01, -2,-1,-1,+0,0,0x01, -2,-1,+0,-1,0,0x02, -2,-1,+0,+0,0,0x03, -2,-1,+0,+1,1,0x01, -2,+0,+0,-1,0,0x06, -2,+0,+0,+0,1,0x02, -2,+0,+0,+1,0,0x03, -2,+1,-1,+0,0,0x04, -2,+1,+0,-1,1,0x04, -2,+1,+0,+0,0,0x06, -2,+1,+0,+1,0,0x02, -2,+2,+0,+0,1,0x04, -2,+2,+0,+1,0,0x04, -1,-2,-1,+0,0,static_cast(0x80), -1,-2,+0,-1,0,0x01, -1,-2,+1,-1,0,0x01, -1,-2,+1,+0,1,0x01, -1,-1,-1,+1,0,static_cast(0x88), -1,-1,+1,-2,0,0x40, -1,-1,+1,-1,0,0x22, -1,-1,+1,+0,0,0x33, -1,-1,+1,+1,1,0x11, -1,+0,-1,+2,0,0x08, -1,+0,+0,-1,0,0x44, -1,+0,+0,+1,0,0x11, -1,+0,+1,-2,1,0x40, -1,+0,+1,-1,0,0x66, -1,+0,+1,+0,1,0x22, -1,+0,+1,+1,0,0x33, -1,+0,+1,+2,1,0x10, -1,+1,+1,-1,1,0x44, -1,+1,+1,+0,0,0x66, -1,+1,+1,+1,0,0x22, -1,+1,+1,+2,0,0x10, -1,+2,+0,+1,0,0x04, -1,+2,+1,+0,1,0x04, -1,+2,+1,+1,0,0x04, +0,-2,+0,+0,1,static_cast(0x80), +0,-1,+0,+1,1,static_cast(0x88), +0,-1,+1,-2,0,0x40, +0,-1,+1,+0,0,0x11, +0,-1,+2,-2,0,0x40, +0,-1,+2,-1,0,0x20, +0,-1,+2,+0,0,0x30, +0,-1,+2,+1,1,0x10, +0,+0,+0,+2,1,0x08, +0,+0,+2,-2,1,0x40, +0,+0,+2,-1,0,0x60, +0,+0,+2,+0,1,0x20, +0,+0,+2,+1,0,0x30, +0,+0,+2,+2,1,0x10, +0,+1,+1,+0,0,0x44, +0,+1,+1,+2,0,0x10, +0,+1,+2,-1,1,0x40, +0,+1,+2,+0,0,0x60, +0,+1,+2,+1,0,0x20, +0,+1,+2,+2,0,0x10, +1,-2,+1,+0,0,static_cast(0x80), +1,-1,+1,+1,0,static_cast(0x88), +1,+0,+1,+2,0,0x08, +1,+0,+2,-1,0,0x40, +1,+0,+2,+1,0,0x10 }, chood[] = { -1,-1, -1,0, -1,+1, 0,+1, +1,+1, +1,0, +1,-1, 0,-1 }; ushort (*brow[5])[4], *pix; int prow=8, pcol=2, *ip, *code[16][16], gval[8], gmin, gmax, sum[4]; int row, col, x, y, x1, x2, y1, y2, t, weight, grads, color, diag; int g, diff, thold, num, c; lin_interpolate(); dcraw_message (DCRAW_VERBOSE,_("VNG interpolation...\n")); if (filters == 1) prow = pcol = 16; if (filters == 2) prow = pcol = 6; ip = (int *) calloc (prow*pcol, 1280); merror (ip, "vng_interpolate()"); for (row=0; row < prow; row++) /* Precalculate for VNG */ for (col=0; col < pcol; col++) { code[row][col] = ip; for (cp=terms, t=0; t < 64; t++) { y1 = *cp++; x1 = *cp++; y2 = *cp++; x2 = *cp++; weight = *cp++; grads = *cp++; color = fcol(row+y1,col+x1); if (fcol(row+y2,col+x2) != color) continue; diag = (fcol(row,col+1) == color && fcol(row+1,col) == color) ? 2:1; if (abs(y1-y2) == diag && abs(x1-x2) == diag) continue; *ip++ = (y1*width + x1)*4 + color; *ip++ = (y2*width + x2)*4 + color; *ip++ = weight; for (g=0; g < 8; g++) if (grads & 1< gval[g]) gmin = gval[g]; if (gmax < gval[g]) gmax = gval[g]; } if (gmax == 0) { memcpy (brow[2][col], pix, sizeof *image); continue; } thold = gmin + (gmax >> 1); memset (sum, 0, sizeof sum); color = fcol(row,col); for (num=g=0; g < 8; g++,ip+=2) { /* Average the neighbors */ if (gval[g] <= thold) { FORCC if (c == color && ip[1]) sum[c] += (pix[c] + pix[ip[1]]) >> 1; else sum[c] += pix[ip[0] + c]; num++; } } FORCC { /* Save to buffer */ t = pix[color]; if (c != color) t += (sum[c] - sum[color]) / num; brow[2][col][c] = CLIP(t); } } if (row > 3) /* Write buffer to image */ memcpy (image[(row-2)*width+2], brow[0]+2, (width-4)*sizeof *image); for (g=0; g < 4; g++) brow[(g-1) & 3] = brow[g]; } memcpy (image[(row-2)*width+2], brow[0]+2, (width-4)*sizeof *image); memcpy (image[(row-1)*width+2], brow[1]+2, (width-4)*sizeof *image); free (brow[4]); free (code[0][0]); } /* Patterned Pixel Grouping Interpolation by Alain Desbiolles */ void CLASS ppg_interpolate() { int dir[5] = { 1, width, -1, -width, 1 }; int row, col, diff[2], guess[2], c, d, i; ushort (*pix)[4]; border_interpolate(3); dcraw_message (DCRAW_VERBOSE,_("PPG interpolation...\n")); /* Fill in the green layer with gradients and pattern recognition: */ for (row=3; row < height-3; row++) for (col=3+(FC(row,3) & 1), c=FC(row,col); col < width-3; col+=2) { pix = image + row*width+col; for (i=0; (d=dir[i]) > 0; i++) { guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2 - pix[-2*d][c] - pix[2*d][c]; diff[i] = ( ABS(pix[-2*d][c] - pix[ 0][c]) + ABS(pix[ 2*d][c] - pix[ 0][c]) + ABS(pix[ -d][1] - pix[ d][1]) ) * 3 + ( ABS(pix[ 3*d][1] - pix[ d][1]) + ABS(pix[-3*d][1] - pix[-d][1]) ) * 2; } d = dir[i = diff[0] > diff[1]]; pix[0][1] = ULIM(guess[i] >> 2, pix[d][1], pix[-d][1]); } /* Calculate red and blue for each green pixel: */ for (row=1; row < height-1; row++) for (col=1+(FC(row,2) & 1), c=FC(row,col+1); col < width-1; col+=2) { pix = image + row*width+col; for (i=0; (d=dir[i]) > 0; c=2-c, i++) pix[0][c] = CLIP((pix[-d][c] + pix[d][c] + 2*pix[0][1] - pix[-d][1] - pix[d][1]) >> 1); } /* Calculate blue for red pixels and vice versa: */ for (row=1; row < height-1; row++) for (col=1+(FC(row,1) & 1), c=2-FC(row,col); col < width-1; col+=2) { pix = image + row*width+col; for (i=0; (d=dir[i]+dir[i+1]) > 0; i++) { diff[i] = ABS(pix[-d][c] - pix[d][c]) + ABS(pix[-d][1] - pix[0][1]) + ABS(pix[ d][1] - pix[0][1]); guess[i] = pix[-d][c] + pix[d][c] + 2*pix[0][1] - pix[-d][1] - pix[d][1]; } if (diff[0] != diff[1]) pix[0][c] = CLIP(guess[diff[0] > diff[1]] >> 1); else pix[0][c] = CLIP((guess[0]+guess[1]) >> 2); } } /* Adaptive Homogeneity-Directed interpolation is based on the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. */ #define TS 256 /* Tile Size */ void CLASS ahd_interpolate() { int i, j, k, top, left, row, col, tr, tc, c, d, val, hm[2]; ushort (*pix)[4], (*rix)[3]; static const int dir[4] = { -1, 1, -TS, TS }; unsigned ldiff[2][4], abdiff[2][4], leps, abeps; float r, cbrt[0x10000], xyz[3], xyz_cam[3][4]; ushort (*rgb)[TS][TS][3]; short (*lab)[TS][TS][3], (*lix)[3]; char (*homo)[TS][TS], *buffer; dcraw_message (DCRAW_VERBOSE,_("AHD interpolation...\n")); for (i=0; i < 0x10000; i++) { r = i / 65535.0; cbrt[i] = r > 0.008856 ? pow(r, (float) (1/3.0)) : 7.787*r + 16/116.0; } for (i=0; i < 3; i++) for (j=0; j < colors; j++) for (xyz_cam[i][j] = k=0; k < 3; k++) xyz_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j] / d65_white[i]; border_interpolate(5); buffer = (char *) malloc (26*TS*TS); /* 1664 kB */ merror (buffer, "ahd_interpolate()"); rgb = (ushort(*)[TS][TS][3]) buffer; lab = (short (*)[TS][TS][3])(buffer + 12*TS*TS); homo = (char (*)[TS][TS]) (buffer + 24*TS*TS); for (top=2; top < height-5; top += TS-6) for (left=2; left < width-5; left += TS-6) { /* Interpolate green horizontally and vertically: */ for (row = top; row < top+TS && row < height-2; row++) { col = left + (FC(row,left) & 1); for (c = FC(row,col); col < left+TS && col < width-2; col+=2) { pix = image + row*width+col; val = ((pix[-1][1] + pix[0][c] + pix[1][1]) * 2 - pix[-2][c] - pix[2][c]) >> 2; rgb[0][row-top][col-left][1] = ULIM(val,pix[-1][1],pix[1][1]); val = ((pix[-width][1] + pix[0][c] + pix[width][1]) * 2 - pix[-2*width][c] - pix[2*width][c]) >> 2; rgb[1][row-top][col-left][1] = ULIM(val,pix[-width][1],pix[width][1]); } } /* Interpolate red and blue, and convert to CIELab: */ for (d=0; d < 2; d++) for (row=top+1; row < top+TS-1 && row < height-3; row++) for (col=left+1; col < left+TS-1 && col < width-3; col++) { pix = image + row*width+col; rix = &rgb[d][row-top][col-left]; lix = &lab[d][row-top][col-left]; if ((c = 2 - FC(row,col)) == 1) { c = FC(row+1,col); val = pix[0][1] + (( pix[-1][2-c] + pix[1][2-c] - rix[-1][1] - rix[1][1] ) >> 1); rix[0][2-c] = CLIP(val); val = pix[0][1] + (( pix[-width][c] + pix[width][c] - rix[-TS][1] - rix[TS][1] ) >> 1); } else val = rix[0][1] + (( pix[-width-1][c] + pix[-width+1][c] + pix[+width-1][c] + pix[+width+1][c] - rix[-TS-1][1] - rix[-TS+1][1] - rix[+TS-1][1] - rix[+TS+1][1] + 1) >> 2); rix[0][c] = CLIP(val); c = FC(row,col); rix[0][c] = pix[0][c]; xyz[0] = xyz[1] = xyz[2] = 0.5; FORCC { xyz[0] += xyz_cam[0][c] * rix[0][c]; xyz[1] += xyz_cam[1][c] * rix[0][c]; xyz[2] += xyz_cam[2][c] * rix[0][c]; } xyz[0] = cbrt[CLIP((int) xyz[0])]; xyz[1] = cbrt[CLIP((int) xyz[1])]; xyz[2] = cbrt[CLIP((int) xyz[2])]; lix[0][0] = 64 * (116 * xyz[1] - 16); lix[0][1] = 64 * 500 * (xyz[0] - xyz[1]); lix[0][2] = 64 * 200 * (xyz[1] - xyz[2]); } /* Build homogeneity maps from the CIELab images: */ memset (homo, 0, 2*TS*TS); for (row=top+2; row < top+TS-2 && row < height-4; row++) { tr = row-top; for (col=left+2; col < left+TS-2 && col < width-4; col++) { tc = col-left; for (d=0; d < 2; d++) { lix = &lab[d][tr][tc]; for (i=0; i < 4; i++) { ldiff[d][i] = ABS(lix[0][0]-lix[dir[i]][0]); abdiff[d][i] = SQR(lix[0][1]-lix[dir[i]][1]) + SQR(lix[0][2]-lix[dir[i]][2]); } } leps = MIN(MAX(ldiff[0][0],ldiff[0][1]), MAX(ldiff[1][2],ldiff[1][3])); abeps = MIN(MAX(abdiff[0][0],abdiff[0][1]), MAX(abdiff[1][2],abdiff[1][3])); for (d=0; d < 2; d++) for (i=0; i < 4; i++) if (ldiff[d][i] <= leps && abdiff[d][i] <= abeps) homo[d][tr][tc]++; } } /* Combine the most homogenous pixels for the final result: */ for (row=top+3; row < top+TS-3 && row < height-5; row++) { tr = row-top; for (col=left+3; col < left+TS-3 && col < width-5; col++) { tc = col-left; for (d=0; d < 2; d++) for (hm[d]=0, i=tr-1; i <= tr+1; i++) for (j=tc-1; j <= tc+1; j++) hm[d] += homo[d][i][j]; if (hm[0] != hm[1]) FORC3 image[row*width+col][c] = rgb[hm[1] > hm[0]][tr][tc][c]; else FORC3 image[row*width+col][c] = (rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) >> 1; } } } free (buffer); } #undef TS /* End of functions copied to dcraw_indi.c (UF) */ void CLASS median_filter() { ushort (*pix)[4]; int pass, c, i, j, k, med[9]; static const uchar opt[] = /* Optimal 9-element median search */ { 1,2, 4,5, 7,8, 0,1, 3,4, 6,7, 1,2, 4,5, 7,8, 0,3, 5,8, 4,7, 3,6, 1,4, 2,5, 4,7, 4,2, 6,4, 4,2 }; for (pass=1; pass <= med_passes; pass++) { dcraw_message (DCRAW_VERBOSE,_("Median filter pass %d...\n"), pass); for (c=0; c < 3; c+=2) { for (pix = image; pix < image+width*height; pix++) pix[0][3] = pix[0][c]; for (pix = image+width; pix < image+width*(height-1); pix++) { if ((pix-image+1) % width < 2) continue; for (k=0, i = -width; i <= width; i += width) for (j = i-1; j <= i+1; j++) med[k++] = pix[j][3] - pix[j][1]; for (i=0; i < (int) sizeof opt; i+=2) if (med[opt[i]] > med[opt[i+1]]) SWAP (med[opt[i]] , med[opt[i+1]]); pix[0][c] = CLIP(med[4] + pix[0][1]); } } } } void CLASS blend_highlights() { int clip=INT_MAX, row, col, c, i, j; static const float trans[2][4][4] = { { { 1,1,1 }, { 1.7320508,-1.7320508,0 }, { -1,-1,2 } }, { { 1,1,1,1 }, { 1,-1,1,-1 }, { 1,1,-1,-1 }, { 1,-1,-1,1 } } }; static const float itrans[2][4][4] = { { { 1,0.8660254,-0.5 }, { 1,-0.8660254,-0.5 }, { 1,0,1 } }, { { 1,1,1,1 }, { 1,-1,1,-1 }, { 1,1,-1,-1 }, { 1,-1,-1,1 } } }; float cam[2][4], lab[2][4], sum[2], chratio; if ((unsigned) (colors-3) > 1) return; dcraw_message (DCRAW_VERBOSE,_("Blending highlights...\n")); FORCC if (clip > (i = 65535*pre_mul[c])) clip = i; for (row=0; row < height; row++) for (col=0; col < width; col++) { FORCC if (image[row*width+col][c] > clip) break; if (c == colors) continue; FORCC { cam[0][c] = image[row*width+col][c]; cam[1][c] = MIN(cam[0][c],clip); } for (i=0; i < 2; i++) { FORCC for (lab[i][c]=j=0; j < colors; j++) lab[i][c] += trans[colors-3][c][j] * cam[i][j]; for (sum[i]=0,c=1; c < colors; c++) sum[i] += SQR(lab[i][c]); } chratio = sqrt(sum[1]/sum[0]); for (c=1; c < colors; c++) lab[0][c] *= chratio; FORCC for (cam[0][c]=j=0; j < colors; j++) cam[0][c] += itrans[colors-3][c][j] * lab[0][j]; FORCC image[row*width+col][c] = cam[0][c] / colors; } } #define SCALE (4 >> shrink) void CLASS recover_highlights() { float *map, sum, wgt, grow; int hsat[4], count, spread, change, val, kc, c; unsigned high, wide, mrow, mcol, row, col, d, y, x, i; ushort *pixel; static const signed char dir[8][2] = { {-1,-1}, {-1,0}, {-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1} }; dcraw_message (DCRAW_VERBOSE,_("Rebuilding highlights...\n")); grow = pow (2.0, 4-highlight); FORCC hsat[c] = 32000 * pre_mul[c]; for (kc=0, c=1; c < colors; c++) if (pre_mul[kc] < pre_mul[c]) kc = c; high = height / SCALE; wide = width / SCALE; map = (float *) calloc (high*wide, sizeof *map); merror (map, "recover_highlights()"); FORCC if (c != kc) { memset (map, 0, high*wide*sizeof *map); for (mrow=0; mrow < high; mrow++) for (mcol=0; mcol < wide; mcol++) { sum = wgt = count = 0; for (row = mrow*SCALE; row < (mrow+1)*SCALE; row++) for (col = mcol*SCALE; col < (mcol+1)*SCALE; col++) { pixel = image[row*width+col]; if (pixel[c] / hsat[c] == 1 && pixel[kc] > 24000) { sum += pixel[c]; wgt += pixel[kc]; count++; } } if (count == SCALE*SCALE) map[mrow*wide+mcol] = sum / wgt; } for (spread = 32/grow; spread--; ) { for (mrow=0; mrow < high; mrow++) for (mcol=0; mcol < wide; mcol++) { if (map[mrow*wide+mcol]) continue; sum = count = 0; for (d=0; d < 8; d++) { y = mrow + dir[d][0]; x = mcol + dir[d][1]; if (y < high && x < wide && map[y*wide+x] > 0) { sum += (1 + (d & 1)) * map[y*wide+x]; count += 1 + (d & 1); } } if (count > 3) map[mrow*wide+mcol] = - (sum+grow) / (count+grow); } for (change=i=0; i < high*wide; i++) if (map[i] < 0) { map[i] = -map[i]; change = 1; } if (!change) break; } for (i=0; i < high*wide; i++) if (map[i] == 0) map[i] = 1; for (mrow=0; mrow < high; mrow++) for (mcol=0; mcol < wide; mcol++) { for (row = mrow*SCALE; row < (mrow+1)*SCALE; row++) for (col = mcol*SCALE; col < (mcol+1)*SCALE; col++) { pixel = image[row*width+col]; if (pixel[c] / hsat[c] > 1) { val = pixel[kc] * map[mrow*wide+mcol]; if (pixel[c] < val) pixel[c] = CLIP(val); } } } } free (map); } #undef SCALE void CLASS tiff_get (unsigned base, unsigned *tag, unsigned *type, unsigned *len, unsigned *save) { *tag = get2(); *type = get2(); *len = get4(); *save = ftell(ifp) + 4; if (*len * ("11124811248488"[*type < 14 ? *type:0]-'0') > 4) fseek (ifp, get4()+base, SEEK_SET); } void CLASS parse_thumb_note (int base, unsigned toff, unsigned tlen) { unsigned entries, tag, type, len, save; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); if (tag == toff) thumb_offset = get4()+base; if (tag == tlen) thumb_length = get4(); fseek (ifp, save, SEEK_SET); } } //int CLASS parse_tiff_ifd (int base); void CLASS parse_makernote (int base, int uptag) { static const uchar xlat[2][256] = { { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, 0x53,0x59,0xe3,0xc7,0xe9,0x2f,0x95,0xa7,0x95,0x1f,0xdf,0x7f,0x2b,0x29,0xc7,0x0d, 0xdf,0x07,0xef,0x71,0x89,0x3d,0x13,0x3d,0x3b,0x13,0xfb,0x0d,0x89,0xc1,0x65,0x1f, 0xb3,0x0d,0x6b,0x29,0xe3,0xfb,0xef,0xa3,0x6b,0x47,0x7f,0x95,0x35,0xa7,0x47,0x4f, 0xc7,0xf1,0x59,0x95,0x35,0x11,0x29,0x61,0xf1,0x3d,0xb3,0x2b,0x0d,0x43,0x89,0xc1, 0x9d,0x9d,0x89,0x65,0xf1,0xe9,0xdf,0xbf,0x3d,0x7f,0x53,0x97,0xe5,0xe9,0x95,0x17, 0x1d,0x3d,0x8b,0xfb,0xc7,0xe3,0x67,0xa7,0x07,0xf1,0x71,0xa7,0x53,0xb5,0x29,0x89, 0xe5,0x2b,0xa7,0x17,0x29,0xe9,0x4f,0xc5,0x65,0x6d,0x6b,0xef,0x0d,0x89,0x49,0x2f, 0xb3,0x43,0x53,0x65,0x1d,0x49,0xa3,0x13,0x89,0x59,0xef,0x6b,0xef,0x65,0x1d,0x0b, 0x59,0x13,0xe3,0x4f,0x9d,0xb3,0x29,0x43,0x2b,0x07,0x1d,0x95,0x59,0x59,0x47,0xfb, 0xe5,0xe9,0x61,0x47,0x2f,0x35,0x7f,0x17,0x7f,0xef,0x7f,0x95,0x95,0x71,0xd3,0xa3, 0x0b,0x71,0xa3,0xad,0x0b,0x3b,0xb5,0xfb,0xa3,0xbf,0x4f,0x83,0x1d,0xad,0xe9,0x2f, 0x71,0x65,0xa3,0xe5,0x07,0x35,0x3d,0x0d,0xb5,0xe9,0xe5,0x47,0x3b,0x9d,0xef,0x35, 0xa3,0xbf,0xb3,0xdf,0x53,0xd3,0x97,0x53,0x49,0x71,0x07,0x35,0x61,0x71,0x2f,0x43, 0x2f,0x11,0xdf,0x17,0x97,0xfb,0x95,0x3b,0x7f,0x6b,0xd3,0x25,0xbf,0xad,0xc7,0xc5, 0xc5,0xb5,0x8b,0xef,0x2f,0xd3,0x07,0x6b,0x25,0x49,0x95,0x25,0x49,0x6d,0x71,0xc7 }, { 0xa7,0xbc,0xc9,0xad,0x91,0xdf,0x85,0xe5,0xd4,0x78,0xd5,0x17,0x46,0x7c,0x29,0x4c, 0x4d,0x03,0xe9,0x25,0x68,0x11,0x86,0xb3,0xbd,0xf7,0x6f,0x61,0x22,0xa2,0x26,0x34, 0x2a,0xbe,0x1e,0x46,0x14,0x68,0x9d,0x44,0x18,0xc2,0x40,0xf4,0x7e,0x5f,0x1b,0xad, 0x0b,0x94,0xb6,0x67,0xb4,0x0b,0xe1,0xea,0x95,0x9c,0x66,0xdc,0xe7,0x5d,0x6c,0x05, 0xda,0xd5,0xdf,0x7a,0xef,0xf6,0xdb,0x1f,0x82,0x4c,0xc0,0x68,0x47,0xa1,0xbd,0xee, 0x39,0x50,0x56,0x4a,0xdd,0xdf,0xa5,0xf8,0xc6,0xda,0xca,0x90,0xca,0x01,0x42,0x9d, 0x8b,0x0c,0x73,0x43,0x75,0x05,0x94,0xde,0x24,0xb3,0x80,0x34,0xe5,0x2c,0xdc,0x9b, 0x3f,0xca,0x33,0x45,0xd0,0xdb,0x5f,0xf5,0x52,0xc3,0x21,0xda,0xe2,0x22,0x72,0x6b, 0x3e,0xd0,0x5b,0xa8,0x87,0x8c,0x06,0x5d,0x0f,0xdd,0x09,0x19,0x93,0xd0,0xb9,0xfc, 0x8b,0x0f,0x84,0x60,0x33,0x1c,0x9b,0x45,0xf1,0xf0,0xa3,0x94,0x3a,0x12,0x77,0x33, 0x4d,0x44,0x78,0x28,0x3c,0x9e,0xfd,0x65,0x57,0x16,0x94,0x6b,0xfb,0x59,0xd0,0xc8, 0x22,0x36,0xdb,0xd2,0x63,0x98,0x43,0xa1,0x04,0x87,0x86,0xf7,0xa6,0x26,0xbb,0xd6, 0x59,0x4d,0xbf,0x6a,0x2e,0xaa,0x2b,0xef,0xe6,0x78,0xb6,0x4e,0xe0,0x2f,0xdc,0x7c, 0xbe,0x57,0x19,0x32,0x7e,0x2a,0xd0,0xb8,0xba,0x29,0x00,0x3c,0x52,0x7d,0xa8,0x49, 0x3b,0x2d,0xeb,0x25,0x49,0xfa,0xa3,0xaa,0x39,0xa7,0xc5,0xa7,0x50,0x11,0x36,0xfb, 0xc6,0x67,0x4a,0xf5,0xa5,0x12,0x65,0x7e,0xb0,0xdf,0xaf,0x4e,0xb3,0x61,0x7f,0x2f } }; int c, i; unsigned offset=0, entries, tag, type, len, save; unsigned ver97=0, serial=0, wbi=0, wb[4]={0,0,0,0}; uchar buf97[324], ci, cj, ck; short morder, sorder=order; char buf[10]; /* The MakerNote might have its own TIFF header (possibly with its own byte-order!), or it might just be a table. */ if (!strcmp(make,"Nokia")) return; fread (buf, 1, 10, ifp); if (!strncmp (buf,"KDK" ,3) || /* these aren't TIFF tables */ !strncmp (buf,"VER" ,3) || !strncmp (buf,"IIII",4) || !strncmp (buf,"MMMM",4)) return; if (!strncmp (buf,"KC" ,2) || /* Konica KD-400Z, KD-510Z */ !strncmp (buf,"MLY" ,3)) { /* Minolta DiMAGE G series */ order = 0x4d4d; while ((i=ftell(ifp)) < data_offset && i < 16384) { wb[0] = wb[2]; wb[2] = wb[1]; wb[1] = wb[3]; wb[3] = get2(); if (wb[1] == 256 && wb[3] == 256 && wb[0] > 256 && wb[0] < 640 && wb[2] > 256 && wb[2] < 640) FORC4 cam_mul[c] = wb[c]; } goto quit; } if (!strcmp (buf,"Nikon")) { base = ftell(ifp); order = get2(); if (get2() != 42) goto quit; offset = get4(); fseek (ifp, offset-8, SEEK_CUR); } else if (!strcmp (buf,"OLYMPUS")) { base = ftell(ifp)-10; fseek (ifp, -2, SEEK_CUR); order = get2(); get2(); } else if (!strncmp (buf,"SONY",4) || !strcmp (buf,"Panasonic")) { goto nf; } else if (!strncmp (buf,"FUJIFILM",8)) { base = ftell(ifp)-10; nf: order = 0x4949; fseek (ifp, 2, SEEK_CUR); } else if (!strcmp (buf,"OLYMP") || !strcmp (buf,"LEICA") || !strcmp (buf,"Ricoh") || !strcmp (buf,"EPSON")) fseek (ifp, -2, SEEK_CUR); else if (!strcmp (buf,"AOC") || !strcmp (buf,"QVC")) fseek (ifp, -4, SEEK_CUR); else { fseek (ifp, -10, SEEK_CUR); if (!strncmp(make,"SAMSUNG",7)) base = ftell(ifp); } entries = get2(); if (entries > 1000) return; morder = order; while (entries--) { order = morder; tiff_get (base, &tag, &type, &len, &save); tag |= uptag << 16; if (tag == 2 && strstr(make,"NIKON") && !iso_speed) iso_speed = (get2(),get2()); if (tag == 4 && len > 26 && len < 35) { if ((i=(get4(),get2())) != 0x7fff && !iso_speed) iso_speed = 50 * pow (2, i/32.0 - 4); if ((i=(get2(),get2())) != 0x7fff && !aperture) aperture = pow (2, i/64.0); if ((i=get2()) != 0xffff && !shutter) shutter = pow (2, (short) i/-32.0); wbi = (get2(),get2()); shot_order = (get2(),get2()); } if ((tag == 4 || tag == 0x114) && !strncmp(make,"KONICA",6)) { fseek (ifp, tag == 4 ? 140:160, SEEK_CUR); switch (get2()) { case 72: flip = 0; break; case 76: flip = 6; break; case 82: flip = 5; break; } } if (tag == 7 && type == 2 && len > 20) fgets (model2, 64, ifp); if (tag == 8 && type == 4) shot_order = get4(); if (tag == 9 && !strcmp(make,"Canon")) fread (artist, 64, 1, ifp); if (tag == 0xc && len == 4) { cam_mul[0] = getreal(type); cam_mul[2] = getreal(type); } if (tag == 0xd && type == 7 && get2() == 0xaaaa) { for (c=i=2; (ushort) c != 0xbbbb && (unsigned) i < len; i++) c = c << 8 | fgetc(ifp); while ((unsigned)(i+=4) < len-5) if (get4() == 257 && (i=len) && (c = (get4(),fgetc(ifp))) < 3) flip = "065"[c]-'0'; } if (tag == 0x10 && type == 4) unique_id = get4(); if (tag == 0x11 && is_raw && !strncmp(make,"NIKON",5)) { fseek (ifp, get4()+base, SEEK_SET); parse_tiff_ifd (base); } if (tag == 0x14 && type == 7) { if (len == 2560) { fseek (ifp, 1248, SEEK_CUR); goto get2_256; } fread (buf, 1, 10, ifp); if (!strncmp(buf,"NRW ",4)) { fseek (ifp, strcmp(buf+4,"0100") ? 46:1546, SEEK_CUR); cam_mul[0] = get4() << 2; cam_mul[1] = get4() + get4(); cam_mul[2] = get4() << 2; } } if (tag == 0x15 && type == 2 && is_raw) fread (model, 64, 1, ifp); if (strstr(make,"PENTAX")) { if (tag == 0x1b) tag = 0x1018; if (tag == 0x1c) tag = 0x1017; } if (tag == 0x1d) while ((c = fgetc(ifp)) && c != EOF) serial = serial*10 + (isdigit(c) ? c - '0' : c % 10); if (tag == 0x81) { /* NTC UF*/ tone_mode_offset = ftell(ifp); tone_mode_size = len; } /* NTC UF*/ if (tag == 0x81 && type == 4) { data_offset = get4(); fseek (ifp, data_offset + 41, SEEK_SET); raw_height = get2() * 2; raw_width = get2(); filters = 0x61616161; } if (tag == 0x29 && type == 1) { c = wbi < 18 ? "012347800000005896"[wbi]-'0' : 0; fseek (ifp, 8 + c*32, SEEK_CUR); FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get4(); } if ((tag == 0x81 && type == 7) || (tag == 0x100 && type == 7) || (tag == 0x280 && type == 1)) { thumb_offset = ftell(ifp); thumb_length = len; } if (tag == 0x88 && type == 4 && (thumb_offset = get4())) thumb_offset += base; if (tag == 0x89 && type == 4) thumb_length = get4(); if (tag == 0x8c || tag == 0x96) meta_offset = ftell(ifp); if (tag == 0x8c) { /* NTC UF*/ tone_curve_offset = ftell(ifp); tone_curve_size = len; } /* NTC UF*/ if (tag == 0x97) { for (i=0; i < 4; i++) ver97 = ver97 * 10 + fgetc(ifp)-'0'; switch (ver97) { case 100: fseek (ifp, 68, SEEK_CUR); FORC4 cam_mul[(c >> 1) | ((c & 1) << 1)] = get2(); break; case 102: fseek (ifp, 6, SEEK_CUR); goto get2_rggb; case 103: fseek (ifp, 16, SEEK_CUR); FORC4 cam_mul[c] = get2(); } if (ver97 >= 200) { if (ver97 != 205) fseek (ifp, 280, SEEK_CUR); fread (buf97, 324, 1, ifp); } } if (tag == 0xa1 && type == 7) { order = 0x4949; fseek (ifp, 140, SEEK_CUR); FORC3 cam_mul[c] = get4(); } if (tag == 0xa4 && type == 3) { fseek (ifp, wbi*48, SEEK_CUR); FORC3 cam_mul[c] = get2(); } if (tag == 0xa7 && (unsigned) (ver97-200) < 17) { ci = xlat[0][serial & 0xff]; cj = xlat[1][fgetc(ifp)^fgetc(ifp)^fgetc(ifp)^fgetc(ifp)]; ck = 0x60; for (i=0; i < 324; i++) buf97[i] ^= (cj += ci * ck++); i = "66666>666;6A;:;55"[ver97-200] - '0'; FORC4 cam_mul[c ^ (c >> 1) ^ (i & 1)] = sget2 (buf97 + (i & -2) + c*2); } if (tag == 0x200 && len == 3) shot_order = (get4(),get4()); if (tag == 0x200 && len == 4) FORC4 cblack[c ^ c >> 1] = get2(); if (tag == 0x201 && len == 4) goto get2_rggb; if (tag == 0x220 && type == 7) meta_offset = ftell(ifp); if (tag == 0x401 && type == 4 && len == 4) FORC4 cblack[c ^ c >> 1] = get4(); if (tag == 0xe01) { /* Nikon Capture Note */ order = 0x4949; fseek (ifp, 22, SEEK_CUR); for (offset=22; offset+22 < len; offset += 22+i) { tag = get4(); fseek (ifp, 14, SEEK_CUR); i = get4()-4; if (tag == 0x76a43207) flip = get2(); else fseek (ifp, i, SEEK_CUR); } } if (tag == 0xe80 && len == 256 && type == 7) { fseek (ifp, 48, SEEK_CUR); cam_mul[0] = get2() * 508 * 1.078 / 0x10000; cam_mul[2] = get2() * 382 * 1.173 / 0x10000; } if (tag == 0xf00 && type == 7) { if (len == 614) fseek (ifp, 176, SEEK_CUR); else if (len == 734 || len == 1502) fseek (ifp, 148, SEEK_CUR); else goto next; goto get2_256; } if ((tag == 0x1011 && len == 9) || tag == 0x20400200) for (i=0; i < 3; i++) FORC3 cmatrix[i][c] = ((short) get2()) / 256.0; if ((tag == 0x1012 || tag == 0x20400600) && len == 4) FORC4 cblack[c ^ c >> 1] = get2(); if (tag == 0x1017 || tag == 0x20400100) cam_mul[0] = get2() / 256.0; if (tag == 0x1018 || tag == 0x20400100) cam_mul[2] = get2() / 256.0; if (tag == 0x2011 && len == 2) { get2_256: order = 0x4d4d; cam_mul[0] = get2() / 256.0; cam_mul[2] = get2() / 256.0; } if ((tag | 0x70) == 0x2070 && type == 4) fseek (ifp, get4()+base, SEEK_SET); if (tag == 0x2010 && type != 7) load_raw = &CLASS olympus_load_raw; if (tag == 0x2020) parse_thumb_note (base, 257, 258); if (tag == 0x2040) parse_makernote (base, 0x2040); if (tag == 0xb028) { fseek (ifp, get4()+base, SEEK_SET); parse_thumb_note (base, 136, 137); } if (tag == 0x4001 && len > 500) { i = len == 582 ? 50 : len == 653 ? 68 : len == 5120 ? 142 : 126; fseek (ifp, i, SEEK_CUR); get2_rggb: FORC4 cam_mul[c ^ (c >> 1)] = get2(); i = len >> 3 == 164 ? 112:22; fseek (ifp, i, SEEK_CUR); FORC4 sraw_mul[c ^ (c >> 1)] = get2(); } if (tag == 0xa021) FORC4 cam_mul[c ^ (c >> 1)] = get4(); if (tag == 0xa028) FORC4 cam_mul[c ^ (c >> 1)] -= get4(); next: fseek (ifp, save, SEEK_SET); } quit: order = sorder; } /* Since the TIFF DateTime string has no timezone information, assume that the camera's clock was set to Universal Time. */ void CLASS get_timestamp (int reversed) { struct tm t; char str[20]; int i; str[19] = 0; if (reversed) for (i=19; i--; ) str[i] = fgetc(ifp); else fread (str, 19, 1, ifp); memset (&t, 0, sizeof t); if (sscanf (str, "%d:%d:%d %d:%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec) != 6) return; t.tm_year -= 1900; t.tm_mon -= 1; t.tm_isdst = -1; if (mktime(&t) > 0) timestamp = mktime(&t); } void CLASS parse_exif (int base) { unsigned kodak, entries, tag, type, len, save, c; double expo; kodak = !strncmp(make,"EASTMAN",7) && tiff_nifds < 3; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { case 33434: shutter = getreal(type); break; case 33437: aperture = getreal(type); break; case 34855: iso_speed = get2(); break; case 36867: case 36868: get_timestamp(0); break; case 37377: if ((expo = -getreal(type)) < 128) shutter = pow (2, expo); break; case 37378: aperture = pow (2, getreal(type)/2); break; case 37386: focal_len = getreal(type); break; case 37500: parse_makernote (base, 0); break; case 40962: if (kodak) raw_width = get4(); break; case 40963: if (kodak) raw_height = get4(); break; case 41730: if (get4() == 0x20002) for (exif_cfa=c=0; c < 8; c+=2) exif_cfa |= fgetc(ifp) * 0x01010101 << c; } fseek (ifp, save, SEEK_SET); } } void CLASS parse_gps (int base) { unsigned entries, tag, type, len, save, c; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { case 1: case 3: case 5: gpsdata[29+tag/2] = getc(ifp); break; case 2: case 4: case 7: FORC(6) gpsdata[tag/3*6+c] = get4(); break; case 6: FORC(2) gpsdata[18+c] = get4(); break; case 18: case 29: fgets ((char *) (gpsdata+14+tag/3), MIN(len,12), ifp); } fseek (ifp, save, SEEK_SET); } } void CLASS romm_coeff (float romm_cam[3][3]) { static const float rgb_romm[3][3] = /* ROMM == Kodak ProPhoto */ { { 2.034193, -0.727420, -0.306766 }, { -0.228811, 1.231729, -0.002922 }, { -0.008565, -0.153273, 1.161839 } }; int i, j, k; for (i=0; i < 3; i++) for (j=0; j < 3; j++) for (cmatrix[i][j] = k=0; k < 3; k++) cmatrix[i][j] += rgb_romm[i][k] * romm_cam[k][j]; } void CLASS parse_mos (int offset) { char data[40]; int skip, from, i, c, neut[4], planes=0, frot=0; static const char *mod[] = { "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22", "Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65", "Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7", "","","","","","","","","","","","","","","","","","AFi-II 12" }; float romm_cam[3][3]; fseek (ifp, offset, SEEK_SET); while (1) { if (get4() != 0x504b5453) break; get4(); fread (data, 1, 40, ifp); skip = get4(); from = ftell(ifp); if (!strcmp(data,"JPEG_preview_data")) { thumb_offset = from; thumb_length = skip; } if (!strcmp(data,"icc_camera_profile")) { profile_offset = from; profile_length = skip; } if (!strcmp(data,"ShootObj_back_type")) { fscanf (ifp, "%d", &i); if ((unsigned) i < sizeof mod / sizeof (*mod)) strcpy (model, mod[i]); } if (!strcmp(data,"icc_camera_to_tone_matrix")) { for (i=0; i < 9; i++) romm_cam[0][i] = int_to_float(get4()); romm_coeff (romm_cam); } if (!strcmp(data,"CaptProf_color_matrix")) { for (i=0; i < 9; i++) fscanf (ifp, "%f", &romm_cam[0][i]); romm_coeff (romm_cam); } if (!strcmp(data,"CaptProf_number_of_planes")) fscanf (ifp, "%d", &planes); if (!strcmp(data,"CaptProf_raw_data_rotation")) fscanf (ifp, "%d", &flip); if (!strcmp(data,"CaptProf_mosaic_pattern")) FORC4 { fscanf (ifp, "%d", &i); if (i == 1) frot = c ^ (c >> 1); } if (!strcmp(data,"ImgProf_rotation_angle")) { fscanf (ifp, "%d", &i); flip = i - flip; } if (!strcmp(data,"NeutObj_neutrals") && !cam_mul[0]) { FORC4 fscanf (ifp, "%d", neut+c); FORC3 cam_mul[c] = (float) neut[0] / neut[c+1]; } if (!strcmp(data,"Rows_data")) load_flags = get4(); parse_mos (from); fseek (ifp, skip+from, SEEK_SET); } if (planes) filters = (planes == 1) * 0x01010101 * (uchar) "\x94\x61\x16\x49"[(flip/90 + frot) & 3]; } void CLASS linear_table (unsigned len) { int i; if (len > 0x1000) len = 0x1000; read_shorts (curve, len); for (i=len; i < 0x1000; i++) curve[i] = curve[i-1]; maximum = curve[0xfff]; } void CLASS parse_kodak_ifd (int base) { unsigned entries, tag, type, len, save; int i, c, wbi=-2, wbtemp=6500; float mul[3]={1,1,1}, num; static const unsigned wbtag[] = { 64037,64040,64039,64041,static_cast(-1),static_cast(-1),64042 }; entries = get2(); if (entries > 1024) return; while (entries--) { tiff_get (base, &tag, &type, &len, &save); if (tag == 1020) wbi = getint(type); if (tag == 1021 && len == 72) { /* WB set in software */ fseek (ifp, 40, SEEK_CUR); FORC3 cam_mul[c] = 2048.0 / get2(); wbi = -2; } if (tag == 2118) wbtemp = getint(type); if (tag == (unsigned)(2130 + wbi)) FORC3 mul[c] = getreal(type); if (tag == (unsigned)(2140 + wbi) && wbi >= 0) FORC3 { for (num=i=0; i < 4; i++) num += getreal(type) * pow (wbtemp/100.0, i); cam_mul[c] = 2048 / (num * mul[c]); } if (tag == 2317) linear_table (len); if (tag == 6020) iso_speed = getint(type); if (tag == 64013) wbi = fgetc(ifp); if ((unsigned) wbi < 7 && tag == wbtag[wbi]) FORC3 cam_mul[c] = get4(); if (tag == 64019) width = getint(type); if (tag == 64020) height = (getint(type)+1) & -2; fseek (ifp, save, SEEK_SET); } } //void CLASS parse_minolta (int base); //int CLASS parse_tiff (int base); int CLASS parse_tiff_ifd (int base) { unsigned entries, tag, type, len, plen=16, save; int ifd, use_cm=0, cfa, i, j, c, ima_len=0; int blrr=1, blrc=1, dblack[] = { 0,0,0,0 }; char software[64], *cbuf, *cp; uchar cfa_pat[16], cfa_pc[] = { 0,1,2,3 }, tab[256]; double cc[4][4], cm[4][3], cam_xyz[4][3], num; double ab[]={ 1,1,1,1 }, asn[] = { 0,0,0,0 }, xyz[] = { 1,1,1 }; int sony_curve[] = { 0,0,0,0,0,4095 }; unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; struct jhead jh; FILE *sfp; if (tiff_nifds >= (int) sizeof tiff_ifd / (int) sizeof tiff_ifd[0]) return 1; ifd = tiff_nifds++; for (j=0; j < 4; j++) for (i=0; i < 4; i++) cc[j][i] = i == j; entries = get2(); if (entries > 512) return 1; while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { case 5: width = get2(); break; case 6: height = get2(); break; case 7: width += get2(); break; case 9: filters = get2(); break; case 17: case 18: if (type == 3 && len == 1) cam_mul[(tag-17)*2] = get2() / 256.0; break; case 23: if (type == 3) iso_speed = get2(); break; case 36: case 37: case 38: cam_mul[tag-0x24] = get2(); break; case 39: if (len < 50 || cam_mul[0]) break; fseek (ifp, 12, SEEK_CUR); FORC3 cam_mul[c] = get2(); break; case 46: if (type != 7 || fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) break; thumb_offset = ftell(ifp) - 2; thumb_length = len; break; case 61440: /* Fuji HS10 table */ parse_tiff_ifd (base); break; case 2: case 256: case 61441: /* ImageWidth */ tiff_ifd[ifd].width = getint(type); break; case 3: case 257: case 61442: /* ImageHeight */ tiff_ifd[ifd].height = getint(type); break; case 258: /* BitsPerSample */ case 61443: tiff_ifd[ifd].samples = len & 7; tiff_ifd[ifd].bps = getint(type); break; case 61446: raw_height = 0; load_raw = &CLASS packed_load_raw; load_flags = get4() && (filters=0x16161616) ? 24:80; break; case 259: /* Compression */ tiff_ifd[ifd].comp = getint(type); break; case 262: /* PhotometricInterpretation */ tiff_ifd[ifd].phint = get2(); break; case 270: /* ImageDescription */ fread (desc, 512, 1, ifp); break; case 271: /* Make */ fgets (make, 64, ifp); break; case 272: /* Model */ fgets (model, 64, ifp); break; case 280: /* Panasonic RW2 offset */ if (type != 4) break; load_raw = &CLASS panasonic_load_raw; load_flags = 0x2008; case 273: /* StripOffset */ case 513: /* JpegIFOffset */ case 61447: tiff_ifd[ifd].offset = get4()+base; if (!tiff_ifd[ifd].bps && tiff_ifd[ifd].offset > 0) { fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET); if (ljpeg_start (&jh, 1)) { tiff_ifd[ifd].comp = 6; tiff_ifd[ifd].width = jh.wide; tiff_ifd[ifd].height = jh.high; tiff_ifd[ifd].bps = jh.bits; tiff_ifd[ifd].samples = jh.clrs; if (!(jh.sraw || (jh.clrs & 1))) tiff_ifd[ifd].width *= jh.clrs; i = order; parse_tiff (tiff_ifd[ifd].offset + 12); order = i; } } break; case 274: /* Orientation */ tiff_ifd[ifd].flip = "50132467"[get2() & 7]-'0'; break; case 277: /* SamplesPerPixel */ tiff_ifd[ifd].samples = getint(type) & 7; break; case 279: /* StripByteCounts */ case 514: case 61448: tiff_ifd[ifd].bytes = get4(); break; case 61454: FORC3 cam_mul[(4-c) % 3] = getint(type); break; case 305: case 11: /* Software */ fgets (software, 64, ifp); if (!strncmp(software,"Adobe",5) || !strncmp(software,"dcraw",5) || !strncmp(software,"UFRaw",5) || !strncmp(software,"Bibble",6) || !strncmp(software,"Nikon Scan",10) || !strcmp (software,"Digital Photo Professional")) is_raw = 0; break; case 306: /* DateTime */ get_timestamp(0); break; case 315: /* Artist */ fread (artist, 64, 1, ifp); break; case 322: /* TileWidth */ tiff_ifd[ifd].tile_width = getint(type); break; case 323: /* TileLength */ tiff_ifd[ifd].tile_length = getint(type); break; case 324: /* TileOffsets */ tiff_ifd[ifd].offset = len > 1 ? ftell(ifp) : get4(); if (len == 4) { load_raw = &CLASS sinar_4shot_load_raw; is_raw = 5; } break; case 330: /* SubIFDs */ if (!strcmp(model,"DSLR-A100") && tiff_ifd[ifd].width == 3872) { load_raw = &CLASS sony_arw_load_raw; data_offset = get4()+base; ifd++; break; } while (len--) { i = ftell(ifp); fseek (ifp, get4()+base, SEEK_SET); if (parse_tiff_ifd (base)) break; fseek (ifp, i+4, SEEK_SET); } break; case 400: strcpy (make, "Sarnoff"); maximum = 0xfff; break; case 28688: FORC4 sony_curve[c+1] = get2() >> 2 & 0xfff; for (i=0; i < 5; i++) for (j = sony_curve[i]+1; j <= sony_curve[i+1]; j++) curve[j] = curve[j-1] + (1 << i); break; case 29184: sony_offset = get4(); break; case 29185: sony_length = get4(); break; case 29217: sony_key = get4(); break; case 29264: parse_minolta (ftell(ifp)); raw_width = 0; break; case 29443: FORC4 cam_mul[c ^ (c < 2)] = get2(); break; case 29459: FORC4 cam_mul[c] = get2(); i = (cam_mul[1] == 1024 && cam_mul[2] == 1024) << 1; SWAP (cam_mul[i],cam_mul[i+1]) break; case 33405: /* Model2 */ fgets (model2, 64, ifp); break; case 33422: /* CFAPattern */ case 64777: /* Kodak P-series */ if ((plen=len) > 16) plen = 16; fread (cfa_pat, 1, plen, ifp); for (colors=cfa=i=0; i < (int) plen; i++) { colors += !(cfa & (1 << cfa_pat[i])); cfa |= 1 << cfa_pat[i]; } if (cfa == 070) memcpy (cfa_pc,"\003\004\005",3); /* CMY */ if (cfa == 072) memcpy (cfa_pc,"\005\003\004\001",4); /* GMCY */ goto guess_cfa_pc; case 33424: case 65024: fseek (ifp, get4()+base, SEEK_SET); parse_kodak_ifd (base); break; case 33434: /* ExposureTime */ shutter = getreal(type); break; case 33437: /* FNumber */ aperture = getreal(type); break; case 34306: /* Leaf white balance */ FORC4 cam_mul[c ^ 1] = 4096.0 / get2(); break; case 34307: /* Leaf CatchLight color matrix */ fread (software, 1, 7, ifp); if (strncmp(software,"MATRIX",6)) break; colors = 4; for (raw_color = i=0; i < 3; i++) { FORC4 fscanf (ifp, "%f", &rgb_cam[i][c^1]); if (!use_camera_wb) continue; num = 0; FORC4 num += rgb_cam[i][c]; FORC4 rgb_cam[i][c] /= num; } break; case 34310: /* Leaf metadata */ parse_mos (ftell(ifp)); case 34303: strcpy (make, "Leaf"); break; case 34665: /* EXIF tag */ fseek (ifp, get4()+base, SEEK_SET); parse_exif (base); break; case 34853: /* GPSInfo tag */ fseek (ifp, get4()+base, SEEK_SET); parse_gps (base); break; case 34675: /* InterColorProfile */ case 50831: /* AsShotICCProfile */ profile_offset = ftell(ifp); profile_length = len; break; case 37122: /* CompressedBitsPerPixel */ kodak_cbpp = get4(); break; case 37386: /* FocalLength */ focal_len = getreal(type); break; case 37393: /* ImageNumber */ shot_order = getint(type); break; case 37400: /* old Kodak KDC tag */ for (raw_color = i=0; i < 3; i++) { getreal(type); FORC3 rgb_cam[i][c] = getreal(type); } break; case 46275: /* Imacon tags */ strcpy (make, "Imacon"); data_offset = ftell(ifp); ima_len = len; break; case 46279: if (!ima_len) break; fseek (ifp, 38, SEEK_CUR); case 46274: fseek (ifp, 40, SEEK_CUR); raw_width = get4(); raw_height = get4(); left_margin = get4() & 7; width = raw_width - left_margin - (get4() & 7); top_margin = get4() & 7; height = raw_height - top_margin - (get4() & 7); if (raw_width == 7262) { height = 5444; width = 7244; left_margin = 7; } fseek (ifp, 52, SEEK_CUR); FORC3 cam_mul[c] = getreal(11); fseek (ifp, 114, SEEK_CUR); flip = (get2() >> 7) * 90; if (width * height * 6 == ima_len) { if (flip % 180 == 90) SWAP(width,height); raw_width = width; raw_height = height; left_margin = top_margin = filters = flip = 0; } sprintf (model, "Ixpress %d-Mp", height*width/1000000); load_raw = &CLASS imacon_full_load_raw; if (filters) { if (left_margin & 1) filters = 0x61616161; load_raw = &CLASS unpacked_load_raw; } maximum = 0xffff; break; case 50454: /* Sinar tag */ case 50455: if (!(cbuf = (char *) malloc(len))) break; fread (cbuf, 1, len, ifp); for (cp = cbuf-1; cp && cp < cbuf+len; cp = strchr(cp,'\n')) if (!strncmp (++cp,"Neutral ",8)) sscanf (cp+8, "%f %f %f", cam_mul, cam_mul+1, cam_mul+2); free (cbuf); break; case 50458: if (!make[0]) strcpy (make, "Hasselblad"); break; case 50459: /* Hasselblad tag */ i = order; j = ftell(ifp); c = tiff_nifds; order = get2(); fseek (ifp, j+(get2(),get4()), SEEK_SET); parse_tiff_ifd (j); maximum = 0xffff; tiff_nifds = c; order = i; break; case 50706: /* DNGVersion */ FORC4 dng_version = (dng_version << 8) + fgetc(ifp); if (!make[0]) strcpy (make, "DNG"); is_raw = 1; break; case 50710: /* CFAPlaneColor */ if (len > 4) len = 4; colors = len; fread (cfa_pc, 1, colors, ifp); guess_cfa_pc: FORCC tab[cfa_pc[c]] = c; cdesc[c] = 0; for (i=16; i--; ) filters = filters << 2 | tab[cfa_pat[i % plen]]; break; case 50711: /* CFALayout */ if (get2() == 2) { fuji_width = 1; filters = 0x49494949; } break; case 291: case 50712: /* LinearizationTable */ linear_table (len); break; case 50713: /* BlackLevelRepeatDim */ blrr = get2(); blrc = get2(); break; case 61450: blrr = blrc = 2; case 50714: /* BlackLevel */ black = getreal(type); if (!filters || !~filters) break; dblack[0] = black; dblack[1] = (blrc == 2) ? getreal(type):dblack[0]; dblack[2] = (blrr == 2) ? getreal(type):dblack[0]; dblack[3] = (blrc == 2 && blrr == 2) ? getreal(type):dblack[1]; if (colors == 3) filters |= ((filters >> 2 & 0x22222222) | (filters << 2 & 0x88888888)) & filters << 1; FORC4 cblack[filters >> (c << 1) & 3] = dblack[c]; black = 0; break; case 50715: /* BlackLevelDeltaH */ case 50716: /* BlackLevelDeltaV */ for (num=i=0; i < (int) len; i++) num += getreal(type); black += num/len + 0.5; break; case 50717: /* WhiteLevel */ maximum = getint(type); break; case 50718: /* DefaultScale */ pixel_aspect = getreal(type); pixel_aspect /= getreal(type); break; case 50721: /* ColorMatrix1 */ if (use_cm) break; /* Prioritize Matrix2 over Matrix1 (UF) */ case 50722: /* ColorMatrix2 */ FORCC for (j=0; j < 3; j++) cm[c][j] = getreal(type); use_cm = 1; break; case 50723: /* CameraCalibration1 */ case 50724: /* CameraCalibration2 */ for (i=0; i < colors; i++) FORCC cc[i][c] = getreal(type); break; case 50727: /* AnalogBalance */ FORCC ab[c] = getreal(type); break; case 50728: /* AsShotNeutral */ FORCC asn[c] = getreal(type); break; case 50729: /* AsShotWhiteXY */ xyz[0] = getreal(type); xyz[1] = getreal(type); xyz[2] = 1 - xyz[0] - xyz[1]; FORC3 xyz[c] /= d65_white[c]; break; case 50740: /* DNGPrivateData */ if (dng_version) break; parse_minolta (j = get4()+base); fseek (ifp, j, SEEK_SET); parse_tiff_ifd (base); break; case 50752: read_shorts (cr2_slice, 3); break; case 50829: /* ActiveArea */ top_margin = getint(type); left_margin = getint(type); height = getint(type) - top_margin; width = getint(type) - left_margin; break; case 50830: /* MaskedAreas */ for (i=0; i < (int) len && i < 32; i++) mask[0][i] = getint(type); black = 0; break; case 51009: /* OpcodeList2 */ meta_offset = ftell(ifp); break; case 64772: /* Kodak P-series */ if (len < 13) break; fseek (ifp, 16, SEEK_CUR); data_offset = get4(); fseek (ifp, 28, SEEK_CUR); data_offset += get4(); load_raw = &CLASS packed_load_raw; break; case 65026: if (type == 2) fgets (model2, 64, ifp); } fseek (ifp, save, SEEK_SET); } if (sony_length && (buf = (unsigned *) malloc(sony_length))) { fseek (ifp, sony_offset, SEEK_SET); fread (buf, sony_length, 1, ifp); sony_decrypt (buf, sony_length/4, 1, sony_key); sfp = ifp; if ((ifp = tmpfile())) { fwrite (buf, sony_length, 1, ifp); fseek (ifp, 0, SEEK_SET); parse_tiff_ifd (-sony_offset); fclose (ifp); } ifp = sfp; free (buf); } for (i=0; i < colors; i++) FORCC cc[i][c] *= ab[i]; if (use_cm) { FORCC for (i=0; i < 3; i++) for (cam_xyz[c][i]=j=0; j < colors; j++) cam_xyz[c][i] += cc[c][j] * cm[j][i] * xyz[i]; cam_xyz_coeff (cam_xyz); } if (asn[0]) { cam_mul[3] = 0; FORCC cam_mul[c] = 1 / asn[c]; } if (!use_cm) FORCC pre_mul[c] /= cc[c][c]; return 0; } int CLASS parse_tiff (int base) { int doff; fseek (ifp, base, SEEK_SET); order = get2(); if (order != 0x4949 && order != 0x4d4d) return 0; get2(); while ((doff = get4())) { fseek (ifp, doff+base, SEEK_SET); if (parse_tiff_ifd (base)) break; } return 1; } void CLASS apply_tiff() { int max_samp=0, raw=-1, thm=-1, i; struct jhead jh; thumb_misc = 16; if (thumb_offset) { fseek (ifp, thumb_offset, SEEK_SET); if (ljpeg_start (&jh, 1)) { thumb_misc = jh.bits; thumb_width = jh.wide; thumb_height = jh.high; } } for (i=0; i < (int) tiff_nifds; i++) { if (max_samp < tiff_ifd[i].samples) max_samp = tiff_ifd[i].samples; if (max_samp > 3) max_samp = 3; if ((tiff_ifd[i].comp != 6 || tiff_ifd[i].samples != 3) && (tiff_ifd[i].width | tiff_ifd[i].height) < 0x10000 && tiff_ifd[i].width*tiff_ifd[i].height > raw_width*raw_height) { raw_width = tiff_ifd[i].width; raw_height = tiff_ifd[i].height; tiff_bps = tiff_ifd[i].bps; tiff_compress = tiff_ifd[i].comp; data_offset = tiff_ifd[i].offset; tiff_flip = tiff_ifd[i].flip; tiff_samples = tiff_ifd[i].samples; tile_width = tiff_ifd[i].tile_width; tile_length = tiff_ifd[i].tile_length; raw = i; } } if (!tile_width ) tile_width = INT_MAX; if (!tile_length) tile_length = INT_MAX; for (i=tiff_nifds; i--; ) if (tiff_ifd[i].flip) tiff_flip = tiff_ifd[i].flip; if (raw >= 0 && !load_raw) switch (tiff_compress) { case 32767: if (tiff_ifd[raw].bytes == raw_width*raw_height) { tiff_bps = 12; load_raw = &CLASS sony_arw2_load_raw; break; } if (tiff_ifd[raw].bytes*8 != (int)(raw_width*raw_height*tiff_bps)) { raw_height += 8; load_raw = &CLASS sony_arw_load_raw; break; } load_flags = 79; case 32769: load_flags++; case 32770: case 32773: goto slr; case 0: case 1: if (tiff_ifd[raw].bytes*5 == raw_width*raw_height*8) { load_flags = 81; tiff_bps = 12; } slr: switch (tiff_bps) { case 8: load_raw = &CLASS eight_bit_load_raw; break; case 12: if (tiff_ifd[raw].phint == 2) load_flags = 6; load_raw = &CLASS packed_load_raw; break; case 14: load_flags = 0; case 16: load_raw = &CLASS unpacked_load_raw; break; } break; case 6: case 7: case 99: load_raw = &CLASS lossless_jpeg_load_raw; break; case 262: load_raw = &CLASS kodak_262_load_raw; break; case 34713: if ((raw_width+9)/10*16*raw_height == tiff_ifd[raw].bytes) { load_raw = &CLASS packed_load_raw; load_flags = 1; } else if (raw_width*raw_height*2 == tiff_ifd[raw].bytes) { load_raw = &CLASS unpacked_load_raw; load_flags = 4; order = 0x4d4d; } else load_raw = &CLASS nikon_load_raw; break; case 34892: load_raw = &CLASS lossy_dng_load_raw; break; case 65535: load_raw = &CLASS pentax_load_raw; break; case 65000: switch (tiff_ifd[raw].phint) { case 2: load_raw = &CLASS kodak_rgb_load_raw; filters = 0; break; case 6: load_raw = &CLASS kodak_ycbcr_load_raw; filters = 0; break; case 32803: load_raw = &CLASS kodak_65000_load_raw; } case 32867: break; default: is_raw = 0; } if (!dng_version) if ( (tiff_samples == 3 && tiff_ifd[raw].bytes && tiff_bps != 14 && tiff_bps != 2048 && tiff_compress != 32769 && tiff_compress != 32770) || (tiff_bps == 8 && !strstr(make,"KODAK") && !strstr(make,"Kodak") && !strstr(model2,"DEBUG RAW"))) is_raw = 0; for (i=0; i < (int) tiff_nifds; i++) if (i != raw && tiff_ifd[i].samples == max_samp && tiff_ifd[i].width * tiff_ifd[i].height / SQR(tiff_ifd[i].bps+1) > (int)(thumb_width * thumb_height / SQR(thumb_misc+1)) && tiff_ifd[i].comp != 34892) { thumb_width = tiff_ifd[i].width; thumb_height = tiff_ifd[i].height; thumb_offset = tiff_ifd[i].offset; thumb_length = tiff_ifd[i].bytes; thumb_misc = tiff_ifd[i].bps; thm = i; } if (thm >= 0) { thumb_misc |= tiff_ifd[thm].samples << 5; switch (tiff_ifd[thm].comp) { case 0: write_thumb = &CLASS layer_thumb; break; case 1: if (tiff_ifd[thm].bps <= 8) write_thumb = &CLASS ppm_thumb; else if (!strcmp(make,"Imacon")) write_thumb = &CLASS ppm16_thumb; else thumb_load_raw = &CLASS kodak_thumb_load_raw; break; case 65000: thumb_load_raw = tiff_ifd[thm].phint == 6 ? &CLASS kodak_ycbcr_load_raw : &CLASS kodak_rgb_load_raw; } } } void CLASS parse_minolta (int base) { int save, tag, len, offset, high=0, wide=0, i, c; short sorder=order; fseek (ifp, base, SEEK_SET); if (fgetc(ifp) || fgetc(ifp)-'M' || fgetc(ifp)-'R') return; order = fgetc(ifp) * 0x101; offset = base + get4() + 8; while ((save=ftell(ifp)) < offset) { for (tag=i=0; i < 4; i++) tag = tag << 8 | fgetc(ifp); len = get4(); switch (tag) { case 0x505244: /* PRD */ fseek (ifp, 8, SEEK_CUR); high = get2(); wide = get2(); break; case 0x574247: /* WBG */ get4(); i = strcmp(model,"DiMAGE A200") ? 0:3; FORC4 cam_mul[c ^ (c >> 1) ^ i] = get2(); break; case 0x545457: /* TTW */ parse_tiff (ftell(ifp)); data_offset = offset; } fseek (ifp, save+len+8, SEEK_SET); } raw_height = high; raw_width = wide; order = sorder; } /* Many cameras have a "debug mode" that writes JPEG and raw at the same time. The raw file has no header, so try to to open the matching JPEG file and read its metadata. */ void CLASS parse_external_jpeg() { const char *file, *ext; char *jname, *jfile, *jext; FILE *save=ifp; ext = strrchr (ifname, '.'); file = strrchr (ifname, '/'); if (!file) file = strrchr (ifname, '\\'); if (!file) file = ifname-1; file++; if (!ext || strlen(ext) != 4 || ext-file != 8) return; jname = (char *) malloc (strlen(ifname) + 1); merror (jname, "parse_external_jpeg()"); strcpy (jname, ifname); jfile = file - ifname + jname; jext = ext - ifname + jname; if (strcasecmp (ext, ".jpg")) { strcpy (jext, isupper(ext[1]) ? ".JPG":".jpg"); if (isdigit(*file)) { memcpy (jfile, file+4, 4); memcpy (jfile+4, file, 4); } } else while (isdigit(*--jext)) { if (*jext != '9') { (*jext)++; break; } *jext = '0'; } if (strcmp (jname, ifname)) { if ((ifp = fopen (jname, "rb"))) { dcraw_message (DCRAW_VERBOSE,_("Reading metadata from %s ...\n"), jname); parse_tiff (12); thumb_offset = 0; is_raw = 1; fclose (ifp); } } if (!timestamp) dcraw_message (DCRAW_WARNING,_("Failed to read metadata from %s\n"), jname); free (jname); ifp = save; } /* CIFF block 0x1030 contains an 8x8 white sample. Load this into white[][] for use in scale_colors(). */ void CLASS ciff_block_1030() { static const ushort key[] = { 0x410, 0x45f3 }; int i, bpp, row, col, vbits=0; unsigned long bitbuf=0; if ((get2(),get4()) != 0x80008 || !get4()) return; bpp = get2(); if (bpp != 10 && bpp != 12) return; for (i=row=0; row < 8; row++) for (col=0; col < 8; col++) { if (vbits < bpp) { bitbuf = bitbuf << 16 | (get2() ^ key[i++ & 1]); vbits += 16; } white[row][col] = bitbuf << (LONG_BIT - vbits) >> (LONG_BIT - bpp); vbits -= bpp; } } /* Parse a CIFF file, better known as Canon CRW format. */ void CLASS parse_ciff (int offset, int length) { int tboff, nrecs, c, type, len, save, wbi=-1; ushort key[] = { 0x410, 0x45f3 }; fseek (ifp, offset+length-4, SEEK_SET); tboff = get4() + offset; fseek (ifp, tboff, SEEK_SET); nrecs = get2(); if (nrecs > 100) return; while (nrecs--) { type = get2(); len = get4(); save = ftell(ifp) + 4; fseek (ifp, offset+get4(), SEEK_SET); if ((((type >> 8) + 8) | 8) == 0x38) parse_ciff (ftell(ifp), len); /* Parse a sub-table */ if (type == 0x0810) fread (artist, 64, 1, ifp); if (type == 0x080a) { fread (make, 64, 1, ifp); fseek (ifp, strlen(make) - 63, SEEK_CUR); fread (model, 64, 1, ifp); } if (type == 0x1810) { fseek (ifp, 12, SEEK_CUR); flip = get4(); } if (type == 0x1835) /* Get the decoder table */ tiff_compress = get4(); if (type == 0x2007) { thumb_offset = ftell(ifp); thumb_length = len; } if (type == 0x1818) { shutter = pow (2, -int_to_float((get4(),get4()))); aperture = pow (2, int_to_float(get4())/2); } if (type == 0x102a) { iso_speed = pow (2, (get4(),get2())/32.0 - 4) * 50; aperture = pow (2, (get2(),(short)get2())/64.0); shutter = pow (2,-((short)get2())/32.0); wbi = (get2(),get2()); if (wbi > 17) wbi = 0; fseek (ifp, 32, SEEK_CUR); if (shutter > 1e6) shutter = get2()/10.0; } if (type == 0x102c) { if (get2() > 512) { /* Pro90, G1 */ fseek (ifp, 118, SEEK_CUR); FORC4 cam_mul[c ^ 2] = get2(); } else { /* G2, S30, S40 */ fseek (ifp, 98, SEEK_CUR); FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get2(); } } if (type == 0x0032) { if (len == 768) { /* EOS D30 */ fseek (ifp, 72, SEEK_CUR); FORC4 cam_mul[c ^ (c >> 1)] = 1024.0 / get2(); if (!wbi) cam_mul[0] = -1; /* use my auto white balance */ } else if (!cam_mul[0]) { if (get2() == key[0]) /* Pro1, G6, S60, S70 */ c = (strstr(model,"Pro1") ? "012346000000000000":"01345:000000006008")[wbi]-'0'+ 2; else { /* G3, G5, S45, S50 */ c = "023457000000006000"[wbi]-'0'; key[0] = key[1] = 0; } fseek (ifp, 78 + c*8, SEEK_CUR); FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get2() ^ key[c & 1]; if (!wbi) cam_mul[0] = -1; } } if (type == 0x10a9) { /* D60, 10D, 300D, and clones */ if (len > 66) wbi = "0134567028"[wbi]-'0'; fseek (ifp, 2 + wbi*8, SEEK_CUR); FORC4 cam_mul[c ^ (c >> 1)] = get2(); } if (type == 0x1030 && (0x18040 >> wbi & 1)) ciff_block_1030(); /* all that don't have 0x10a9 */ if (type == 0x1031) { raw_width = (get2(),get2()); raw_height = get2(); } if (type == 0x5029) { focal_len = len >> 16; if ((len & 0xffff) == 2) focal_len /= 32; } if (type == 0x5813) flash_used = int_to_float(len); if (type == 0x5814) canon_ev = int_to_float(len); if (type == 0x5817) shot_order = len; if (type == 0x5834) unique_id = len; if (type == 0x580e) timestamp = len; if (type == 0x180e) timestamp = get4(); #ifdef LOCALTIME if ((type | 0x4000) == 0x580e) timestamp = mktime (gmtime (×tamp)); #endif fseek (ifp, save, SEEK_SET); } } void CLASS parse_rollei() { char line[128], *val; struct tm t; fseek (ifp, 0, SEEK_SET); memset (&t, 0, sizeof t); do { fgets (line, 128, ifp); if ((val = strchr(line,'='))) *val++ = 0; else val = line + strlen(line); if (!strcmp(line,"DAT")) sscanf (val, "%d.%d.%d", &t.tm_mday, &t.tm_mon, &t.tm_year); if (!strcmp(line,"TIM")) sscanf (val, "%d:%d:%d", &t.tm_hour, &t.tm_min, &t.tm_sec); if (!strcmp(line,"HDR")) thumb_offset = atoi(val); if (!strcmp(line,"X ")) raw_width = atoi(val); if (!strcmp(line,"Y ")) raw_height = atoi(val); if (!strcmp(line,"TX ")) thumb_width = atoi(val); if (!strcmp(line,"TY ")) thumb_height = atoi(val); } while (strncmp(line,"EOHD",4)); data_offset = thumb_offset + thumb_width * thumb_height * 2; t.tm_year -= 1900; t.tm_mon -= 1; if (mktime(&t) > 0) timestamp = mktime(&t); strcpy (make, "Rollei"); strcpy (model,"d530flex"); write_thumb = &CLASS rollei_thumb; } void CLASS parse_sinar_ia() { int entries, off; char str[8], *cp; order = 0x4949; fseek (ifp, 4, SEEK_SET); entries = get4(); fseek (ifp, get4(), SEEK_SET); while (entries--) { off = get4(); get4(); fread (str, 8, 1, ifp); if (!strcmp(str,"META")) meta_offset = off; if (!strcmp(str,"THUMB")) thumb_offset = off; if (!strcmp(str,"RAW0")) data_offset = off; } fseek (ifp, meta_offset+20, SEEK_SET); fread (make, 64, 1, ifp); make[63] = 0; if ((cp = strchr(make,' '))) { strcpy (model, cp+1); *cp = 0; } raw_width = get2(); raw_height = get2(); load_raw = &CLASS unpacked_load_raw; thumb_width = (get4(),get2()); thumb_height = get2(); write_thumb = &CLASS ppm_thumb; maximum = 0x3fff; } void CLASS parse_phase_one (int base) { unsigned entries, tag, len, data, save, i, j, c; float romm_cam[3][3]; char *cp; memset (&ph1, 0, sizeof ph1); fseek (ifp, base, SEEK_SET); order = get4() & 0xffff; if (get4() >> 8 != 0x526177) return; /* "Raw" */ fseek (ifp, get4()+base, SEEK_SET); entries = get4(); get4(); while (entries--) { tag = get4(); fseek (ifp, 4, SEEK_CUR); len = get4(); data = get4(); save = ftell(ifp); fseek (ifp, base+data, SEEK_SET); switch (tag) { case 0x100: flip = "0653"[data & 3]-'0'; break; case 0x106: for (i=0; i < 3; i++) for (j=0; j < 3; j++) romm_cam[i][j] = getreal(11); romm_coeff (romm_cam); break; case 0x107: FORC3 cam_mul[c] = getreal(11); break; case 0x108: raw_width = data; break; case 0x109: raw_height = data; break; case 0x10a: left_margin = data; break; case 0x10b: top_margin = data; break; case 0x10c: width = data; break; case 0x10d: height = data; break; case 0x10e: ph1.format = data; break; case 0x10f: data_offset = data+base; break; case 0x110: meta_offset = data+base; meta_length = len; break; case 0x112: ph1.key_off = save - 4; break; case 0x210: ph1.tag_210 = int_to_float(data); break; case 0x21a: ph1.tag_21a = data; break; case 0x21c: strip_offset = data+base; break; case 0x21d: ph1.black = data; break; case 0x222: ph1.split_col = data; break; case 0x223: ph1.black_off = data+base; break; case 0x301: model[63] = 0; fread (model, 1, 63, ifp); if ((cp = strstr(model," camera"))) *cp = 0; } fseek (ifp, save, SEEK_SET); } load_raw = ph1.format < 3 ? &CLASS phase_one_load_raw : &CLASS phase_one_load_raw_c; maximum = 0xffff; strcpy (make, "Phase One"); if (model[0]) return; switch (raw_height) { case 2060: strcpy (model,"LightPhase"); break; case 2682: strcpy (model,"H 10"); break; case 4128: strcpy (model,"H 20"); break; case 5488: strcpy (model,"H 25"); break; } } void CLASS parse_fuji (int offset) { unsigned entries, tag, len, save, c; fseek (ifp, offset, SEEK_SET); entries = get4(); if (entries > 255) return; while (entries--) { tag = get2(); len = get2(); save = ftell(ifp); if (tag == 0x100) { raw_height = get2(); raw_width = get2(); } else if (tag == 0x121) { height = get2(); if ((width = get2()) == 4284) width += 3; } else if (tag == 0x130) { fuji_layout = fgetc(ifp) >> 7; fuji_width = !(fgetc(ifp) & 8); } else if (tag == 0x2ff0) { FORC4 cam_mul[c ^ 1] = get2(); } else if (tag == 0xc000) { c = order; order = 0x4949; if ((width = get4()) > 10000) width = get4(); height = get4(); order = c; } fseek (ifp, save+len, SEEK_SET); } height <<= fuji_layout; width >>= fuji_layout; } int CLASS parse_jpeg (int offset) { int len, save, hlen, mark; fseek (ifp, offset, SEEK_SET); if (fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) return 0; while (fgetc(ifp) == 0xff && (mark = fgetc(ifp)) != 0xda) { order = 0x4d4d; len = get2() - 2; save = ftell(ifp); if (mark == 0xc0 || mark == 0xc3) { fgetc(ifp); raw_height = get2(); raw_width = get2(); } order = get2(); hlen = get4(); if (get4() == 0x48454150) /* "HEAP" */ parse_ciff (save+hlen, len-hlen); if (parse_tiff (save+6)) apply_tiff(); fseek (ifp, save+len, SEEK_SET); } return 1; } void CLASS parse_riff() { unsigned i, size, end; char tag[4], date[64], month[64]; static const char mon[12][4] = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; struct tm t; order = 0x4949; fread (tag, 4, 1, ifp); size = get4(); end = ftell(ifp) + size; if (!memcmp(tag,"RIFF",4) || !memcmp(tag,"LIST",4)) { get4(); while ((unsigned)(ftell(ifp)+7) < end) parse_riff(); } else if (!memcmp(tag,"nctg",4)) { while ((unsigned)(ftell(ifp)+7) < end) { i = get2(); size = get2(); if ((i+1) >> 1 == 10 && size == 20) get_timestamp(0); else fseek (ifp, size, SEEK_CUR); } } else if (!memcmp(tag,"IDIT",4) && size < 64) { fread (date, 64, 1, ifp); date[size] = 0; memset (&t, 0, sizeof t); if (sscanf (date, "%*s %s %d %d:%d:%d %d", month, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec, &t.tm_year) == 6) { for (i=0; i < 12 && strcasecmp(mon[i],month); i++); t.tm_mon = i; t.tm_year -= 1900; if (mktime(&t) > 0) timestamp = mktime(&t); } } else fseek (ifp, size, SEEK_CUR); } void CLASS parse_smal (int offset, unsigned fsize) { int ver; fseek (ifp, offset+2, SEEK_SET); order = 0x4949; ver = fgetc(ifp); if (ver == 6) fseek (ifp, 5, SEEK_CUR); if (get4() != fsize) return; if (ver > 6) data_offset = get4(); raw_height = height = get2(); raw_width = width = get2(); strcpy (make, "SMaL"); sprintf (model, "v%d %dx%d", ver, width, height); if (ver == 6) load_raw = &CLASS smal_v6_load_raw; if (ver == 9) load_raw = &CLASS smal_v9_load_raw; } void CLASS parse_cine() { unsigned off_head, off_setup, off_image, i; order = 0x4949; fseek (ifp, 4, SEEK_SET); is_raw = get2() == 2; fseek (ifp, 14, SEEK_CUR); is_raw *= get4(); off_head = get4(); off_setup = get4(); off_image = get4(); timestamp = get4(); if ((i = get4())) timestamp = i; fseek (ifp, off_head+4, SEEK_SET); raw_width = get4(); raw_height = get4(); switch (get2(),get2()) { case 8: load_raw = &CLASS eight_bit_load_raw; break; case 16: load_raw = &CLASS unpacked_load_raw; } fseek (ifp, off_setup+792, SEEK_SET); strcpy (make, "CINE"); sprintf (model, "%d", get4()); fseek (ifp, 12, SEEK_CUR); switch ((i=get4()) & 0xffffff) { case 3: filters = 0x94949494; break; case 4: filters = 0x49494949; break; default: is_raw = 0; } fseek (ifp, 72, SEEK_CUR); switch ((get4()+3600) % 360) { case 270: flip = 4; break; case 180: flip = 1; break; case 90: flip = 7; break; case 0: flip = 2; } cam_mul[0] = getreal(11); cam_mul[2] = getreal(11); maximum = ~(-1 << get4()); fseek (ifp, 668, SEEK_CUR); shutter = get4()/1000000000.0; fseek (ifp, off_image, SEEK_SET); if (shot_select < is_raw) fseek (ifp, shot_select*8, SEEK_CUR); data_offset = (INT64) get4() + 8; data_offset += (INT64) get4() << 32; } void CLASS parse_redcine() { int len; unsigned i, rdvo; order = 0x4d4d; is_raw = 0; fseek (ifp, 52, SEEK_SET); width = get4(); height = get4(); fseek (ifp, 0, SEEK_END); #ifdef HAVE_FSEEKO fseek (ifp, -(i = ftello(ifp) & 511), SEEK_CUR); #else fseek (ifp, -(i = ftell(ifp) & 511), SEEK_CUR); #endif if (get4() != i || get4() != 0x52454f42) { dcraw_message (DCRAW_WARNING, _("%s: Tail is missing, parsing from head...\n"), ifname_display); fseek (ifp, 0, SEEK_SET); while ((len = get4()) != EOF) { if (get4() == 0x52454456) if (is_raw++ == shot_select) #ifdef HAVE_FSEEKO data_offset = ftello(ifp) - 8; #else data_offset = ftell(ifp) - 8; #endif fseek (ifp, len-8, SEEK_CUR); } } else { rdvo = get4(); fseek (ifp, 12, SEEK_CUR); is_raw = get4(); #ifdef HAVE_FSEEKO fseeko (ifp, rdvo+8 + shot_select*4, SEEK_SET); #else fseek (ifp, rdvo+8 + shot_select*4, SEEK_SET); #endif data_offset = get4(); } } char * CLASS foveon_gets (int offset, char *str, int len) { int i; fseek (ifp, offset, SEEK_SET); for (i=0; i < len-1; i++) if ((str[i] = get2()) == 0) break; str[i] = 0; return str; } void CLASS parse_foveon() { int entries, img=0, off, len, tag, save, i, wide, high, pent, poff[256][2]; char name[64], value[64]; order = 0x4949; /* Little-endian */ fseek (ifp, 36, SEEK_SET); flip = get4(); fseek (ifp, -4, SEEK_END); fseek (ifp, get4(), SEEK_SET); if (get4() != 0x64434553) return; /* SECd */ entries = (get4(),get4()); while (entries--) { off = get4(); len = get4(); tag = get4(); save = ftell(ifp); fseek (ifp, off, SEEK_SET); if (get4() != (unsigned)(0x20434553 | (tag << 24))) return; switch (tag) { case 0x47414d49: /* IMAG */ case 0x32414d49: /* IMA2 */ fseek (ifp, 8, SEEK_CUR); pent = get4(); wide = get4(); high = get4(); if (wide > raw_width && high > raw_height) { switch (pent) { case 5: load_flags = 1; case 6: load_raw = &CLASS foveon_sd_load_raw; break; case 30: load_raw = &CLASS foveon_dp_load_raw; break; default: load_raw = 0; } raw_width = wide; raw_height = high; data_offset = off+28; } fseek (ifp, off+28, SEEK_SET); if (fgetc(ifp) == 0xff && fgetc(ifp) == 0xd8 && thumb_length < (unsigned)(len-28)) { thumb_offset = off+28; thumb_length = len-28; write_thumb = &CLASS jpeg_thumb; } if (++img == 2 && !thumb_length) { thumb_offset = off+24; thumb_width = wide; thumb_height = high; write_thumb = &CLASS foveon_thumb; } break; case 0x464d4143: /* CAMF */ meta_offset = off+8; meta_length = len-28; break; case 0x504f5250: /* PROP */ pent = (get4(),get4()); fseek (ifp, 12, SEEK_CUR); off += pent*8 + 24; if ((unsigned) pent > 256) pent=256; for (i=0; i < pent*2; i++) poff[0][i] = off + get4()*2; for (i=0; i < pent; i++) { foveon_gets (poff[i][0], name, 64); foveon_gets (poff[i][1], value, 64); if (!strcmp (name, "ISO")) iso_speed = atoi(value); if (!strcmp (name, "CAMMANUF")) strcpy (make, value); if (!strcmp (name, "CAMMODEL")) strcpy (model, value); if (!strcmp (name, "WB_DESC")) strcpy (model2, value); if (!strcmp (name, "TIME")) timestamp = atoi(value); if (!strcmp (name, "EXPTIME")) shutter = atoi(value) / 1000000.0; if (!strcmp (name, "APERTURE")) aperture = atof(value); if (!strcmp (name, "FLENGTH")) focal_len = atof(value); } #ifdef LOCALTIME timestamp = mktime (gmtime (×tamp)); #endif } fseek (ifp, save, SEEK_SET); } is_foveon = 1; } /* All matrices are from Adobe DNG Converter unless otherwise noted. */ void CLASS adobe_coeff (const char *make, const char *model) { static const struct { const char *prefix; short black, maximum, trans[12]; } table[] = { { "AGFAPHOTO DC-833m", 0, 0, /* DJC */ { 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } }, { "Apple QuickTake", 0, 0, /* DJC */ { 21392,-5653,-3353,2406,8010,-415,7166,1427,2078 } }, { "Canon EOS D2000", 0, 0, { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } }, { "Canon EOS D6000", 0, 0, { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } }, { "Canon EOS D30", 0, 0, { 9805,-2689,-1312,-5803,13064,3068,-2438,3075,8775 } }, { "Canon EOS D60", 0, 0xfa0, { 6188,-1341,-890,-7168,14489,2937,-2640,3228,8483 } }, { "Canon EOS 5D Mark III", 0, 0x3c80, { 6722,-635,-963,-4287,12460,2028,-908,2162,5668 } }, { "Canon EOS 5D Mark II", 0, 0x3cf0, { 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } }, { "Canon EOS 5D", 0, 0xe6c, { 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } }, { "Canon EOS 6D", 0, 0x3c82, { 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } }, { "Canon EOS 7D", 0, 0x3510, { 6844,-996,-856,-3876,11761,2396,-593,1772,6198 } }, { "Canon EOS 10D", 0, 0xfa0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon EOS 20Da", 0, 0, { 14155,-5065,-1382,-6550,14633,2039,-1623,1824,6561 } }, { "Canon EOS 20D", 0, 0xfff, { 6599,-537,-891,-8071,15783,2424,-1983,2234,7462 } }, { "Canon EOS 30D", 0, 0, { 6257,-303,-1000,-7880,15621,2396,-1714,1904,7046 } }, { "Canon EOS 40D", 0, 0x3f60, { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } }, { "Canon EOS 50D", 0, 0x3d93, { 4920,616,-593,-6493,13964,2784,-1774,3178,7005 } }, { "Canon EOS 60D", 0, 0x2ff7, { 6719,-994,-925,-4408,12426,2211,-887,2129,6051 } }, { "Canon EOS 300D", 0, 0xfa0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon EOS 350D", 0, 0xfff, { 6018,-617,-965,-8645,15881,2975,-1530,1719,7642 } }, { "Canon EOS 400D", 0, 0xe8e, { 7054,-1501,-990,-8156,15544,2812,-1278,1414,7796 } }, { "Canon EOS 450D", 0, 0x390d, { 5784,-262,-821,-7539,15064,2672,-1982,2681,7427 } }, { "Canon EOS 500D", 0, 0x3479, { 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } }, { "Canon EOS 550D", 0, 0x3dd7, { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } }, { "Canon EOS 600D", 0, 0x3510, { 6461,-907,-882,-4300,12184,2378,-819,1944,5931 } }, { "Canon EOS 650D", 0, 0x354d, { 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } }, { "Canon EOS 1000D", 0, 0xe43, { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } }, { "Canon EOS 1100D", 0, 0x3510, { 6444,-904,-893,-4563,12308,2535,-903,2016,6728 } }, { "Canon EOS M", 0, 0, { 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } }, { "Canon EOS-1Ds Mark III", 0, 0x3bb0, { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } }, { "Canon EOS-1Ds Mark II", 0, 0xe80, { 6517,-602,-867,-8180,15926,2378,-1618,1771,7633 } }, { "Canon EOS-1D Mark IV", 0, 0x3bb0, { 6014,-220,-795,-4109,12014,2361,-561,1824,5787 } }, { "Canon EOS-1D Mark III", 0, 0x3bb0, { 6291,-540,-976,-8350,16145,2311,-1714,1858,7326 } }, { "Canon EOS-1D Mark II N", 0, 0xe80, { 6240,-466,-822,-8180,15825,2500,-1801,1938,8042 } }, { "Canon EOS-1D Mark II", 0, 0xe80, { 6264,-582,-724,-8312,15948,2504,-1744,1919,8664 } }, { "Canon EOS-1DS", 0, 0xe20, { 4374,3631,-1743,-7520,15212,2472,-2892,3632,8161 } }, { "Canon EOS-1D X", 0, 0x3c4e, { 6847,-614,-1014,-4669,12737,2139,-1197,2488,6846 } }, { "Canon EOS-1D", 0, 0xe20, { 6806,-179,-1020,-8097,16415,1687,-3267,4236,7690 } }, { "Canon EOS", 0, 0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon PowerShot A530", 0, 0, { 0 } }, /* don't want the A5 matrix */ { "Canon PowerShot A50", 0, 0, { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } }, { "Canon PowerShot A5", 0, 0, { -4801,9475,1952,2926,1611,4094,-5259,10164,5947,-1554,10883,547 } }, { "Canon PowerShot G10", 0, 0, { 11093,-3906,-1028,-5047,12492,2879,-1003,1750,5561 } }, { "Canon PowerShot G11", 0, 0, { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } }, { "Canon PowerShot G12", 0, 0, { 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } }, { "Canon PowerShot G15", 0, 0, { 7474,-2301,-567,-4056,11456,2975,-222,716,4181 } }, { "Canon PowerShot G1 X", 0, 0, { 7378,-1255,-1043,-4088,12251,2048,-876,1946,5805 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, { 9087,-2693,-1049,-6715,14382,2537,-2291,2819,7790 } }, { "Canon PowerShot G3", 0, 0, { 9212,-2781,-1073,-6573,14189,2605,-2300,2844,7664 } }, { "Canon PowerShot G5", 0, 0, { 9757,-2872,-933,-5972,13861,2301,-1622,2328,7212 } }, { "Canon PowerShot G6", 0, 0, { 9877,-3775,-871,-7613,14807,3072,-1448,1305,7485 } }, { "Canon PowerShot G9", 0, 0, { 7368,-2141,-598,-5621,13254,2625,-1418,1696,5743 } }, { "Canon PowerShot Pro1", 0, 0, { 10062,-3522,-999,-7643,15117,2730,-765,817,7323 } }, { "Canon PowerShot Pro70", 34, 0, { -4155,9818,1529,3939,-25,4522,-5521,9870,6610,-2238,10873,1342 } }, { "Canon PowerShot Pro90", 0, 0, { -4963,9896,2235,4642,-987,4294,-5162,10011,5859,-1770,11230,577 } }, { "Canon PowerShot S30", 0, 0, { 10566,-3652,-1129,-6552,14662,2006,-2197,2581,7670 } }, { "Canon PowerShot S40", 0, 0, { 8510,-2487,-940,-6869,14231,2900,-2318,2829,9013 } }, { "Canon PowerShot S45", 0, 0, { 8163,-2333,-955,-6682,14174,2751,-2077,2597,8041 } }, { "Canon PowerShot S50", 0, 0, { 8882,-2571,-863,-6348,14234,2288,-1516,2172,6569 } }, { "Canon PowerShot S60", 0, 0, { 8795,-2482,-797,-7804,15403,2573,-1422,1996,7082 } }, { "Canon PowerShot S70", 0, 0, { 9976,-3810,-832,-7115,14463,2906,-901,989,7889 } }, { "Canon PowerShot S90", 0, 0, { 12374,-5016,-1049,-1677,9902,2078,-83,852,4683 } }, { "Canon PowerShot S95", 0, 0, { 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } }, { "Canon PowerShot S100", 0, 0, { 7968,-2565,-636,-2873,10697,2513,180,667,4211 } }, { "Canon PowerShot S110", 0, 0, { 8039,-2643,-654,-3783,11230,2930,-206,690,4194 } }, { "Canon PowerShot SX1 IS", 0, 0, { 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } }, { "Canon PowerShot SX50 HS", 0, 0, { 12432,-4753,-1247,-2110,10691,1629,-412,1623,4926 } }, { "Canon PowerShot A470", 0, 0, /* DJC */ { 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } }, { "Canon PowerShot A610", 0, 0, /* DJC */ { 15591,-6402,-1592,-5365,13198,2168,-1300,1824,5075 } }, { "Canon PowerShot A620", 0, 0, /* DJC */ { 15265,-6193,-1558,-4125,12116,2010,-888,1639,5220 } }, { "Canon PowerShot A630", 0, 0, /* DJC */ { 14201,-5308,-1757,-6087,14472,1617,-2191,3105,5348 } }, { "Canon PowerShot A640", 0, 0, /* DJC */ { 13124,-5329,-1390,-3602,11658,1944,-1612,2863,4885 } }, { "Canon PowerShot A650", 0, 0, /* DJC */ { 9427,-3036,-959,-2581,10671,1911,-1039,1982,4430 } }, { "Canon PowerShot A720", 0, 0, /* DJC */ { 14573,-5482,-1546,-1266,9799,1468,-1040,1912,3810 } }, { "Canon PowerShot S3 IS", 0, 0, /* DJC */ { 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } }, { "Canon PowerShot SX110 IS", 0, 0, /* DJC */ { 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } }, { "Canon PowerShot SX220", 0, 0, /* DJC */ { 13898,-5076,-1447,-1405,10109,1297,-244,1860,3687 } }, { "CASIO EX-S20", 0, 0, /* DJC */ { 11634,-3924,-1128,-4968,12954,2015,-1588,2648,7206 } }, { "CASIO EX-Z750", 0, 0, /* DJC */ { 10819,-3873,-1099,-4903,13730,1175,-1755,3751,4632 } }, { "CASIO EX-Z10", 128, 0xfff, /* DJC */ { 9790,-3338,-603,-2321,10222,2099,-344,1273,4799 } }, { "CINE 650", 0, 0, { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, { "CINE 660", 0, 0, { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, { "CINE", 0, 0, { 20183,-4295,-423,-3940,15330,3985,-280,4870,9800 } }, { "Contax N Digital", 0, 0xf1e, { 7777,1285,-1053,-9280,16543,2916,-3677,5679,7060 } }, { "EPSON R-D1", 0, 0, { 6827,-1878,-732,-8429,16012,2564,-704,592,7145 } }, { "FUJIFILM E550", 0, 0, { 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } }, { "FUJIFILM E900", 0, 0, { 9183,-2526,-1078,-7461,15071,2574,-2022,2440,8639 } }, { "FUJIFILM F5", 0, 0, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM F6", 0, 0, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM F77", 0, 0xfe9, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM F7", 0, 0, { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } }, { "FUJIFILM F8", 0, 0, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM S100FS", 514, 0, { 11521,-4355,-1065,-6524,13767,3058,-1466,1984,6045 } }, { "FUJIFILM S200EXR", 512, 0x3fff, { 11401,-4498,-1312,-5088,12751,2613,-838,1568,5941 } }, { "FUJIFILM S20Pro", 0, 0, { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } }, { "FUJIFILM S2Pro", 128, 0, { 12492,-4690,-1402,-7033,15423,1647,-1507,2111,7697 } }, { "FUJIFILM S3Pro", 0, 0, { 11807,-4612,-1294,-8927,16968,1988,-2120,2741,8006 } }, { "FUJIFILM S5Pro", 0, 0, { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, { "FUJIFILM S5000", 0, 0, { 8754,-2732,-1019,-7204,15069,2276,-1702,2334,6982 } }, { "FUJIFILM S5100", 0, 0, { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } }, { "FUJIFILM S5500", 0, 0, { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } }, { "FUJIFILM S5200", 0, 0, { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } }, { "FUJIFILM S5600", 0, 0, { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } }, { "FUJIFILM S6", 0, 0, { 12628,-4887,-1401,-6861,14996,1962,-2198,2782,7091 } }, { "FUJIFILM S7000", 0, 0, { 10190,-3506,-1312,-7153,15051,2238,-2003,2399,7505 } }, { "FUJIFILM S9000", 0, 0, { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } }, { "FUJIFILM S9500", 0, 0, { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } }, { "FUJIFILM S9100", 0, 0, { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } }, { "FUJIFILM S9600", 0, 0, { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } }, { "FUJIFILM IS-1", 0, 0, { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } }, { "FUJIFILM IS Pro", 0, 0, { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, { "FUJIFILM HS10 HS11", 0, 0xf68, { 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } }, { "FUJIFILM HS20EXR", 0, 0, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM HS3", 0, 0, { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } }, { "FUJIFILM X100", 0, 0, { 12161,-4457,-1069,-5034,12874,2400,-795,1724,6904 } }, { "FUJIFILM X10", 0, 0, { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } }, { "FUJIFILM X-Pro1", 0, 0, { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } }, { "FUJIFILM X-E1", 0, 0, { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } }, { "FUJIFILM XF1", 0, 0, { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } }, { "FUJIFILM X-S1", 0, 0, { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } }, { "Imacon Ixpress", 0, 0, /* DJC */ { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } }, { "KODAK NC2000", 0, 0, { 13891,-6055,-803,-465,9919,642,2121,82,1291 } }, { "Kodak DCS315C", 8, 0, { 17523,-4827,-2510,756,8546,-137,6113,1649,2250 } }, { "Kodak DCS330C", 8, 0, { 20620,-7572,-2801,-103,10073,-396,3551,-233,2220 } }, { "KODAK DCS420", 0, 0, { 10868,-1852,-644,-1537,11083,484,2343,628,2216 } }, { "KODAK DCS460", 0, 0, { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } }, { "KODAK EOSDCS1", 0, 0, { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } }, { "KODAK EOSDCS3B", 0, 0, { 9898,-2700,-940,-2478,12219,206,1985,634,1031 } }, { "Kodak DCS520C", 178, 0, { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } }, { "Kodak DCS560C", 177, 0, { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } }, { "Kodak DCS620C", 177, 0, { 23617,-10175,-3149,-2054,11749,-272,2586,-489,3453 } }, { "Kodak DCS620X", 176, 0, { 13095,-6231,154,12221,-21,-2137,895,4602,2258 } }, { "Kodak DCS660C", 173, 0, { 18244,-6351,-2739,-791,11193,-521,3711,-129,2802 } }, { "Kodak DCS720X", 0, 0, { 11775,-5884,950,9556,1846,-1286,-1019,6221,2728 } }, { "Kodak DCS760C", 0, 0, { 16623,-6309,-1411,-4344,13923,323,2285,274,2926 } }, { "Kodak DCS Pro SLR", 0, 0, { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } }, { "Kodak DCS Pro 14nx", 0, 0, { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } }, { "Kodak DCS Pro 14", 0, 0, { 7791,3128,-776,-8588,16458,2039,-2455,4006,6198 } }, { "Kodak ProBack645", 0, 0, { 16414,-6060,-1470,-3555,13037,473,2545,122,4948 } }, { "Kodak ProBack", 0, 0, { 21179,-8316,-2918,-915,11019,-165,3477,-180,4210 } }, { "KODAK P712", 0, 0, { 9658,-3314,-823,-5163,12695,2768,-1342,1843,6044 } }, { "KODAK P850", 0, 0xf7c, { 10511,-3836,-1102,-6946,14587,2558,-1481,1792,6246 } }, { "KODAK P880", 0, 0xfff, { 12805,-4662,-1376,-7480,15267,2360,-1626,2194,7904 } }, { "KODAK EasyShare Z980", 0, 0, { 11313,-3559,-1101,-3893,11891,2257,-1214,2398,4908 } }, { "KODAK EasyShare Z981", 0, 0, { 12729,-4717,-1188,-1367,9187,2582,274,860,4411 } }, { "KODAK EasyShare Z990", 0, 0xfed, { 11749,-4048,-1309,-1867,10572,1489,-138,1449,4522 } }, { "KODAK EASYSHARE Z1015", 0, 0xef1, { 11265,-4286,-992,-4694,12343,2647,-1090,1523,5447 } }, { "Leaf CMost", 0, 0, { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } }, { "Leaf Valeo 6", 0, 0, { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } }, { "Leaf Aptus 54S", 0, 0, { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } }, { "Leaf Aptus 65", 0, 0, { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, { "Leaf Aptus 75", 0, 0, { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, { "Leaf", 0, 0, { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } }, { "Mamiya ZD", 0, 0, { 7645,2579,-1363,-8689,16717,2015,-3712,5941,5961 } }, { "Micron 2010", 110, 0, /* DJC */ { 16695,-3761,-2151,155,9682,163,3433,951,4904 } }, { "Minolta DiMAGE 5", 0, 0xf7d, { 8983,-2942,-963,-6556,14476,2237,-2426,2887,8014 } }, { "Minolta DiMAGE 7Hi", 0, 0xf7d, { 11368,-3894,-1242,-6521,14358,2339,-2475,3056,7285 } }, { "Minolta DiMAGE 7", 0, 0xf7d, { 9144,-2777,-998,-6676,14556,2281,-2470,3019,7744 } }, { "Minolta DiMAGE A1", 0, 0xf8b, { 9274,-2547,-1167,-8220,16323,1943,-2273,2720,8340 } }, { "MINOLTA DiMAGE A200", 0, 0, { 8560,-2487,-986,-8112,15535,2771,-1209,1324,7743 } }, { "Minolta DiMAGE A2", 0, 0xf8f, { 9097,-2726,-1053,-8073,15506,2762,-966,981,7763 } }, { "Minolta DiMAGE Z2", 0, 0, /* DJC */ { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, { "MINOLTA DYNAX 5", 0, 0xffb, { 10284,-3283,-1086,-7957,15762,2316,-829,882,6644 } }, { "MINOLTA DYNAX 7", 0, 0xffb, { 10239,-3104,-1099,-8037,15727,2451,-927,925,6871 } }, { "MOTOROLA PIXL", 0, 0, /* DJC */ { 8898,-989,-1033,-3292,11619,1674,-661,3178,5216 } }, { "NIKON D100", 0, 0, { 5902,-933,-782,-8983,16719,2354,-1402,1455,6464 } }, { "NIKON D1H", 0, 0, { 7577,-2166,-926,-7454,15592,1934,-2377,2808,8606 } }, { "NIKON D1X", 0, 0, { 7702,-2245,-975,-9114,17242,1875,-2679,3055,8521 } }, { "NIKON D1", 0, 0, /* multiplied by 2.218750, 1.0, 1.148438 */ { 16772,-4726,-2141,-7611,15713,1972,-2846,3494,9521 } }, { "NIKON D200", 0, 0xfbc, { 8367,-2248,-763,-8758,16447,2422,-1527,1550,8053 } }, { "NIKON D2H", 0, 0, { 5710,-901,-615,-8594,16617,2024,-2975,4120,6830 } }, { "NIKON D2X", 0, 0, { 10231,-2769,-1255,-8301,15900,2552,-797,680,7148 } }, { "NIKON D3000", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, { "NIKON D3100", 0, 0, { 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } }, { "NIKON D3200", 0, 0xfb9, { 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } }, { "NIKON D300", 0, 0, { 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } }, { "NIKON D3X", 0, 0, { 7171,-1986,-648,-8085,15555,2718,-2170,2512,7457 } }, { "NIKON D3S", 0, 0, { 8828,-2406,-694,-4874,12603,2541,-660,1509,7587 } }, { "NIKON D3", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D40X", 0, 0, { 8819,-2543,-911,-9025,16928,2151,-1329,1213,8449 } }, { "NIKON D40", 0, 0, { 6992,-1668,-806,-8138,15748,2543,-874,850,7897 } }, { "NIKON D4", 0, 0, { 8598,-2848,-857,-5618,13606,2195,-1002,1773,7137 } }, { "NIKON D5000", 0, 0xf00, { 7309,-1403,-519,-8474,16008,2622,-2433,2826,8064 } }, { "NIKON D5100", 0, 0x3de6, { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } }, { "NIKON D5200", 0, 0x3e14, { 8322,-3112,-1047,-6367,14342,2179,-988,1638,6394 } }, { "NIKON D50", 0, 0, { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D600", 0, 0x3e07, { 8178,-2245,-609,-4857,12394,2776,-1207,2086,7298 } }, { "NIKON D60", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, { "NIKON D7000", 0, 0, { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } }, { "NIKON D7100", 0, 0x3e14, { 8322,-3112,-1047,-6367,14342,2179,-988,1638,6394 } }, { "NIKON D700", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D70", 0, 0, { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D800", 0, 0, { 7866,-2108,-555,-4869,12483,2681,-1176,2069,7501 } }, { "NIKON D80", 0, 0, { 8629,-2410,-883,-9055,16940,2171,-1490,1363,8520 } }, { "NIKON D90", 0, 0xf00, { 7309,-1403,-519,-8474,16008,2622,-2434,2826,8064 } }, { "NIKON E950", 0, 0x3dd, /* DJC */ { -3746,10611,1665,9621,-1734,2114,-2389,7082,3064,3406,6116,-244 } }, { "NIKON E995", 0, 0, /* copied from E5000 */ { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, { "NIKON E2100", 0, 0, /* copied from Z2, new white balance */ { 13142,-4152,-1596,-4655,12374,2282,-1769,2696,6711} }, { "NIKON E2500", 0, 0, { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, { "NIKON E3200", 0, 0, /* DJC */ { 9846,-2085,-1019,-3278,11109,2170,-774,2134,5745 } }, { "NIKON E4300", 0, 0, /* copied from Minolta DiMAGE Z2 */ { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, { "NIKON E4500", 0, 0, { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, { "NIKON E5000", 0, 0, { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, { "NIKON E5400", 0, 0, { 9349,-2987,-1001,-7919,15766,2266,-2098,2680,6839 } }, { "NIKON E5700", 0, 0, { -5368,11478,2368,5537,-113,3148,-4969,10021,5782,778,9028,211 } }, { "NIKON E8400", 0, 0, { 7842,-2320,-992,-8154,15718,2599,-1098,1342,7560 } }, { "NIKON E8700", 0, 0, { 8489,-2583,-1036,-8051,15583,2643,-1307,1407,7354 } }, { "NIKON E8800", 0, 0, { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } }, { "NIKON COOLPIX P6000", 0, 0, { 9698,-3367,-914,-4706,12584,2368,-837,968,5801 } }, { "NIKON COOLPIX P7000", 0, 0, { 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } }, { "NIKON COOLPIX P7100", 0, 0, { 11053,-4269,-1024,-1976,10182,2088,-526,1263,4469 } }, { "NIKON COOLPIX P7700", 200, 0, { 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } }, { "NIKON 1 J3", 0, 0, { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } }, { "NIKON 1 V2", 0, 0, { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } }, { "NIKON 1 ", 0, 0, { 8994,-2667,-865,-4594,12324,2552,-699,1786,6260 } }, { "OLYMPUS C5050", 0, 0, { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } }, { "OLYMPUS C5060", 0, 0, { 10445,-3362,-1307,-7662,15690,2058,-1135,1176,7602 } }, { "OLYMPUS C7070", 0, 0, { 10252,-3531,-1095,-7114,14850,2436,-1451,1723,6365 } }, { "OLYMPUS C70", 0, 0, { 10793,-3791,-1146,-7498,15177,2488,-1390,1577,7321 } }, { "OLYMPUS C80", 0, 0, { 8606,-2509,-1014,-8238,15714,2703,-942,979,7760 } }, { "OLYMPUS E-10", 0, 0xffc, { 12745,-4500,-1416,-6062,14542,1580,-1934,2256,6603 } }, { "OLYMPUS E-1", 0, 0, { 11846,-4767,-945,-7027,15878,1089,-2699,4122,8311 } }, { "OLYMPUS E-20", 0, 0xffc, { 13173,-4732,-1499,-5807,14036,1895,-2045,2452,7142 } }, { "OLYMPUS E-300", 0, 0, { 7828,-1761,-348,-5788,14071,1830,-2853,4518,6557 } }, { "OLYMPUS E-330", 0, 0, { 8961,-2473,-1084,-7979,15990,2067,-2319,3035,8249 } }, { "OLYMPUS E-30", 0, 0xfbc, { 8144,-1861,-1111,-7763,15894,1929,-1865,2542,7607 } }, { "OLYMPUS E-3", 0, 0xf99, { 9487,-2875,-1115,-7533,15606,2010,-1618,2100,7389 } }, { "OLYMPUS E-400", 0, 0, { 6169,-1483,-21,-7107,14761,2536,-2904,3580,8568 } }, { "OLYMPUS E-410", 0, 0xf6a, { 8856,-2582,-1026,-7761,15766,2082,-2009,2575,7469 } }, { "OLYMPUS E-420", 0, 0xfd7, { 8746,-2425,-1095,-7594,15612,2073,-1780,2309,7416 } }, { "OLYMPUS E-450", 0, 0xfd2, { 8745,-2425,-1095,-7594,15613,2073,-1780,2309,7416 } }, { "OLYMPUS E-500", 0, 0, { 8136,-1968,-299,-5481,13742,1871,-2556,4205,6630 } }, { "OLYMPUS E-510", 0, 0xf6a, { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, { "OLYMPUS E-520", 0, 0xfd2, { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } }, { "OLYMPUS E-5", 0, 0xeec, { 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } }, { "OLYMPUS E-600", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-620", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-P1", 0, 0xffd, { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } }, { "OLYMPUS E-P2", 0, 0xffd, { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } }, { "OLYMPUS E-P3", 0, 0, { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } }, { "OLYMPUS E-PL1s", 0, 0, { 11409,-3872,-1393,-4572,12757,2003,-709,1810,7415 } }, { "OLYMPUS E-PL1", 0, 0, { 11408,-4289,-1215,-4286,12385,2118,-387,1467,7787 } }, { "OLYMPUS E-PL2", 0, 0, { 15030,-5552,-1806,-3987,12387,1767,-592,1670,7023 } }, { "OLYMPUS E-PL3", 0, 0, { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } }, { "OLYMPUS E-PL5", 0, 0xfcb, { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, { "OLYMPUS E-PM1", 0, 0, { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } }, { "OLYMPUS E-PM2", 0, 0, { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, { "OLYMPUS E-M5", 0, 0xfe1, { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, { "OLYMPUS SP350", 0, 0, { 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } }, { "OLYMPUS SP3", 0, 0, { 11766,-4445,-1067,-6901,14421,2707,-1029,1217,7572 } }, { "OLYMPUS SP500UZ", 0, 0xfff, { 9493,-3415,-666,-5211,12334,3260,-1548,2262,6482 } }, { "OLYMPUS SP510UZ", 0, 0xffe, { 10593,-3607,-1010,-5881,13127,3084,-1200,1805,6721 } }, { "OLYMPUS SP550UZ", 0, 0xffe, { 11597,-4006,-1049,-5432,12799,2957,-1029,1750,6516 } }, { "OLYMPUS SP560UZ", 0, 0xff9, { 10915,-3677,-982,-5587,12986,2911,-1168,1968,6223 } }, { "OLYMPUS SP570UZ", 0, 0, { 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } }, { "OLYMPUS XZ-1", 0, 0, { 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } }, { "OLYMPUS XZ-2", 0, 0, { 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } }, { "PENTAX *ist DL2", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, { "PENTAX *ist DL", 0, 0, { 10829,-2838,-1115,-8339,15817,2696,-837,680,11939 } }, { "PENTAX *ist DS2", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, { "PENTAX *ist DS", 0, 0, { 10371,-2333,-1206,-8688,16231,2602,-1230,1116,11282 } }, { "PENTAX *ist D", 0, 0, { 9651,-2059,-1189,-8881,16512,2487,-1460,1345,10687 } }, { "PENTAX K10D", 0, 0, { 9566,-2863,-803,-7170,15172,2112,-818,803,9705 } }, { "PENTAX K1", 0, 0, { 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } }, { "PENTAX K20D", 0, 0, { 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } }, { "PENTAX K200D", 0, 0, { 9186,-2678,-907,-8693,16517,2260,-1129,1094,8524 } }, { "PENTAX K2000", 0, 0, { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-m", 0, 0, { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-x", 0, 0, { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } }, { "PENTAX K-r", 0, 0, { 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } }, { "PENTAX K-5 II", 0, 0, { 8170,-2725,-639,-4440,12017,2744,-771,1465,6599 } }, { "PENTAX K-5", 0, 0, { 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } }, { "PENTAX K-7", 0, 0, { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } }, { "PENTAX 645D", 0, 0x3e00, { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } }, { "Panasonic DMC-FZ8", 0, 0xf7f, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, { "Panasonic DMC-FZ28", 15, 0xf96, { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, { "Panasonic DMC-FZ30", 0, 0xf94, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, { "Panasonic DMC-FZ3", 143, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, { "Panasonic DMC-FZ4", 143, 0, { 13639,-5535,-1371,-1698,9633,2430,316,1152,4108 } }, { "Panasonic DMC-FZ50", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, { "LEICA V-LUX1", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, { "Panasonic DMC-L10", 15, 0xf96, { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, { "Panasonic DMC-L1", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, { "LEICA DIGILUX 3", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, { "Panasonic DMC-LC1", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, { "LEICA DIGILUX 2", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, { "Panasonic DMC-LX1", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, { "LEICA D-LUX2", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, { "Panasonic DMC-LX2", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, { "LEICA D-LUX3", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, { "Panasonic DMC-LX3", 15, 0, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { "LEICA D-LUX 4", 15, 0, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { "Panasonic DMC-LX5", 143, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, { "LEICA D-LUX 5", 143, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, { "Panasonic DMC-LX7", 143, 0, { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } }, { "LEICA D-LUX 6", 143, 0, { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } }, { "Panasonic DMC-FZ100", 143, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, { "LEICA V-LUX 2", 143, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, { "Panasonic DMC-FZ150", 143, 0xfff, { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } }, { "LEICA V-LUX 3", 143, 0xfff, { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } }, { "Panasonic DMC-FZ200", 143, 0xfff, { 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } }, { "LEICA V-LUX 4", 143, 0xfff, { 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } }, { "Panasonic DMC-FX150", 15, 0xfff, { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, { "Panasonic DMC-G10", 0, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, { "Panasonic DMC-G1", 15, 0xf94, { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, { "Panasonic DMC-G2", 15, 0xf3c, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, { "Panasonic DMC-G3", 143, 0xfff, { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } }, { "Panasonic DMC-G5", 143, 0xfff, { 7798,-2562,-740,-3879,11584,2613,-1055,2248,5434 } }, { "Panasonic DMC-GF1", 15, 0xf92, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, { "Panasonic DMC-GF2", 143, 0xfff, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, { "Panasonic DMC-GF3", 143, 0xfff, { 9051,-2468,-1204,-5212,13276,2121,-1197,2510,6890 } }, { "Panasonic DMC-GF5", 143, 0xfff, { 8228,-2945,-660,-3938,11792,2430,-1094,2278,5793 } }, { "Panasonic DMC-GH1", 15, 0xf92, { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } }, { "Panasonic DMC-GH2", 15, 0xf95, { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } }, { "Panasonic DMC-GH3", 144, 0, { 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } }, { "Panasonic DMC-GX1", 143, 0, { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, { "Phase One H 25", 0, 0, { 2905,732,-237,-8134,16626,1476,-3038,4253,7517 } }, { "Phase One P 2", 0, 0, { 2905,732,-237,-8134,16626,1476,-3038,4253,7517 } }, { "Phase One P 30", 0, 0, { 4516,-245,-37,-7020,14976,2173,-3206,4671,7087 } }, { "Phase One P 45", 0, 0, { 5053,-24,-117,-5684,14076,1702,-2619,4492,5849 } }, { "Phase One P40", 0, 0, { 8035,435,-962,-6001,13872,2320,-1159,3065,5434 } }, { "Phase One P65", 0, 0, { 8035,435,-962,-6001,13872,2320,-1159,3065,5434 } }, { "RED ONE", 704, static_cast(0xffff), /* DJC */ { 21014,-7891,-2613,-3056,12201,856,-2203,5125,8042 } }, { "SAMSUNG EX1", 0, 0x3e00, { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } }, { "SAMSUNG EX2F", 0, 0x7ff, { 10648,-3897,-1055,-2022,10573,1668,-492,1611,4742 } }, { "SAMSUNG NX2", 0, 0xfff, /* NX20, NX200, NX210 */ { 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } }, { "SAMSUNG NX1000", 0, 0, { 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } }, { "SAMSUNG NX", 0, 0, /* NX5, NX10, NX11, NX100 */ { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } }, { "SAMSUNG WB2000", 0, 0xfff, { 12093,-3557,-1155,-1000,9534,1733,-22,1787,4576 } }, { "SAMSUNG GX-1", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, { "SAMSUNG S85", 0, static_cast(0xffff), /* DJC */ { 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } }, { "Sinar", 0, 0, /* DJC */ { 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } }, { "SONY DSC-F828", 0, 0, { 7924,-1910,-777,-8226,15459,2998,-1517,2199,6818,-7242,11401,3481 } }, { "SONY DSC-R1", 512, 0, { 8512,-2641,-694,-8042,15670,2526,-1821,2117,7414 } }, { "SONY DSC-V3", 0, 0, { 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } }, { "SONY DSC-RX100", 200, 0, { 8651,-2754,-1057,-3464,12207,1373,-568,1398,4434 } }, { "SONY DSC-RX1", 128, 0, { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } }, { "SONY DSLR-A100", 0, 0xfeb, { 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } }, { "SONY DSLR-A290", 0, 0, { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { "SONY DSLR-A2", 0, 0, { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } }, { "SONY DSLR-A300", 0, 0, { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } }, { "SONY DSLR-A330", 0, 0, { 9847,-3091,-929,-8485,16346,2225,-714,595,7103 } }, { "SONY DSLR-A350", 0, 0xffc, { 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } }, { "SONY DSLR-A380", 0, 0, { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { "SONY DSLR-A390", 0, 0, { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { "SONY DSLR-A450", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { "SONY DSLR-A580", 128, 0xfeb, { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } }, { "SONY DSLR-A5", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { "SONY DSLR-A700", 126, 0, { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } }, { "SONY DSLR-A850", 128, 0, { 5413,-1162,-365,-5665,13098,2866,-608,1179,8440 } }, { "SONY DSLR-A900", 128, 0, { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } }, { "SONY NEX-5N", 128, 0, { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } }, { "SONY NEX-5R", 128, 0, { 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } }, { "SONY NEX-3", 138, 0, /* DJC */ { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, { "SONY NEX-5", 116, 0, /* DJC */ { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, { "SONY NEX-3", 128, 0, /* Adobe */ { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, { "SONY NEX-5", 128, 0, /* Adobe */ { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, { "SONY NEX-6", 128, 0, { 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } }, { "SONY NEX-7", 128, 0, { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } }, { "SONY NEX", 128, 0, /* NEX-C3, NEX-F3 */ { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } }, { "SONY SLT-A33", 128, 0, { 6069,-1221,-366,-5221,12779,2734,-1024,2066,6834 } }, { "SONY SLT-A35", 128, 0, { 5986,-1618,-415,-4557,11820,3120,-681,1404,6971 } }, { "SONY SLT-A37", 128, 0, { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } }, { "SONY SLT-A55", 128, 0, { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } }, { "SONY SLT-A57", 128, 0, { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } }, { "SONY SLT-A65", 128, 0, { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } }, { "SONY SLT-A77", 128, 0, { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } }, { "SONY SLT-A99", 128, 0, { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } }, }; double cam_xyz[4][3]; char name[130]; int i, j, k; sprintf (name, "%s %s", make, model); for (i=0; i < (int) sizeof table / (int) sizeof *table; i++) if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) { if (table[i].black) black = (ushort) table[i].black; if (table[i].maximum) maximum = (ushort) table[i].maximum; if (table[i].trans[0]) { for (j=0; j < 4; j++) for (k=0; k < 3; k++) cam_xyz[j][k] = table[i].trans[3*j+k] / 10000.0; cam_xyz_coeff (cam_xyz); } break; } } void CLASS simple_coeff (int index) { static const float table[][12] = { /* index 0 -- all Foveon cameras */ { 1.4032,-0.2231,-0.1016,-0.5263,1.4816,0.017,-0.0112,0.0183,0.9113 }, /* index 1 -- Kodak DC20 and DC25 */ { 2.25,0.75,-1.75,-0.25,-0.25,0.75,0.75,-0.25,-0.25,-1.75,0.75,2.25 }, /* index 2 -- Logitech Fotoman Pixtura */ { 1.893,-0.418,-0.476,-0.495,1.773,-0.278,-1.017,-0.655,2.672 }, /* index 3 -- Nikon E880, E900, and E990 */ { -1.936280, 1.800443, -1.448486, 2.584324, 1.405365, -0.524955, -0.289090, 0.408680, -1.204965, 1.082304, 2.941367, -1.818705 } }; int i, c; for (raw_color = i=0; i < 3; i++) FORCC rgb_cam[i][c] = table[index][i*colors+c]; } short CLASS guess_byte_order (int words) { uchar test[4][2]; int t=2, msb; double diff, sum[2] = {0,0}; fread (test[0], 2, 2, ifp); for (words-=2; words--; ) { fread (test[t], 2, 1, ifp); for (msb=0; msb < 2; msb++) { diff = (test[t^2][msb] << 8 | test[t^2][!msb]) - (test[t ][msb] << 8 | test[t ][!msb]); sum[msb] += diff*diff; } t = (t+1) & 3; } return sum[0] < sum[1] ? 0x4d4d : 0x4949; } float CLASS find_green (int bps, int bite, int off0, int off1) { UINT64 bitbuf=0; int vbits, col, i, c; ushort img[2][2064]; double sum[]={0,0}; FORC(2) { fseek (ifp, c ? off1:off0, SEEK_SET); for (vbits=col=0; col < width; col++) { for (vbits -= bps; vbits < 0; vbits += bite) { bitbuf <<= bite; for (i=0; i < bite; i+=8) bitbuf |= (unsigned) (fgetc(ifp) << i); } img[c][col] = bitbuf << (64-bps-vbits) >> (64-bps); } } FORC(width-1) { sum[ c & 1] += ABS(img[0][c]-img[1][c+1]); sum[~c & 1] += ABS(img[1][c]-img[0][c+1]); } return 100 * log(sum[0]/sum[1]); } /* Identify which camera created this file, and set global variables accordingly. */ void CLASS identify() { char head[32], *cp; int hlen, flen, fsize, zero_fsize=1, i, c, is_canon; struct jhead jh; short pana[][6] = { { 3130, 1743, 4, 0, -6, 0 }, { 3130, 2055, 4, 0, -6, 0 }, { 3130, 2319, 4, 0, -6, 0 }, { 3170, 2103, 18, 0,-42, 20 }, { 3170, 2367, 18, 13,-42,-21 }, { 3177, 2367, 0, 0, -1, 0 }, { 3304, 2458, 0, 0, -1, 0 }, { 3330, 2463, 9, 0, -5, 0 }, { 3330, 2479, 9, 0,-17, 4 }, { 3370, 1899, 15, 0,-44, 20 }, { 3370, 2235, 15, 0,-44, 20 }, { 3370, 2511, 15, 10,-44,-21 }, { 3690, 2751, 3, 0, -8, -3 }, { 3710, 2751, 0, 0, -3, 0 }, { 3724, 2450, 0, 0, 0, -2 }, { 3770, 2487, 17, 0,-44, 19 }, { 3770, 2799, 17, 15,-44,-19 }, { 3880, 2170, 6, 0, -6, 0 }, { 4060, 3018, 0, 0, 0, -2 }, { 4290, 2391, 3, 0, -8, -1 }, { 4330, 2439, 17, 15,-44,-19 }, { 4508, 2962, 0, 0, -3, -4 }, { 4508, 3330, 0, 0, -3, -6 } }; static const struct { int fsize; const char make[12], model[19], withjpeg; } table[] = { { 62464, "Kodak", "DC20" ,0 }, { 124928, "Kodak", "DC20" ,0 }, { 1652736, "Kodak", "DCS200" ,0 }, { 4159302, "Kodak", "C330" ,0 }, { 4162462, "Kodak", "C330" ,0 }, { 460800, "Kodak", "C603v" ,0 }, { 614400, "Kodak", "C603v" ,0 }, { 6163328, "Kodak", "C603" ,0 }, { 6166488, "Kodak", "C603" ,0 }, { 9116448, "Kodak", "C603y" ,0 }, { 311696, "ST Micro", "STV680 VGA" ,0 }, /* SPYz */ { 787456, "Creative", "PC-CAM 600" ,0 }, { 1138688, "Minolta", "RD175" ,0 }, { 3840000, "Foculus", "531C" ,0 }, { 307200, "Generic", "640x480" ,0 }, { 786432, "AVT", "F-080C" ,0 }, { 1447680, "AVT", "F-145C" ,0 }, { 1920000, "AVT", "F-201C" ,0 }, { 5067304, "AVT", "F-510C" ,0 }, { 5067316, "AVT", "F-510C" ,0 }, { 10134608, "AVT", "F-510C" ,0 }, { 10134620, "AVT", "F-510C" ,0 }, { 16157136, "AVT", "F-810C" ,0 }, { 1409024, "Sony", "XCD-SX910CR" ,0 }, { 2818048, "Sony", "XCD-SX910CR" ,0 }, { 3884928, "Micron", "2010" ,0 }, { 6624000, "Pixelink", "A782" ,0 }, { 13248000, "Pixelink", "A782" ,0 }, { 6291456, "RoverShot","3320AF" ,0 }, { 6553440, "Canon", "PowerShot A460" ,0 }, { 6653280, "Canon", "PowerShot A530" ,0 }, { 6573120, "Canon", "PowerShot A610" ,0 }, { 9219600, "Canon", "PowerShot A620" ,0 }, { 9243240, "Canon", "PowerShot A470" ,0 }, { 10341600, "Canon", "PowerShot A720 IS",0 }, { 10383120, "Canon", "PowerShot A630" ,0 }, { 12945240, "Canon", "PowerShot A640" ,0 }, { 15636240, "Canon", "PowerShot A650" ,0 }, { 5298000, "Canon", "PowerShot SD300" ,0 }, { 7710960, "Canon", "PowerShot S3 IS" ,0 }, { 15467760, "Canon", "PowerShot SX110 IS",0 }, { 15534576, "Canon", "PowerShot SX120 IS",0 }, { 18653760, "Canon", "PowerShot SX20 IS",0 }, { 19131120, "Canon", "PowerShot SX220 HS",0 }, { 21936096, "Canon", "PowerShot SX30 IS",0 }, { 5939200, "OLYMPUS", "C770UZ" ,0 }, { 1581060, "NIKON", "E900" ,1 }, /* or E900s,E910 */ { 2465792, "NIKON", "E950" ,1 }, /* or E800,E700 */ { 2940928, "NIKON", "E2100" ,1 }, /* or E2500 */ { 4771840, "NIKON", "E990" ,1 }, /* or E995, Oly C3030Z */ { 4775936, "NIKON", "E3700" ,1 }, /* or Optio 33WR */ { 5869568, "NIKON", "E4300" ,1 }, /* or DiMAGE Z2 */ { 5865472, "NIKON", "E4500" ,1 }, { 7438336, "NIKON", "E5000" ,1 }, /* or E5700 */ { 8998912, "NIKON", "COOLPIX S6" ,1 }, { 1976352, "CASIO", "QV-2000UX" ,1 }, { 3217760, "CASIO", "QV-3*00EX" ,1 }, { 6218368, "CASIO", "QV-5700" ,1 }, { 6054400, "CASIO", "QV-R41" ,1 }, { 7530816, "CASIO", "QV-R51" ,1 }, { 7684000, "CASIO", "QV-4000" ,1 }, { 2937856, "CASIO", "EX-S20" ,1 }, { 4948608, "CASIO", "EX-S100" ,1 }, { 7542528, "CASIO", "EX-Z50" ,1 }, { 7562048, "CASIO", "EX-Z500" ,1 }, { 7753344, "CASIO", "EX-Z55" ,1 }, { 7816704, "CASIO", "EX-Z60" ,1 }, { 10843712, "CASIO", "EX-Z75" ,1 }, { 10834368, "CASIO", "EX-Z750" ,1 }, { 12310144, "CASIO", "EX-Z850" ,1 }, { 12489984, "CASIO", "EX-Z8" ,1 }, { 15499264, "CASIO", "EX-Z1050" ,1 }, { 18702336, "CASIO", "EX-ZR100" ,1 }, { 7426656, "CASIO", "EX-P505" ,1 }, { 9313536, "CASIO", "EX-P600" ,1 }, { 10979200, "CASIO", "EX-P700" ,1 }, { 3178560, "PENTAX", "Optio S" ,1 }, { 4841984, "PENTAX", "Optio S" ,1 }, { 6114240, "PENTAX", "Optio S4" ,1 }, /* or S4i, CASIO EX-Z4 */ { 10702848, "PENTAX", "Optio 750Z" ,1 }, { 15980544, "AGFAPHOTO","DC-833m" ,1 }, { 16098048, "SAMSUNG", "S85" ,1 }, { 16215552, "SAMSUNG", "S85" ,1 }, { 20487168, "SAMSUNG", "WB550" ,1 }, { 24000000, "SAMSUNG", "WB550" ,1 }, { 12582980, "Sinar", "" ,0 }, { 33292868, "Sinar", "" ,0 }, { 44390468, "Sinar", "" ,0 } }; static const char *corp[] = { "Canon", "NIKON", "EPSON", "KODAK", "Kodak", "OLYMPUS", "PENTAX", "MINOLTA", "Minolta", "Konica", "CASIO", "Sinar", "Phase One", "SAMSUNG", "Mamiya", "MOTOROLA", "LEICA" }; tiff_flip = flip = filters = -1; /* 0 is valid, so -1 is unknown */ raw_height = raw_width = fuji_width = fuji_layout = cr2_slice[0] = 0; maximum = height = width = top_margin = left_margin = 0; cdesc[0] = desc[0] = artist[0] = make[0] = model[0] = model2[0] = 0; iso_speed = shutter = aperture = focal_len = unique_id = 0; tiff_nifds = 0; memset (tiff_ifd, 0, sizeof tiff_ifd); memset (gpsdata, 0, sizeof gpsdata); memset (cblack, 0, sizeof cblack); memset (white, 0, sizeof white); memset (mask, 0, sizeof mask); thumb_offset = thumb_length = thumb_width = thumb_height = 0; load_raw = thumb_load_raw = 0; write_thumb = &CLASS jpeg_thumb; data_offset = meta_length = tiff_bps = tiff_compress = 0; kodak_cbpp = zero_after_ff = dng_version = load_flags = 0; timestamp = shot_order = tiff_samples = black = is_foveon = 0; mix_green = profile_length = data_error = zero_is_bad = 0; pixel_aspect = is_raw = raw_color = 1; tile_width = tile_length = 0; for (i=0; i < 4; i++) { cam_mul[i] = i == 1; pre_mul[i] = i < 3; FORC3 cmatrix[c][i] = 0; FORC3 rgb_cam[c][i] = c == i; } colors = 3; for (i=0; i < 0x10000; i++) curve[i] = i; order = get2(); hlen = get4(); fseek (ifp, 0, SEEK_SET); fread (head, 1, 32, ifp); fseek (ifp, 0, SEEK_END); flen = fsize = ftell(ifp); if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || (cp = (char *) memmem (head, 32, "IIII", 4))) { parse_phase_one (cp-head); if (cp-head && parse_tiff(0)) apply_tiff(); } else if (order == 0x4949 || order == 0x4d4d) { if (!memcmp (head+6,"HEAPCCDR",8)) { data_offset = hlen; parse_ciff (hlen, flen - hlen); } else if (parse_tiff(0)) apply_tiff(); } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && !memcmp (head+6,"Exif",4)) { fseek (ifp, 4, SEEK_SET); data_offset = 4 + get2(); fseek (ifp, data_offset, SEEK_SET); if (fgetc(ifp) != 0xff) parse_tiff(12); thumb_offset = 0; } else if (!memcmp (head+25,"ARECOYK",7)) { strcpy (make, "Contax"); strcpy (model,"N Digital"); fseek (ifp, 33, SEEK_SET); get_timestamp(1); fseek (ifp, 60, SEEK_SET); FORC4 cam_mul[c ^ (c >> 1)] = get4(); } else if (!strcmp (head, "PXN")) { strcpy (make, "Logitech"); strcpy (model,"Fotoman Pixtura"); } else if (!strcmp (head, "qktk")) { strcpy (make, "Apple"); strcpy (model,"QuickTake 100"); load_raw = &CLASS quicktake_100_load_raw; } else if (!strcmp (head, "qktn")) { strcpy (make, "Apple"); strcpy (model,"QuickTake 150"); load_raw = &CLASS kodak_radc_load_raw; } else if (!memcmp (head,"FUJIFILM",8)) { fseek (ifp, 84, SEEK_SET); thumb_offset = get4(); thumb_length = get4(); fseek (ifp, 92, SEEK_SET); parse_fuji (get4()); if (thumb_offset > 120) { fseek (ifp, 120, SEEK_SET); is_raw += (i = get4()) && 1; if (is_raw == 2 && shot_select) parse_fuji (i); } load_raw = &CLASS unpacked_load_raw; fseek (ifp, 100+28*(shot_select > 0), SEEK_SET); parse_tiff (data_offset = get4()); parse_tiff (thumb_offset+12); apply_tiff(); } else if (!memcmp (head,"RIFF",4)) { fseek (ifp, 0, SEEK_SET); parse_riff(); } else if (!memcmp (head,"\0\001\0\001\0@",6)) { fseek (ifp, 6, SEEK_SET); fread (make, 1, 8, ifp); fread (model, 1, 8, ifp); fread (model2, 1, 16, ifp); data_offset = get2(); get2(); raw_width = get2(); raw_height = get2(); load_raw = &CLASS nokia_load_raw; filters = 0x61616161; } else if (!memcmp (head,"NOKIARAW",8)) { strcpy (make, "NOKIA"); strcpy (model, "X2"); order = 0x4949; fseek (ifp, 300, SEEK_SET); data_offset = get4(); i = get4(); width = get2(); height = get2(); data_offset += i - width * 5 / 4 * height; load_raw = &CLASS nokia_load_raw; filters = 0x61616161; } else if (!memcmp (head,"ARRI",4)) { order = 0x4949; fseek (ifp, 20, SEEK_SET); width = get4(); height = get4(); strcpy (make, "ARRI"); fseek (ifp, 668, SEEK_SET); fread (model, 1, 64, ifp); data_offset = 4096; load_raw = &CLASS packed_load_raw; load_flags = 88; filters = 0x61616161; } else if (!memcmp (head+4,"RED1",4)) { strcpy (make, "RED"); strcpy (model,"ONE"); parse_redcine(); load_raw = &CLASS redcine_load_raw; gamma_curve (1/2.4, 12.92, 1, 4095); filters = 0x49494949; } else if (!memcmp (head,"DSC-Image",9)) parse_rollei(); else if (!memcmp (head,"PWAD",4)) parse_sinar_ia(); else if (!memcmp (head,"\0MRM",4)) parse_minolta(0); else if (!memcmp (head,"FOVb",4)) parse_foveon(); else if (!memcmp (head,"CI",2)) parse_cine(); else for (zero_fsize=i=0; i < (int) sizeof table / (int) sizeof *table; i++) if (fsize == table[i].fsize) { strcpy (make, table[i].make ); strcpy (model, table[i].model); if (table[i].withjpeg) parse_external_jpeg(); } if (zero_fsize) fsize = 0; if (make[0] == 0) parse_smal (0, flen); if (make[0] == 0) parse_jpeg (is_raw = 0); for (i=0; i < (int) sizeof corp / (int) sizeof *corp; i++) if (strstr (make, corp[i])) /* Simplify company names */ strcpy (make, corp[i]); if (!strncmp (make,"KODAK",5) && ((cp = strstr(model," DIGITAL CAMERA")) || (cp = strstr(model," Digital Camera")) || (cp = strstr(model,"FILE VERSION")))) *cp = 0; cp = make + strlen(make); /* Remove trailing spaces */ while (*--cp == ' ') *cp = 0; cp = model + strlen(model); while (*--cp == ' ') *cp = 0; i = strlen(make); /* Remove make from model */ if (!strncasecmp (model, make, i) && model[i++] == ' ') memmove (model, model+i, 64-i); if (!strncmp (model,"FinePix ",8)) strcpy (model, model+8); if (!strncmp (model,"Digital Camera ",15)) strcpy (model, model+15); desc[511] = artist[63] = make[63] = model[63] = model2[63] = 0; if (!is_raw) goto notraw; if (!height) height = raw_height; if (!width) width = raw_width; if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */ { height = 2616; width = 3896; } if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */ { height = 3124; width = 4688; filters = 0x16161616; } if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x"))) { width = 4309; filters = 0x16161616; } if (width >= 4960 && !strncmp(model,"K-5",3)) { left_margin = 10; width = 4950; filters = 0x16161616; } if (width == 4736 && !strcmp(model,"K-7")) { height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; } if (width == 7424 && !strcmp(model,"645D")) { height = 5502; width = 7328; filters = 0x61616161; top_margin = 29; left_margin = 48; } if (height == 3014 && width == 4096) /* Ricoh GX200 */ width = 4014; if (dng_version) { if (filters == UINT_MAX) filters = 0; if (filters) is_raw = tiff_samples; else colors = tiff_samples; if (tiff_compress == 1) load_raw = &CLASS packed_dng_load_raw; if (tiff_compress == 7) load_raw = &CLASS lossless_dng_load_raw; goto dng_skip; } if ((is_canon = !strcmp(make,"Canon"))) load_raw = memcmp (head+6,"HEAPCCDR",8) ? &CLASS lossless_jpeg_load_raw : &CLASS canon_load_raw; if (!strcmp(make,"NIKON")) { if (!load_raw) load_raw = &CLASS packed_load_raw; if (model[0] == 'E') load_flags |= !data_offset << 2 | 2; } if (!strcmp(make,"CASIO")) { load_raw = &CLASS packed_load_raw; maximum = 0xf7f; } /* Set parameters based on camera name (for non-DNG files). */ if (is_foveon) { if (height*2 < width) pixel_aspect = 0.5; if (height > width) pixel_aspect = 2; filters = 0; simple_coeff(0); } else if (is_canon && tiff_bps == 15) { switch (width) { case 3344: width -= 66; case 3872: width -= 6; } if (height > width) SWAP(height,width); filters = 0; load_raw = &CLASS canon_sraw_load_raw; } else if (!strcmp(model,"PowerShot 600")) { height = 613; width = 854; raw_width = 896; pixel_aspect = 607/628.0; colors = 4; filters = 0xe1e4e1e4; load_raw = &CLASS canon_600_load_raw; } else if (!strcmp(model,"PowerShot A5") || !strcmp(model,"PowerShot A5 Zoom")) { height = 773; width = 960; raw_width = 992; pixel_aspect = 256/235.0; colors = 4; filters = 0x1e4e1e4e; goto canon_a5; } else if (!strcmp(model,"PowerShot A50")) { height = 968; width = 1290; raw_width = 1320; colors = 4; filters = 0x1b4e4b1e; goto canon_a5; } else if (!strcmp(model,"PowerShot Pro70")) { height = 1024; width = 1552; colors = 4; filters = 0x1e4b4e1b; goto canon_a5; } else if (!strcmp(model,"PowerShot SD300")) { height = 1752; width = 2344; raw_height = 1766; raw_width = 2400; top_margin = 12; left_margin = 12; goto canon_a5; } else if (!strcmp(model,"PowerShot A460")) { height = 1960; width = 2616; raw_height = 1968; raw_width = 2664; top_margin = 4; left_margin = 4; goto canon_a5; } else if (!strcmp(model,"PowerShot A530")) { height = 1984; width = 2620; raw_height = 1992; raw_width = 2672; top_margin = 6; left_margin = 10; goto canon_a5; } else if (!strcmp(model,"PowerShot A610")) { if (canon_s2is()) strcpy (model+10, "S2 IS"); height = 1960; width = 2616; raw_height = 1968; raw_width = 2672; top_margin = 8; left_margin = 12; goto canon_a5; } else if (!strcmp(model,"PowerShot A620")) { height = 2328; width = 3112; raw_height = 2340; raw_width = 3152; top_margin = 12; left_margin = 36; goto canon_a5; } else if (!strcmp(model,"PowerShot A470")) { height = 2328; width = 3096; raw_height = 2346; raw_width = 3152; top_margin = 6; left_margin = 12; goto canon_a5; } else if (!strcmp(model,"PowerShot A720 IS")) { height = 2472; width = 3298; raw_height = 2480; raw_width = 3336; top_margin = 5; left_margin = 6; goto canon_a5; } else if (!strcmp(model,"PowerShot A630")) { height = 2472; width = 3288; raw_height = 2484; raw_width = 3344; top_margin = 6; left_margin = 12; goto canon_a5; } else if (!strcmp(model,"PowerShot A640")) { height = 2760; width = 3672; raw_height = 2772; raw_width = 3736; top_margin = 6; left_margin = 12; goto canon_a5; } else if (!strcmp(model,"PowerShot A650")) { height = 3024; width = 4032; raw_height = 3048; raw_width = 4104; top_margin = 12; left_margin = 48; goto canon_a5; } else if (!strcmp(model,"PowerShot S3 IS")) { height = 2128; width = 2840; raw_height = 2136; raw_width = 2888; top_margin = 8; left_margin = 44; canon_a5: tiff_bps = 10; load_raw = &CLASS packed_load_raw; load_flags = 40; if (raw_width > 1600) zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX110 IS")) { height = 2760; width = 3684; raw_height = 2772; raw_width = 3720; top_margin = 12; left_margin = 6; load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX120 IS")) { height = 2742; width = 3664; raw_height = 2778; raw_width = 3728; top_margin = 18; left_margin = 16; filters = 0x49494949; load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX20 IS")) { height = 3024; width = 4032; raw_height = 3048; raw_width = 4080; top_margin = 12; left_margin = 24; load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX220 HS")) { height = 3043; width = 4072; raw_height = 3060; raw_width = 4168; mask[0][0] = top_margin = 16; mask[0][2] = top_margin + height; mask[0][3] = left_margin = 92; load_raw = &CLASS packed_load_raw; load_flags = 8; zero_is_bad = 1; } else if (!strcmp(model,"PowerShot SX30 IS")) { height = 3254; width = 4366; raw_height = 3276; raw_width = 4464; top_margin = 10; left_margin = 25; filters = 0x16161616; load_raw = &CLASS packed_load_raw; load_flags = 40; zero_is_bad = 1; } else if (!strcmp(model,"PowerShot Pro90 IS")) { width = 1896; colors = 4; filters = 0xb4b4b4b4; } else if (is_canon && raw_width == 2144) { height = 1550; width = 2088; top_margin = 8; left_margin = 4; if (!strcmp(model,"PowerShot G1")) { colors = 4; filters = 0xb4b4b4b4; } } else if (is_canon && raw_width == 2224) { height = 1448; width = 2176; top_margin = 6; left_margin = 48; } else if (is_canon && raw_width == 2376) { height = 1720; width = 2312; top_margin = 6; left_margin = 12; } else if (is_canon && raw_width == 2672) { height = 1960; width = 2616; top_margin = 6; left_margin = 12; } else if (is_canon && raw_width == 3152) { height = 2056; width = 3088; top_margin = 12; left_margin = 64; if (unique_id == 0x80000170) adobe_coeff ("Canon","EOS 300D"); } else if (is_canon && raw_width == 3160) { height = 2328; width = 3112; top_margin = 12; left_margin = 44; } else if (is_canon && raw_width == 3344) { height = 2472; width = 3288; top_margin = 6; left_margin = 4; } else if (!strcmp(model,"EOS D2000C")) { filters = 0x61616161; black = curve[200]; } else if (is_canon && raw_width == 3516) { top_margin = 14; left_margin = 42; if (unique_id == 0x80000189) adobe_coeff ("Canon","EOS 350D"); goto canon_cr2; } else if (is_canon && raw_width == 3596) { top_margin = 12; left_margin = 74; goto canon_cr2; } else if (is_canon && raw_width == 3744) { height = 2760; width = 3684; top_margin = 16; left_margin = 8; if (unique_id > 0x2720000) { top_margin = 12; left_margin = 52; } } else if (is_canon && raw_width == 3944) { height = 2602; width = 3908; top_margin = 18; left_margin = 30; } else if (is_canon && raw_width == 3948) { top_margin = 18; left_margin = 42; height -= 2; if (unique_id == 0x80000236) adobe_coeff ("Canon","EOS 400D"); if (unique_id == 0x80000254) adobe_coeff ("Canon","EOS 1000D"); goto canon_cr2; } else if (is_canon && raw_width == 3984) { top_margin = 20; left_margin = 76; height -= 2; goto canon_cr2; } else if (is_canon && raw_width == 4104) { height = 3024; width = 4032; top_margin = 12; left_margin = 48; } else if (is_canon && raw_width == 4152) { top_margin = 12; left_margin = 192; goto canon_cr2; } else if (is_canon && raw_width == 4160) { height = 3048; width = 4048; top_margin = 11; left_margin = 104; } else if (is_canon && raw_width == 4176) { height = 3045; width = 4072; left_margin = 96; mask[0][0] = top_margin = 17; mask[0][2] = raw_height; mask[0][3] = 80; filters = 0x49494949; } else if (is_canon && raw_width == 4312) { top_margin = 18; left_margin = 22; height -= 2; if (unique_id == 0x80000176) adobe_coeff ("Canon","EOS 450D"); goto canon_cr2; } else if (is_canon && raw_width == 4352) { top_margin = 18; left_margin = 62; if (unique_id == 0x80000288) adobe_coeff ("Canon","EOS 1100D"); goto canon_cr2; } else if (is_canon && raw_width == 4476) { top_margin = 34; left_margin = 90; goto canon_cr2; } else if (is_canon && raw_width == 4480) { height = 3326; width = 4432; top_margin = 10; left_margin = 12; filters = 0x49494949; } else if (is_canon && raw_width == 4496) { height = 3316; width = 4404; top_margin = 50; left_margin = 80; } else if (is_canon && raw_width == 4832) { top_margin = unique_id == 0x80000261 ? 51:26; left_margin = 62; if (unique_id == 0x80000252) adobe_coeff ("Canon","EOS 500D"); goto canon_cr2; } else if (is_canon && raw_width == 5108) { top_margin = 13; left_margin = 98; goto canon_cr2; } else if (is_canon && raw_width == 5120) { height -= top_margin = 45; left_margin = 142; width = 4916; } else if (is_canon && raw_width == 5280) { top_margin = 52; left_margin = 72; if (unique_id == 0x80000301) adobe_coeff ("Canon","EOS 650D"); goto canon_cr2; } else if (is_canon && raw_width == 5344) { top_margin = 51; left_margin = 142; if (unique_id == 0x80000269) { top_margin = 100; left_margin = 126; height -= 2; adobe_coeff ("Canon","EOS-1D X"); } if (unique_id == 0x80000270) adobe_coeff ("Canon","EOS 550D"); if (unique_id == 0x80000286) adobe_coeff ("Canon","EOS 600D"); goto canon_cr2; } else if (is_canon && raw_width == 5360) { top_margin = 51; left_margin = 158; goto canon_cr2; } else if (is_canon && raw_width == 5568) { top_margin = 38; left_margin = 72; goto canon_cr2; } else if (is_canon && raw_width == 5712) { height = 3752; width = 5640; top_margin = 20; left_margin = 62; } else if (is_canon && raw_width == 5792) { top_margin = 51; left_margin = 158; canon_cr2: height -= top_margin; width -= left_margin; } else if (is_canon && raw_width == 5920) { height = 3870; width = 5796; top_margin = 80; left_margin = 122; } else if (!strcmp(model,"D1")) { cam_mul[0] *= 256/527.0; cam_mul[2] *= 256/317.0; } else if (!strcmp(model,"D1X")) { width -= 4; pixel_aspect = 0.5; } else if (!strcmp(model,"D40X") || !strcmp(model,"D60") || !strcmp(model,"D80") || !strcmp(model,"D3000")) { height -= 3; width -= 4; } else if (!strcmp(model,"D3") || !strcmp(model,"D3S") || !strcmp(model,"D700")) { width -= 4; left_margin = 2; } else if (!strcmp(model,"D3100")) { width -= 28; left_margin = 6; } else if (!strcmp(model,"D5000") || !strcmp(model,"D90")) { width -= 42; } else if (!strcmp(model,"D5100") || !strcmp(model,"D7000")) { width -= 44; } else if (!strcmp(model,"D3200") || !strcmp(model,"D600") || !strcmp(model,"D800")) { width -= 46; } else if (!strcmp(model,"D4")) { width -= 52; left_margin = 2; } else if (!strncmp(model,"D40",3) || !strncmp(model,"D50",3) || !strncmp(model,"D70",3)) { width--; } else if (!strcmp(model,"D100")) { if (load_flags) raw_width = (width += 3) + 3; } else if (!strcmp(model,"D200")) { left_margin = 1; width -= 4; filters = 0x94949494; } else if (!strncmp(model,"D2H",3)) { left_margin = 6; width -= 14; } else if (!strncmp(model,"D2X",3)) { if (width == 3264) width -= 32; else width -= 8; } else if (!strncmp(model,"D300",4)) { width -= 32; } else if (!strcmp(make,"NIKON") && raw_width == 4032) { adobe_coeff ("NIKON","COOLPIX P7700"); } else if (!strncmp(model,"COOLPIX P",9)) { load_flags = 24; filters = 0x94949494; if (model[9] == '7' && iso_speed >= 400) black = 255; } else if (!strncmp(model,"1 ",2)) { height -= 2; } else if (fsize == 1581060) { height = 963; width = 1287; raw_width = 1632; maximum = 0x3f4; colors = 4; filters = 0x1e1e1e1e; simple_coeff(3); pre_mul[0] = 1.2085; pre_mul[1] = 1.0943; pre_mul[3] = 1.1103; goto e900; } else if (fsize == 2465792) { height = 1203; width = 1616; raw_width = 2048; colors = 4; filters = 0x4b4b4b4b; adobe_coeff ("NIKON","E950"); e900: tiff_bps = 10; load_raw = &CLASS packed_load_raw; load_flags = 6; } else if (fsize == 4771840) { height = 1540; width = 2064; colors = 4; filters = 0xe1e1e1e1; load_raw = &CLASS packed_load_raw; load_flags = 6; if (!timestamp && nikon_e995()) strcpy (model, "E995"); if (strcmp(model,"E995")) { filters = 0xb4b4b4b4; simple_coeff(3); pre_mul[0] = 1.196; pre_mul[1] = 1.246; pre_mul[2] = 1.018; } } else if (!strcmp(model,"E2100")) { if (!timestamp && !nikon_e2100()) goto cp_e2500; height = 1206; width = 1616; load_flags = 30; } else if (!strcmp(model,"E2500")) { cp_e2500: strcpy (model, "E2500"); height = 1204; width = 1616; colors = 4; filters = 0x4b4b4b4b; } else if (fsize == 4775936) { height = 1542; width = 2064; load_raw = &CLASS packed_load_raw; load_flags = 30; if (!timestamp) nikon_3700(); if (model[0] == 'E' && atoi(model+1) < 3700) filters = 0x49494949; if (!strcmp(model,"Optio 33WR")) { flip = 1; filters = 0x16161616; } if (make[0] == 'O') { i = find_green (12, 32, 1188864, 3576832); c = find_green (12, 32, 2383920, 2387016); if (abs(i) < abs(c)) { SWAP(i,c); load_flags = 24; } if (i < 0) filters = 0x61616161; } } else if (fsize == 5869568) { height = 1710; width = 2288; filters = 0x16161616; if (!timestamp && minolta_z2()) { strcpy (make, "Minolta"); strcpy (model,"DiMAGE Z2"); } load_raw = &CLASS packed_load_raw; load_flags = 6 + 24*(make[0] == 'M'); } else if (!strcmp(model,"E4500")) { height = 1708; width = 2288; colors = 4; filters = 0xb4b4b4b4; } else if (fsize == 7438336) { height = 1924; width = 2576; colors = 4; filters = 0xb4b4b4b4; } else if (fsize == 8998912) { height = 2118; width = 2832; maximum = 0xf83; load_raw = &CLASS packed_load_raw; load_flags = 30; } else if (!strcmp(model,"FinePix S5100") || !strcmp(model,"FinePix S5500")) { height -= top_margin = 6; } else if (!strcmp(make,"FUJIFILM")) { if (!strcmp(model+7,"S2Pro")) { strcpy (model,"S2Pro"); height = 2144; width = 2880; flip = 6; } else if (load_raw != &CLASS packed_load_raw) maximum = (is_raw == 2 && shot_select) ? 0x2f00 : 0x3e00; top_margin = (raw_height - height) >> 2 << 1; left_margin = (raw_width - width ) >> 2 << 1; if (width == 2848) filters = 0x16161616; if (width == 3328) { width = 3262; left_margin = 34; } if (width == 4952) { left_margin = 0; filters = 2; } if (fuji_layout) raw_width *= is_raw; } else if (!strcmp(model,"RD175")) { height = 986; width = 1534; data_offset = 513; filters = 0x61616161; load_raw = &CLASS minolta_rd175_load_raw; } else if (!strcmp(model,"KD-400Z")) { height = 1712; width = 2312; raw_width = 2336; goto konica_400z; } else if (!strcmp(model,"KD-510Z")) { goto konica_510z; } else if (!strcasecmp(make,"MINOLTA")) { load_raw = &CLASS unpacked_load_raw; maximum = 0xfff; if (!strncmp(model,"DiMAGE A",8)) { if (!strcmp(model,"DiMAGE A200")) filters = 0x49494949; tiff_bps = 12; load_raw = &CLASS packed_load_raw; } else if (!strncmp(model,"ALPHA",5) || !strncmp(model,"DYNAX",5) || !strncmp(model,"MAXXUM",6)) { sprintf (model+20, "DYNAX %-10s", model+6+(model[0]=='M')); adobe_coeff (make, model+20); load_raw = &CLASS packed_load_raw; } else if (!strncmp(model,"DiMAGE G",8)) { if (model[8] == '4') { height = 1716; width = 2304; } else if (model[8] == '5') { konica_510z: height = 1956; width = 2607; raw_width = 2624; } else if (model[8] == '6') { height = 2136; width = 2848; } data_offset += 14; filters = 0x61616161; konica_400z: load_raw = &CLASS unpacked_load_raw; maximum = 0x3df; order = 0x4d4d; } } else if (!strcmp(model,"*ist D")) { load_raw = &CLASS unpacked_load_raw; data_error = -1; } else if (!strcmp(model,"*ist DS")) { height -= 2; } else if (!strcmp(model,"Optio S")) { if (fsize == 3178560) { height = 1540; width = 2064; load_raw = &CLASS eight_bit_load_raw; cam_mul[0] *= 4; cam_mul[2] *= 4; } else { height = 1544; width = 2068; raw_width = 3136; load_raw = &CLASS packed_load_raw; maximum = 0xf7c; } } else if (fsize == 6114240) { height = 1737; width = 2324; raw_width = 3520; load_raw = &CLASS packed_load_raw; maximum = 0xf7a; } else if (!strcmp(model,"Optio 750Z")) { height = 2302; width = 3072; load_raw = &CLASS packed_load_raw; load_flags = 30; } else if (!strcmp(model,"DC-833m")) { height = 2448; width = 3264; order = 0x4949; filters = 0x61616161; load_raw = &CLASS unpacked_load_raw; maximum = 0xfc00; } else if (!strncmp(model,"S85",3)) { height = 2448; width = 3264; raw_width = fsize/height/2; order = 0x4d4d; load_raw = &CLASS unpacked_load_raw; } else if (!strcmp(make,"SAMSUNG") && raw_width == 4704) { height -= top_margin = 8; width -= 2 * (left_margin = 8); load_flags = 32; } else if (!strcmp(make,"SAMSUNG") && raw_width == 5632) { order = 0x4949; height = 3694; top_margin = 2; width = 5574 - (left_margin = 32 + tiff_bps); if (tiff_bps == 12) load_flags = 80; } else if (!strcmp(model,"EX1")) { order = 0x4949; height -= 20; top_margin = 2; if ((width -= 6) > 3682) { height -= 10; width -= 46; top_margin = 8; } } else if (!strcmp(model,"WB2000")) { order = 0x4949; height -= 3; top_margin = 2; if ((width -= 10) > 3718) { height -= 28; width -= 56; top_margin = 8; } } else if (fsize == 20487168) { height = 2808; width = 3648; goto wb550; } else if (fsize == 24000000) { height = 3000; width = 4000; wb550: strcpy (model, "WB550"); order = 0x4d4d; load_raw = &CLASS unpacked_load_raw; load_flags = 6; maximum = 0x3df; } else if (!strcmp(model,"EX2F")) { height = 3045; width = 4070; top_margin = 3; order = 0x4949; filters = 0x49494949; load_raw = &CLASS unpacked_load_raw; } else if (!strcmp(model,"STV680 VGA")) { height = 484; width = 644; load_raw = &CLASS eight_bit_load_raw; flip = 2; filters = 0x16161616; black = 16; } else if (!strcmp(model,"N95")) { height = raw_height - (top_margin = 2); } else if (!strcmp(model,"531C")) { height = 1200; width = 1600; load_raw = &CLASS unpacked_load_raw; filters = 0x49494949; } else if (!strcmp(model,"640x480")) { height = 480; width = 640; load_raw = &CLASS eight_bit_load_raw; gamma_curve (0.45, 4.5, 1, 255); } else if (!strcmp(model,"F-080C")) { height = 768; width = 1024; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"F-145C")) { height = 1040; width = 1392; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"F-201C")) { height = 1200; width = 1600; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"F-510C")) { height = 1958; width = 2588; load_raw = fsize < 7500000 ? &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; data_offset = fsize - width*height*(fsize >> 22); maximum = 0xfff0; } else if (!strcmp(model,"F-810C")) { height = 2469; width = 3272; load_raw = &CLASS unpacked_load_raw; maximum = 0xfff0; } else if (!strcmp(model,"XCD-SX910CR")) { height = 1024; width = 1375; raw_width = 1376; filters = 0x49494949; maximum = 0x3ff; load_raw = fsize < 2000000 ? &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; } else if (!strcmp(model,"2010")) { height = 1207; width = 1608; order = 0x4949; filters = 0x16161616; data_offset = 3212; maximum = 0x3ff; load_raw = &CLASS unpacked_load_raw; } else if (!strcmp(model,"A782")) { height = 3000; width = 2208; filters = 0x61616161; load_raw = fsize < 10000000 ? &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; maximum = 0xffc0; } else if (!strcmp(model,"3320AF")) { height = 1536; raw_width = width = 2048; filters = 0x61616161; load_raw = &CLASS unpacked_load_raw; maximum = 0x3ff; fseek (ifp, 0x300000, SEEK_SET); if ((order = guess_byte_order(0x10000)) == 0x4d4d) { height -= (top_margin = 16); width -= (left_margin = 28); maximum = 0xf5c0; strcpy (make, "ISG"); model[0] = 0; } } else if (!strcmp(make,"Hasselblad")) { if (load_raw == &CLASS lossless_jpeg_load_raw) load_raw = &CLASS hasselblad_load_raw; if (raw_width == 7262) { height = 5444; width = 7248; top_margin = 4; left_margin = 7; filters = 0x61616161; } else if (raw_width == 7410) { height = 5502; width = 7328; top_margin = 4; left_margin = 41; filters = 0x61616161; } else if (raw_width == 9044) { height = 6716; width = 8964; top_margin = 8; left_margin = 40; black += load_flags = 256; maximum = 0x8101; } else if (raw_width == 4090) { strcpy (model, "V96C"); height -= (top_margin = 6); width -= (left_margin = 3) + 7; filters = 0x61616161; } } else if (!strcmp(make,"Sinar")) { if (!memcmp(head,"8BPS",4)) { fseek (ifp, 14, SEEK_SET); height = get4(); width = get4(); filters = 0x61616161; data_offset = 68; } if (!load_raw) load_raw = &CLASS unpacked_load_raw; maximum = 0x3fff; } else if (!strcmp(make,"Leaf")) { maximum = 0x3fff; fseek (ifp, data_offset, SEEK_SET); if (ljpeg_start (&jh, 1) && jh.bits == 15) maximum = 0x1fff; if (tiff_samples > 1) filters = 0; if (tiff_samples > 1 || tile_length < raw_height) { load_raw = &CLASS leaf_hdr_load_raw; raw_width = tile_width; } if ((width | height) == 2048) { if (tiff_samples == 1) { filters = 1; strcpy (cdesc, "RBTG"); strcpy (model, "CatchLight"); top_margin = 8; left_margin = 18; height = 2032; width = 2016; } else { strcpy (model, "DCB2"); top_margin = 10; left_margin = 16; height = 2028; width = 2022; } } else if (width+height == 3144+2060) { if (!model[0]) strcpy (model, "Cantare"); if (width > height) { top_margin = 6; left_margin = 32; height = 2048; width = 3072; filters = 0x61616161; } else { left_margin = 6; top_margin = 32; width = 2048; height = 3072; filters = 0x16161616; } if (!cam_mul[0] || model[0] == 'V') filters = 0; else is_raw = tiff_samples; } else if (width == 2116) { strcpy (model, "Valeo 6"); height -= 2 * (top_margin = 30); width -= 2 * (left_margin = 55); filters = 0x49494949; } else if (width == 3171) { strcpy (model, "Valeo 6"); height -= 2 * (top_margin = 24); width -= 2 * (left_margin = 24); filters = 0x16161616; } } else if (!strcmp(make,"LEICA") || !strcmp(make,"Panasonic")) { if ((flen - data_offset) / (raw_width*8/7) == raw_height) load_raw = &CLASS panasonic_load_raw; if (!load_raw) { load_raw = &CLASS unpacked_load_raw; load_flags = 4; } zero_is_bad = 1; if ((height += 12) > raw_height) height = raw_height; for (i=0; i < (int) sizeof pana / (int) sizeof *pana; i++) if (raw_width == pana[i][0] && raw_height == pana[i][1]) { left_margin = pana[i][2]; top_margin = pana[i][3]; width += pana[i][4]; height += pana[i][5]; } filters = 0x01010101 * (uchar) "\x94\x61\x49\x16" [((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3]; } else if (!strcmp(model,"C770UZ")) { height = 1718; width = 2304; filters = 0x16161616; load_raw = &CLASS packed_load_raw; load_flags = 30; } else if (!strcmp(make,"OLYMPUS")) { height += height & 1; filters = exif_cfa; if (width == 4100) width -= 4; if (width == 4080) width -= 24; if (load_raw == &CLASS unpacked_load_raw) load_flags = 4; tiff_bps = 12; if (!strcmp(model,"E-300") || !strcmp(model,"E-500")) { width -= 20; if (load_raw == &CLASS unpacked_load_raw) { maximum = 0xfc3; memset (cblack, 0, sizeof cblack); } } else if (!strcmp(model,"E-330")) { width -= 30; if (load_raw == &CLASS unpacked_load_raw) maximum = 0xf79; } else if (!strcmp(model,"SP550UZ")) { thumb_length = flen - (thumb_offset = 0xa39800); thumb_height = 480; thumb_width = 640; } else if (!strcmp(model,"XZ-2")) { load_raw = &CLASS packed_load_raw; load_flags = 24; } } else if (!strcmp(model,"N Digital")) { height = 2047; width = 3072; filters = 0x61616161; data_offset = 0x1a00; load_raw = &CLASS packed_load_raw; } else if (!strcmp(model,"DSC-F828")) { width = 3288; left_margin = 5; mask[1][3] = -17; data_offset = 862144; load_raw = &CLASS sony_load_raw; filters = 0x9c9c9c9c; colors = 4; strcpy (cdesc, "RGBE"); } else if (!strcmp(model,"DSC-V3")) { width = 3109; left_margin = 59; mask[0][1] = 9; data_offset = 787392; load_raw = &CLASS sony_load_raw; } else if (!strcmp(make,"SONY") && raw_width == 3984) { adobe_coeff ("SONY","DSC-R1"); width = 3925; order = 0x4d4d; } else if (!strcmp(make,"SONY") && raw_width == 5504) { width -= 8; } else if (!strcmp(make,"SONY") && raw_width == 6048) { width -= 24; } else if (!strcmp(model,"DSLR-A100")) { if (width == 3880) { height--; width = ++raw_width; } else { order = 0x4d4d; load_flags = 2; } filters = 0x61616161; } else if (!strcmp(model,"DSLR-A350")) { height -= 4; } else if (!strcmp(model,"PIXL")) { height -= top_margin = 4; width -= left_margin = 32; gamma_curve (0, 7, 1, 255); } else if (!strcmp(model,"C603v")) { height = 480; width = 640; if (fsize < 614400 || find_green (16, 16, 3840, 5120) < 25) goto c603v; strcpy (model,"KAI-0340"); height -= 3; data_offset = 3840; order = 0x4949; load_raw = &CLASS unpacked_load_raw; } else if (!strcmp(model,"C603y")) { height = 2134; width = 2848; c603v: filters = 0; load_raw = &CLASS kodak_yrgb_load_raw; gamma_curve (0, 3.875, 1, 255); } else if (!strcmp(model,"C603")) { raw_height = height = 2152; raw_width = width = 2864; goto c603; } else if (!strcmp(model,"C330")) { height = 1744; width = 2336; raw_height = 1779; raw_width = 2338; top_margin = 33; left_margin = 1; c603: order = 0x4949; if ((data_offset = fsize - raw_height*raw_width)) { fseek (ifp, 168, SEEK_SET); read_shorts (curve, 256); } else gamma_curve (0, 3.875, 1, 255); load_raw = &CLASS eight_bit_load_raw; } else if (!strncasecmp(model,"EasyShare",9)) { data_offset = data_offset < 0x15000 ? 0x15000 : 0x17000; load_raw = &CLASS packed_load_raw; } else if (!strcasecmp(make,"KODAK")) { if (filters == UINT_MAX) filters = 0x61616161; if (!strncmp(model,"NC2000",6)) { width -= 4; left_margin = 2; } else if (!strcmp(model,"EOSDCS3B")) { width -= 4; left_margin = 2; } else if (!strcmp(model,"EOSDCS1")) { width -= 4; left_margin = 2; } else if (!strcmp(model,"DCS420")) { width -= 4; left_margin = 2; } else if (!strncmp(model,"DCS460 ",7)) { model[6] = 0; width -= 4; left_margin = 2; } else if (!strcmp(model,"DCS460A")) { width -= 4; left_margin = 2; colors = 1; filters = 0; } else if (!strcmp(model,"DCS660M")) { black = 214; colors = 1; filters = 0; } else if (!strcmp(model,"DCS760M")) { colors = 1; filters = 0; } if (!strcmp(model+4,"20X")) strcpy (cdesc, "MYCY"); if (strstr(model,"DC25")) { strcpy (model, "DC25"); data_offset = 15424; } if (!strncmp(model,"DC2",3)) { raw_height = height = 242; if (flen < 100000) { raw_width = 256; width = 249; pixel_aspect = (4.0*height) / (3.0*width); } else { raw_width = 512; width = 501; pixel_aspect = (493.0*height) / (373.0*width); } data_offset += raw_width + 1; colors = 4; filters = 0x8d8d8d8d; simple_coeff(1); pre_mul[1] = 1.179; pre_mul[2] = 1.209; pre_mul[3] = 1.036; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"40")) { strcpy (model, "DC40"); height = 512; width = 768; data_offset = 1152; load_raw = &CLASS kodak_radc_load_raw; } else if (strstr(model,"DC50")) { strcpy (model, "DC50"); height = 512; width = 768; data_offset = 19712; load_raw = &CLASS kodak_radc_load_raw; } else if (strstr(model,"DC120")) { strcpy (model, "DC120"); height = 976; width = 848; pixel_aspect = height/0.75/width; load_raw = tiff_compress == 7 ? &CLASS kodak_jpeg_load_raw : &CLASS kodak_dc120_load_raw; } else if (!strcmp(model,"DCS200")) { thumb_height = 128; thumb_width = 192; thumb_offset = 6144; thumb_misc = 360; write_thumb = &CLASS layer_thumb; height = 1024; width = 1536; data_offset = 79872; load_raw = &CLASS eight_bit_load_raw; black = 17; } } else if (!strcmp(model,"Fotoman Pixtura")) { height = 512; width = 768; data_offset = 3632; load_raw = &CLASS kodak_radc_load_raw; filters = 0x61616161; simple_coeff(2); } else if (!strncmp(model,"QuickTake",9)) { if (head[5]) strcpy (model+10, "200"); fseek (ifp, 544, SEEK_SET); height = get2(); width = get2(); data_offset = (get4(),get2()) == 30 ? 738:736; if (height > width) { SWAP(height,width); fseek (ifp, data_offset-6, SEEK_SET); flip = ~get2() & 3 ? 5:6; } filters = 0x61616161; } else if (!strcmp(make,"Rollei") && !load_raw) { switch (raw_width) { case 1316: height = 1030; width = 1300; top_margin = 1; left_margin = 6; break; case 2568: height = 1960; width = 2560; top_margin = 2; left_margin = 8; } filters = 0x16161616; load_raw = &CLASS rollei_load_raw; } else if (!strcmp(model,"PC-CAM 600")) { height = 768; data_offset = width = 1024; filters = 0x49494949; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"QV-2000UX")) { height = 1208; width = 1632; data_offset = width * 2; load_raw = &CLASS eight_bit_load_raw; } else if (fsize == 3217760) { height = 1546; width = 2070; raw_width = 2080; load_raw = &CLASS eight_bit_load_raw; } else if (!strcmp(model,"QV-4000")) { height = 1700; width = 2260; load_raw = &CLASS unpacked_load_raw; maximum = 0xffff; } else if (!strcmp(model,"QV-5700")) { height = 1924; width = 2576; raw_width = 3232; tiff_bps = 10; } else if (!strcmp(model,"QV-R41")) { height = 1720; width = 2312; raw_width = 3520; left_margin = 2; } else if (!strcmp(model,"QV-R51")) { height = 1926; width = 2580; raw_width = 3904; } else if (!strcmp(model,"EX-S20")) { height = 1208; width = 1620; raw_width = 2432; flip = 3; } else if (!strcmp(model,"EX-S100")) { height = 1544; width = 2058; raw_width = 3136; } else if (!strcmp(model,"EX-Z50")) { height = 1931; width = 2570; raw_width = 3904; } else if (!strcmp(model,"EX-Z500")) { height = 1937; width = 2577; raw_width = 3904; filters = 0x16161616; } else if (!strcmp(model,"EX-Z55")) { height = 1960; width = 2570; raw_width = 3904; } else if (!strcmp(model,"EX-Z60")) { height = 2145; width = 2833; raw_width = 3584; filters = 0x16161616; tiff_bps = 10; } else if (!strcmp(model,"EX-Z75")) { height = 2321; width = 3089; raw_width = 4672; maximum = 0xfff; } else if (!strcmp(model,"EX-Z750")) { height = 2319; width = 3087; raw_width = 4672; maximum = 0xfff; } else if (!strcmp(model,"EX-Z850")) { height = 2468; width = 3279; raw_width = 4928; maximum = 0xfff; } else if (!strcmp(model,"EX-Z8")) { height = 2467; width = 3281; raw_height = 2502; raw_width = 4992; maximum = 0xfff; } else if (fsize == 15499264) { /* EX-Z1050 or EX-Z1080 */ height = 2752; width = 3672; raw_width = 5632; } else if (!strcmp(model,"EX-ZR100")) { height = 3044; width = 4072; raw_width = 4096; load_flags = 80; } else if (!strcmp(model,"EX-P505")) { height = 1928; width = 2568; raw_width = 3852; maximum = 0xfff; } else if (fsize == 9313536) { /* EX-P600 or QV-R61 */ height = 2142; width = 2844; raw_width = 4288; } else if (!strcmp(model,"EX-P700")) { height = 2318; width = 3082; raw_width = 4672; } if (!model[0]) sprintf (model, "%dx%d", width, height); if (filters == UINT_MAX) filters = 0x94949494; if (raw_color) adobe_coeff (make, model); if (load_raw == &CLASS kodak_radc_load_raw) if (raw_color) adobe_coeff ("Apple","Quicktake"); if (thumb_offset && !thumb_height) { fseek (ifp, thumb_offset, SEEK_SET); if (ljpeg_start (&jh, 1)) { thumb_width = jh.wide; thumb_height = jh.high; } } dng_skip: if (fuji_width) { fuji_width = width >> !fuji_layout; if (~fuji_width & 1) filters = 0x49494949; width = (height >> fuji_layout) + fuji_width; height = width - 1; pixel_aspect = 1; } else { if (raw_height < height) raw_height = height; if (raw_width < width ) raw_width = width; } if (!tiff_bps) tiff_bps = 12; if (!maximum) maximum = (1 << tiff_bps) - 1; if (!load_raw || height < 22) is_raw = 0; #ifndef HAVE_LIBJASPER if (load_raw == &CLASS redcine_load_raw) { dcraw_message (DCRAW_ERROR,_("%s: You must link dcraw with %s!!\n"), ifname_display, "libjasper"); is_raw = 0; } #endif #ifndef HAVE_LIBJPEG if (load_raw == &CLASS kodak_jpeg_load_raw || load_raw == &CLASS lossy_dng_load_raw) { dcraw_message (DCRAW_ERROR,_("%s: You must link dcraw with %s!!\n"), ifname, "libjpeg"); is_raw = 0; } #endif if (!cdesc[0]) strcpy (cdesc, colors == 3 ? "RGBG":"GMCY"); if (!raw_height) raw_height = height; if (!raw_width ) raw_width = width; if (filters && colors == 3) filters |= ((filters >> 2 & 0x22222222) | (filters << 2 & 0x88888888)) & filters << 1; notraw: if (flip == -1) flip = tiff_flip; if (flip == -1) flip = 0; } #ifndef NO_LCMS void CLASS apply_profile (const char *input, const char *output) { char *prof; cmsHPROFILE hInProfile=0, hOutProfile=0; cmsHTRANSFORM hTransform; FILE *fp; unsigned size; cmsErrorAction (LCMS_ERROR_SHOW); if (strcmp (input, "embed")) hInProfile = cmsOpenProfileFromFile (input, "r"); else if (profile_length) { prof = (char *) malloc (profile_length); merror (prof, "apply_profile()"); fseek (ifp, profile_offset, SEEK_SET); fread (prof, 1, profile_length, ifp); hInProfile = cmsOpenProfileFromMem (prof, profile_length); free (prof); } else dcraw_message (DCRAW_ERROR,_("%s has no embedded profile.\n"), ifname_display); if (!hInProfile) return; if (!output) hOutProfile = cmsCreate_sRGBProfile(); else if ((fp = fopen (output, "rb"))) { fread (&size, 4, 1, fp); fseek (fp, 0, SEEK_SET); oprof = (unsigned *) malloc (size = ntohl(size)); merror (oprof, "apply_profile()"); fread (oprof, 1, size, fp); fclose (fp); if (!(hOutProfile = cmsOpenProfileFromMem (oprof, size))) { free (oprof); oprof = 0; } } else dcraw_message (DCRAW_ERROR,_("Cannot open file %s!\n"), output); if (!hOutProfile) goto quit; dcraw_message (DCRAW_VERBOSE,_("Applying color profile...\n")); hTransform = cmsCreateTransform (hInProfile, TYPE_RGBA_16, hOutProfile, TYPE_RGBA_16, INTENT_PERCEPTUAL, 0); cmsDoTransform (hTransform, image, image, width*height); raw_color = 1; /* Don't use rgb_cam with a profile */ cmsDeleteTransform (hTransform); cmsCloseProfile (hOutProfile); quit: cmsCloseProfile (hInProfile); } #endif void CLASS convert_to_rgb() { int row, col, c, i, j, k; ushort *img; float out[3], out_cam[3][4]; double num, inverse[3][3]; static const double xyzd50_srgb[3][3] = { { 0.436083, 0.385083, 0.143055 }, { 0.222507, 0.716888, 0.060608 }, { 0.013930, 0.097097, 0.714022 } }; static const double rgb_rgb[3][3] = { { 1,0,0 }, { 0,1,0 }, { 0,0,1 } }; static const double adobe_rgb[3][3] = { { 0.715146, 0.284856, 0.000000 }, { 0.000000, 1.000000, 0.000000 }, { 0.000000, 0.041166, 0.958839 } }; static const double wide_rgb[3][3] = { { 0.593087, 0.404710, 0.002206 }, { 0.095413, 0.843149, 0.061439 }, { 0.011621, 0.069091, 0.919288 } }; static const double prophoto_rgb[3][3] = { { 0.529317, 0.330092, 0.140588 }, { 0.098368, 0.873465, 0.028169 }, { 0.016879, 0.117663, 0.865457 } }; static const double (*out_rgb[])[3] = { rgb_rgb, adobe_rgb, wide_rgb, prophoto_rgb, xyz_rgb }; static const char *name[] = { "sRGB", "Adobe RGB (1998)", "WideGamut D65", "ProPhoto D65", "XYZ" }; static const unsigned phead[] = { 1024, 0, 0x2100000, 0x6d6e7472, 0x52474220, 0x58595a20, 0, 0, 0, 0x61637370, 0, 0, 0x6e6f6e65, 0, 0, 0, 0, 0xf6d6, 0x10000, 0xd32d }; unsigned pbody[] = { 10, 0x63707274, 0, 36, /* cprt */ 0x64657363, 0, 40, /* desc */ 0x77747074, 0, 20, /* wtpt */ 0x626b7074, 0, 20, /* bkpt */ 0x72545243, 0, 14, /* rTRC */ 0x67545243, 0, 14, /* gTRC */ 0x62545243, 0, 14, /* bTRC */ 0x7258595a, 0, 20, /* rXYZ */ 0x6758595a, 0, 20, /* gXYZ */ 0x6258595a, 0, 20 }; /* bXYZ */ static const unsigned pwhite[] = { 0xf351, 0x10000, 0x116cc }; unsigned pcurve[] = { 0x63757276, 0, 1, 0x1000000 }; gamma_curve (gamm[0], gamm[1], 0, 0); memcpy (out_cam, rgb_cam, sizeof out_cam); raw_color |= colors == 1 || document_mode || output_color < 1 || output_color > 5; if (!raw_color) { oprof = (unsigned *) calloc (phead[0], 1); merror (oprof, "convert_to_rgb()"); memcpy (oprof, phead, sizeof phead); if (output_color == 5) oprof[4] = oprof[5]; oprof[0] = 132 + 12*pbody[0]; for (i=0; i < (int)pbody[0]; i++) { oprof[oprof[0]/4] = i ? (i > 1 ? 0x58595a20 : 0x64657363) : 0x74657874; pbody[i*3+2] = oprof[0]; oprof[0] += (pbody[i*3+3] + 3) & -4; } memcpy (oprof+32, pbody, sizeof pbody); oprof[pbody[5]/4+2] = strlen(name[output_color-1]) + 1; memcpy ((char *)oprof+pbody[8]+8, pwhite, sizeof pwhite); pcurve[3] = (short)(256/gamm[5]+0.5) << 16; for (i=4; i < 7; i++) memcpy ((char *)oprof+pbody[i*3+2], pcurve, sizeof pcurve); pseudoinverse ((double (*)[3]) out_rgb[output_color-1], inverse, 3); for (i=0; i < 3; i++) for (j=0; j < 3; j++) { for (num = k=0; k < 3; k++) num += xyzd50_srgb[i][k] * inverse[j][k]; oprof[pbody[j*3+23]/4+i+2] = num * 0x10000 + 0.5; } for (i=0; i < (int)phead[0]/4; i++) oprof[i] = htonl(oprof[i]); strcpy ((char *)oprof+pbody[2]+8, "auto-generated by dcraw"); strcpy ((char *)oprof+pbody[5]+12, name[output_color-1]); for (i=0; i < 3; i++) for (j=0; j < colors; j++) for (out_cam[i][j] = k=0; k < 3; k++) out_cam[i][j] += out_rgb[output_color-1][i][k] * rgb_cam[k][j]; } dcraw_message (DCRAW_VERBOSE, raw_color ? _("Building histograms...\n") : _("Converting to %s colorspace...\n"), name[output_color-1]); memset (histogram, 0, sizeof histogram); for (img=image[0], row=0; row < height; row++) for (col=0; col < width; col++, img+=4) { if (!raw_color) { out[0] = out[1] = out[2] = 0; FORCC { out[0] += out_cam[0][c] * img[c]; out[1] += out_cam[1][c] * img[c]; out[2] += out_cam[2][c] * img[c]; } FORC3 img[c] = CLIP((int) out[c]); } else if (document_mode) img[0] = img[fcol(row,col)]; FORCC histogram[c][img[c] >> 3]++; } if (colors == 4 && output_color) colors = 3; if (document_mode && filters) colors = 1; } /* Start of functions copied to dcraw_indi.c (UF) */ void CLASS fuji_rotate() { int i, row, col; double step; float r, c, fr, fc; int ur, uc; ushort wide, high, (*img)[4], (*pix)[4]; if (!fuji_width) return; dcraw_message (DCRAW_VERBOSE,_("Rotating image 45 degrees...\n")); fuji_width = (fuji_width - 1 + shrink) >> shrink; step = sqrt(0.5); wide = fuji_width / step; high = (height - fuji_width) / step; img = (ushort (*)[4]) calloc (wide*high, sizeof *img); merror (img, "fuji_rotate()"); for (row=0; row < high; row++) for (col=0; col < wide; col++) { ur = r = fuji_width + (row-col)*step; uc = c = (row+col)*step; if (ur > height-2 || uc > width-2) continue; fr = r - ur; fc = c - uc; pix = image + ur*width + uc; for (i=0; i < colors; i++) img[row*wide+col][i] = (pix[ 0][i]*(1-fc) + pix[ 1][i]*fc) * (1-fr) + (pix[width][i]*(1-fc) + pix[width+1][i]*fc) * fr; } free (image); width = wide; height = high; image = img; fuji_width = 0; } /* End of functions copied to dcraw_indi.c (UF) */ void CLASS stretch() { ushort newdim, (*img)[4], *pix0, *pix1; int row, col, c; double rc, frac; if (pixel_aspect == 1) return; dcraw_message (DCRAW_VERBOSE,_("Stretching the image...\n")); if (pixel_aspect < 1) { newdim = height / pixel_aspect + 0.5; img = (ushort (*)[4]) calloc (width*newdim, sizeof *img); merror (img, "stretch()"); for (rc=row=0; row < newdim; row++, rc+=pixel_aspect) { frac = rc - (c = rc); pix0 = pix1 = image[c*width]; if (c+1 < height) pix1 += width*4; for (col=0; col < width; col++, pix0+=4, pix1+=4) FORCC img[row*width+col][c] = pix0[c]*(1-frac) + pix1[c]*frac + 0.5; } height = newdim; } else { newdim = width * pixel_aspect + 0.5; img = (ushort (*)[4]) calloc (height*newdim, sizeof *img); merror (img, "stretch()"); for (rc=col=0; col < newdim; col++, rc+=1/pixel_aspect) { frac = rc - (c = rc); pix0 = pix1 = image[c]; if (c+1 < width) pix1 += 4; for (row=0; row < height; row++, pix0+=width*4, pix1+=width*4) FORCC img[row*newdim+col][c] = pix0[c]*(1-frac) + pix1[c]*frac + 0.5; } width = newdim; } free (image); image = img; } int CLASS flip_index (int row, int col) { if (flip & 4) SWAP(row,col); if (flip & 2) row = iheight - 1 - row; if (flip & 1) col = iwidth - 1 - col; return row * iwidth + col; } struct tiff_tag { ushort tag, type; int count; union { char c[4]; short s[2]; int i; } val; }; struct tiff_hdr { ushort order, magic; int ifd; ushort pad, ntag; struct tiff_tag tag[23]; int nextifd; ushort pad2, nexif; struct tiff_tag exif[4]; ushort pad3, ngps; struct tiff_tag gpst[10]; short bps[4]; int rat[10]; unsigned gps[26]; char desc[512], make[64], model[64], soft[32], date[20], artist[64]; }; void CLASS tiff_set (ushort *ntag, ushort tag, ushort type, int count, int val) { struct tiff_tag *tt; int c; tt = (struct tiff_tag *)(ntag+1) + (*ntag)++; tt->tag = tag; tt->type = type; tt->count = count; if (type < 3 && count <= 4) FORC(4) tt->val.c[c] = val >> (c << 3); else if (type == 3 && count <= 2) FORC(2) tt->val.s[c] = val >> (c << 4); else tt->val.i = val; } #define TOFF(ptr) ((char *)(&(ptr)) - (char *)th) void CLASS tiff_head (struct tiff_hdr *th, int full) { int c, psize=0; struct tm *t; memset (th, 0, sizeof *th); th->order = htonl(0x4d4d4949) >> 16; th->magic = 42; th->ifd = 10; if (full) { tiff_set (&th->ntag, 254, 4, 1, 0); tiff_set (&th->ntag, 256, 4, 1, width); tiff_set (&th->ntag, 257, 4, 1, height); tiff_set (&th->ntag, 258, 3, colors, output_bps); if (colors > 2) th->tag[th->ntag-1].val.i = TOFF(th->bps); FORC4 th->bps[c] = output_bps; tiff_set (&th->ntag, 259, 3, 1, 1); tiff_set (&th->ntag, 262, 3, 1, 1 + (colors > 1)); } tiff_set (&th->ntag, 270, 2, 512, TOFF(th->desc)); tiff_set (&th->ntag, 271, 2, 64, TOFF(th->make)); tiff_set (&th->ntag, 272, 2, 64, TOFF(th->model)); if (full) { if (oprof) psize = ntohl(oprof[0]); tiff_set (&th->ntag, 273, 4, 1, sizeof *th + psize); tiff_set (&th->ntag, 277, 3, 1, colors); tiff_set (&th->ntag, 278, 4, 1, height); tiff_set (&th->ntag, 279, 4, 1, height*width*colors*output_bps/8); } else tiff_set (&th->ntag, 274, 3, 1, "12435867"[flip]-'0'); tiff_set (&th->ntag, 282, 5, 1, TOFF(th->rat[0])); tiff_set (&th->ntag, 283, 5, 1, TOFF(th->rat[2])); tiff_set (&th->ntag, 284, 3, 1, 1); tiff_set (&th->ntag, 296, 3, 1, 2); tiff_set (&th->ntag, 305, 2, 32, TOFF(th->soft)); tiff_set (&th->ntag, 306, 2, 20, TOFF(th->date)); tiff_set (&th->ntag, 315, 2, 64, TOFF(th->artist)); tiff_set (&th->ntag, 34665, 4, 1, TOFF(th->nexif)); if (psize) tiff_set (&th->ntag, 34675, 7, psize, sizeof *th); tiff_set (&th->nexif, 33434, 5, 1, TOFF(th->rat[4])); tiff_set (&th->nexif, 33437, 5, 1, TOFF(th->rat[6])); tiff_set (&th->nexif, 34855, 3, 1, iso_speed); tiff_set (&th->nexif, 37386, 5, 1, TOFF(th->rat[8])); if (gpsdata[1]) { tiff_set (&th->ntag, 34853, 4, 1, TOFF(th->ngps)); tiff_set (&th->ngps, 0, 1, 4, 0x202); tiff_set (&th->ngps, 1, 2, 2, gpsdata[29]); tiff_set (&th->ngps, 2, 5, 3, TOFF(th->gps[0])); tiff_set (&th->ngps, 3, 2, 2, gpsdata[30]); tiff_set (&th->ngps, 4, 5, 3, TOFF(th->gps[6])); tiff_set (&th->ngps, 5, 1, 1, gpsdata[31]); tiff_set (&th->ngps, 6, 5, 1, TOFF(th->gps[18])); tiff_set (&th->ngps, 7, 5, 3, TOFF(th->gps[12])); tiff_set (&th->ngps, 18, 2, 12, TOFF(th->gps[20])); tiff_set (&th->ngps, 29, 2, 12, TOFF(th->gps[23])); memcpy (th->gps, gpsdata, sizeof th->gps); } th->rat[0] = th->rat[2] = 300; th->rat[1] = th->rat[3] = 1; FORC(6) th->rat[4+c] = 1000000; th->rat[4] *= shutter; th->rat[6] *= aperture; th->rat[8] *= focal_len; strncpy (th->desc, desc, 512); strncpy (th->make, make, 64); strncpy (th->model, model, 64); strcpy (th->soft, "dcraw v"DCRAW_VERSION); t = localtime (×tamp); sprintf (th->date, "%04d:%02d:%02d %02d:%02d:%02d", t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); strncpy (th->artist, artist, 64); } void CLASS jpeg_thumb() { char *thumb; ushort exif[5]; struct tiff_hdr th; thumb = (char *) malloc (thumb_length); merror (thumb, "jpeg_thumb()"); fread (thumb, 1, thumb_length, ifp); fputc (0xff, ofp); fputc (0xd8, ofp); if (strcmp (thumb+6, "Exif")) { memcpy (exif, "\xff\xe1 Exif\0\0", 10); exif[1] = htons (8 + sizeof th); fwrite (exif, 1, sizeof exif, ofp); tiff_head (&th, 0); fwrite (&th, 1, sizeof th, ofp); } fwrite (thumb+2, 1, thumb_length-2, ofp); free (thumb); } void CLASS write_ppm_tiff() { struct tiff_hdr th; uchar *ppm; ushort *ppm2; int c, row, col, soff, rstep, cstep; int perc, val, total, white=0x2000; perc = width * height * 0.01; /* 99th percentile white level */ if (fuji_width) perc /= 2; if (!((highlight & ~2) || no_auto_bright)) for (white=c=0; c < colors; c++) { for (val=0x2000, total=0; --val > 32; ) if ((total += histogram[c][val]) > perc) break; if (white < val) white = val; } gamma_curve (gamm[0], gamm[1], 2, (white << 3)/bright); iheight = height; iwidth = width; if (flip & 4) SWAP(height,width); ppm = (uchar *) calloc (width, colors*output_bps/8); ppm2 = (ushort *) ppm; merror (ppm, "write_ppm_tiff()"); if (output_tiff) { tiff_head (&th, 1); fwrite (&th, sizeof th, 1, ofp); if (oprof) fwrite (oprof, ntohl(oprof[0]), 1, ofp); } else if (colors > 3) fprintf (ofp, "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\nTUPLTYPE %s\nENDHDR\n", width, height, colors, (1 << output_bps)-1, cdesc); else fprintf (ofp, "P%d\n%d %d\n%d\n", colors/2+5, width, height, (1 << output_bps)-1); soff = flip_index (0, 0); cstep = flip_index (0, 1) - soff; rstep = flip_index (1, 0) - flip_index (0, width); for (row=0; row < height; row++, soff += rstep) { for (col=0; col < width; col++, soff += cstep) if (output_bps == 8) FORCC ppm [col*colors+c] = curve[image[soff][c]] >> 8; else FORCC ppm2[col*colors+c] = curve[image[soff][c]]; if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa) swab ((const char *)ppm2, (char *)ppm2, width*colors*2); /*mingw UF*/ fwrite (ppm, colors*output_bps/8, width, ofp); } free (ppm); } int CLASS main (int argc, const char **argv) { // The following variables are static to supress clobbering warnings. // They are not thread-safe, but main() should never be called in a thread. static int arg, status=0, quality, i, c; static int timestamp_only=0, thumbnail_only=0, identify_only=0; static int user_qual=-1, user_black=-1, user_sat=-1, user_flip=-1; static int use_fuji_rotate=1, write_to_stdout=0, read_from_stdin=0; static const char *sp, *bpfile=0, *dark_frame=0, *write_ext; static char opm, opt, *ofname, *cp; static struct utimbuf ut; #ifndef NO_LCMS static const char *cam_profile=0, *out_profile=0; #endif #ifndef LOCALTIME putenv ((char *) "TZ=UTC"); #endif #ifdef LOCALEDIR setlocale (LC_CTYPE, ""); setlocale (LC_MESSAGES, ""); bindtextdomain ("dcraw", LOCALEDIR); textdomain ("dcraw"); #endif if (argc == 1) { printf(_("\nRaw photo decoder \"dcraw\" v%s"), DCRAW_VERSION); printf(_("\nby Dave Coffin, dcoffin a cybercom o net\n")); printf(_("\nUsage: %s [OPTION]... [FILE]...\n\n"), argv[0]); puts(_("-v Print verbose messages")); puts(_("-c Write image data to standard output")); puts(_("-e Extract embedded thumbnail image")); puts(_("-i Identify files without decoding them")); puts(_("-i -v Identify files and show metadata")); puts(_("-z Change file dates to camera timestamp")); puts(_("-w Use camera white balance, if possible")); puts(_("-a Average the whole image for white balance")); puts(_("-A Average a grey box for white balance")); puts(_("-r Set custom white balance")); puts(_("+M/-M Use/don't use an embedded color matrix")); puts(_("-C Correct chromatic aberration")); puts(_("-P Fix the dead pixels listed in this file")); puts(_("-K Subtract dark frame (16-bit raw PGM)")); puts(_("-k Set the darkness level")); puts(_("-S Set the saturation level")); puts(_("-n Set threshold for wavelet denoising")); puts(_("-H [0-9] Highlight mode (0=clip, 1=unclip, 2=blend, 3+=rebuild)")); puts(_("-t [0-7] Flip image (0=none, 3=180, 5=90CCW, 6=90CW)")); puts(_("-o [0-5] Output colorspace (raw,sRGB,Adobe,Wide,ProPhoto,XYZ)")); #ifndef NO_LCMS puts(_("-o Apply output ICC profile from file")); puts(_("-p Apply camera ICC profile from file or \"embed\"")); #endif puts(_("-d Document mode (no color, no interpolation)")); puts(_("-D Document mode without scaling (totally raw)")); puts(_("-j Don't stretch or rotate raw pixels")); puts(_("-W Don't automatically brighten the image")); puts(_("-b Adjust brightness (default = 1.0)")); puts(_("-g

Set custom gamma curve (default = 2.222 4.5)")); puts(_("-q [0-3] Set the interpolation quality")); puts(_("-h Half-size color image (twice as fast as \"-q 0\")")); puts(_("-f Interpolate RGGB as four colors")); puts(_("-m Apply a 3x3 median filter to R-G and B-G")); puts(_("-s [0..N-1] Select one raw image or \"all\" from each file")); puts(_("-6 Write 16-bit instead of 8-bit")); puts(_("-4 Linear 16-bit, same as \"-6 -W -g 1 1\"")); puts(_("-T Write TIFF instead of PPM")); puts(""); return 1; } argv[argc] = ""; for (arg=1; (((opm = argv[arg][0]) - 2) | 2) == '+'; ) { opt = argv[arg++][1]; if ((cp = (char *) strchr (sp="nbrkStqmHACg", opt))) for (i=0; i < "114111111422"[cp-sp]-'0'; i++) if (!isdigit(argv[arg+i][0])) { dcraw_message (DCRAW_ERROR,_("Non-numeric argument to \"-%c\"\n"), opt); return 1; } switch (opt) { case 'n': threshold = atof(argv[arg++]); break; case 'b': bright = atof(argv[arg++]); break; case 'r': FORC4 user_mul[c] = atof(argv[arg++]); break; case 'C': aber[0] = 1 / atof(argv[arg++]); aber[2] = 1 / atof(argv[arg++]); break; case 'g': gamm[0] = atof(argv[arg++]); gamm[1] = atof(argv[arg++]); if (gamm[0]) gamm[0] = 1/gamm[0]; break; case 'k': user_black = atoi(argv[arg++]); break; case 'S': user_sat = atoi(argv[arg++]); break; case 't': user_flip = atoi(argv[arg++]); break; case 'q': user_qual = atoi(argv[arg++]); break; case 'm': med_passes = atoi(argv[arg++]); break; case 'H': highlight = atoi(argv[arg++]); break; case 's': shot_select = abs(atoi(argv[arg])); multi_out = !strcmp(argv[arg++],"all"); break; case 'o': if (isdigit(argv[arg][0]) && !argv[arg][1]) output_color = atoi(argv[arg++]); #ifndef NO_LCMS else out_profile = argv[arg++]; break; case 'p': cam_profile = argv[arg++]; #endif break; case 'P': bpfile = const_cast(argv[arg++]); break; case 'K': dark_frame = argv[arg++]; break; case 'z': timestamp_only = 1; break; case 'e': thumbnail_only = 1; break; case 'i': identify_only = 1; break; case 'c': write_to_stdout = 1; break; case 'v': verbose = 1; break; case 'h': half_size = 1; /* "-h" implies "-f" */ case 'f': four_color_rgb = 1; break; case 'A': FORC4 greybox[c] = atoi(argv[arg++]); case 'a': use_auto_wb = 1; break; case 'w': use_camera_wb = 1; break; case 'M': use_camera_matrix = (opm == '+'); break; case 'I': read_from_stdin = 1; break; case 'E': document_mode++; case 'D': document_mode++; case 'd': document_mode++; case 'j': use_fuji_rotate = 0; break; case 'W': no_auto_bright = 1; break; case 'T': output_tiff = 1; break; case '4': gamm[0] = gamm[1] = no_auto_bright = 1; case '6': output_bps = 16; break; default: dcraw_message (DCRAW_ERROR,_("Unknown option \"-%c\".\n"), opt); return 1; } } if (use_camera_matrix < 0) use_camera_matrix = use_camera_wb; if (arg == argc) { dcraw_message (DCRAW_ERROR,_("No files to process.\n")); return 1; } if (write_to_stdout) { if (isatty(1)) { dcraw_message (DCRAW_ERROR,_("Will not write an image to the terminal!\n")); return 1; } #if defined(_WIN32) || defined(DJGPP) || defined(__CYGWIN__) if (setmode(1,O_BINARY) < 0) { perror ("setmode()"); return 1; } #endif } for ( ; arg < argc; arg++) { status = 1; raw_image = 0; image = 0; oprof = 0; meta_data = ofname = 0; ofp = stdout; if (setjmp (failure)) { if (fileno(ifp) > 2) fclose(ifp); if (fileno(ofp) > 2) fclose(ofp); status = 1; goto cleanup; } ifname = const_cast(argv[arg]); ifname_display = ifname; if (!(ifp = fopen (ifname, "rb"))) { perror (ifname); continue; } status = (identify(),!is_raw); if (user_flip >= 0) flip = user_flip; switch ((flip+3600) % 360) { case 270: flip = 5; break; case 180: flip = 3; break; case 90: flip = 6; } if (timestamp_only) { if ((status = !timestamp)) dcraw_message (DCRAW_ERROR,_("%s has no timestamp.\n"), ifname); else if (identify_only) printf ("%10ld%10d %s\n", (long) timestamp, shot_order, ifname); else { dcraw_message (DCRAW_VERBOSE,_("%s time set to %d.\n"), ifname, (int) timestamp); ut.actime = ut.modtime = timestamp; utime (ifname, &ut); } goto next; } write_fun = &CLASS write_ppm_tiff; if (thumbnail_only) { if ((status = !thumb_offset)) { dcraw_message (DCRAW_ERROR,_("%s has no thumbnail.\n"), ifname); goto next; } else if (thumb_load_raw) { load_raw = thumb_load_raw; data_offset = thumb_offset; height = thumb_height; width = thumb_width; filters = 0; } else { fseek (ifp, thumb_offset, SEEK_SET); write_fun = write_thumb; goto thumbnail; } } if (load_raw == &CLASS kodak_ycbcr_load_raw) { height += height & 1; width += width & 1; } if (identify_only && verbose && make[0]) { printf (_("\nFilename: %s\n"), ifname); printf (_("Timestamp: %s"), ctime(×tamp)); printf (_("Camera: %s %s\n"), make, model); if (artist[0]) printf (_("Owner: %s\n"), artist); if (dng_version) { printf (_("DNG Version: ")); for (i=24; i >= 0; i -= 8) printf ("%d%c", dng_version >> i & 255, i ? '.':'\n'); } printf (_("ISO speed: %d\n"), (int) iso_speed); printf (_("Shutter: ")); if (shutter > 0 && shutter < 1) shutter = (printf ("1/"), 1 / shutter); printf (_("%0.1f sec\n"), shutter); printf (_("Aperture: f/%0.1f\n"), aperture); printf (_("Focal length: %0.1f mm\n"), focal_len); printf (_("Embedded ICC profile: %s\n"), profile_length ? _("yes"):_("no")); printf (_("Number of raw images: %d\n"), is_raw); if (pixel_aspect != 1) printf (_("Pixel Aspect Ratio: %0.6f\n"), pixel_aspect); if (thumb_offset) printf (_("Thumb size: %4d x %d\n"), thumb_width, thumb_height); printf (_("Full size: %4d x %d\n"), raw_width, raw_height); } else if (!is_raw) dcraw_message (DCRAW_ERROR,_("Cannot decode file %s\n"), ifname); if (!is_raw) goto next; shrink = filters && (half_size || (!identify_only && (threshold || aber[0] != 1 || aber[2] != 1))); iheight = (height + shrink) >> shrink; iwidth = (width + shrink) >> shrink; if (identify_only) { if (verbose) { if (document_mode == 3) { top_margin = left_margin = fuji_width = 0; height = raw_height; if (width <= raw_width * 8 / tiff_bps) width = raw_width * 8 / tiff_bps; else width = raw_width; } iheight = (height + shrink) >> shrink; iwidth = (width + shrink) >> shrink; if (use_fuji_rotate) { if (fuji_width) { fuji_width = (fuji_width - 1 + shrink) >> shrink; iwidth = fuji_width / sqrt(0.5); iheight = (iheight - fuji_width) / sqrt(0.5); } else { if (pixel_aspect < 1) iheight = iheight / pixel_aspect + 0.5; if (pixel_aspect > 1) iwidth = iwidth * pixel_aspect + 0.5; } } if (flip & 4) SWAP(iheight,iwidth); printf (_("Image size: %4d x %d\n"), width, height); printf (_("Output size: %4d x %d\n"), iwidth, iheight); printf (_("Raw colors: %d"), colors); if (filters) { printf (_("\nFilter pattern: ")); for (i=0; i < 16; i++) putchar (cdesc[fcol(i >> 1,i & 1)]); } printf (_("\nDaylight multipliers:")); FORCC printf (" %f", pre_mul[c]); if (cam_mul[0] > 0) { printf (_("\nCamera multipliers:")); FORC4 printf (" %f", cam_mul[c]); } putchar ('\n'); } else printf (_("%s is a %s %s image.\n"), ifname, make, model); next: fclose(ifp); continue; } if (use_camera_matrix && cmatrix[0][0] > 0.25) { memcpy (rgb_cam, cmatrix, sizeof cmatrix); raw_color = 0; } if (meta_length) { meta_data = (char *) malloc (meta_length); merror (meta_data, "main()"); } if (filters || colors == 1) { raw_image = (ushort *) calloc ((raw_height+7)*raw_width, 2); merror (raw_image, "main()"); } else { image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image); merror (image, "main()"); } dcraw_message (DCRAW_VERBOSE,_("Loading %s %s image from %s ...\n"), make, model, ifname); if (shot_select >= is_raw) dcraw_message (DCRAW_ERROR,_("%s: \"-s %d\" requests a nonexistent image!\n"), ifname, shot_select); #ifdef HAVE_FSEEKO fseeko (ifp, data_offset, SEEK_SET); #else fseek (ifp, data_offset, SEEK_SET); #endif if (raw_image && read_from_stdin) fread (raw_image, 2, raw_height*raw_width, stdin); else (*this.*load_raw)(); if (document_mode == 3) { top_margin = left_margin = fuji_width = 0; height = raw_height; if (width <= raw_width * 8 / tiff_bps) width = raw_width * 8 / tiff_bps; else width = raw_width; } iheight = (height + shrink) >> shrink; iwidth = (width + shrink) >> shrink; if (raw_image) { image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image); merror (image, "main()"); crop_masked_pixels(); free (raw_image); } if (zero_is_bad) remove_zeroes(); bad_pixels (bpfile); if (dark_frame) subtract (dark_frame); quality = 2 + !fuji_width; if (user_qual >= 0) quality = user_qual; i = cblack[3]; FORC3 if (i > (int) cblack[c]) i = cblack[c]; FORC4 cblack[c] -= i; black += i; if (user_black >= 0) black = user_black; FORC4 cblack[c] += black; if (user_sat > 0) maximum = user_sat; #ifdef COLORCHECK colorcheck(); #endif if (is_foveon) { if (document_mode || load_raw == &CLASS foveon_dp_load_raw) { for (i=0; i < height*width*4; i++) if ((short) image[0][i] < 0) image[0][i] = 0; } else foveon_interpolate(); } else if (document_mode < 2) scale_colors(); pre_interpolate(); if (filters && !document_mode) { if (quality == 0) lin_interpolate(); else if (quality == 1 || colors > 3 || filters < 1000) vng_interpolate(); else if (quality == 2) ppg_interpolate(); else ahd_interpolate(); } if (mix_green) for (colors=3, i=0; i < height*width; i++) image[i][1] = (image[i][1] + image[i][3]) >> 1; if (!is_foveon && colors == 3) median_filter(); if (!is_foveon && highlight == 2) blend_highlights(); if (!is_foveon && highlight > 2) recover_highlights(); if (use_fuji_rotate) fuji_rotate(); #ifndef NO_LCMS if (cam_profile) apply_profile (cam_profile, out_profile); #endif convert_to_rgb(); if (use_fuji_rotate) stretch(); thumbnail: if (write_fun == &CLASS jpeg_thumb) write_ext = ".jpg"; else if (output_tiff && write_fun == &CLASS write_ppm_tiff) write_ext = ".tiff"; else write_ext = ".pgm\0.ppm\0.ppm\0.pam" + colors*5-5; ofname = (char *) malloc (strlen(ifname) + 64); merror (ofname, "main()"); if (write_to_stdout) strcpy (ofname,_("standard output")); else { strcpy (ofname, ifname); if ((cp = strrchr (ofname, '.'))) *cp = 0; if (multi_out) sprintf (ofname+strlen(ofname), "_%0*d", snprintf(0,0,"%d",is_raw-1), shot_select); if (thumbnail_only) strcat (ofname, ".thumb"); strcat (ofname, write_ext); ofp = fopen (ofname, "wb"); if (!ofp) { status = 1; perror (ofname); goto cleanup; } } dcraw_message (DCRAW_VERBOSE,_("Writing data to %s ...\n"), ofname); (*this.*write_fun)(); fclose(ifp); if (ofp != stdout) fclose(ofp); cleanup: if (meta_data) free (meta_data); if (ofname) free (ofname); if (oprof) free (oprof); if (image) free (image); if (multi_out) { if (++shot_select < is_raw) arg--; else shot_select = 0; } } /* Make sure ifname are not free()'d (UF) */ ifname = NULL; ifname_display = NULL; return status; } #ifndef DCRAW_NOMAIN /*UF*/ int main(int argc, const char **argv) { DCRaw *d = new DCRaw; return d->main(argc, argv); } #endif /*DCRAW_NOMAIN*/ /*UF*/ ufraw-0.19.2/uf_gtk.cc0000664000175000017500000005202212115264507011444 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_gtk.cc - gtk compatibility layer * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "uf_gtk.h" #include #include #include #ifdef GDK_WINDOWING_QUARTZ #include #include #include #endif #ifdef G_OS_WIN32 #define STRICT #include #endif extern "C" { static void _uf_toggle_button_toggled(GtkToggleButton *button, gboolean *valuep) { *valuep = gtk_toggle_button_get_active(button); } // Create a GtkCheckButton with a label an a value that gets updated GtkWidget *uf_check_button_new(const char *label, gboolean *valuep) { GtkWidget *button = gtk_check_button_new_with_label(label); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), *valuep); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(_uf_toggle_button_toggled), valuep); return button; } // Create a new ComboBox text with small width. // The widget must be added with GTK_EXPAND|GTK_FILL. GtkWidget *uf_combo_box_new_text() { GtkWidget *combo = gtk_combo_box_new_text(); gtk_widget_set_size_request(combo, 50, -1); return combo; } // Append text with data to combo box void uf_combo_box_append_text(GtkComboBox *combo, const char *text, void *data) { gtk_combo_box_append_text(combo, text); GList *list = static_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-list")); list = g_list_append(list, data); g_object_set_data(G_OBJECT(combo), "uf-combo-list", list); } // activate combo box according to data or index, if there is no data void uf_combo_box_set_active(GtkComboBox *combo, int value) { GList *list = static_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-list")); if (list != NULL) { int i; for (i = 0; list != NULL; i++, list = g_list_next(list)) { if (value == GPOINTER_TO_INT(list->data)) { gtk_combo_box_set_active(combo, i); return; } } // If value not found set activate first entry gtk_combo_box_set_active(combo, 0); } else { gtk_combo_box_set_active(combo, value); } } static void _uf_combo_changed(GtkComboBox *combo, int *valuep) { GList *list = static_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-list")); if (list != NULL) { int i = gtk_combo_box_get_active(combo); *valuep = GPOINTER_TO_INT(g_list_nth_data(list, i)); } else { *valuep = gtk_combo_box_get_active(combo); } } // Set combo box data and keep it up to date void uf_combo_box_set_data(GtkComboBox *combo, int *valuep) { gulong handler_id = reinterpret_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-handler-id")); if (handler_id != 0) g_signal_handler_disconnect(G_OBJECT(combo), handler_id); uf_combo_box_set_active(combo, *valuep); if (gtk_combo_box_get_active(combo) == 0) { // If value was not found in uf-combo-list, set it to first entry GList *list = static_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-list")); if (list != NULL) *valuep = GPOINTER_TO_INT(list->data); } handler_id = g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(_uf_combo_changed), valuep); g_object_set_data(G_OBJECT(combo), "uf-combo-handler-id", reinterpret_cast(handler_id)); } // remove combo box entry according to data or index, if there is no data void uf_combo_box_remove_text(GtkComboBox *combo, int value) { GList *list = static_cast( g_object_get_data(G_OBJECT(combo), "uf-combo-list")); if (list != NULL) { int i; for (i = 0; list != NULL; i++, list = g_list_next(list)) { if (value == GPOINTER_TO_INT(list->data)) { gtk_combo_box_remove_text(combo, i); list = g_list_remove(list, list->data); g_object_set_data(G_OBJECT(combo), "uf-combo-list", list); return; } } } else { gtk_combo_box_remove_text(combo, value); } } // On X11 the display profile can be embedded using the 'xicc' command. void uf_get_display_profile(GtkWidget *widget, guint8 **buffer, gint *buffer_size) { g_free(*buffer); *buffer = NULL; *buffer_size = 0; #if defined GDK_WINDOWING_X11 GdkScreen *screen = gtk_widget_get_screen(widget); if (screen == NULL) screen = gdk_screen_get_default(); int monitor = gdk_screen_get_monitor_at_window(screen, widget->window); char *atom_name; if (monitor > 0) atom_name = g_strdup_printf("_ICC_PROFILE_%d", monitor); else atom_name = g_strdup("_ICC_PROFILE"); GdkAtom type = GDK_NONE; gint format = 0; gdk_property_get(gdk_screen_get_root_window(screen), gdk_atom_intern(atom_name, FALSE), GDK_NONE, 0, 64 * 1024 * 1024, FALSE, &type, &format, buffer_size, buffer); g_free(atom_name); #elif defined GDK_WINDOWING_QUARTZ GdkScreen *screen = gtk_widget_get_screen(widget); if (screen == NULL) screen = gdk_screen_get_default(); int monitor = gdk_screen_get_monitor_at_window(screen, widget->window); CMProfileRef prof = NULL; CMGetProfileByAVID(monitor, &prof); if (prof == NULL) return; CFDataRef data; data = CMProfileCopyICCData(NULL, prof); CMCloseProfile(prof); UInt8 *tmp_buffer = (UInt8 *) g_malloc(CFDataGetLength(data)); CFDataGetBytes(data, CFRangeMake(0, CFDataGetLength(data)), tmp_buffer); *buffer = (guint8 *) tmp_buffer; *buffer_size = CFDataGetLength(data); CFRelease(data); #elif defined G_OS_WIN32 (void)widget; HDC hdc = GetDC(NULL); if (hdc == NULL) return; DWORD len = 0; GetICMProfile(hdc, &len, NULL); gchar *path = g_new(gchar, len); if (GetICMProfile(hdc, &len, path)) { gsize size; g_file_get_contents(path, (gchar**)buffer, &size, NULL); *buffer_size = size; } g_free(path); ReleaseDC(NULL, hdc); #endif } // Translate text message from GtkImageView: const char *uf_gtkimageview_text = N_("Open the navigator window"); /* * The following functions create GtkWidgets for UFObjects. * These widgets are already created with callbacks, so that changes * in the widget value are applied to the UFObjects and vice-versa. */ class _UFWidgetData { public: GObject **gobject; GtkButton *button; explicit _UFWidgetData(int size = 1) { if (size != 0) gobject = g_new0(GObject *, size); else gobject = NULL; button = NULL; } ~_UFWidgetData() { g_free(gobject); } GtkAdjustment *adjustment(int index) { return GTK_ADJUSTMENT(gobject[index]); } }; typedef std::list _UFObjectList; void _ufobject_reset_button_state(UFObject *object) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); if (data->button == NULL) return; _UFObjectList *list = static_cast<_UFObjectList *>( g_object_get_data(G_OBJECT(data->button), "UFObjectList")); if (list == NULL) return; bool isDefault = true; for (_UFObjectList::iterator iter = list->begin(); iter != list->end(); iter++) { isDefault &= (*iter)->IsDefault(); } gtk_widget_set_sensitive(GTK_WIDGET(data->button), !isDefault); } static void _ufnumber_adjustment_changed(GtkAdjustment *adj, UFObject *object) { UFNumber &num = *object; num.Set(gtk_adjustment_get_value(adj)); } static void _ufnumber_object_event(UFObject *object, UFEventType type) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); if (type == uf_destroyed) { delete data; return; } UFNumber &num = *object; if (data->adjustment(0) != NULL) gtk_adjustment_set_value(data->adjustment(0), num.DoubleValue()); _ufobject_reset_button_state(object); } static void _ufnumber_array_adjustment_changed(GtkAdjustment *adj, UFObject *object) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); UFNumberArray &array = *object; for (int i = 0; i < array.Size(); i++) if (data->adjustment(i) == adj) array.Set(i, gtk_adjustment_get_value(data->adjustment(i))); } static void _ufnumber_array_object_event(UFObject *object, UFEventType type) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); if (type == uf_destroyed) { delete data; return; } UFNumberArray &array = *object; for (int i = 0; i < array.Size(); i++) gtk_adjustment_set_value(data->adjustment(i), array.DoubleValue(i)); _ufobject_reset_button_state(object); } static void _ufstring_object_event(UFObject *object, UFEventType type) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); if (type == uf_destroyed) { delete data; return; } UFString &string = *object; gtk_entry_set_text(GTK_ENTRY(data->gobject[0]), string.StringValue()); } static void _ufarray_object_event(UFObject *object, UFEventType type) { _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); if (type == uf_destroyed) { delete data; return; } if (type != uf_value_changed) return; GtkComboBox *combo = GTK_COMBO_BOX(data->gobject[0]); UFArray &array = *object; if (array.Index() >= 0) { gtk_combo_box_set_active(combo, array.Index()); return; } if (GTK_IS_COMBO_BOX_ENTRY(combo)) { GtkWidget *entry = gtk_bin_get_child(GTK_BIN(combo)); gtk_entry_set_text(GTK_ENTRY(entry), array.StringValue()); } else { // GTK_IS_COMBO_BOX() // If value not found activate first entry g_warning("_ufarray_object_event() value not found"); gtk_combo_box_set_active(combo, 0); } } /* Return the widget-data for the object. * Create the widget-data, if it was not set already. */ static void _ufobject_adjustment_destroyed(GtkAdjustment *, void **adjustmentPointer) { *adjustmentPointer = NULL; } static _UFWidgetData &_ufnumber_widget_data(UFNumber &number) { if (number.UserData() == NULL) { _UFWidgetData *datap = new _UFWidgetData; number.SetUserData(datap); } _UFWidgetData &data = *static_cast<_UFWidgetData *>(number.UserData()); if (data.gobject[0] != NULL) return data; data.gobject[0] = G_OBJECT(gtk_adjustment_new(number.DoubleValue(), number.Minimum(), number.Maximum(), number.Step(), number.Jump(), 0.0)); g_signal_connect(G_OBJECT(data.adjustment(0)), "value-changed", G_CALLBACK(_ufnumber_adjustment_changed), &number); g_signal_connect(G_OBJECT(data.adjustment(0)), "destroy", G_CALLBACK(_ufobject_adjustment_destroyed), &data.gobject[0]); number.SetEventHandle(_ufnumber_object_event); return data; } static _UFWidgetData &_ufnumber_array_widget_data(UFNumberArray &array) { if (array.UserData() == NULL) { _UFWidgetData *datap = new _UFWidgetData(array.Size()); array.SetUserData(datap); } _UFWidgetData &data = *static_cast<_UFWidgetData *>(array.UserData()); for (int i = 0; i < array.Size(); i++) { if (data.gobject[i] != NULL) continue; data.gobject[i] = G_OBJECT(gtk_adjustment_new(array.DoubleValue(i), array.Minimum(), array.Maximum(), array.Step(), array.Jump(), 0.0)); g_signal_connect(G_OBJECT(data.adjustment(i)), "value-changed", G_CALLBACK(_ufnumber_array_adjustment_changed), &array); g_signal_connect(G_OBJECT(data.adjustment(0)), "destroy", G_CALLBACK(_ufobject_adjustment_destroyed), &data.gobject[i]); } array.SetEventHandle(_ufnumber_array_object_event); return data; } static _UFWidgetData &_ufstring_widget_data(UFString &string) { if (string.UserData() != NULL) return *static_cast<_UFWidgetData *>(string.UserData()); _UFWidgetData &data = *(new _UFWidgetData); string.SetUserData(&data); data.gobject[0] = NULL; string.SetEventHandle(_ufstring_object_event); return data; } static _UFWidgetData &_ufarray_widget_data(UFArray &array) { if (array.UserData() != NULL) return *static_cast<_UFWidgetData *>(array.UserData()); _UFWidgetData &data = *(new _UFWidgetData); array.SetUserData(&data); data.gobject[0] = NULL; array.SetEventHandle(_ufarray_object_event); return data; } GtkWidget *ufnumber_hscale_new(UFObject *object) { UFNumber &number = *object; _UFWidgetData &data = _ufnumber_widget_data(number); GtkWidget *scale = gtk_hscale_new(data.adjustment(0)); gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); return scale; } GtkWidget *ufnumber_spin_button_new(UFObject *object) { UFNumber &number = *object; _UFWidgetData &data = _ufnumber_widget_data(number); GtkWidget *spin = gtk_spin_button_new(data.adjustment(0), number.Step(), number.AccuracyDigits()); gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE); gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(spin), GTK_UPDATE_IF_VALID); return spin; } GtkWidget *ufnumber_array_hscale_new(UFObject *object, int index) { UFNumberArray &array = *object; _UFWidgetData &data = _ufnumber_array_widget_data(array); GtkWidget *scale = gtk_hscale_new(data.adjustment(index)); gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); return scale; } GtkWidget *ufnumber_array_spin_button_new(UFObject *object, int index) { UFNumberArray &array = *object; _UFWidgetData &data = _ufnumber_array_widget_data(array); GtkWidget *spin = gtk_spin_button_new(data.adjustment(index), array.Step(), array.AccuracyDigits()); gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE); gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(spin), GTK_UPDATE_IF_VALID); return spin; } static void _ufobject_reset_clicked(GtkWidget * /*widget*/, _UFObjectList *list) { for (_UFObjectList::iterator iter = list->begin(); iter != list->end(); iter++) { (*iter)->Reset(); } } static void _ufobject_reset_destroy(GtkWidget * /*widget*/, _UFObjectList *list) { for (_UFObjectList::iterator iter = list->begin(); iter != list->end(); iter++) { _UFWidgetData *data = static_cast<_UFWidgetData *>((*iter)->UserData()); data->button = NULL; } delete list; } GtkWidget *ufobject_reset_button_new(const char *tip) { GtkWidget *button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_stock(GTK_STOCK_REFRESH, GTK_ICON_SIZE_BUTTON)); if (tip != NULL) gtk_widget_set_tooltip_text(button, tip); _UFObjectList *objectList = new _UFObjectList; g_object_set_data(G_OBJECT(button), "UFObjectList", objectList); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(_ufobject_reset_clicked), objectList); g_signal_connect(G_OBJECT(button), "destroy", G_CALLBACK(_ufobject_reset_destroy), objectList); return button; } void ufobject_reset_button_add(GtkWidget *button, UFObject *object) { assert(object->UserData() != NULL); _UFWidgetData *data = static_cast<_UFWidgetData *>(object->UserData()); data->button = GTK_BUTTON(button); _UFObjectList *objectList = static_cast<_UFObjectList *>( g_object_get_data(G_OBJECT(button), "UFObjectList")); assert(objectList != NULL); objectList->push_back(object); _ufobject_reset_button_state(object); } static void _ufstring_entry_changed(GtkWidget *entry, UFObject *object) { UFString &string = *object; string.Set(gtk_entry_get_text(GTK_ENTRY(entry))); _ufobject_reset_button_state(object); } // Create a new GtkEntry with small width. // The widget must be added with GTK_EXPAND|GTK_FILL. GtkWidget *ufstring_entry_new(UFObject *object) { GtkWidget *entry = gtk_entry_new(); gtk_widget_set_size_request(entry, 50, -1); g_signal_connect_after(G_OBJECT(entry), "changed", G_CALLBACK(_ufstring_entry_changed), object); UFString &string = *object; _UFWidgetData &data = _ufstring_widget_data(string); data.gobject[0] = G_OBJECT(entry); _ufstring_object_event(object, uf_value_changed); return entry; } static void _ufarray_combo_changed(GtkWidget *combo, UFObject *object) { UFArray &array = *object; int i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); array.SetIndex(i); _ufobject_reset_button_state(object); } static bool _ufarray_entry_changed(GtkWidget *entry, GdkEventFocus *event, UFObject *object) { if (event->in) return false; UFArray &array = *object; array.Set(gtk_entry_get_text(GTK_ENTRY(entry))); _ufobject_reset_button_state(object); return false; } GtkWidget *_ufarray_combo_box_new(UFObject *object, GtkWidget *combo) { UFArray &array = *object; _UFWidgetData &data = _ufarray_widget_data(array); gtk_widget_set_size_request(combo, 50, -1); data.gobject[0] = G_OBJECT(combo); UFGroupList list = array.List(); for (UFGroupList::iterator iter = list.begin(); iter != list.end(); iter++) { gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _((*iter)->StringValue())); } _ufarray_object_event(object, uf_value_changed); return combo; } // Create a new ComboBox with small width. // The widget must be added with GTK_EXPAND|GTK_FILL. GtkWidget *ufarray_combo_box_new(UFObject *object) { GtkWidget *combo = gtk_combo_box_new_text(); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(_ufarray_combo_changed), object); return _ufarray_combo_box_new(object, combo); } // Create a new ComboBoxEntry with small width. // The widget must be added with GTK_EXPAND|GTK_FILL. GtkWidget *ufarray_combo_box_entry_new(UFObject *object) { GtkWidget *combo = gtk_combo_box_entry_new_text(); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(_ufarray_combo_changed), object); GtkWidget *entry = gtk_bin_get_child(GTK_BIN(combo)); g_signal_connect_after(G_OBJECT(entry), "focus-out-event", G_CALLBACK(_ufarray_entry_changed), object); return _ufarray_combo_box_new(object, combo); } } // extern "C" ufraw-0.19.2/ufraw_lens_ui.c0000664000175000017500000007251212122217612012663 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_lens_ui.c - User interface for interaction with lensfun, * a lens defect correction library. * Copyright 2007-2013 by Andrew Zabolotny, Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "uf_gtk.h" #include "ufraw_ui.h" #include #include #ifdef HAVE_LENSFUN #include static void delete_children(GtkWidget *widget, gpointer data) { (void)data; gtk_widget_destroy(widget); } static void camera_set(preview_data *data) { UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); const lfCamera *camera = ufraw_lensfun_camera(lensfun); const char *maker = lf_mlstr_get(camera->Maker); const char *model = lf_mlstr_get(camera->Model); const char *variant = lf_mlstr_get(camera->Variant); char _variant[100]; if (variant != NULL) snprintf(_variant, sizeof(_variant), " (%s)", variant); else _variant[0] = 0; gchar *fm = g_strdup_printf(_("Maker:\t\t%s\n" "Model:\t\t%s%s\n" "Mount:\t\t%s\n" "Crop factor:\t%.1f"), maker, model, _variant, camera->Mount, camera->CropFactor); gtk_widget_set_tooltip_text(data->CameraModel, fm); g_free(fm); } static void camera_menu_select(GtkMenuItem *menuitem, gpointer user_data) { preview_data *data = (preview_data *)user_data; lfCamera *cam = g_object_get_data(G_OBJECT(menuitem), "lfCamera"); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); ufraw_lensfun_set_camera(lensfun, cam); camera_set(data); } static void camera_menu_fill(preview_data *data, const lfCamera *const *camlist) { unsigned i; GPtrArray *makers, *submenus; if (data->CameraMenu) { gtk_widget_destroy(data->CameraMenu); data->CameraMenu = NULL; } /* Count all existing camera makers and create a sorted list */ makers = g_ptr_array_new(); submenus = g_ptr_array_new(); for (i = 0; camlist[i]; i++) { GtkWidget *submenu, *item; const char *m = lf_mlstr_get(camlist[i]->Maker); int idx = ptr_array_find_sorted(makers, m, (GCompareFunc)g_utf8_collate); if (idx < 0) { /* No such maker yet, insert it into the array */ idx = ptr_array_insert_sorted(makers, m, (GCompareFunc)g_utf8_collate); /* Create a submenu for cameras by this maker */ submenu = gtk_menu_new(); ptr_array_insert_index(submenus, submenu, idx); } submenu = g_ptr_array_index(submenus, idx); /* Append current camera name to the submenu */ m = lf_mlstr_get(camlist[i]->Model); if (camlist[i]->Variant == NULL) { item = gtk_menu_item_new_with_label(m); } else { gchar *fm = g_strdup_printf("%s (%s)", m, camlist[i]->Variant); item = gtk_menu_item_new_with_label(fm); g_free(fm); } gtk_widget_show(item); g_object_set_data(G_OBJECT(item), "lfCamera", (void *)camlist[i]); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(camera_menu_select), data); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item); } data->CameraMenu = gtk_menu_new(); for (i = 0; i < makers->len; i++) { GtkWidget *item = gtk_menu_item_new_with_label( g_ptr_array_index(makers, i)); gtk_widget_show(item); gtk_menu_shell_append(GTK_MENU_SHELL(data->CameraMenu), item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), (GtkWidget *)g_ptr_array_index(submenus, i)); } g_ptr_array_free(submenus, TRUE); g_ptr_array_free(makers, TRUE); } static void parse_maker_model(const char *txt, char *make, size_t sz_make, char *model, size_t sz_model) { while (txt[0] != '\0' && isspace(txt[0])) txt++; const gchar *sep = strchr(txt, ','); if (sep != NULL) { size_t len = sep - txt + 1; len = MIN(len, sz_make); g_strlcpy(make, txt, len); while (*++sep && isspace(sep[0])) { } g_strlcpy(model, sep, sz_model); } else { g_strlcpy(model, txt, sz_model); } } static void camera_search_clicked(GtkWidget *button, preview_data *data) { (void)button; char make[200], model[200]; const gchar *txt = gtk_entry_get_text(GTK_ENTRY(data->CameraModel)); parse_maker_model(txt, make, sizeof(make), model, sizeof(model)); lfDatabase *lensdb = ufraw_lensfun_db(); const lfCamera **camlist = lf_db_find_cameras_ext(lensdb, make, model, 0); if (camlist == NULL) return; camera_menu_fill(data, camlist); lf_free(camlist); gtk_menu_popup(GTK_MENU(data->CameraMenu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); } static void camera_list_clicked(GtkWidget *button, preview_data *data) { (void)button; lfDatabase *lensdb = ufraw_lensfun_db(); const lfCamera *const *camlist = lf_db_get_cameras(lensdb); if (camlist == NULL) return; camera_menu_fill(data, camlist); gtk_menu_popup(GTK_MENU(data->CameraMenu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); } static void combo_entry_new(UFObject *object, GtkWidget *box, const char *labelText, const char *tooltip) { GtkWidget *label = gtk_label_new(labelText); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 2); GtkWidget *combo = ufarray_combo_box_entry_new(object); gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 2); gtk_widget_set_tooltip_text(label, tooltip); } static void lens_set(GtkWidget *lensModel, preview_data *data) { UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); const lfLens *lens = ufraw_lensfun_interpolation_lens(lensfun); gchar *fm; const char *maker = lf_mlstr_get(lens->Maker); const char *model = lf_mlstr_get(lens->Model); char focal[100], aperture[100], mounts[200]; if (lens->MinFocal < lens->MaxFocal) snprintf(focal, sizeof(focal), "%g-%gmm", lens->MinFocal, lens->MaxFocal); else snprintf(focal, sizeof(focal), "%gmm", lens->MinFocal); if (lens->MinAperture < lens->MaxAperture) snprintf(aperture, sizeof(aperture), "%g-%g", lens->MinAperture, lens->MaxAperture); else snprintf(aperture, sizeof(aperture), "%g", lens->MinAperture); mounts[0] = 0; if (lens->Mounts != NULL) { unsigned i; for (i = 0; lens->Mounts[i] != NULL; i++) { if (i > 0) g_strlcat(mounts, ", ", sizeof(mounts)); g_strlcat(mounts, lens->Mounts[i], sizeof(mounts)); } } fm = g_strdup_printf(_("Maker:\t\t%s\n" "Model:\t\t%s\n" "Focal range:\t%s\n" "Aperture:\t\t%s\n" "Crop factor:\t%.1f\n" "Type:\t\t%s\n" "Mounts:\t\t%s"), maker ? maker : "?", model ? model : "?", focal, aperture, lens->CropFactor, lf_get_lens_type_desc(lens->Type, NULL), mounts); gtk_widget_set_tooltip_text(lensModel, fm); g_free(fm); /* Create the focal/aperture/distance combo boxes */ gtk_container_foreach(GTK_CONTAINER(data->LensParamBox), delete_children, NULL); UFObject *FocalLength = ufgroup_element(lensfun, ufFocalLength); combo_entry_new(FocalLength, data->LensParamBox, _("Focal"), _("Focal length")); UFObject *Aperture = ufgroup_element(lensfun, ufAperture); combo_entry_new(Aperture, data->LensParamBox, _("F"), _("F-number (Aperture)")); UFObject *Distance = ufgroup_element(lensfun, ufDistance); combo_entry_new(Distance, data->LensParamBox, _("Distance"), _("Distance to subject in meters")); gtk_widget_show_all(data->LensParamBox); } static void lens_menu_select(GtkMenuItem *menuitem, UFObject *lensfun) { lfLens *lens = (lfLens *)g_object_get_data(G_OBJECT(menuitem), "lfLens"); ufraw_lensfun_set_lens(lensfun, lens); } static void lens_menu_fill(preview_data *data, const lfLens *const *lenslist) { unsigned i; if (data->LensMenu != NULL) { gtk_widget_destroy(data->LensMenu); data->LensMenu = NULL; } UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); /* Count all existing lens makers and create a sorted list */ GPtrArray *makers = g_ptr_array_new(); GPtrArray *submenus = g_ptr_array_new(); for (i = 0; lenslist[i]; i++) { GtkWidget *submenu, *item; const char *m = lf_mlstr_get(lenslist[i]->Maker); int idx = ptr_array_find_sorted(makers, m, (GCompareFunc)g_utf8_collate); if (idx < 0) { /* No such maker yet, insert it into the array */ idx = ptr_array_insert_sorted(makers, m, (GCompareFunc)g_utf8_collate); /* Create a submenu for lenses by this maker */ submenu = gtk_menu_new(); ptr_array_insert_index(submenus, submenu, idx); } submenu = g_ptr_array_index(submenus, idx); /* Append current lens name to the submenu */ item = gtk_menu_item_new_with_label(lf_mlstr_get(lenslist[i]->Model)); gtk_widget_show(item); g_object_set_data(G_OBJECT(item), "lfLens", (void *)lenslist[i]); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(lens_menu_select), lensfun); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item); } data->LensMenu = gtk_menu_new(); for (i = 0; i < makers->len; i++) { GtkWidget *item = gtk_menu_item_new_with_label(g_ptr_array_index(makers, i)); gtk_widget_show(item); gtk_menu_shell_append(GTK_MENU_SHELL(data->LensMenu), item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), (GtkWidget *)g_ptr_array_index(submenus, i)); } g_ptr_array_free(submenus, TRUE); g_ptr_array_free(makers, TRUE); } static void lens_search_clicked(GtkWidget *button, preview_data *data) { (void)button; char make[200], model[200]; UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); const lfCamera *camera = ufraw_lensfun_camera(lensfun); const gchar *txt = gtk_entry_get_text(GTK_ENTRY(data->LensModel)); parse_maker_model(txt, make, sizeof(make), model, sizeof(model)); lfDatabase *lensdb = ufraw_lensfun_db(); const lfLens **lenslist = lf_db_find_lenses_hd(lensdb, camera, make[0] ? make : NULL, model[0] ? model : NULL, 0); if (lenslist == NULL) return; lens_menu_fill(data, lenslist); lf_free(lenslist); gtk_menu_popup(GTK_MENU(data->LensMenu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); } static void lens_list_clicked(GtkWidget *button, preview_data *data) { (void)button; UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); const lfCamera *camera = ufraw_lensfun_camera(lensfun); lfDatabase *lensdb = ufraw_lensfun_db(); const lfLens **lenslist = lf_db_find_lenses_hd(lensdb, camera, NULL, NULL, 0); if (lenslist == NULL) return; lens_menu_fill(data, lenslist); lf_free(lenslist); gtk_menu_popup(GTK_MENU(data->LensMenu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); } static void auto_lens_button_toggle(GtkToggleButton *button, UFObject *lensfunAuto) { if (gtk_toggle_button_get_active(button)) { if (ufstring_is_equal(lensfunAuto, "yes")) ufobject_set_string(lensfunAuto, "no"); else ufobject_set_string(lensfunAuto, "yes"); gtk_toggle_button_set_active(button, FALSE); } } static void auto_lens_event(UFObject *object, UFEventType type) { if (type != uf_value_changed) return; GtkButton *button = ufobject_user_data(object); if (ufstring_is_equal(object, "yes")) gtk_button_set_image(button, gtk_image_new_from_stock( "object-automatic", GTK_ICON_SIZE_BUTTON)); else gtk_button_set_image(button, gtk_image_new_from_stock( "object-manual", GTK_ICON_SIZE_BUTTON)); } /* --- TCA correction page --- */ static void tca_model_changed(GtkComboBox *widget, preview_data *data) { (void)widget; gtk_container_foreach(GTK_CONTAINER(data->LensTCATable), delete_children, NULL); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *tca = ufgroup_element(lensfun, ufTCA); UFObject *model = ufgroup_element(tca, ufobject_string_value(tca)); lfTCAModel tcaModel = ufarray_index(tca); const char *details; const lfParameter **params; if (!lf_get_tca_model_desc(tcaModel, &details, ¶ms)) return; /* should never happen */ int i; if (params != NULL) { for (i = 0; params[i] != NULL; i++) { UFObject *param = ufgroup_element(model, params[i]->Name); ufnumber_adjustment_scale(param, GTK_TABLE(data->LensTCATable), 0, i, params[i]->Name, NULL); GtkWidget *reset = ufobject_reset_button_new(NULL); ufobject_reset_button_add(reset, param); gtk_table_attach(GTK_TABLE(data->LensTCATable), reset, 7, 8, i, i + 1, 0, 0, 0, 0); } } gtk_label_set_text(GTK_LABEL(data->LensTCADesc), details); gtk_widget_show_all(data->LensTCATable); } static void fill_tca_page(preview_data *data, GtkWidget *page, GtkWidget *reset) { GtkWidget *hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0); /* Add the model combobox */ GtkWidget *label = gtk_label_new(_("Model:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *tca = ufgroup_element(lensfun, ufTCA); GtkWidget *combo = ufarray_combo_box_new(tca); gtk_box_pack_start(GTK_BOX(hbox), combo, TRUE, TRUE, 0); gtk_widget_set_tooltip_text(combo, _("Chromatic Aberrations mathematical model")); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(tca_model_changed), data); ufobject_reset_button_add(reset, tca); data->LensTCATable = gtk_table_new(10, 1, FALSE); GtkWidget *f = gtk_frame_new(_("Parameters")); gtk_box_pack_start(GTK_BOX(page), f, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(f), data->LensTCATable); data->LensTCADesc = gtk_label_new(""); gtk_label_set_line_wrap(GTK_LABEL(data->LensTCADesc), TRUE); gtk_label_set_ellipsize(GTK_LABEL(data->LensTCADesc), PANGO_ELLIPSIZE_END); gtk_label_set_selectable(GTK_LABEL(data->LensTCADesc), TRUE); gtk_box_pack_start(GTK_BOX(page), data->LensTCADesc, FALSE, FALSE, 0); } /* --- Vignetting correction page --- */ static void vignetting_model_changed(GtkComboBox *widget, preview_data *data) { (void)widget; gtk_container_foreach(GTK_CONTAINER(data->LensVignettingTable), delete_children, NULL); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *vignetting = ufgroup_element(lensfun, ufVignetting); UFObject *model = ufgroup_element(vignetting, ufobject_string_value(vignetting)); lfVignettingModel vignettingModel = ufarray_index(vignetting); const char *details; const lfParameter **params; if (!lf_get_vignetting_model_desc(vignettingModel, &details, ¶ms)) return; /* should never happen */ int i; if (params != NULL) { for (i = 0; params[i] != NULL; i++) { UFObject *param = ufgroup_element(model, params[i]->Name); ufnumber_adjustment_scale(param, GTK_TABLE(data->LensVignettingTable), 0, i, params[i]->Name, NULL); GtkWidget *reset = ufobject_reset_button_new(NULL); ufobject_reset_button_add(reset, param); gtk_table_attach(GTK_TABLE(data->LensVignettingTable), reset, 7, 8, i, i + 1, 0, 0, 0, 0); } } gtk_label_set_text(GTK_LABEL(data->LensVignettingDesc), details); gtk_widget_show_all(data->LensVignettingTable); } static void fill_vignetting_page(preview_data *data, GtkWidget *page, GtkWidget *reset) { GtkWidget *hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0); /* Add the model combobox */ GtkWidget *label = gtk_label_new(_("Model:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *vignetting = ufgroup_element(lensfun, ufVignetting); GtkWidget *combo = ufarray_combo_box_new(vignetting); gtk_box_pack_start(GTK_BOX(hbox), combo, TRUE, TRUE, 0); gtk_widget_set_tooltip_text(combo, _("Optical vignetting mathematical model")); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(vignetting_model_changed), data); ufobject_reset_button_add(reset, vignetting); data->LensVignettingTable = gtk_table_new(10, 1, FALSE); GtkWidget *f = gtk_frame_new(_("Parameters")); gtk_box_pack_start(GTK_BOX(page), f, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(f), data->LensVignettingTable); data->LensVignettingDesc = gtk_label_new(""); gtk_label_set_line_wrap(GTK_LABEL(data->LensVignettingDesc), TRUE); gtk_label_set_ellipsize(GTK_LABEL(data->LensVignettingDesc), PANGO_ELLIPSIZE_END); gtk_label_set_selectable(GTK_LABEL(data->LensVignettingDesc), TRUE); gtk_box_pack_start(GTK_BOX(page), data->LensVignettingDesc, FALSE, FALSE, 0); } /* --- Distortion correction page --- */ static void distortion_model_changed(GtkComboBox *widget, preview_data *data) { (void)widget; gtk_container_foreach(GTK_CONTAINER(data->LensDistortionTable), delete_children, NULL); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *distortion = ufgroup_element(lensfun, ufDistortion); UFObject *model = ufgroup_element(distortion, ufobject_string_value(distortion)); lfDistortionModel distortionModel = ufarray_index(distortion); const char *details; const lfParameter **params; if (!lf_get_distortion_model_desc(distortionModel, &details, ¶ms)) return; // should never happen int i; if (params != NULL) { for (i = 0; params[i] != NULL; i++) { UFObject *param = ufgroup_element(model, params[i]->Name); ufnumber_adjustment_scale(param, GTK_TABLE(data->LensDistortionTable), 0, i, params[i]->Name, NULL); GtkWidget *reset = ufobject_reset_button_new(NULL); ufobject_reset_button_add(reset, param); gtk_table_attach(GTK_TABLE(data->LensDistortionTable), reset, 7, 8, i, i + 1, 0, 0, 0, 0); } } gtk_label_set_text(GTK_LABEL(data->LensDistortionDesc), details); gtk_widget_show_all(data->LensDistortionTable); } static void fill_distortion_page(preview_data *data, GtkWidget *page, GtkWidget *reset) { GtkWidget *hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0); /* Add the model combobox */ GtkWidget *label = gtk_label_new(_("Model:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); UFObject *distortion = ufgroup_element(lensfun, ufDistortion); GtkWidget *combo = ufarray_combo_box_new(distortion); gtk_box_pack_start(GTK_BOX(hbox), combo, TRUE, TRUE, 0); gtk_widget_set_tooltip_text(combo, _("Lens distortion mathematical model")); g_signal_connect_after(G_OBJECT(combo), "changed", G_CALLBACK(distortion_model_changed), data); ufobject_reset_button_add(reset, distortion); data->LensDistortionTable = gtk_table_new(10, 1, FALSE); GtkWidget *f = gtk_frame_new(_("Parameters")); gtk_box_pack_start(GTK_BOX(page), f, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(f), data->LensDistortionTable); data->LensDistortionDesc = gtk_label_new(""); gtk_label_set_line_wrap(GTK_LABEL(data->LensDistortionDesc), TRUE); gtk_label_set_ellipsize(GTK_LABEL(data->LensDistortionDesc), PANGO_ELLIPSIZE_END); gtk_label_set_selectable(GTK_LABEL(data->LensDistortionDesc), TRUE); gtk_box_pack_start(GTK_BOX(page), data->LensDistortionDesc, FALSE, FALSE, 0); } /* --- Lens geometry page --- */ static void geometry_model_changed(GtkComboBox *widget, GtkLabel *label) { lfLensType type = gtk_combo_box_get_active(widget); const char *details; if (!lf_get_lens_type_desc(type, &details)) return; // should never happen gtk_label_set_text(label, details); } static GtkWidget *fill_geometry_page(UFObject *ufobject, GtkWidget *reset) { UFObject *lensfun = ufgroup_element(ufobject, ufLensfun); GtkTable *geometryTable = GTK_TABLE(gtk_table_new(10, 1, FALSE)); /* Lens geometry combobox */ GtkWidget *label = gtk_label_new(_("Lens geometry:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach(geometryTable, label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0); UFObject *lensGeometry = ufgroup_element(lensfun, ufLensGeometry); GtkWidget *combo = ufarray_combo_box_new(lensGeometry); gtk_widget_set_tooltip_text(combo, _("The geometry of the lens used to make the shot")); gtk_table_attach(geometryTable, combo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); ufobject_reset_button_add(reset, lensGeometry); GtkWidget *description = gtk_label_new(""); gtk_label_set_line_wrap(GTK_LABEL(description), TRUE); gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END); gtk_label_set_selectable(GTK_LABEL(description), TRUE); gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5); gtk_table_attach(geometryTable, description, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 10); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(geometry_model_changed), description); /* Target lens geometry combobox */ label = gtk_label_new(_("Target geometry:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach(geometryTable, label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0); UFObject *targetLensGeometry = ufgroup_element(lensfun, ufTargetLensGeometry); combo = ufarray_combo_box_new(targetLensGeometry); gtk_widget_set_tooltip_text(combo, _("The target geometry for output image")); gtk_table_attach(geometryTable, combo, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0); ufobject_reset_button_add(reset, targetLensGeometry); description = gtk_label_new(""); gtk_label_set_line_wrap(GTK_LABEL(description), TRUE); gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END); gtk_label_set_selectable(GTK_LABEL(description), TRUE); gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5); gtk_table_attach(geometryTable, description, 0, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 10); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(geometry_model_changed), description); return GTK_WIDGET(geometryTable); } /** * Fill the "lens correction" page in the main notebook. */ void lens_fill_interface(preview_data *data, GtkWidget *page) { GtkWidget *label, *button, *subpage; UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun); /* Camera selector */ GtkTable *table = GTK_TABLE(gtk_table_new(10, 10, FALSE)); gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(table), FALSE, FALSE, 0); label = gtk_label_new(_("Camera")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach(table, label, 0, 1, 0, 1, GTK_FILL, 0, 2, 0); UFObject *cameraModel = ufgroup_element(lensfun, ufCameraModel); data->CameraModel = ufstring_entry_new(cameraModel); gtk_table_attach(table, data->CameraModel, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 0); button = stock_icon_button(GTK_STOCK_FIND, _("Search for camera using a pattern\n" "Format: [Maker, ][Model]"), G_CALLBACK(camera_search_clicked), data); gtk_table_attach(table, button, 2, 3, 0, 1, 0, 0, 0, 0); button = stock_icon_button(GTK_STOCK_INDEX, _("Choose camera from complete list"), G_CALLBACK(camera_list_clicked), data); gtk_table_attach(table, button, 3, 4, 0, 1, 0, 0, 0, 0); GtkWidget *reset = ufobject_reset_button_new( _("Reset all lens correction settings")); gtk_table_attach(table, reset, 4, 5, 0, 1, 0, 0, 0, 0); ufobject_reset_button_add(reset, cameraModel); /* Lens selector */ label = gtk_label_new(_("Lens")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach(table, label, 0, 1, 1, 2, GTK_FILL, 0, 2, 0); UFObject *lensModel = ufgroup_element(lensfun, ufLensModel); data->LensModel = ufstring_entry_new(lensModel); ufobject_reset_button_add(reset, lensModel); g_signal_connect_after(G_OBJECT(data->LensModel), "changed", G_CALLBACK(lens_set), data); gtk_table_attach(table, data->LensModel, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 0); button = stock_icon_button(GTK_STOCK_FIND, _("Search for lens using a pattern\n" "Format: [Maker, ][Model]"), G_CALLBACK(lens_search_clicked), data); gtk_table_attach(table, button, 2, 3, 1, 2, 0, 0, 0, 0); button = stock_icon_button(GTK_STOCK_INDEX, _("Choose lens from list of possible variants"), G_CALLBACK(lens_list_clicked), data); gtk_table_attach(table, button, 3, 4, 1, 2, 0, 0, 0, 0); GtkWidget *autoLens = gtk_toggle_button_new(); gtk_table_attach(table, autoLens, 4, 5, 1, 2, 0, 0, 0, 0); gtk_widget_set_tooltip_text(autoLens, _("Automatically find lens and set lens corrections")); UFObject *lensfunAuto = ufgroup_element(CFG->ufobject, ufLensfunAuto); g_signal_connect(G_OBJECT(autoLens), "toggled", G_CALLBACK(auto_lens_button_toggle), lensfunAuto); ufobject_set_user_data(lensfunAuto, autoLens); ufobject_set_changed_event_handle(lensfunAuto, auto_lens_event); auto_lens_event(lensfunAuto, uf_value_changed); data->LensParamBox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(page), data->LensParamBox, FALSE, FALSE, 2); GtkNotebook *subnb = GTK_NOTEBOOK(gtk_notebook_new()); gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(subnb), TRUE, TRUE, 0); #ifndef _WIN32 // This call causes a crash on win32 gtk_notebook_set_tab_pos(subnb, GTK_POS_LEFT); #endif /* Create a default lens & camera */ camera_set(data); lens_set(data->LensModel, data); ufobject_reset_button_add(reset, ufgroup_element(lensfun, ufFocalLength)); ufobject_reset_button_add(reset, ufgroup_element(lensfun, ufAperture)); ufobject_reset_button_add(reset, ufgroup_element(lensfun, ufDistance)); subpage = notebook_page_new(subnb, _("Lateral chromatic aberration"), "tca"); fill_tca_page(data, subpage, reset); tca_model_changed(NULL, data); subpage = notebook_page_new(subnb, _("Optical vignetting"), "vignetting"); fill_vignetting_page(data, subpage, reset); vignetting_model_changed(NULL, data); subpage = notebook_page_new(subnb, _("Lens distortion"), "distortion"); fill_distortion_page(data, subpage, reset); distortion_model_changed(NULL, data); gtk_widget_show_all(subpage); // Need to show the page for set page to work. int pageNum = gtk_notebook_page_num(subnb, page); gtk_notebook_set_current_page(subnb, pageNum); subpage = notebook_page_new(subnb, _("Lens geometry"), "geometry"); gtk_box_pack_start(GTK_BOX(subpage), fill_geometry_page(CFG->ufobject, reset), TRUE, TRUE, 0); } #endif /* HAVE_LENSFUN */ ufraw-0.19.2/Doxyfile0000644000175000017500000017363111342040635011367 00000000000000# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = UFRaw # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ufobject.h ufraw.h uf_gtk.h ufraw_settings.cc ufraw_lensfun.cc # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = __cplusplus HAVE_LENSFUN # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ufraw-0.19.2/nikon_curve.c0000664000175000017500000023156512115264507012357 00000000000000/*************************************************** nikon_curve.c - read Nikon NTC/NCV files Copyright 2004-2013 by Shawn Freeman, Udi Fuchs This program reads in a Nikon NTC/NCV file, interperates it's tone curve, and writes out a simple ASCII file containing a table of interpolation values. See the header file for more information. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ****************************************************/ ////////////////////////////////////////// //COMPILER CONTROLS ////////////////////////////////////////// //Undef this if you don't want to use the stand-alone program //This is mainly for debugging purposes //#define _STAND_ALONE_ //Define this if you are using Microsoft Visual C++. This enables code to //deal with the fact the MSVC does not support variable argument macros. //#define __MSVC__ //the only remaining incompatibility between MSVC and gcc #ifdef __MSVC__ #define vsnprintf _vsnprintf #endif //Define this if using with UFRaw #define __WITH_UFRAW__ #ifdef __WITH_UFRAW__ #include "ufraw.h" #else #include "nikon_curve.h" #include #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define g_fopen fopen #endif #include #include #include #include #include /* For variable argument lists */ /************************************************* * Internal static functions *************************************************/ /************************************************************ nc_message: The Nikon Curve message handler. code - Message code format - The message to format ... - variable arguments **************************************************************/ static void nc_message(int code, char *format, ...); static void DEBUG_PRINT(char *format, ...); /******************************************************************* d3_np_fs: Helper function for calculating and storing tridiagnol matrices. Cubic spline calculations involve these types of matrices. *********************************************************************/ static double *d3_np_fs(int n, double a[], double b[]); /******************************************************************* spline_cubic_set: spline_cubic_set gets the second derivatives for the curve to be used in spline construction n = number of control points t[] = x array y[] = y array ibcbeg = initial point condition (see function notes). ybcbeg = beginning value depending on above flag ibcend = end point condition (see function notes). ybcend = end value depending on above flag returns the y value at the given tval point *********************************************************************/ static double *spline_cubic_set(int n, double t[], double y[], int ibcbeg, double ybcbeg, int ibcend, double ybcend); /******************************************************************* spline_cubic_val: spline_cubic_val gets a value from spline curve. n = number of control points t[] = x array tval = x value you're requesting the data for, can be anywhere on the interval. y[] = y array ypp[] = second derivative array calculated by spline_cubic_set ypval = first derivative value of requested point yppval = second derivative value of requested point returns the y value at the given tval point *********************************************************************/ static double spline_cubic_val(int n, double t[], double tval, double y[], double ypp[], double *ypval, double *yppval); /************************************************************ SaveNikonCurveFile: Saves out curves to a Nikon ntc or ncv file. This function takes a single curve and uses defaults for the other curves. Typically, the curve used is the tone curve. curve - A NikonCurve structure. This is usually the tone curve curve_type - The curve type (TONE_CURVE, RED_CURVE, etc.) fileName - The filename. filetype - Indicator for an NCV or NTC file. NOTE: The only version tested is Nikon 4.1 anything other than this may result in unpredictable behavior. For now, the version passed in is ignored and is forced to 4.1. This function is just a helper function that allows the user to just carry around a single curve. **************************************************************/ #ifdef _STAND_ALONE_ static int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile, int filetype); #endif /********************************************* SaveSampledNikonCurve: Saves a sampling from a curve to text file to be processed by UFRaw. sample - Pointer to the sampled curve. fileName - The filename. **********************************************/ #ifdef _STAND_ALONE_ static int SaveSampledNikonCurve(CurveSample *sample, char *outfile); #endif /***************************************************** FindTIFFOffset: Moves the file pointer to the location indicated by the TAG-TYPE pairing. This is meant just as a helper function for this code. Uses elsewhere may be limited. file - Nikon File ptr num_entries - Number of entries to search through tiff_tag - The tiff tag to match. tiff_type - The tiff type to match. *******************************************************/ #ifdef _STAND_ALONE_ static int FindTIFFOffset(FILE *file, unsigned short num_entries, unsigned short tiff_tag, unsigned short tiff_type); #endif /**************************************************** SampleToCameraCurve: Transforms the curve generated by sampling the spline interpolator into the curve that is used by the camera. This is a special function. While the function places no special restrictions on sampling resolution or output resolution, it should be noted that Nikon D70 camera curve is 4096 entries of 0-255. If you intend on using this function as such, you should set the sampling resolution and output resolution accordingly. curve - The Nikon curve to sample and transform. *****************************************************/ #ifdef _STAND_ALONE_ static int SampleToCameraCurve(CurveData *curve, CurveSample *sample); #endif /**************************************** ConvertNikonCurveData: The main driver. Takes a filename and processes the curve, if possible. fileName - The file to process. *****************************************/ #ifdef _STAND_ALONE_ static int ConvertNikonCurveData(char *inFileName, char *outFileName, unsigned int samplingRes, unsigned int outputRes); #endif /******************************************************* RipNikonNEFData: Gets Nikon NEF data. For now, this is just the tone curve data. This is more of a helper function for running in stand-alone. This function basically finds the correct file offset, and then calls RipNikonNEFCurve. infile - The input file curve - data structure to hold data in. sample_p - pointer to the curve sample reference. can be NULL if curve sample is not needed. ********************************************************/ #ifdef _STAND_ALONE_ static int RipNikonNEFData(char *infile, CurveData *data, CurveSample **sample_p); #endif /******************************************************************************* Information regarding the file format. Section Headers: Order of Box Data: Left x, Right x, Midpoint x (gamma), Bottom y, Top y Order of Anchor Data: Start x, Start y, Anchor 1 x, Anchor 1 y, ... , End x, End y Anchor Point Data: This is aligned on 8 byte boundries. However, the section must end on a 16 byte boundary, which means an 8 byte pad is added. ********************************************************************************/ //DEFINES FOR WRITING OUT DATA (for ntc/ncv files) #define NCV_HEADER_SIZE 0x3E //Combined header length for an NCV file #define NCV_SECOND_FILE_SIZE_OFFSET 0x3F //4 bytes (int). File size - NCV_header #define NCV_UNKNOWN_HEADER_DATA 0x002 //2 bytes. (?) #define NCV_SECOND_HEADER_LENGTH 23 #define NCV_FILE_TERMINATOR_LENGTH 23 #define NTC_FILE_HEADER_LENGTH 0x10 //16 bytes. Doesn't change //This seemed to change when Nikon released an updated capture program //from 4.1 to 4.2. This may be an int but not sure. #define NCV_PATCH_OFFSET 0x3D //2 bytes(?) #define NTC_PATCH_OFFSET 0x10 //2 bytes(?) #define FILE_SIZE_OFFSET 0x12 //4 bytes (int). File size - header. #define NTC_VERSION_OFFSET 0x16 //4 bytes (int).(?) //9 byte pad(?) //16 bytes. Another section header goes here. //From here down repeats for every section #define NTC_SECTION_TYPE_OFFSET 0x00 //4 bytes (int) (0,1,2,3) #define NTC_UNKNOWN 0x05 //2 bytes. Doesn't change but not sure what they do (0x03ff) #define NTC_UNKNOWN_DATA 0x3FF // #define NTC_RED_COMPONENT_OFFSET 0x08 //4 bytes (int) (0-255) #define NTC_GREEN_COMPONENT_OFFSET 0x0C //4 bytes (int) (0-255) #define NTC_BLUE_COMPONENT_OFFSET 0x0F //4 bytes (int) (0-255) //12 byte pad all zeros(align to 16?) #define NTC_RED_WEIGHT_OFFSET 0x1F //4 bytes (int) (0-255) #define NTC_GREEN_WEIGHT_OFFSET 0x23 //4 bytes (int) (0-255) #define NTC_BLUE_WEIGHT_OFFSET 0x27 //4 bytes (int) (0-255) #define END_ANCHOR_DATA_PAD_LENGTH 0x08 //Always all zeros #define NTC_SECTION_HEADER_LENGTH 0x10 //Doesn't change //DEFINES FOR READING IN DATA #define HEADER_SIZE 0x10 //First characters may be unicode Japanese? #define NTC_BOX_DATA 0x5C //Start of box data #define NTC_NUM_ANCHOR_POINTS 0x84 //Number of anchor points plus 2 for start and end points #define NTC_ANCHOR_DATA_START 0x88 //Beginning of anchor point data #define NCV_BOX_DATA 0x89 //Start of box data #define NCV_NUM_ANCHOR_POINTS 0xB2 //Number of anchor points plus 2 for start and end points #define NCV_ANCHOR_DATA_START 0xB5 //Beginning of anchor point data //array indices to retrive data #define PATCH_DATA 0 #define BOX_DATA 1 #define NUM_ANCHOR_POINTS 2 #define ANCHOR_DATA 3 //Some data sections sizes for calculating offsets #define NEXT_SECTION_BOX_DATA_OFFSET 0x43 //after the anchor data, this is the offset to //the beginning of the next section's box data #define NUM_POINTS_TO_ANCHOR_OFFSET 0x03 //number of bytes from the number of anchor points //byte to the start of anchor data. //Nikon version defines #define NIKON_VERSION_4_1 0x00000401 #define NIKON_PATCH_4 0x04ff #define NIKON_PATCH_5 0x05ff //Maximum resoltuion allowed due to space considerations. #define MAX_RESOLUTION 65536 ////////////////////////////// //NEF/TIFF MACROS AND DEFINES ////////////////////////////// #define TIFF_TAG_EXIF_OFFSET 34665 #define TIFF_TAG_MAKER_NOTE_OFFSET 37500 #define TIFF_TAG_CURVE_OFFSET 140 #define TIFF_TYPE_UNDEFINED 7 #define TIFF_TYPE_LONG 4 //Flags used to determine what file we're trying to process. //Should only be used in standalone mode. #ifdef _STAND_ALONE_ #define CURVE_MODE 0 #define NEF_MODE 1 #endif /************************************************* * Internal static data *************************************************/ //file offsets for the different data in different file types static const int FileOffsets[2][4] = { {NTC_PATCH_OFFSET, NTC_BOX_DATA, NTC_NUM_ANCHOR_POINTS, NTC_ANCHOR_DATA_START}, {NCV_PATCH_OFFSET, NCV_BOX_DATA, NCV_NUM_ANCHOR_POINTS, NCV_ANCHOR_DATA_START}, }; //file header indicating ntc file static const unsigned char NTCFileHeader[] = {0x9d, 0xdc, 0x7d, 0x00, 0x65, 0xd4, 0x11, 0xd1, 0x91, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; //file header indicating an ncv file static const unsigned char NCVFileHeader[] = {0x40, 0xa9, 0x86, 0x7a, 0x1b, 0xe9, 0xd2, 0x11, 0xa9, 0x0a, 0x00, 0xaa, 0x00, 0xb1, 0xc1, 0xb7 }; //This is an additional header chunk at the beginning of the file //There are some similarities between the headers, but not enough to fully crack. //This does not appear to change. static const unsigned char NCVSecondFileHeader[] = {0x01, 0x32, 0xa4, 0x76, 0xa2, 0x17, 0xd4, 0x11, 0xa9, 0x0a, 0x00, 0xaa, 0x00, 0xb1, 0xc1, 0xb7, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01 }; //This is the terminator of an NCV file. Again there are some similarites //to other sections, but not enough for to crack what it means. However, //it does not appear to change. static const unsigned char NCVFileTerminator[] = {0x45, 0xd3, 0x0d, 0x77, 0xa3, 0x6e, 0x1e, 0x4e, 0xa4, 0xbe, 0xcf, 0xc1, 0x8e, 0xb5, 0xb7, 0x47, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01 }; //File section header. Only a one byte difference between this and an NTC file header static const unsigned char FileSectionHeader[] = {0x9d, 0xdc, 0x7d, 0x03, 0x65, 0xd4, 0x11, 0xd1, 0x91, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; //file type header array static const unsigned char *FileTypeHeaders[NUM_FILE_TYPES] = { NTCFileHeader, NCVFileHeader, }; /**STANDALONE**/ #ifdef _STAND_ALONE_ //filenames char exportFilename[1024]; char nikonFilename[1024]; unsigned int standalone_samplingRes = 65536; unsigned int standalone_outputRes = 256; unsigned int program_mode = CURVE_MODE; /******************************************* ProcessArgs: Convenient function for processing the args for the test runner. ********************************************/ static int ProcessArgs(int num_args, char *args[]) { exportFilename[0] = '\0'; nikonFilename[0] = '\0'; int i; for (i = 0; i < num_args; i++) { if (strcmp(args[i], "-h") == 0 || strcmp(args[i], "-H") == 0 || num_args <= 1) { printf("NikonCurveGenerator %s %s\n", NC_VERSION, NC_DATE); printf("Written by Shawn Freeman\n"); printf("Thanks go out to Udi Fuchs, UFRaw, and GIMP :)\n\n"); printf("Usage:\n"); printf("-o Specify output file.\n"); printf("-sr Specify sampling resolution. Default is 65536.\n"); printf("-or Specify output resolution. Default is 256.\n\n"); printf("-nef Specify an NEF file to get tone curve data from.\n\n"); printf(" The -or and -sr options are ignored for NEF files\n\n"); printf("NOTE: If a resolution is not specified, a default one will be used.\n"); printf(" If the -o option is not specified, default files will be used.\n\n"); printf("Example:\n"); printf("%s -sr 65536 -or 256 curveFile -o exportFile\n", args[0]); //signal that processing cannot occur return NC_ERROR; } else if (strcmp(args[i], "-o") == 0 || strcmp(args[i], "-O") == 0) { i++; strncpy(exportFilename, args[i], 1023); exportFilename[1023] = '\0'; } else if (strcmp(args[i], "-sr") == 0) { i++; standalone_samplingRes = atoi(args[i]); if (standalone_samplingRes < 1) { nc_message(NC_WARNING, "WARNING: Sampling resolution must be" ">= 1! Using default of 65535.\n"); } } else if (strcmp(args[i], "-or") == 0) { i++; standalone_outputRes = atoi(args[i]); if (standalone_outputRes < 1) { nc_message(NC_WARNING, "WARNING: Output resolution must be" ">= 1! Using default of 256.\n"); } } else if (strcmp(args[i], "-nef") == 0) { i++; program_mode = NEF_MODE; strncpy(nikonFilename, args[i], 1023); nikonFilename[1023] = '\0'; } //don't load argument 0 else if (i != 0) { //consider this the file name to load strncpy(nikonFilename, args[i], 1023); nikonFilename[1023] = '\0'; } } if (strlen(exportFilename) == 0) { //set it to have a default output file name strncpy(exportFilename, nikonFilename, 1023); strncat(exportFilename, "_CURVE_OUTPUT.txt", 1023); exportFilename[1023] = '\0'; } return NC_SUCCESS; } #endif //End STAND_ALONE /************************************************************ nc_message_handler: The Nikon Curve message handler. Udi Fuchs created this to make the error handling consistent acros the code. code - Message code message - The message **************************************************************/ static void nc_message(int code, char *format, ...) { char message[256]; va_list ap; va_start(ap, format); vsnprintf(message, 255, format, ap); message[255] = '\0'; va_end(ap); #ifdef _STAND_ALONE_ //if we're running standalone mode code = code; fprintf(stderr, "%s", message); fflush(stderr); #else #ifdef __WITH_UFRAW__ //and if compiling with UFRAW if (code == NC_SET_ERROR) { ufraw_message(UFRAW_SET_ERROR, message); } else { ufraw_message(code, message); } #else //else, just print out the errors normally code = code; g_printerr("%s", message); #endif //End WITH_UFRAW #endif //End STAND_ALONE } static void DEBUG_PRINT(char *format, ...) { #ifdef _DEBUG va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); fflush(stderr); va_end(ap); #else format = format; #endif } /* nc_merror(): Handle memory allocaltion errors */ static void nc_merror(void *ptr, char *where) { if (ptr) return; #ifdef __WITH_UFRAW__ g_error("Out of memory in %s\n", where); #else fprintf(stderr, "Out of memory in %s\n", where); exit(1); #endif } static size_t nc_fread(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t num = fread(ptr, size, nmemb, stream); if (num != nmemb) nc_message(NC_WARNING, "WARNING: nc_fread %d != %d\n", num, nmemb); return num; } static size_t nc_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t num = fwrite(ptr, size, nmemb, stream); if (num != nmemb) nc_message(NC_WARNING, "WARNING: nc_fwrite %d != %d\n", num, nmemb); return num; } // Assert something at compile time (must use this inside a function); // works because compilers won't let us declare negative-length arrays. #define STATIC_ASSERT(cond) \ { (void)((int (*)(char failed_static_assertion[(cond)?1:-1]))0); } /*********************************************************************** isBigEndian: Determines if the machine we are running on is big endian or not. ************************************************************************/ static int isBigEndian() { STATIC_ASSERT(sizeof(short) == 2); union { unsigned char c[2]; short x; } EndianTest; EndianTest.c[0] = 1; EndianTest.c[1] = 0; return (EndianTest.x != 1); } /*********************************************************************** ShortVal: Convert short int (16 bit) from little endian to machine endianess. ************************************************************************/ static short ShortVal(short s) { STATIC_ASSERT(sizeof(short) == 2); if (isBigEndian()) { unsigned char b1, b2; b1 = s & 255; b2 = (s >> 8) & 255; return (b1 << 8) + b2; } else return s; } /*********************************************************************** LongVal: Convert long int (32 bit) from little endian to machine endianess. ************************************************************************/ static int LongVal(int i) { STATIC_ASSERT(sizeof(int) == 4); if (isBigEndian()) { unsigned char b1, b2, b3, b4; b1 = i & 255; b2 = (i >> 8) & 255; b3 = (i >> 16) & 255; b4 = (i >> 24) & 255; return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4; } else return i; } /*********************************************************************** DoubleVal: Convert double from little endian to machine endianess. ************************************************************************/ static double DoubleVal(double d) { STATIC_ASSERT(sizeof(double) == 8); if (isBigEndian()) { union { double d; unsigned char b[8]; } dat1, dat2; dat1.d = d; dat2.b[0] = dat1.b[7]; dat2.b[1] = dat1.b[6]; dat2.b[2] = dat1.b[5]; dat2.b[3] = dat1.b[4]; dat2.b[4] = dat1.b[3]; dat2.b[5] = dat1.b[2]; dat2.b[6] = dat1.b[1]; dat2.b[7] = dat1.b[0]; return dat2.d; } else return d; } //********************************************************************** // // Purpose: // // D3_NP_FS factors and solves a D3 system. // // Discussion: // // The D3 storage format is used for a tridiagonal matrix. // The superdiagonal is stored in entries (1,2:N), the diagonal in // entries (2,1:N), and the subdiagonal in (3,1:N-1). Thus, the // original matrix is "collapsed" vertically into the array. // // This algorithm requires that each diagonal entry be nonzero. // It does not use pivoting, and so can fail on systems that // are actually nonsingular. // // Example: // // Here is how a D3 matrix of order 5 would be stored: // // * A12 A23 A34 A45 // A11 A22 A33 A44 A55 // A21 A32 A43 A54 * // // Modified: // // 07 January 2005 Shawn Freeman (pure C modifications) // 15 November 2003 John Burkardt // // Author: // // John Burkardt // // Parameters: // // Input, int N, the order of the linear system. // // Input/output, double A[3*N]. // On input, the nonzero diagonals of the linear system. // On output, the data in these vectors has been overwritten // by factorization information. // // Input, double B[N], the right hand side. // // Output, double D3_NP_FS[N], the solution of the linear system. // This is NULL if there was an error because one of the diagonal // entries was zero. // static double *d3_np_fs(int n, double a[], double b[]) { int i; double *x; double xmult; // // Check. // for (i = 0; i < n; i++) { if (a[1 + i * 3] == 0.0E+00) { return NULL; } } x = (double *)calloc(n, sizeof(double)); nc_merror(x, "d3_np_fs"); for (i = 0; i < n; i++) { x[i] = b[i]; } for (i = 1; i < n; i++) { xmult = a[2 + (i - 1) * 3] / a[1 + (i - 1) * 3]; a[1 + i * 3] = a[1 + i * 3] - xmult * a[0 + i * 3]; x[i] = x[i] - xmult * x[i - 1]; } x[n - 1] = x[n - 1] / a[1 + (n - 1) * 3]; for (i = n - 2; 0 <= i; i--) { x[i] = (x[i] - a[0 + (i + 1) * 3] * x[i + 1]) / a[1 + i * 3]; } return x; } //********************************************************************** // // Purpose: // // SPLINE_CUBIC_SET computes the second derivatives of a piecewise cubic spline. // // Discussion: // // For data interpolation, the user must call SPLINE_SET to determine // the second derivative data, passing in the data to be interpolated, // and the desired boundary conditions. // // The data to be interpolated, plus the SPLINE_SET output, defines // the spline. The user may then call SPLINE_VAL to evaluate the // spline at any point. // // The cubic spline is a piecewise cubic polynomial. The intervals // are determined by the "knots" or abscissas of the data to be // interpolated. The cubic spline has continous first and second // derivatives over the entire interval of interpolation. // // For any point T in the interval T(IVAL), T(IVAL+1), the form of // the spline is // // SPL(T) = A(IVAL) // + B(IVAL) * ( T - T(IVAL) ) // + C(IVAL) * ( T - T(IVAL) )**2 // + D(IVAL) * ( T - T(IVAL) )**3 // // If we assume that we know the values Y(*) and YPP(*), which represent // the values and second derivatives of the spline at each knot, then // the coefficients can be computed as: // // A(IVAL) = Y(IVAL) // B(IVAL) = ( Y(IVAL+1) - Y(IVAL) ) / ( T(IVAL+1) - T(IVAL) ) // - ( YPP(IVAL+1) + 2 * YPP(IVAL) ) * ( T(IVAL+1) - T(IVAL) ) / 6 // C(IVAL) = YPP(IVAL) / 2 // D(IVAL) = ( YPP(IVAL+1) - YPP(IVAL) ) / ( 6 * ( T(IVAL+1) - T(IVAL) ) ) // // Since the first derivative of the spline is // // SPL'(T) = B(IVAL) // + 2 * C(IVAL) * ( T - T(IVAL) ) // + 3 * D(IVAL) * ( T - T(IVAL) )**2, // // the requirement that the first derivative be continuous at interior // knot I results in a total of N-2 equations, of the form: // // B(IVAL-1) + 2 C(IVAL-1) * (T(IVAL)-T(IVAL-1)) // + 3 * D(IVAL-1) * (T(IVAL) - T(IVAL-1))**2 = B(IVAL) // // or, setting H(IVAL) = T(IVAL+1) - T(IVAL) // // ( Y(IVAL) - Y(IVAL-1) ) / H(IVAL-1) // - ( YPP(IVAL) + 2 * YPP(IVAL-1) ) * H(IVAL-1) / 6 // + YPP(IVAL-1) * H(IVAL-1) // + ( YPP(IVAL) - YPP(IVAL-1) ) * H(IVAL-1) / 2 // = // ( Y(IVAL+1) - Y(IVAL) ) / H(IVAL) // - ( YPP(IVAL+1) + 2 * YPP(IVAL) ) * H(IVAL) / 6 // // or // // YPP(IVAL-1) * H(IVAL-1) + 2 * YPP(IVAL) * ( H(IVAL-1) + H(IVAL) ) // + YPP(IVAL) * H(IVAL) // = // 6 * ( Y(IVAL+1) - Y(IVAL) ) / H(IVAL) // - 6 * ( Y(IVAL) - Y(IVAL-1) ) / H(IVAL-1) // // Boundary conditions must be applied at the first and last knots. // The resulting tridiagonal system can be solved for the YPP values. // // Modified: // // 07 January 2005 Shawn Freeman (pure C modifications) // 06 February 2004 John Burkardt // // // Author: // // John Burkardt // // Parameters: // // Input, int N, the number of data points. N must be at least 2. // In the special case where N = 2 and IBCBEG = IBCEND = 0, the // spline will actually be linear. // // Input, double T[N], the knot values, that is, the points were data is // specified. The knot values should be distinct, and increasing. // // Input, double Y[N], the data values to be interpolated. // // Input, int IBCBEG, left boundary condition flag: // 0: the cubic spline should be a quadratic over the first interval; // 1: the first derivative at the left endpoint should be YBCBEG; // 2: the second derivative at the left endpoint should be YBCBEG. // // Input, double YBCBEG, the values to be used in the boundary // conditions if IBCBEG is equal to 1 or 2. // // Input, int IBCEND, right boundary condition flag: // 0: the cubic spline should be a quadratic over the last interval; // 1: the first derivative at the right endpoint should be YBCEND; // 2: the second derivative at the right endpoint should be YBCEND. // // Input, double YBCEND, the values to be used in the boundary // conditions if IBCEND is equal to 1 or 2. // // Output, double SPLINE_CUBIC_SET[N], the second derivatives of the cubic spline. // static double *spline_cubic_set(int n, double t[], double y[], int ibcbeg, double ybcbeg, int ibcend, double ybcend) { double *a; double *b; int i; double *ypp; // // Check. // if (n <= 1) { nc_message(NC_SET_ERROR, "spline_cubic_set() error: " "The number of data points must be at least 2.\n"); return NULL; } for (i = 0; i < n - 1; i++) { if (t[i + 1] <= t[i]) { nc_message(NC_SET_ERROR, "spline_cubic_set() error: " "The knots must be strictly increasing, but " "T(%u) = %e, T(%u) = %e\n", i, t[i], i + 1, t[i + 1]); return NULL; } } a = (double *)calloc(3 * n, sizeof(double)); nc_merror(a, "spline_cubic_set"); b = (double *)calloc(n, sizeof(double)); nc_merror(b, "spline_cubic_set"); // // Set up the first equation. // if (ibcbeg == 0) { b[0] = 0.0E+00; a[1 + 0 * 3] = 1.0E+00; a[0 + 1 * 3] = -1.0E+00; } else if (ibcbeg == 1) { b[0] = (y[1] - y[0]) / (t[1] - t[0]) - ybcbeg; a[1 + 0 * 3] = (t[1] - t[0]) / 3.0E+00; a[0 + 1 * 3] = (t[1] - t[0]) / 6.0E+00; } else if (ibcbeg == 2) { b[0] = ybcbeg; a[1 + 0 * 3] = 1.0E+00; a[0 + 1 * 3] = 0.0E+00; } else { nc_message(NC_SET_ERROR, "spline_cubic_set() error: " "IBCBEG must be 0, 1 or 2. The input value is %u.\n", ibcbeg); free(a); free(b); return NULL; } // // Set up the intermediate equations. // for (i = 1; i < n - 1; i++) { b[i] = (y[i + 1] - y[i]) / (t[i + 1] - t[i]) - (y[i] - y[i - 1]) / (t[i] - t[i - 1]); a[2 + (i - 1) * 3] = (t[i] - t[i - 1]) / 6.0E+00; a[1 + i * 3] = (t[i + 1] - t[i - 1]) / 3.0E+00; a[0 + (i + 1) * 3] = (t[i + 1] - t[i]) / 6.0E+00; } // // Set up the last equation. // if (ibcend == 0) { b[n - 1] = 0.0E+00; a[2 + (n - 2) * 3] = -1.0E+00; a[1 + (n - 1) * 3] = 1.0E+00; } else if (ibcend == 1) { b[n - 1] = ybcend - (y[n - 1] - y[n - 2]) / (t[n - 1] - t[n - 2]); a[2 + (n - 2) * 3] = (t[n - 1] - t[n - 2]) / 6.0E+00; a[1 + (n - 1) * 3] = (t[n - 1] - t[n - 2]) / 3.0E+00; } else if (ibcend == 2) { b[n - 1] = ybcend; a[2 + (n - 2) * 3] = 0.0E+00; a[1 + (n - 1) * 3] = 1.0E+00; } else { nc_message(NC_SET_ERROR, "spline_cubic_set() error: " "IBCEND must be 0, 1 or 2. The input value is %u", ibcend); free(a); free(b); return NULL; } // // Solve the linear system. // if (n == 2 && ibcbeg == 0 && ibcend == 0) { ypp = (double *)calloc(2, sizeof(double)); nc_merror(ypp, "spline_cubic_set"); ypp[0] = 0.0E+00; ypp[1] = 0.0E+00; } else { ypp = d3_np_fs(n, a, b); if (!ypp) { nc_message(NC_SET_ERROR, "spline_cubic_set() error: " "The linear system could not be solved.\n"); free(a); free(b); return NULL; } } free(a); free(b); return ypp; } //********************************************************************** // // Purpose: // // SPLINE_CUBIC_VAL evaluates a piecewise cubic spline at a point. // // Discussion: // // SPLINE_CUBIC_SET must have already been called to define the values of YPP. // // For any point T in the interval T(IVAL), T(IVAL+1), the form of // the spline is // // SPL(T) = A // + B * ( T - T(IVAL) ) // + C * ( T - T(IVAL) )**2 // + D * ( T - T(IVAL) )**3 // // Here: // A = Y(IVAL) // B = ( Y(IVAL+1) - Y(IVAL) ) / ( T(IVAL+1) - T(IVAL) ) // - ( YPP(IVAL+1) + 2 * YPP(IVAL) ) * ( T(IVAL+1) - T(IVAL) ) / 6 // C = YPP(IVAL) / 2 // D = ( YPP(IVAL+1) - YPP(IVAL) ) / ( 6 * ( T(IVAL+1) - T(IVAL) ) ) // // Modified: // // 07 January 2005 Shawn Freeman (pure C modifications) // 04 February 1999 John Burkardt // // Author: // // John Burkardt // // Parameters: // // Input, int n, the number of knots. // // Input, double Y[N], the data values at the knots. // // Input, double T[N], the knot values. // // Input, double TVAL, a point, typically between T[0] and T[N-1], at // which the spline is to be evalulated. If TVAL lies outside // this range, extrapolation is used. // // Input, double Y[N], the data values at the knots. // // Input, double YPP[N], the second derivatives of the spline at // the knots. // // Output, double *YPVAL, the derivative of the spline at TVAL. // // Output, double *YPPVAL, the second derivative of the spline at TVAL. // // Output, double SPLINE_VAL, the value of the spline at TVAL. // static double spline_cubic_val(int n, double t[], double tval, double y[], double ypp[], double *ypval, double *yppval) { double dt; double h; int i; int ival; double yval; // // Determine the interval [ T(I), T(I+1) ] that contains TVAL. // Values below T[0] or above T[N-1] use extrapolation. // ival = n - 2; for (i = 0; i < n - 1; i++) { if (tval < t[i + 1]) { ival = i; break; } } // // In the interval I, the polynomial is in terms of a normalized // coordinate between 0 and 1. // dt = tval - t[ival]; h = t[ival + 1] - t[ival]; yval = y[ival] + dt * ((y[ival + 1] - y[ival]) / h - (ypp[ival + 1] / 6.0E+00 + ypp[ival] / 3.0E+00) * h + dt * (0.5E+00 * ypp[ival] + dt * ((ypp[ival + 1] - ypp[ival]) / (6.0E+00 * h)))); *ypval = (y[ival + 1] - y[ival]) / h - (ypp[ival + 1] / 6.0E+00 + ypp[ival] / 3.0E+00) * h + dt * (ypp[ival] + dt * (0.5E+00 * (ypp[ival + 1] - ypp[ival]) / h)); *yppval = ypp[ival] + dt * (ypp[ival + 1] - ypp[ival]) / h; return yval; } /********************************************* GetNikonFileType: Gets the nikon file type by comparing file headers. file - The file to check. **********************************************/ static int GetNikonFileType(FILE *file) { unsigned char buff[HEADER_SIZE]; int i = 0, j = 0; int found = 1; nc_fread(buff, HEADER_SIZE, 1, file); for (i = 0; i < NUM_FILE_TYPES; i++) { found = 1; for (j = 0; j < HEADER_SIZE; j++) { if (buff[j] != FileTypeHeaders[i][j]) { found = 0; break; } } if (found) { //return the file type return i; } } nc_message(NC_SET_ERROR, "Error, no compatible file types found!\n"); return -1; } /********************************************* LoadNikonCurve: Loads all curves from a Nikon ntc or ncv file. fileName - The filename. curve - Pointer to curve struct to hold the data. resolution - How many data points to sample from the curve. **********************************************/ int LoadNikonData(char *fileName, NikonData *data) { FILE *input = NULL; int offset = 0; CurveData *curve = NULL; if (fileName == NULL || strlen(fileName) == 0) { nc_message(NC_SET_ERROR, "Error, input filename cannot be NULL or empty!\n"); return NC_ERROR; } DEBUG_PRINT("DEBUG: OPENING FILE: %s\n", fileName); //open file for reading only! input = g_fopen(fileName, "rb"); //make sure we have a valid file if (input == NULL) { nc_message(NC_SET_ERROR, "Error opening '%s': %s\n", fileName, strerror(errno)); return NC_ERROR; } //init the curve; memset(data, 0, sizeof(NikonData)); //get the file type data->m_fileType = GetNikonFileType(input); // set file seek positions for curve tones depending of file type // todo: is it possible to find one common rule? long curveFilePos[4][4] = { {FileOffsets[data->m_fileType][BOX_DATA], SEEK_SET, FileOffsets[data->m_fileType][ANCHOR_DATA], SEEK_SET}, {NEXT_SECTION_BOX_DATA_OFFSET, SEEK_CUR, NUM_POINTS_TO_ANCHOR_OFFSET, SEEK_CUR}, {NEXT_SECTION_BOX_DATA_OFFSET, SEEK_CUR, NUM_POINTS_TO_ANCHOR_OFFSET, SEEK_CUR}, {NEXT_SECTION_BOX_DATA_OFFSET, SEEK_CUR, NUM_POINTS_TO_ANCHOR_OFFSET, SEEK_CUR} }; //make sure we have a good file type if (data->m_fileType == -1) return NC_ERROR; //advance file pointer to necessary data section fseek(input, offset, SEEK_SET); //Conevenience and opt if compiler doesn't already do it curve = &data->curves[0]; //set curve type curve->m_curveType = TONE_CURVE; //read patch version fseek(input, FileOffsets[data->m_fileType][PATCH_DATA], SEEK_SET); nc_fread(&data->m_patch_version, sizeof(unsigned short), 1, input); data->m_patch_version = ShortVal(data->m_patch_version); // read all tone curves data follow from here int i; for (i = 0; i < NUM_CURVE_TYPES; i++) { curve = &data->curves[i]; //set curve type curve->m_curveType = i; //get box data fseek(input, curveFilePos[i][0], curveFilePos[i][1]); if (!fread(&curve->m_min_x, sizeof(double), 1, input)) continue; curve->m_min_x = DoubleVal(curve->m_min_x); if (!fread(&curve->m_max_x, sizeof(double), 1, input)) continue; curve->m_max_x = DoubleVal(curve->m_max_x); if (!fread(&curve->m_gamma, sizeof(double), 1, input)) continue; curve->m_gamma = DoubleVal(curve->m_gamma); if (!fread(&curve->m_min_y, sizeof(double), 1, input)) continue; curve->m_min_y = DoubleVal(curve->m_min_y); if (!fread(&curve->m_max_y, sizeof(double), 1, input)) continue; curve->m_max_y = DoubleVal(curve->m_max_y); //get number of anchors (always located after box data) if (!fread(&curve->m_numAnchors, 1, 1, input)) continue; // It seems that if there is no curve then the 62 bytes in the buffer // are either all 0x00 (D70) or 0xFF (D2H). // We therefore switch these values with the default values. if (curve->m_min_x == 1.0) { curve->m_min_x = 0.0; DEBUG_PRINT("DEBUG: NEF X MIN -> %e (changed)\n", curve->m_min_x); } if (curve->m_max_x == 0.0) { curve->m_max_x = 1.0; DEBUG_PRINT("DEBUG: NEF X MAX -> %e (changed)\n", curve->m_max_x); } if (curve->m_min_y == 1.0) { curve->m_min_y = 0.0; DEBUG_PRINT("DEBUG: NEF Y MIN -> %e (changed)\n", curve->m_min_y); } if (curve->m_max_y == 0.0) { curve->m_max_y = 1.0; DEBUG_PRINT("DEBUG: NEF Y MAX -> %e (changed)\n", curve->m_max_y); } if (curve->m_gamma == 0.0 || curve->m_gamma == 255.0 + 255.0 / 256.0) { curve->m_gamma = 1.0; DEBUG_PRINT("DEBUG: NEF GAMMA -> %e (changed)\n", curve->m_gamma); } if (curve->m_numAnchors == 255) { curve->m_numAnchors = 0; DEBUG_PRINT("DEBUG: NEF NUMBER OF ANCHORS -> %u (changed)\n", curve->m_numAnchors); } if (curve->m_numAnchors > NIKON_MAX_ANCHORS) { curve->m_numAnchors = NIKON_MAX_ANCHORS; DEBUG_PRINT("DEBUG: NEF NUMBER OF ANCHORS -> %u (changed)\n", curve->m_numAnchors); } //Move to start of the anchor data fseek(input, curveFilePos[i][2], curveFilePos[i][3]); //read in the anchor points int rs = nc_fread(curve->m_anchors, sizeof(CurveAnchorPoint), curve->m_numAnchors, input); if (curve->m_numAnchors != rs) { nc_message(NC_SET_ERROR, "Error reading all anchor points\n"); return NC_ERROR; } int j; for (j = 0; j < curve->m_numAnchors; j++) { curve->m_anchors[j].x = DoubleVal(curve->m_anchors[j].x); curve->m_anchors[j].y = DoubleVal(curve->m_anchors[j].y); } DEBUG_PRINT("DEBUG: Loading Data:\n"); DEBUG_PRINT("DEBUG: CURVE_TYPE: %u \n", curve->m_curveType); DEBUG_PRINT("DEBUG: BOX->MIN_X: %f\n", curve->m_min_x); DEBUG_PRINT("DEBUG: BOX->MAX_X: %f\n", curve->m_max_x); DEBUG_PRINT("DEBUG: BOX->GAMMA: %f\n", curve->m_gamma); DEBUG_PRINT("DEBUG: BOX->MIN_Y: %f\n", curve->m_min_y); DEBUG_PRINT("DEBUG: BOX->MAX_Y: %f\n", curve->m_max_x); #ifdef _DEBUG int i_dbg; for (i_dbg = 0; i_dbg < curve->m_numAnchors; i_dbg++) { DEBUG_PRINT("DEBUG: ANCHOR X,Y: %f,%f\n", curve->m_anchors[i_dbg].x, curve->m_anchors[i_dbg].y); } DEBUG_PRINT("\n"); #endif } fclose(input); return NC_SUCCESS; } /********************************************* CurveDataSample: Samples from a spline curve constructed from the Nikon data. curve - Pointer to curve struct to hold the data. sample - Pointer to sample struct to hold the data. **********************************************/ int CurveDataSample(CurveData *curve, CurveSample *sample) { int i = 0, n; double x[20]; double y[20]; //The box points (except the gamma) are what the anchor points are relative //to so... double box_width = curve->m_max_x - curve->m_min_x; double box_height = curve->m_max_y - curve->m_min_y; double gamma = 1.0 / curve->m_gamma; //build arrays for processing if (curve->m_numAnchors == 0) { //just a straight line using box coordinates x[0] = curve->m_min_x; y[0] = curve->m_min_y; x[1] = curve->m_max_x; y[1] = curve->m_max_y; n = 2; } else { for (i = 0; i < curve->m_numAnchors; i++) { x[i] = curve->m_anchors[i].x * box_width + curve->m_min_x; y[i] = curve->m_anchors[i].y * box_height + curve->m_min_y; } n = curve->m_numAnchors; } //returns an array of second derivatives used to calculate the spline curve. //this is a malloc'd array that needs to be freed when done. //The setings currently calculate the natural spline, which closely matches //camera curve output in raw files. double *ypp = spline_cubic_set(n, x, y, 2, 0.0, 2, 0.0); if (ypp == NULL) return NC_ERROR; //first derivative at a point double ypval = 0; //second derivate at a point double yppval = 0; //Now build a table int val; double res = 1.0 / (double)(sample->m_samplingRes - 1); //allocate enough space for the samples DEBUG_PRINT("DEBUG: SAMPLING ALLOCATION: %u bytes\n", sample->m_samplingRes * sizeof(int)); DEBUG_PRINT("DEBUG: SAMPLING OUTPUT RANGE: 0 -> %u\n", sample->m_outputRes); sample->m_Samples = (unsigned int *)realloc(sample->m_Samples, sample->m_samplingRes * sizeof(int)); nc_merror(sample->m_Samples, "CurveDataSample"); int firstPointX = x[0] * (sample->m_samplingRes - 1); int firstPointY = pow(y[0], gamma) * (sample->m_outputRes - 1); int lastPointX = x[n - 1] * (sample->m_samplingRes - 1); int lastPointY = pow(y[n - 1], gamma) * (sample->m_outputRes - 1); int maxY = curve->m_max_y * (sample->m_outputRes - 1); int minY = curve->m_min_y * (sample->m_outputRes - 1); for (i = 0; i < (int)sample->m_samplingRes; i++) { //get the value of the curve at a point //take into account that curves may not necessarily begin at x = 0.0 //nor end at x = 1.0 //Before the first point and after the last point, take a strait line if (i < firstPointX) { sample->m_Samples[i] = firstPointY; } else if (i > lastPointX) { sample->m_Samples[i] = lastPointY; } else { //within range, we can sample the curve if (gamma == 1.0) val = spline_cubic_val(n, x, i * res, y, ypp, &ypval, &yppval) * (sample->m_outputRes - 1) + 0.5; else val = pow(spline_cubic_val(n, x, i * res, y, ypp, &ypval, &yppval), gamma) * (sample->m_outputRes - 1) + 0.5; sample->m_Samples[i] = MIN(MAX(val, minY), maxY); } } free(ypp); return NC_SUCCESS; } /********************************************* CurveDataReset: Reset curve to straight line but don't touch the curve name. **********************************************/ void CurveDataReset(CurveData *curve) { curve->m_min_x = 0; curve->m_max_x = 1; curve->m_min_y = 0; curve->m_max_y = 1; curve->m_gamma = 1; curve->m_numAnchors = 2; curve->m_anchors[0].x = 0; curve->m_anchors[0].y = 0; curve->m_anchors[1].x = 1; curve->m_anchors[1].y = 1; } /********************************************* CurveDataIsTrivial: Check if the curve is a trivial linear curve. **********************************************/ int CurveDataIsTrivial(CurveData *curve) { if (curve->m_min_x != 0) return FALSE; if (curve->m_max_x != 1) return FALSE; if (curve->m_min_y != 0) return FALSE; if (curve->m_max_y != 1) return FALSE; if (curve->m_numAnchors < 2) return TRUE; if (curve->m_numAnchors != 2) return FALSE; if (curve->m_anchors[0].x != 0) return FALSE; if (curve->m_anchors[0].y != 0) return FALSE; if (curve->m_anchors[1].x != 1) return FALSE; if (curve->m_anchors[1].y != 1) return FALSE; return TRUE; } /********************************************* CurveDataSetPoint: Change the position of point to the new (x,y) coordinate. The end-points get a special treatment. When these are moved all the other points are moved together, keeping their relative position constant. **********************************************/ void CurveDataSetPoint(CurveData *curve, int point, double x, double y) { int i; double left = curve->m_anchors[0].x; double right = curve->m_anchors[curve->m_numAnchors - 1].x; if (point == 0) { for (i = 0; i < curve->m_numAnchors; i++) curve->m_anchors[i].x = x + (curve->m_anchors[i].x - left) * (right - x) / (right - left); } else if (point == curve->m_numAnchors - 1) { for (i = 0; i < curve->m_numAnchors; i++) curve->m_anchors[i].x = left + (curve->m_anchors[i].x - left) * (x - left) / (right - left); } else { curve->m_anchors[point].x = x; } curve->m_anchors[point].y = y; } /**************************************************** SampleToCameraCurve: EXPERIMENTAL!!!!! Transforms the curve generated by sampling the spline interpolator into the curve that is used by the camera. This is a special function. While the function places no special restrictions on sampling resolution or output resolution, it should be noted that Nikon D70 camera curve is 4096 entries of 0-255. If you intend on using this function as such, you should set the sampling resolution and output resolution accordingly. curve - The Nikon curve to sample and transform. *****************************************************/ #ifdef _STAND_ALONE_ #define CAMERA_LINEAR_CURVE_SLOPE 0.26086956521739130434782608695652 #define CAMERA_LINEAR_LIMIT ((276.0/4096.0)*65536.0) static int SampleToCameraCurve(CurveData *curve, CurveSample *sample) { unsigned int i = 0; if (curve->m_numAnchors < 2) { nc_message(NC_SET_ERROR, "Not enough anchor points(need at least two)!\n"); return NC_ERROR; } double x[20]; double y[20]; //The box points (except the gamma) are what the anchor points are relative //to so... double box_width = curve->m_max_x - curve->m_min_x; double box_height = curve->m_max_y - curve->m_min_y; double gamma = 1.0 / curve->m_gamma; //build arrays for processing if (curve->m_numAnchors == 0) { //just a straight line using box coordinates x[0] = curve->m_min_x; y[0] = curve->m_min_y; x[1] = curve->m_max_x; y[1] = curve->m_max_y; } else { for (i = 0; i < (unsigned int)curve->m_numAnchors; i++) { x[i] = curve->m_anchors[i].x * box_width + curve->m_min_x; y[i] = curve->m_anchors[i].y * box_height + curve->m_min_y; } } //returns an array of second derivatives used to calculate the spline curve. //this is a malloc'd array that needs to be freed when done. //The setings currently calculate the natural spline, which closely matches //camera curve output in raw files. double *ypp = spline_cubic_set(curve->m_numAnchors, x, y, 2, 0.0, 2, 0.0); if (ypp == NULL) return NC_ERROR; //first derivative at a point double ypval = 0; //second derivate at a point double yppval = 0; //Now build a table double val = 0; double res = 1.0 / (double)sample->m_samplingRes; DEBUG_PRINT("DEBUG: SAMPLING RESOLUTION: %u bytes\n", sample->m_samplingRes * sizeof(int)); DEBUG_PRINT("DEBUG: SAMPLING OUTPUT RANGE: 0 -> %u\n", sample->m_outputRes); double outres = sample->m_outputRes; for (i = 0; i < sample->m_samplingRes; i++) { //get the value of the curve at a point //take into account that curves may not necessarily begin at x = 0.0 //nor end at x = 1.0 if (i * res < curve->m_min_x || i * res > curve->m_max_x) { val = 0.0; } else { //within range, okay to sample the curve val = spline_cubic_val(curve->m_numAnchors, x, i * res, y, ypp, &ypval, &yppval); //Compensate for gamma. val = pow(val, gamma); //cap at the high end of the range if (val > curve->m_max_y) { val = curve->m_max_y; } //cap at the low end of the range else if (val < curve->m_min_y) { val = curve->m_min_y; } //transform "linear curve" to the camera curve //outres = 4096; //val *= outres; //this equation is used inside Nikon's program to transform //the curves into the camera curves. //FIX LINEAR SECTION /*if (val < CAMERA_LINEAR_CURVE_SLOPE) { //do linear val = val*4096*CAMERA_LINEAR_CURVE_SLOPE; } else*/ { //do real curve?? val = (log(7 * val + 1.0) / log(4 * val + 2.0)) * 142.0 + 104.0 * (val); } //cap at the high end of the range if (val > outres * curve->m_max_y) { val = outres; } //cap at the low end of the range else if (val < curve->m_min_y * outres) { val = curve->m_min_y * outres; } } //save the sample sample->m_Samples[i] = (unsigned int)floor(val); } free(ypp); return NC_SUCCESS; } #endif /************************************************************ SaveNikonDataFile: Savess a curve to a Nikon ntc or ncv file. data - A NikonData structure containing info of all the curves. fileName - The filename. filetype - Indicator for an NCV or NTC file. **************************************************************/ int SaveNikonDataFile(NikonData *data, char *outfile, int filetype) { FILE *output = NULL; int i = 0, r = 0, g = 0, b = 0; unsigned short_tmp = 0; unsigned int long_tmp = 0; double double_tmp = 0; CurveData *curve = NULL; //used for file padding unsigned char pad[32]; memset(pad, 0, 32); output = g_fopen(outfile, "wb+"); if (!output) { nc_message(NC_SET_ERROR, "Error creating curve file '%s': %s\n", outfile, strerror(errno)); return NC_ERROR; } //write out file header nc_fwrite(FileTypeHeaders[filetype], HEADER_SIZE, 1, output); if (filetype == NCV_FILE) { //write out unknown header bytes short_tmp = ShortVal(NCV_UNKNOWN_HEADER_DATA); nc_fwrite(&short_tmp, 2, 1, output); //write out file size - header //Placeholder.The real filesize is written at the end. //NCV files have two size location, one here and one in the //NTC section of the file long_tmp = 0; nc_fwrite(&long_tmp, 4, 1, output); //write second header chunk nc_fwrite(NCVSecondFileHeader, 1, NCV_SECOND_HEADER_LENGTH, output); //From here until almost the end, the file is an NTC file nc_fwrite(NTCFileHeader, NTC_FILE_HEADER_LENGTH, 1, output); } //patch version? (still unsure about this one) if (data->m_patch_version < NIKON_PATCH_4) { data->m_patch_version = NIKON_PATCH_5; } short_tmp = ShortVal(data->m_patch_version); nc_fwrite(&short_tmp, 2, 1, output); //write out file size - header //Placeholder.The real filesize is written at the end. long_tmp = 0; nc_fwrite(&long_tmp, 4, 1, output); //write out version unsigned int forced_ver = ShortVal(NIKON_VERSION_4_1); nc_fwrite(&forced_ver, 4, 1, output); //write out pad (this is a 7 byte pad) nc_fwrite(&pad, 1, 7, output); //now wash and repeat for the four sections of data for (i = 0; i < 4; i++) { //write out section header (same as NTC file header) nc_fwrite(FileSectionHeader, 1, NTC_FILE_HEADER_LENGTH, output); //write out section type long_tmp = LongVal(i); nc_fwrite(&long_tmp, 4, 1, output); //write out unknown data short_tmp = ShortVal(NTC_UNKNOWN_DATA); nc_fwrite(&short_tmp, 2, 1, output); //write out pad byte nc_fwrite(pad, 1, 1, output); //write out components switch (i) { case 0: r = g = b = 0; break; case 1: r = 255; g = b = 0; break; case 2: g = 255; r = b = 0; break; case 3: b = 255; g = r = 0; break; } long_tmp = LongVal(r); nc_fwrite(&long_tmp, 4, 1, output); long_tmp = LongVal(g); nc_fwrite(&long_tmp, 4, 1, output); long_tmp = LongVal(b); nc_fwrite(&long_tmp, 4, 1, output); //write out pad (12 byte pad) nc_fwrite(pad, 12, 1, output); //write out rgb weights switch (i) { case 0: r = g = b = 255; break; case 1: r = 255; g = b = 0; break; case 2: g = 255; r = b = 0; break; case 3: b = 255; g = r = 0; break; } long_tmp = LongVal(r); nc_fwrite(&long_tmp, 4, 1, output); long_tmp = LongVal(g); nc_fwrite(&long_tmp, 4, 1, output); long_tmp = LongVal(b); nc_fwrite(&long_tmp, 4, 1, output); curve = &data->curves[i]; //write out curve data if (curve->m_numAnchors >= 2) { //we have a legit curve, use the data as is double_tmp = DoubleVal(curve->m_min_x); nc_fwrite(&double_tmp, sizeof(double), 1, output); double_tmp = DoubleVal(curve->m_max_x); nc_fwrite(&double_tmp, sizeof(double), 1, output); double_tmp = DoubleVal(curve->m_gamma); nc_fwrite(&double_tmp, sizeof(double), 1, output); double_tmp = DoubleVal(curve->m_min_y); nc_fwrite(&double_tmp, sizeof(double), 1, output); double_tmp = DoubleVal(curve->m_max_y); nc_fwrite(&double_tmp, sizeof(double), 1, output); //write out number of anchor points (minimum is two) nc_fwrite(&curve->m_numAnchors, 1, 1, output); //write out pad nc_fwrite(pad, NUM_POINTS_TO_ANCHOR_OFFSET, 1, output); //write out anchor point data if (curve->m_anchors) { int i; for (i = 0; i < curve->m_numAnchors; i++) { double_tmp = DoubleVal(curve->m_anchors[i].x); nc_fwrite(&double_tmp, sizeof(double), 1, output); double_tmp = DoubleVal(curve->m_anchors[i].y); nc_fwrite(&double_tmp, sizeof(double), 1, output); } } else { nc_message(NC_SET_ERROR, "Curve anchor data is NULL! Aborting file write!\n"); return NC_ERROR; } } else { DEBUG_PRINT("NOTE: There are < 2 anchor points for curve %u! Forcing curve defaults.\n", i); DEBUG_PRINT("This should not be a concern unless it is happening for curve 0\n"); //This curve either has not been correctly initialized or is empty. //Force defaults. double default_val = 0; nc_fwrite(&default_val, sizeof(double), 1, output); //min x default_val = DoubleVal(1.0); nc_fwrite(&default_val, sizeof(double), 1, output); //max_x //gamma has a default of 1 default_val = DoubleVal(1.0); nc_fwrite(&default_val, sizeof(double), 1, output); //gamma default_val = 0; nc_fwrite(&default_val, sizeof(double), 1, output); //min y default_val = DoubleVal(1.0); nc_fwrite(&default_val, sizeof(double), 1, output); //max y //force the number of anchors to be 2 unsigned char num = 2; nc_fwrite(&num, 1, 1, output); //write out pad nc_fwrite(pad, NUM_POINTS_TO_ANCHOR_OFFSET, 1, output); //if the number of anchors was < 2, force default values. default_val = 0; nc_fwrite(&default_val, sizeof(double), 1, output); //min x nc_fwrite(&default_val, sizeof(double), 1, output); //min y default_val = DoubleVal(1.0); nc_fwrite(&default_val, sizeof(double), 1, output); //max x nc_fwrite(&default_val, sizeof(double), 1, output); //max y } //write out pad nc_fwrite(pad, END_ANCHOR_DATA_PAD_LENGTH, 1, output); } if (filetype == NCV_FILE) { //write out the file terminator if this is an NCV file nc_fwrite(NCVFileTerminator, NCV_FILE_TERMINATOR_LENGTH, 1, output); } //calculate the file size //size = filesize - size of header - 2 bytes (unknown data after the end of the header) long size = ftell(output) - HEADER_SIZE - 2; //set the file write position to the size location fseek(output, FILE_SIZE_OFFSET, SEEK_SET); //write out the file size size = LongVal(size); nc_fwrite(&size, 4, 1, output); if (filetype == NCV_FILE) { //another size needs to placed in the NTC header inside the file fseek(output, NCV_SECOND_FILE_SIZE_OFFSET, SEEK_SET); //The - 6 is interesting. The last 6 bytes of the terminator must have some special meaning because //the calculated size in files from the Nikon progs always calculate size bytes short. //I'm assuming it is more than coincedence that those bytes match the last 6 bytes //of the NCV second file header. I've yet to determine their significance. size = LongVal(size - NCV_HEADER_SIZE - 6); nc_fwrite(&size, 4, 1, output); } fclose(output); return NC_SUCCESS; } /************************************************************ SaveNikonCurveFile: Saves out curves to a Nikon ntc or ncv file. This function takes a single curve and uses defaults for the other curves. Typically, the curve used is the tone curve. curve - A CurveData structure. This is usually the tone curve curve_type - The curve type (TONE_CURVE, RED_CURVE, etc.) fileName - The filename. filetype - Indicator for an NCV or NTC file. NOTE: The only version tested is Nikon 4.1 anything other than this may result in unpredictable behavior. For now, the version passed in is ignored and is forced to 4.1. This function is just a helper function that allows the user to just carry around a single curve. **************************************************************/ #ifdef _STAND_ALONE_ static int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile, int filetype) { NikonData data; //clear the structure memset(&data, 0, sizeof(data)); //assume that it's the tone curve data.curves[curve_type] = *curve; //call the work horse return SaveNikonDataFile(&data, outfile, filetype); } #endif /********************************************* SaveSampledNikonCurve: Saves a sampling from a curve to text file to be processed by UFRaw. sample - Pointer to sampled curve struct to hold the data. fileName - The filename. **********************************************/ #ifdef _STAND_ALONE_ static int SaveSampledNikonCurve(CurveSample *sample, char *outfile) { unsigned int i = 0; FILE *output = NULL; if (outfile == NULL || strlen(outfile) == 0) { nc_message(NC_SET_ERROR, "Output filename cannot be null or empty!\n"); } output = g_fopen(outfile, "wb+"); if (!output) { nc_message(NC_SET_ERROR, "Error creating curve file '%s': %s\n", outfile, strerror(errno)); return NC_ERROR; } if (!sample->m_Samples) { nc_message(NC_SET_ERROR, "Sample array has not been allocated or is corrupt!\n"); return NC_ERROR; } DEBUG_PRINT("DEBUG: OUTPUT FILENAME: %s\n", outfile); fprintf(output, "%u %u\n", 0, sample->m_Samples[0]); for (i = 1; i < sample->m_samplingRes; i++) { // Print sample point only if different than previous one if (sample->m_Samples[i] != sample->m_Samples[i - 1]) { fprintf(output, "%u %u\n", i, sample->m_Samples[i]); } } // Make sure the last point is also printed if (sample->m_Samples[i - 1] == sample->m_Samples[i - 2]) { fprintf(output, "%u %u\n", i - 1, sample->m_Samples[i - 1]); } fclose(output); return NC_SUCCESS; } #endif /******************************************************* CurveSampleInit: Init and allocate curve sample. ********************************************************/ CurveSample *CurveSampleInit(unsigned int samplingRes, unsigned int outputRes) { CurveSample *sample = (CurveSample*)calloc(1, sizeof(CurveSample)); nc_merror(sample, "CurveSampleInit"); sample->m_samplingRes = samplingRes; sample->m_outputRes = outputRes; if (samplingRes > 0) { sample->m_Samples = (unsigned int*)calloc(samplingRes, sizeof(int)); nc_merror(sample->m_Samples, "CurveSampleInit"); } else { sample->m_Samples = NULL; } return sample; } /******************************************************* CurveSampleFree: Frees memory allocated for this curve sample. ********************************************************/ int CurveSampleFree(CurveSample *sample) { //if these are null, they've already been deallocated if (sample == NULL) return NC_SUCCESS; if (sample->m_Samples != NULL) { free(sample->m_Samples); sample->m_Samples = NULL; } free(sample); return NC_SUCCESS; } /**************************************** ConvertNikonCurveData: The main driver. Takes a filename and processes the curve, if possible. fileName - The file to process. *****************************************/ #ifdef _STAND_ALONE_ static int ConvertNikonCurveData(char *inFileName, char *outFileName, unsigned int samplingRes, unsigned int outputRes) { //Load the curve data from the ncv/ntc file NikonData data; char tmpstr[1024]; if (samplingRes <= 1 || outputRes <= 1 || samplingRes > MAX_RESOLUTION || outputRes > MAX_RESOLUTION) { nc_message(NC_SET_ERROR, "Error, sampling and output resolution" "must be 1 <= res <= %u\n", MAX_RESOLUTION); return NC_ERROR; } //loads all the curve data. Does not allocate sample arrays. if (LoadNikonData(inFileName, &data) != NC_SUCCESS) { return NC_ERROR; } CurveSample *sample = CurveSampleInit(samplingRes, outputRes); //Cycle through all curves int i; for (i = 0; i < NUM_CURVE_TYPES; i++) { //Populates the samples array for the given curve if (SampleToCameraCurve(&data.curves[i], sample) != NC_SUCCESS) { CurveSampleFree(sample); return NC_ERROR; } //rename output files strncpy(tmpstr, outFileName, 1023); tmpstr[1023] = '\0'; //if the name has an extension, attempt to remove it if (tmpstr[strlen(tmpstr) - 4] == '.') { tmpstr[strlen(tmpstr) - 4] = '\0'; } switch (i) { case TONE_CURVE: strncat(tmpstr, "_TONE.txt", 1023); break; case RED_CURVE: strncat(tmpstr, "_RED.txt", 1023); break; case GREEN_CURVE: strncat(tmpstr, "_GREEN.txt", 1023); break; case BLUE_CURVE: strncat(tmpstr, "_BLUE.txt", 1023); break; default: //should never get here break; } //print out curve data if (SaveSampledNikonCurve(sample, tmpstr) != NC_SUCCESS) { CurveSampleFree(sample); return NC_ERROR; } } //must be called when finished with a CurveSample structure CurveSampleFree(sample); return NC_SUCCESS; } #endif /***************************************************** FindTIFFOffset: Moves the file pointer to the location indicated by the TAG-TYPE pairing. This is meant just as a helper function for this code. Uses elsewhere may be limited. file - Nikon File ptr num_entries - Number of entries to search through tiff_tag - The tiff tag to match. tiff_type - The tiff type to match. *******************************************************/ #ifdef _STAND_ALONE_ static int FindTIFFOffset(FILE *file, unsigned short num_entries, unsigned short tiff_tag, unsigned short tiff_type) { unsigned short tag = 0; unsigned short type = 0; unsigned int offset = 0; int i; for (i = 0; i < num_entries; i++) { //get tag 2 bytes tag = (fgetc(file) << 8) | fgetc(file); if (tag == tiff_tag) { //get type 2 bytes type = (fgetc(file) << 8) | fgetc(file); if (type == tiff_type) { //Type for length of field //get length (4 bytes) offset = (fgetc(file) << 24) | (fgetc(file) << 16) | (fgetc(file) << 8) | fgetc(file); //get value\offset 4 bytes offset = (fgetc(file) << 24) | (fgetc(file) << 16) | (fgetc(file) << 8) | fgetc(file); fseek(file, offset, SEEK_SET); return 1; //true; } } else { //advance to next entry fseek(file, 10, SEEK_CUR); } } return 0; //false; } #endif /******************************************************* RipNikonNEFData: Gets Nikon NEF data. For now, this is just the tone curve data. infile - The input file curve - data structure to hold data in. sample_p - pointer to the curve sample reference. can be NULL if curve sample is not needed. ********************************************************/ #ifdef _STAND_ALONE_ static int RipNikonNEFData(char *infile, CurveData *data, CurveSample **sample_p) { unsigned short byte_order = 0; unsigned short num_entries = 0; unsigned short version = 0; unsigned int offset = 0; //open the file FILE *file = g_fopen(infile, "rb"); //make sure we have a valid file if (file == NULL) { nc_message(NC_SET_ERROR, "Error opening '%s': %s\n", infile, strerror(errno)); return NC_ERROR; } //gets the byte order nc_fread(&byte_order, 2, 1, file); byte_order = ShortVal(byte_order); if (byte_order != 0x4d4d) { //Must be in motorola format if it came from a NIKON nc_message(NC_SET_ERROR, "NEF file data format is Intel. Data format should be Motorola.\n"); return NC_ERROR; } //get the version //nc_fread(&version,2,1,file); version = (fgetc(file) << 8) | fgetc(file); if (version != 0x002a) { //must be 42 or not a valid TIFF nc_message(NC_SET_ERROR, "NEF file version is %u. Version should be 42.\n", version); return NC_ERROR; } //get offset to first IFD offset = (fgetc(file) << 24) | (fgetc(file) << 16) | (fgetc(file) << 8) | fgetc(file); //go to the IFD fseek(file, offset, SEEK_SET); //get number of entries num_entries = (fgetc(file) << 8) | fgetc(file); //move file pointer to exif offset if (!FindTIFFOffset(file, num_entries, TIFF_TAG_EXIF_OFFSET, TIFF_TYPE_LONG)) { nc_message(NC_SET_ERROR, "NEF data entry could not be found with tag %u and type %u.\n", TIFF_TAG_EXIF_OFFSET, TIFF_TYPE_LONG); return NC_ERROR; } //get number of entries num_entries = (fgetc(file) << 8) | fgetc(file); //move file pointer to maker note offset if (!FindTIFFOffset(file, num_entries, TIFF_TAG_MAKER_NOTE_OFFSET, TIFF_TYPE_UNDEFINED)) { nc_message(NC_SET_ERROR, "NEF data entry could not be found with tag %u and type %u.\n", TIFF_TAG_MAKER_NOTE_OFFSET, TIFF_TYPE_UNDEFINED); return NC_ERROR; } ////////////////////////////////////////////////////////////////////////// //NOTE: At this point, this section of the file acts almost like another // file header. Skip the first bytes, (which just say nikon with a // few bytes at the end. Offsets from here on in are from the start // of this section, not the start of the file. ////////////////////////////////////////////////////////////////////////// //Check the name. If it isn't Nikon then we can't do anything with this file. char name[6]; nc_fread(name, 6, 1, file); if (strcmp(name, "Nikon") != 0) { nc_message(NC_SET_ERROR, "NEF string identifier is %s. Should be: Nikon.\n", name); return NC_ERROR; } fseek(file, 4, SEEK_CUR); //save the current file location, as all other offsets for this section run off this. unsigned long pos = ftell(file); //get byte order (use a regular fread) nc_fread(&byte_order, 2, 1, file); byte_order = ShortVal(byte_order); if (byte_order != 0x4d4d) { //Must be in motorola format or not from a Nikon nc_message(NC_SET_ERROR, "NEF secondary file data format is Intel. " "Data format should be Motorola.\n"); return NC_ERROR; } //get version version = (fgetc(file) << 8) | fgetc(file); if (version != 0x002a) { nc_message(NC_SET_ERROR, "NEF secondary file version is %u. Version should be 42.\n", version); return NC_ERROR; } //get offset to first IFD offset = (fgetc(file) << 24) | (fgetc(file) << 16) | (fgetc(file) << 8) | fgetc(file); //go to the IFD (these offsets are NOT from the start of the file, //just the start of the section). fseek(file, pos + offset, SEEK_SET); //get number of entries num_entries = (fgetc(file) << 8) | fgetc(file); //move file position to tone curve data if (!FindTIFFOffset(file, num_entries, TIFF_TAG_CURVE_OFFSET, TIFF_TYPE_UNDEFINED)) { nc_message(NC_SET_ERROR, "NEF data entry could not be found with tag %u and type %u.\n", TIFF_TAG_CURVE_OFFSET, TIFF_TYPE_UNDEFINED); return NC_ERROR; } offset = ftell(file); return RipNikonNEFCurve(file, offset + pos, data, sample_p); } #endif /******************************************************* RipNikonNEFCurve: The actual retriever for the curve data from the NEF file. file - The input file. infile - Offset to retrieve the data curve - data structure to hold curve in. sample_p - pointer to the curve sample reference. can be NULL if curve sample is not needed. ********************************************************/ int RipNikonNEFCurve(void *file, int offset, CurveData *data, CurveSample **sample_p) { int i; //seek to the offset of the data. Skip first two bytes (section isn't needed). fseek(file, offset + 2, SEEK_SET); memset(data, 0, sizeof(CurveData)); ///////////////////////////////////////////////// //GET CURVE DATA ///////////////////////////////////////////////// //get box data and gamma data->m_min_x = (double)fgetc(file) / 255.0; data->m_max_x = (double)fgetc(file) / 255.0; data->m_min_y = (double)fgetc(file) / 255.0; data->m_max_y = (double)fgetc(file) / 255.0; //16-bit fixed point. data->m_gamma = (double)fgetc(file) + ((double)fgetc(file) / 256.0); //DEBUG_PRINT("DEBUG: NEF SECTION SIZE -> %u\n",data->section_size); DEBUG_PRINT("DEBUG: NEF X MIN -> %e\n", data->m_min_x); DEBUG_PRINT("DEBUG: NEF X MAX -> %e\n", data->m_max_x); DEBUG_PRINT("DEBUG: NEF Y MIN -> %e\n", data->m_min_y); DEBUG_PRINT("DEBUG: NEF Y MAX -> %e\n", data->m_max_y); //DEBUG_PRINT("DEBUG: NEF GAMMA (16-bit fixed point) -> %e\n",(data->m_gamma>>8)+(data->m_gamma&0x00ff)/256.0); DEBUG_PRINT("DEBUG: NEF GAMMA -> %e\n", data->m_gamma); // It seems that if there is no curve then the 62 bytes in the buffer // are either all 0x00 (D70) or 0xFF (D2H). // We therefore switch these values with the default values. if (data->m_min_x == 1.0) { data->m_min_x = 0.0; DEBUG_PRINT("DEBUG: NEF X MIN -> %e (changed)\n", data->m_min_x); } if (data->m_max_x == 0.0) { data->m_max_x = 1.0; DEBUG_PRINT("DEBUG: NEF X MAX -> %e (changed)\n", data->m_max_x); } if (data->m_min_y == 1.0) { data->m_min_y = 0.0; DEBUG_PRINT("DEBUG: NEF Y MIN -> %e (changed)\n", data->m_min_y); } if (data->m_max_y == 0.0) { data->m_max_y = 1.0; DEBUG_PRINT("DEBUG: NEF Y MAX -> %e (changed)\n", data->m_max_y); } if (data->m_gamma == 0.0 || data->m_gamma == 255.0 + 255.0 / 256.0) { data->m_gamma = 1.0; DEBUG_PRINT("DEBUG: NEF GAMMA -> %e (changed)\n", data->m_gamma); } //get number of anchor points (there should be at least 2 nc_fread(&data->m_numAnchors, 1, 1, file); DEBUG_PRINT("DEBUG: NEF NUMBER OF ANCHORS -> %u\n", data->m_numAnchors); if (data->m_numAnchors == 255) { data->m_numAnchors = 0; DEBUG_PRINT("DEBUG: NEF NUMBER OF ANCHORS -> %u (changed)\n", data->m_numAnchors); } if (data->m_numAnchors > NIKON_MAX_ANCHORS) { data->m_numAnchors = NIKON_MAX_ANCHORS; DEBUG_PRINT("DEBUG: NEF NUMBER OF ANCHORS -> %u (changed)\n", data->m_numAnchors); } //convert data to doubles for (i = 0; i < data->m_numAnchors; i++) { //get anchor points data->m_anchors[i].x = (double)fgetc(file) / 255.0; data->m_anchors[i].y = (double)fgetc(file) / 255.0; } //The total number of points possible is 25 (50 bytes). //At this point we subtract the number of bytes read for points from the max (50+1) fseek(file, (51 - data->m_numAnchors * 2), SEEK_CUR); //get data (always 4096 entries, 1 byte apiece) DEBUG_PRINT("DEBUG: NEF data OFFSET -> %ld\n", ftell(file)); if (sample_p != NULL) { // Sampling res is always 4096, and output res is alway 256 *sample_p = CurveSampleInit(4096, 256); //get the samples for (i = 0; i < 4096; i++) { (*sample_p)->m_Samples[i] = (unsigned int)fgetc(file); } } return NC_SUCCESS; } /******************************* main: Uh....no comment. :) ********************************/ #ifdef _STAND_ALONE_ int main(int argc, char* argv[]) { //make sure we can continue processing if (ProcessArgs(argc, argv) == NC_SUCCESS) { //if we are in NEF mode, rip the curve out of the RAW file if (program_mode == NEF_MODE) { NikonData data; //intiialze the structure to zero memset(&data, 0, sizeof(NikonData)); if (RipNikonNEFData(nikonFilename, &data.curves[TONE_CURVE], NULL) != NC_SUCCESS) { return NC_ERROR; } CurveSample *sample = CurveSampleInit(65536, 256); if (CurveDataSample(&data.curves[TONE_CURVE], sample) != NC_SUCCESS) { CurveSampleFree(sample); return NC_ERROR; } if (SaveSampledNikonCurve(sample, exportFilename) != NC_SUCCESS) { CurveSampleFree(sample); return NC_ERROR; } if (SaveNikonCurveFile(&data.curves[TONE_CURVE], TONE_CURVE, "outcurve.ncv", NCV_FILE)) { CurveSampleFree(sample); return NC_ERROR; } //This can also be used if (SaveNikonDataFile(&data, "outcurve2.ncv", NCV_FILE)) { CurveSampleFree(sample); return NC_ERROR; } CurveSampleFree(sample); } //else, process a nikon curve file else { //do the deed ConvertNikonCurveData(nikonFilename, exportFilename, standalone_samplingRes, standalone_outputRes); } } return NC_SUCCESS; } #endif ufraw-0.19.2/ufraw-batch.c0000664000175000017500000001250012115264507012222 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw-batch.c - The standalone interface to UFRaw in batch mode. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include /* for exit */ #include /* for errno */ #include #include static gboolean silentMessenger; char *ufraw_binary; int ufraw_batch_saver(ufraw_data *uf); int main(int argc, char **argv) { ufraw_data *uf; conf_data rc, cmd, conf; int status; int exitCode = 0; #if !GLIB_CHECK_VERSION(2,31,0) g_thread_init(NULL); #endif char *argFile = uf_win32_locale_to_utf8(argv[0]); ufraw_binary = g_path_get_basename(argFile); uf_init_locale(argFile); uf_win32_locale_free(argFile); /* Load $HOME/.ufrawrc */ conf_load(&rc, NULL); /* Half interpolation is an option only for the GIMP plug-in. * For the stand-alone tool it is disabled */ if (rc.interpolation == half_interpolation) rc.interpolation = ahd_interpolation; /* In batch the save options are always set to default */ conf_copy_save(&rc, &conf_default); g_strlcpy(rc.outputPath, "", max_path); g_strlcpy(rc.inputFilename, "", max_path); g_strlcpy(rc.outputFilename, "", max_path); /* Put the command-line options in cmd */ int optInd = ufraw_process_args(&argc, &argv, &cmd, &rc); if (optInd < 0) exit(1); if (optInd == 0) exit(0); silentMessenger = cmd.silent; conf_file_load(&conf, cmd.inputFilename); if (optInd == argc) { ufraw_message(UFRAW_WARNING, _("No input file, nothing to do.")); } int fileCount = argc - optInd; int fileIndex = 1; for (; optInd < argc; optInd++, fileIndex++) { argFile = uf_win32_locale_to_utf8(argv[optInd]); uf = ufraw_open(argFile); uf_win32_locale_free(argFile); if (uf == NULL) { exitCode = 1; ufraw_message(UFRAW_REPORT, NULL); continue; } status = ufraw_config(uf, &rc, &conf, &cmd); if (uf->conf && uf->conf->createID == only_id && cmd.createID == -1) uf->conf->createID = no_id; if (status == UFRAW_ERROR) { exitCode = 1; ufraw_close_darkframe(uf->conf); ufraw_close(uf); g_free(uf); exit(1); } if (ufraw_load_raw(uf) != UFRAW_SUCCESS) { exitCode = 1; ufraw_close_darkframe(uf->conf); ufraw_close(uf); g_free(uf); continue; } char stat[max_name]; if (fileCount > 1) g_snprintf(stat, max_name, "[%d/%d]", fileIndex, fileCount); else stat[0] = '\0'; ufraw_message(UFRAW_MESSAGE, _("Loaded %s %s"), uf->filename, stat); status = ufraw_batch_saver(uf); if (status == UFRAW_SUCCESS || status == UFRAW_WARNING) { if (uf->conf->createID != only_id) ufraw_message(UFRAW_MESSAGE, _("Saved %s %s"), uf->conf->outputFilename, stat); } else { exitCode = 1; } ufraw_close_darkframe(uf->conf); ufraw_close(uf); g_free(uf); } // ufraw_close(cmd.darkframe); ufobject_delete(cmd.ufobject); ufobject_delete(rc.ufobject); exit(exitCode); } int ufraw_batch_saver(ufraw_data *uf) { if (!uf->conf->overwrite && uf->conf->createID != only_id && strcmp(uf->conf->outputFilename, "-") && g_file_test(uf->conf->outputFilename, G_FILE_TEST_EXISTS)) { char ans[max_name]; /* First letter of the word 'yes' for the y/n question */ gchar *yChar = g_utf8_strdown(_("y"), -1); /* First letter of the word 'no' for the y/n question */ gchar *nChar = g_utf8_strup(_("n"), -1); if (!silentMessenger) { g_printerr(_("%s: overwrite '%s'?"), ufraw_binary, uf->conf->outputFilename); g_printerr(" [%s/%s] ", yChar, nChar); if (fgets(ans, max_name, stdin) == NULL) ans[0] = '\0'; } gchar *ans8 = g_utf8_strdown(ans, 1); if (g_utf8_collate(ans8, yChar) != 0) { g_free(yChar); g_free(nChar); g_free(ans8); return UFRAW_CANCEL; } g_free(yChar); g_free(nChar); g_free(ans8); } if (strcmp(uf->conf->outputFilename, "-")) { char *absname = uf_file_set_absolute(uf->conf->outputFilename); g_strlcpy(uf->conf->outputFilename, absname, max_path); g_free(absname); } if (uf->conf->embeddedImage) { int status = ufraw_convert_embedded(uf); if (status != UFRAW_SUCCESS) return status; status = ufraw_write_embedded(uf); return status; } else { int status = ufraw_write_image(uf); if (status != UFRAW_SUCCESS) ufraw_message(status, ufraw_get_message(uf)); return status; } } void ufraw_messenger(char *message, void *parentWindow) { parentWindow = parentWindow; if (!silentMessenger) ufraw_batch_messenger(message); } ufraw-0.19.2/install-sh0000755000175000017500000003325612057543462011675 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ufraw-0.19.2/ufraw-setup.iss.in0000664000175000017500000002565212123750074013274 00000000000000; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=UFRaw AppVerName=UFRaw @VERSION@ AppPublisher=Udi Fuchs AppPublisherURL=http://ufraw.sourceforge.net/ AppSupportURL=http://ufraw.sourceforge.net/ AppUpdatesURL=http://ufraw.sourceforge.net/ DefaultDirName={pf}\UFRaw DefaultGroupName=(Default) AllowNoIcons=yes Compression=lzma SolidCompression=yes @COMMENT_ICON@SetupIconFile=ufraw_icon.ico UninstallDisplayIcon={app}\bin\ufraw.exe DirExistsWarning=no OutputBaseFileName=ufraw-@VERSION@-setup OutputDir=. WizardImageFile=ufraw-setup.bmp WizardSmallImageFile=ufraw_icon.bmp UsePreviousAppDir=no ChangesAssociations=yes [Tasks] Name: "unplug"; Description: "Attempt to delete old versions of the UFRaw plug-in" ; GroupDescription: "Delete previous plug-in versions:"; Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}" ; GroupDescription: "{cm:AdditionalIcons}"; Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}" ; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "UFRawAssociation"; Description: "UFRaw ID files"; GroupDescription: "Associate the following file types with UFRaw:" Name: "DNGAssociation"; Description: "DNG - Adobe Digital Negative"; GroupDescription: "Associate the following file types with UFRaw:" Name: "CRWAssociation"; Description: "CRW,CR2 - Canon Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "NEFAssociation"; Description: "NEF,NRW - Nikon Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "PEFAssociation"; Description: "PEF - Pentax Electronic Format"; GroupDescription: "Associate the following file types with UFRaw:" Name: "RAFAssociation"; Description: "RAF - Fuji Raw Format"; GroupDescription: "Associate the following file types with UFRaw:" Name: "ORFAssociation"; Description: "ORF - Olympus Raw Format"; GroupDescription: "Associate the following file types with UFRaw:" Name: "MRWAssociation"; Description: "MRW - Minolta Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "ARWAssociation"; Description: "ARW,SRF,SR2 - Sony Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "SRWAssociation"; Description: "SRW - Samsung Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "X3FAssociation"; Description: "X3F - Sigma Foveon Raw"; GroupDescription: "Associate the following file types with UFRaw:" [Files] Source: "ufraw.exe"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "ufraw-batch.exe"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "ufraw-gimp.exe"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "po\ca.mo"; DestDir: "{app}\lib\locale\ca\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\cs.mo"; DestDir: "{app}\lib\locale\cs\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\da.mo"; DestDir: "{app}\lib\locale\da\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\de.mo"; DestDir: "{app}\lib\locale\de\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\es.mo"; DestDir: "{app}\lib\locale\es\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\fr.mo"; DestDir: "{app}\lib\locale\fr\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\it.mo"; DestDir: "{app}\lib\locale\it\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\ja.mo"; DestDir: "{app}\lib\locale\ja\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\ko.mo"; DestDir: "{app}\lib\locale\ko\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\nb.mo"; DestDir: "{app}\lib\locale\nb\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\nl.mo"; DestDir: "{app}\lib\locale\nl\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\pl.mo"; DestDir: "{app}\lib\locale\pl\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\pt.mo"; DestDir: "{app}\lib\locale\pt\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\ru.mo"; DestDir: "{app}\lib\locale\ru\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\sr.mo"; DestDir: "{app}\lib\locale\sr\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\sr@latin.mo"; DestDir: "{app}\lib\locale\sr@latin\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\sv.mo"; DestDir: "{app}\lib\locale\sv\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\zh_CN.mo"; DestDir: "{app}\lib\locale\zh_CN\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "po\zh_TW.mo"; DestDir: "{app}\lib\locale\zh_TW\LC_MESSAGES\"; DestName: "ufraw.mo"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\bzip2.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\freetype6.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\intl.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\jpeg62.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libatk-1.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libcairo-2.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libexpat-1.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libfontconfig-1.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgdk_pixbuf-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgdk-win32-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgio-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libglib-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgmodule-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgobject-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgthread-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libgtk-win32-2.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\liblcms-1.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\liblensfun.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libpango-1.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libpangocairo-1.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libpangoft2-1.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libpangowin32-1.0-0.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libpng14-14.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\libtiff3.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\zlib1.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\share\lensfun\*.xml"; DestDir: "{app}\share\lensfun"; Flags: ignoreversion Source: "@DOSPREFIX@\share\locale\*"; DestDir: "{app}\lib\locale\"; Flags: ignoreversion recursesubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\UFRaw"; Filename: "{app}\bin\ufraw.exe" Name: "{userdesktop}\UFRaw"; Filename: "{app}\bin\ufraw.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\UFRaw"; Filename: "{app}\bin\ufraw.exe"; Tasks: quicklaunchicon [Registry] Root: HKCR; Subkey: ".ufraw"; ValueType: string; ValueName: ""; ValueData: "UFRawID"; Flags: uninsdeletevalue; Tasks: UFRAWAssociation Root: HKCR; Subkey: ".dng"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: DNGAssociation Root: HKCR; Subkey: ".crw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: CRWAssociation Root: HKCR; Subkey: ".cr2"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: CRWAssociation Root: HKCR; Subkey: ".nef"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: NEFAssociation Root: HKCR; Subkey: ".nrw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: NEFAssociation Root: HKCR; Subkey: ".pef"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: PEFAssociation Root: HKCR; Subkey: ".raf"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: RAFAssociation Root: HKCR; Subkey: ".orf"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: ORFAssociation Root: HKCR; Subkey: ".mrw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: MRWAssociation Root: HKCR; Subkey: ".arw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: ARWAssociation Root: HKCR; Subkey: ".srf"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: ARWAssociation Root: HKCR; Subkey: ".sr2"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: ARWAssociation Root: HKCR; Subkey: ".srw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: SRWAssociation Root: HKCR; Subkey: ".x3f"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: X3FAssociation Root: HKCR; Subkey: "UFRawID"; ValueType: string; ValueName: ""; ValueData: "UFRawID"; Flags: uninsdeletekey Root: HKCR; Subkey: "UFRawID"; ValueType: string; ValueName: ""; ValueData: "UFRaw ID file"; Flags: uninsdeletevalue Root: HKCR; Subkey: "UFRawID\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ufraw.exe,0"; Flags: uninsdeletevalue Root: HKCR; Subkey: "UFRawID\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ufraw.exe"" ""%1"""; Flags: uninsdeletevalue Root: HKCR; Subkey: "UFRaw"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletekey Root: HKCR; Subkey: "UFRaw"; ValueType: string; ValueName: ""; ValueData: "UFRaw photo"; Flags: uninsdeletevalue Root: HKCR; Subkey: "UFRaw\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\ufraw.exe,0"; Flags: uninsdeletevalue Root: HKCR; Subkey: "UFRaw\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\ufraw.exe"" ""%1"""; Flags: uninsdeletevalue [Run] Filename: "{app}\bin\ufraw.exe"; Description: "{cm:LaunchProgram,UFRaw}"; Flags: nowait postinstall skipifsilent [InstallDelete] Type: files; Name: {%USERPROFILE}\.gimp-2.0\plug-ins\ufraw-gimp.exe; Tasks: unplug Type: files; Name: {%USERPROFILE}\.gimp-2.2\plug-ins\ufraw-gimp.exe; Tasks: unplug Type: files; Name: {app}\bin\liblcms-1-16-ufraw.dll; [messages] WelcomeLabel2=%nThis wizard will install [name/ver] on your computer. SelectTasksLabel2=Select the additional tasks you would like to perform while installing UFRaw: ufraw-0.19.2/MANIFEST0000644000175000017500000000725311335734227011017 00000000000000The Unidentified Flying Raw (UFRaw) is a utility to read and manipulate raw images from digital cameras. It can be used on its own or as a GIMP plug-in. The Unix philosophy is "Do one thing, do it well". UFRaw tries to take this idea to the extreme and "Do nothing", or at least not do anything by itself. UFRaw uses DCRaw to convert the raw files. Little CMS takes care of the color management. libjpeg/libtiff are responsible to saving the image. The user interface is made up of GTK+ widgets. GNUgetopt handles the command-line parameters. Glib reads the XML formated UFRaw ID files and takes care of compitablility issues. NikonCurve handles the Nikon curve formats. CurveEditor is used to edit the tone curves. (In the last two points I'm cheating a bit since this code was written specifically for UFRaw. My only excuse is that I did not write it myself.) The sole role of UFRaw is to glue all the ingredients together to a usable interface. At the moment there are two such interfaces - one graphical and one command line. Hopefully, UFRaw's interface will evolve to a full raw image workflow. I think that the UFRaw ID files (*.ufraw) should be the backbone for this workflow. One possible scenario for such a workflow is as follows: -Create an input folder with the raw images. -Create an output folder with an ID file for each image. -Manipulate each image as need saving the manipulation data to the ID files. -Convert all the images in a batch. Version 0.5 of UFRaw should be able to handle such a workflow where steps 1,2 and 4 are done from the command-line and only step 3 is done with the graphical interface. Existing tools like Nautilus, GQview, Gthumb and Digikam could be configured or modified to handle the rest of the steps. It is also possible to add this functionality to UFRaw - as long as one remember that UFRaw should "Do nothing". Everything in UFRaw is written in C. I like to keep it this way but other languages like C++ could be considered. I would not like to rely on "heavy" artillery like Java or C#. Perl and other scripts could be used as warpers, but not in the internals. UFRaw should be usable on all platforms. MS-Windows users are not used to command-line interfaces (they don't know what they are missing), still they should be able to use UFRaw's command-line interface using Cygwin and maybe also MinGW. Possible future features: Exif support - there is partial support already using libexif. This support should be enhanced, hopefully by making better use of libexif or other tools. ExifTool seems to be the best tool in the market for handling Exif data of raw files. Unfortunately it is written in Perl. Zoom in/out - it is a part of the graphical interface that should be added to UFRaw. This feature should open the way to other features which are at the pixel level. Noise reduction - UFRaw should not handle this by itself. It would be nice if it could use some external package. Sharping - Same goes here. Maybe use refocus.sourceforge.net. Lens distortion - PanoTools or something equivalent should be used. Cropping/Rotation - this basic manipulations could be handled by UFRaw itself. Thumbnails - maybe thumbnails should be added to the ID files (remember that ID files are text files). I think that this will enable one to write a fairly simple and very responsive file manager. Comments - image comments could be easily added to the ID files or to the EXIF data. Camera database - ideally UFRaw should not care what camera the image came from, DCRaw takes care of it. In practice some camera features effect UFRaw directly. It would be nice to have a database with supported (or tested) cameras and features. One example of camera specific feature in UFRaw is the WB presets. ufraw-0.19.2/ufraw_conf.c0000664000175000017500000030701012123734456012157 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_conf.c - handle configuration issues * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include #include #include #include /* needed for fstat() */ #include #include #ifdef HAVE_EXIV2 #include #endif const conf_data conf_default = { /* Internal data */ 7, /* configuration version */ NULL, /* ufobject */ /* Image manipulation settings */ 0.0, /* wavelet denoising threshold */ 0.0, /* hotpixel sensitivity */ #ifdef UFRAW_CONTRAST 1.0, /* global contrast */ #endif 0.0, 1.0, 0.0, /* exposure, saturation, black */ 0, /* ExposureNorm */ restore_lch_details, /* restoreDetails */ digital_highlights, /* clipHighlights */ disabled_state, /* autoExposure */ disabled_state, /* autoBlack */ disabled_state, /* autoCrop */ camera_curve, camera_curve + 1, /* BaseCurveIndex, BaseCurveCount */ /* BaseCurve data defaults */ { { N_("Manual curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } }, { N_("Linear curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } }, { N_("Custom curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } }, { N_("Camera curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } } }, linear_curve, linear_curve + 1, /* curveIndex, curveCount */ /* Curve data defaults */ { { N_("Manual curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } }, { N_("Linear curve"), TONE_CURVE, 0.0, 1.0, 0.0, 1.0, 1.0, 2 , { { 0.0, 0.0 }, { 1.0, 1.0 } } } }, { 1, 0, 0 } , { 2, 2, 2 }, /* profileIndex[], profileCount[] */ /* Profile data defaults */ { { { N_("No profile"), "", "", 0.45, 0.1, 0 }, { N_("Color matrix"), "", "", 0.45, 0.1, 0 }, { "Some ICC Profile", "", "", 0.45, 0.0, 0 } }, { { N_("sRGB"), "", "", 0.0, 0.0, 8 }, { N_("sRGB (embedded)"), "", "", 0.0, 0.0, 8 }, { "Some ICC Profile", "", "", 0.0, 0.0, 8 } }, { { N_("System default"), "", "", 0.0, 0.0, 0 }, { N_("sRGB"), "", "", 0.0, 0.0, 0 }, { "Some ICC Profile", "", "", 0.0, 0.0, 0 } } }, { 0, 0, 0 }, /* intent */ ahd_interpolation, 0, /* interpolation, smoothing */ "", NULL, /* darkframeFile, darkframe */ -1, -1, -1, -1, /* Crop X1,Y1,X2,Y2 */ 0.0, /* aspectRatio */ -1, /* orientation */ 0, /* rotationAngle */ 0, /* lightness adjustment count */ { { 1, 0, 0 }, { 1, 0, 0 }, { 1, 0, 0 }, }, /* lightness adjustments */ grayscale_none, /* grayscale mode */ { 1.0, 1.0, 1.0 }, /* grayscale mixer */ 1, /* grayscale mixer defined */ { 0.0, 0.0, 0.0, 0.0 }, /* despeckle window */ { 0.0, 0.0, 0.0, 0.0 }, /* despeckle color decay */ { 1.0, 1.0, 1.0, 1.0 }, /* despeckle passes */ /* Save options */ "", "", "", /* inputFilename, outputFilename, outputPath */ "", "", /* inputURI, inputModTime */ ppm_type, 85, no_id, /* type, compression, createID */ TRUE, /* embedExif */ FALSE, /* progressiveJPEG */ 1, 0, /* shrink, size */ FALSE, /* overwrite existing files without asking */ FALSE, /* losslessCompress */ FALSE, /* load embedded preview image */ TRUE, /* rotate to camera's setting */ /* GUI settings */ 25.0, TRUE, /* Zoom, LockAspect */ enabled_state, /* saveConfiguration */ rgb_histogram, /* histogram */ linear_histogram, /* liveHistogramScale */ linear_histogram, /* rawHistogramScale */ { TRUE, TRUE }, /* expander[] */ FALSE, /* overExp indicator */ FALSE, /* underExp indicator */ TRUE, /* blinkOverUnder indicators */ FALSE, /* RememberOutputPath */ FALSE, /* WindowMaximized */ 0, /* number of helper lines to draw */ "", "", /* curvePath, profilePath */ FALSE, /* silent */ #ifdef _WIN32 "gimp-win-remote gimp-2.8.exe", /* remoteGimpCommand */ #elif HAVE_GIMP_2_4 "gimp", /* remoteGimpCommand */ #else "gimp-remote", /* remoteGimpCommand */ #endif /* EXIF data */ 0, /* CameraOrientation */ 0.0, 0.0, 0.0, 0.0, 1.0, /* iso_speed, shutter, aperture, focal_len, subject_dist */ "", "", "", "", /* exifSource, isoText, shutterText, apertureText */ "", "", "", "", /* focalLenText, focalLen35Text, lensText, flashText */ "", /* whiteBalanceText */ "", "", "", /* timestamp, make, model */ 0, /* timestamp */ "", "", /* real_make, real_model */ }; static const char *interpolationNames[] = { "ahd", "vng", "four-color", "ppg", "bilinear", "none", "half", "eahd", NULL }; static const char *restoreDetailsNames[] = { "clip", "lch", "hsv", NULL }; static const char *clipHighlightsNames[] = { "digital", "film", NULL }; static const char *intentNames[] = { "perceptual", "relative", "saturation", "absolute", "disable", NULL }; static const char *grayscaleModeNames[] = { "none", "lightness", "luminance", "value", "mixer", NULL }; void conf_init(conf_data *c) { *c = conf_default; } static int conf_find_name(const char name[], const char *namesList[], int notFound) { int i; for (i = 0; namesList[i] != NULL; i++) { if (!strcmp(name, namesList[i])) return i; } return notFound; } static const char *conf_get_name(const char *namesList[], int index) { int i; for (i = 0; namesList[i] != NULL; i++) if (i == index) return namesList[i]; return "Error"; } typedef struct { conf_data *conf; UFObject *group; GQuark ufrawQuark; } parse_data; static void conf_parse_start(GMarkupParseContext *context, const gchar *element, const gchar **names, const gchar **values, gpointer user, GError **error) { parse_data *data = (parse_data *)user; conf_data *c = data->conf; int int_value; (void)context; int i; for (i = 0; names[i] != NULL; i++) { if (strcmp(names[i], "Index") == 0) { if (!ufgroup_has(data->group, element)) { ufraw_message(UFRAW_WARNING, "UFGroup '%s' does not contain UFArray '%s'", ufobject_name(data->group), element); return; } data->group = ufgroup_element(data->group, element); if (!ufobject_set_string(data->group, values[i])) { ufraw_message(UFRAW_WARNING, "UFArray set '%s' to string value '%s' failed", ufobject_name(data->group), values[i]); } return; } else if (strcmp(names[i], "Label") == 0) { // We assume that only UFArray elements have a label. if (!ufgroup_has(data->group, values[i])) { ufraw_message(UFRAW_WARNING, "UFArray '%s' does not contain UFObject '%s'", ufobject_name(data->group), element); return; } data->group = ufgroup_element(data->group, values[i]); if (strcmp(ufobject_name(data->group), element) != 0) g_set_error(error, data->ufrawQuark, UFRAW_ERROR, "Expecting '%s' XML element and not '%s' XML element", ufobject_name(data->group), element); return; } } if (ufgroup_has(data->group, element)) { data->group = ufgroup_element(data->group, element); return; } while (*names != NULL) { if (!strcasecmp(*values, "yes")) int_value = 1; if (!strcasecmp(*values, "no")) int_value = 0; else sscanf(*values, "%d", &int_value); if (!strcmp(element, "UFRaw") && !strcmp(*names, "Version")) { if (int_value == 3) { ufraw_message(UFRAW_WARNING, _("Trying to convert .ufrawrc from UFRaw-0.4 or earlier")); c->version = int_value; } /* In version 7 temperature calculation has changed */ if (int_value == 5) { ufraw_message(UFRAW_WARNING, _("Trying to convert .ufrawrc from UFRaw-0.6 or earlier")); c->version = int_value; } if (int_value != c->version) g_set_error(error, data->ufrawQuark, UFRAW_RC_VERSION, _("UFRaw version in .ufrawrc is not supported")); } if (!strcmp(*names, "Current") && int_value != 0) { if (!strcmp("BaseManualCurve", element)) c->BaseCurveIndex = manual_curve; if (!strcmp("BaseLinearCurve", element)) c->BaseCurveIndex = linear_curve; if (!strcmp("BaseCustomCurve", element)) c->BaseCurveIndex = custom_curve; if (!strcmp("BaseCameraCurve", element)) c->BaseCurveIndex = camera_curve; if (!strcmp("BaseCurve", element)) c->BaseCurveIndex = c->BaseCurveCount; if (!strcmp("ManualCurve", element)) c->curveIndex = manual_curve; if (!strcmp("LinearCurve", element)) c->curveIndex = linear_curve; if (!strcmp("Curve", element)) c->curveIndex = c->curveCount; // For compatibility with ufraw-0.13 or older if (!strcmp("sRGBInputProfile", element)) c->profileIndex[in_profile] = 0; if (!strcmp("NoInputProfile", element)) c->profileIndex[in_profile] = 0; if (!strcmp("MatrixInputProfile", element)) c->profileIndex[in_profile] = 1; if (!strcmp("sRGBOutputProfile", element)) c->profileIndex[out_profile] = 0; if (!strcmp("sRGBEmbeddedOutputProfile", element)) c->profileIndex[out_profile] = 1; if (!strcmp("SystemDisplayProfile", element)) c->profileIndex[display_profile] = 0; if (!strcmp("sRGBDisplayProfile", element)) c->profileIndex[display_profile] = 1; if (!strcmp("InputProfile", element)) c->profileIndex[in_profile] = c->profileCount[in_profile]; if (!strcmp("OutputProfile", element)) c->profileIndex[out_profile] = c->profileCount[out_profile]; if (!strcmp("DisplayProfile", element)) c->profileIndex[display_profile] = c->profileCount[display_profile]; } names++; values++; } /* The default curve/profile count is always larger than 0, * threfore we can treat 0 as a negative number. * m_numAnchors==0 marks that no anchors where read from the XML. */ if (!strcmp("BaseManualCurve", element)) { c->BaseCurveCount = - manual_curve; c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 0; } if (!strcmp("BaseLinearCurve", element)) { c->BaseCurveCount = - linear_curve; c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 0; } if (!strcmp("BaseCustomCurve", element)) { c->BaseCurveCount = - custom_curve; c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 0; } if (!strcmp("BaseCameraCurve", element)) { c->BaseCurveCount = - camera_curve; c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 0; } if (!strcmp("ManualCurve", element)) { c->curveCount = - manual_curve; c->curve[-c->curveCount].m_numAnchors = 0; } if (!strcmp("LinearCurve", element)) { c->curveCount = - linear_curve; c->curve[-c->curveCount].m_numAnchors = 0; } if (!strcmp("NoInputProfile", element)) c->profileCount[in_profile] = 0; if (!strcmp("MatrixInputProfile", element)) c->profileCount[in_profile] = -1; // For compatibility with ufraw-0.13 or older if (!strcmp("sRGBInputProfile", element)) c->profileCount[in_profile] = -1; if (!strcmp("sRGBOutputProfile", element)) c->profileCount[out_profile] = 0; if (!strcmp("sRGBEmbeddedOutputProfile", element)) c->profileCount[out_profile] = -1; if (!strcmp("SystemDisplayProfile", element)) c->profileCount[display_profile] = 0; if (!strcmp("sRGBDisplayProfile", element)) c->profileCount[display_profile] = -1; } static void conf_parse_end(GMarkupParseContext *context, const gchar *element, gpointer user, GError **error) { parse_data *data = (parse_data *)user; conf_data *c = data->conf; (void)context; (void)error; if (strcmp(ufobject_name(data->group), element) == 0) { data->group = ufobject_parent(data->group); return; } if (c->BaseCurveCount <= 0 && (!strcmp("BaseManualCurve", element) || !strcmp("BaseLinearCurve", element) || !strcmp("BaseCustomCurve", element) || !strcmp("BaseCameraCurve", element))) { if (c->BaseCurve[-c->BaseCurveCount].m_numAnchors == 0) c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 2; c->BaseCurveCount = camera_curve + 1; } if (c->BaseCurveCount <= 0 && !strcmp("BaseCurve", element)) { if (c->BaseCurve[-c->BaseCurveCount].m_numAnchors == 0) c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 2; c->BaseCurveCount = - c->BaseCurveCount + 1; } if (c->curveCount <= 0 && (!strcmp("ManualCurve", element) || !strcmp("LinearCurve", element))) { if (c->curve[-c->curveCount].m_numAnchors == 0) c->curve[-c->curveCount].m_numAnchors = 2; c->curveCount = linear_curve + 1; } if (c->curveCount <= 0 && !strcmp("Curve", element)) { if (c->curve[-c->curveCount].m_numAnchors == 0) c->curve[-c->curveCount].m_numAnchors = 2; c->curveCount = - c->curveCount + 1; } // For compatibility with ufraw-0.13 or older if (!strcmp("sRGBInputProfile", element)) c->profileCount[in_profile] = conf_default.profileCount[in_profile]; if (!strcmp("NoInputProfile", element)) c->profileCount[in_profile] = conf_default.profileCount[in_profile]; if (!strcmp("MatrixInputProfile", element)) c->profileCount[in_profile] = conf_default.profileCount[in_profile]; if (!strcmp("sRGBOutputProfile", element)) c->profileCount[out_profile] = conf_default.profileCount[out_profile]; if (!strcmp("sRGBEmbeddedOutputProfile", element)) c->profileCount[out_profile] = conf_default.profileCount[out_profile]; if (!strcmp("SystemDisplayProfile", element)) c->profileCount[display_profile] = conf_default.profileCount[display_profile]; if (!strcmp("sRGBDisplayProfile", element)) c->profileCount[display_profile] = conf_default.profileCount[display_profile]; if (c->profileCount[in_profile] <= 0 && strcmp("InputProfile", element) == 0) c->profileCount[in_profile] = -c->profileCount[in_profile] + 1; if (c->profileCount[out_profile] <= 0 && strcmp("OutputProfile", element) == 0) c->profileCount[out_profile] = - c->profileCount[out_profile] + 1; if (c->profileCount[display_profile] <= 0 && strcmp("DisplayProfile", element) == 0) c->profileCount[display_profile] = -c->profileCount[display_profile] + 1; } static void conf_parse_text(GMarkupParseContext *context, const gchar *text, gsize len, gpointer user, GError **error) { parse_data *data = (parse_data *)user; conf_data *c = data->conf; const gchar *element = g_markup_parse_context_get_element(context); char temp[max_path]; int i; error = error; for (; len > 0 && g_ascii_isspace(*text); len--, text++); for (; len > 0 && g_ascii_isspace(text[len - 1]); len--); if (len == 0) return; if (len > max_path - 1) len = max_path - 1; strncpy(temp, text, len); temp[len] = '\0'; if (strcmp(ufobject_name(data->group), element) == 0) { if (!ufobject_set_string(data->group, text)) ufraw_message(UFRAW_WARNING, "UFObject set '%s' to string value '%s' failed", ufobject_name(data->group), text); return; } if (c->curveCount <= 0) { i = - c->curveCount; /* for backward compatibility with ufraw-0.4 */ if (!strcmp("File", element)) { /* Ignore this curve if curve_load() fails */ if (curve_load(&c->curve[i], temp) != UFRAW_SUCCESS) c->curveCount = - c->curveCount; } if (!strcmp("MinXY", element)) { sscanf(temp, "%lf %lf", &c->curve[i].m_min_x, &c->curve[i].m_min_y); c->curve[i].m_min_x = LIM(c->curve[i].m_min_x, 0, 1); c->curve[i].m_min_y = LIM(c->curve[i].m_min_y, 0, 1); } if (!strcmp("MaxXY", element)) { sscanf(temp, "%lf %lf", &c->curve[i].m_max_x, &c->curve[i].m_max_y); c->curve[i].m_max_x = LIM(c->curve[i].m_max_x, 0, 1); c->curve[i].m_max_y = LIM(c->curve[i].m_max_y, 0, 1); } if (!strcmp("AnchorXY", element)) { if (c->curve[i].m_numAnchors == max_anchors) { ufraw_message(UFRAW_WARNING, _("Too many anchors for curve '%s'"), c->curve[i].name); /* We try to keep the last anchor point */ c->curve[i].m_numAnchors--; } /* If one anchor is supplied then all anchors should be supplied */ sscanf(temp, "%lf %lf", &c->curve[i].m_anchors[c->curve[i].m_numAnchors].x, &c->curve[i].m_anchors[c->curve[i].m_numAnchors].y); c->curve[i].m_anchors[c->curve[i].m_numAnchors].x = LIM(c->curve[i].m_anchors[c->curve[i].m_numAnchors].x, 0, 1); c->curve[i].m_anchors[c->curve[i].m_numAnchors].y = LIM(c->curve[i].m_anchors[c->curve[i].m_numAnchors].y, 0, 1); c->curve[i].m_numAnchors++; } return; } if (c->BaseCurveCount <= 0) { i = - c->BaseCurveCount; if (!strcmp("MinXY", element)) { sscanf(temp, "%lf %lf", &c->BaseCurve[i].m_min_x, &c->BaseCurve[i].m_min_y); c->BaseCurve[i].m_min_x = LIM(c->BaseCurve[i].m_min_x, 0, 1); c->BaseCurve[i].m_min_y = LIM(c->BaseCurve[i].m_min_y, 0, 1); } if (!strcmp("MaxXY", element)) { sscanf(temp, "%lf %lf", &c->BaseCurve[i].m_max_x, &c->BaseCurve[i].m_max_y); c->BaseCurve[i].m_max_x = LIM(c->BaseCurve[i].m_max_x, 0, 1); c->BaseCurve[i].m_max_y = LIM(c->BaseCurve[i].m_max_y, 0, 1); } if (!strcmp("AnchorXY", element)) { /* If one anchor is supplied then all anchors should be supplied */ sscanf(temp, "%lf %lf", &c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].x, &c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].y); c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].x = LIM(c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].x, 0, 1); c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].y = LIM(c->BaseCurve[i].m_anchors[c->BaseCurve[i].m_numAnchors].y, 0, 1); c->BaseCurve[i].m_numAnchors++; } return; } if (c->profileCount[in_profile] <= 0) { i = - c->profileCount[in_profile]; if (!strcmp("File", element)) g_strlcpy(c->profile[in_profile][i].file, temp, max_path); if (!strcmp("ProductName", element)) g_strlcpy(c->profile[in_profile][i].productName, temp, max_name); if (!strcmp("Gamma", element)) sscanf(temp, "%lf", &c->profile[in_profile][i].gamma); if (!strcmp("Linearity", element)) sscanf(temp, "%lf", &c->profile[in_profile][i].linear); if (!strcmp("UseColorMatrix", element)) { gboolean useMatrix; sscanf(temp, "%d", &useMatrix); // TODO: choose between 'No profile' and 'Color matrix' } return; } if (c->profileCount[out_profile] <= 0) { i = - c->profileCount[out_profile]; if (!strcmp("File", element)) { char *utf8 = g_filename_display_name(temp); g_strlcpy(c->profile[out_profile][i].file, utf8, max_path); g_free(utf8); } if (!strcmp("ProductName", element)) g_strlcpy(c->profile[out_profile][i].productName, temp, max_name); if (!strcmp("BitDepth", element)) sscanf(temp, "%d", &c->profile[out_profile][i].BitDepth); return; } if (c->profileCount[display_profile] <= 0) { i = - c->profileCount[display_profile]; if (!strcmp("File", element)) { char *utf8 = g_filename_display_name(temp); g_strlcpy(c->profile[display_profile][i].file, utf8, max_path); g_free(utf8); } if (!strcmp("ProductName", element)) g_strlcpy(c->profile[display_profile][i].productName, temp, max_name); return; } if (!strcmp("BaseCurve", element)) { c->BaseCurveCount = - c->BaseCurveCount; i = - c->BaseCurveCount; c->BaseCurve[i] = conf_default.BaseCurve[0]; g_strlcpy(c->BaseCurve[i].name, temp, max_name); /* m_numAnchors==0 marks that no anchors where read from the XML */ c->BaseCurve[-c->BaseCurveCount].m_numAnchors = 0; } if (!strcmp("Curve", element)) { c->curveCount = - c->curveCount; i = - c->curveCount; c->curve[i] = conf_default.curve[0]; g_strlcpy(c->curve[i].name, temp, max_name); /* m_numAnchors==0 marks that no anchors where read from the XML */ c->curve[-c->curveCount].m_numAnchors = 0; } if (!strcmp("InputProfile", element)) { c->profileCount[in_profile] = - c->profileCount[in_profile]; i = - c->profileCount[in_profile]; c->profile[in_profile][i] = conf_default.profile[in_profile][1]; g_strlcpy(c->profile[in_profile][i].name, temp, max_name); } if (!strcmp("OutputProfile", element)) { c->profileCount[out_profile] = - c->profileCount[out_profile]; i = - c->profileCount[out_profile]; c->profile[out_profile][i] = conf_default.profile[out_profile][0]; g_strlcpy(c->profile[out_profile][i].name, temp, max_name); } if (!strcmp("DisplayProfile", element)) { c->profileCount[display_profile] = - c->profileCount[display_profile]; i = - c->profileCount[display_profile]; c->profile[display_profile][i] = conf_default.profile[display_profile][0]; g_strlcpy(c->profile[display_profile][i].name, temp, max_name); } if (!strcmp("InputFilename", element)) { char *utf8 = g_filename_from_utf8(temp, -1, NULL, NULL, NULL); if (utf8 != NULL) g_strlcpy(c->inputFilename, utf8, max_path); g_free(utf8); } if (!strcmp("OutputFilename", element)) { char *utf8 = g_filename_from_utf8(temp, -1, NULL, NULL, NULL); if (utf8 != NULL) g_strlcpy(c->outputFilename, utf8, max_path); g_free(utf8); } if (!strcmp("OutputPath", element)) { char *utf8 = g_filename_from_utf8(temp, -1, NULL, NULL, NULL); if (utf8 != NULL) g_strlcpy(c->outputPath, utf8, max_path); g_free(utf8); } if (!strcmp("SaveConfiguration", element)) sscanf(temp, "%d", &c->saveConfiguration); if (!strcmp("Interpolation", element)) { /* Keep compatibility with old numbers from ufraw-0.5 */ if (sscanf(temp, "%d", &c->interpolation) == 1) { switch (c->interpolation) { case 0: c->interpolation = vng_interpolation; break; case 1: c->interpolation = four_color_interpolation; break; case 2: c->interpolation = bilinear_interpolation; break; case 3: c->interpolation = half_interpolation; break; default: c->interpolation = ahd_interpolation; } } else { c->interpolation = conf_find_name(temp, interpolationNames, conf_default.interpolation); if (c->interpolation == obsolete_eahd_interpolation) { c->interpolation = ahd_interpolation; c->smoothing = 3; } } } if (!strcmp("ColorSmoothing", element)) sscanf(temp, "%d", &c->smoothing); if (!strcmp("RawExpander", element)) sscanf(temp, "%d", &c->expander[raw_expander]); if (!strcmp("LiveExpander", element)) sscanf(temp, "%d", &c->expander[live_expander]); if (!strcmp("Histogram", element)) sscanf(temp, "%d", &c->histogram); if (!strcmp("LiveHistogramScale", element)) sscanf(temp, "%d", &c->liveHistogramScale); if (!strcmp("RawHistogramScale", element)) sscanf(temp, "%d", &c->rawHistogramScale); if (!strcmp("RemoteGimpCommand", element)) g_strlcpy(c->remoteGimpCommand, temp, max_path); if (!strcmp("LockAspectRatio", element)) sscanf(temp, "%d", &c->LockAspect); if (!strcmp("OverExposure", element)) sscanf(temp, "%d", &c->overExp); if (!strcmp("UnderExposure", element)) sscanf(temp, "%d", &c->underExp); if (!strcmp("BlinkOverUnder", element)) sscanf(temp, "%d", &c->blinkOverUnder); if (!strcmp("DrawLines", element)) sscanf(temp, "%d", &c->drawLines); if (!strcmp("RememberOutputPath", element)) sscanf(temp, "%d", &c->RememberOutputPath); if (!strcmp("WindowMaximized", element)) sscanf(temp, "%d", &c->WindowMaximized); if (!strcmp("WaveletDenoisingThreshold", element)) sscanf(temp, "%lf", &c->threshold); if (!strcmp("HotpixelSensitivity", element)) sscanf(temp, "%lf", &c->hotpixel); #ifdef UFRAW_CONTRAST if (!strcmp("Contrast", element)) sscanf(temp, "%lf", &c->contrast); #endif if (!strcmp("Exposure", element)) sscanf(temp, "%lf", &c->exposure); if (!strcmp("ExposureNorm", element)) sscanf(temp, "%d", &c->ExposureNorm); if (!strcmp("Saturation", element)) sscanf(temp, "%lf", &c->saturation); if (!strcmp("RestoreDetails", element)) c->restoreDetails = conf_find_name(temp, restoreDetailsNames, conf_default.restoreDetails); if (!strcmp("ClipHighlights", element)) c->clipHighlights = conf_find_name(temp, clipHighlightsNames, conf_default.clipHighlights); /* For compatibility with UFRaw-0.10 and earlier. */ if (!strcmp("Unclip", element)) { int unclip; sscanf(temp, "%d", &unclip); if (unclip) c->restoreDetails = restore_lch_details; else c->restoreDetails = clip_details; } if (!strcmp("AutoExposure", element)) sscanf(temp, "%d", &c->autoExposure); if (!strcmp("AutoBlack", element)) sscanf(temp, "%d", &c->autoBlack); if (!strcmp("AutoCrop", element)) sscanf(temp, "%d", &c->autoCrop); if (!strcmp("CurvePath", element)) { char *utf8 = g_filename_from_utf8(temp, -1, NULL, NULL, NULL); if (utf8 != NULL) g_strlcpy(c->curvePath, utf8, max_path); g_free(utf8); } if (strcmp("Intent", element) == 0) { /* Keep compatibility with numbers from ufraw-0.11 */ if (sscanf(temp, "%d", &i) == 1) c->intent[out_profile] = i; else c->intent[out_profile] = conf_find_name(temp, intentNames, conf_default.intent[out_profile]); } if (strcmp("LightnessAdjustment", element) == 0) { if (c->lightnessAdjustmentCount < max_adjustments) { lightness_adjustment *a = &c->lightnessAdjustment[c->lightnessAdjustmentCount]; sscanf(temp, "%lf %lf %lf", &a->adjustment, &a->hue, &a->hueWidth); c->lightnessAdjustmentCount++; } else { ufraw_message(UFRAW_SET_ERROR, _("Too many lightness adjustments in the ID file, ignored\n")); } } if (strcmp("GrayscaleMode", element) == 0) { c->grayscaleMode = (sscanf(temp, "%d", &i) == 1) ? i : conf_find_name(temp, grayscaleModeNames, conf_default.grayscaleMode); } c->grayscaleMixerDefined = 0; if (strcmp("GrayscaleMixer", element) == 0) { sscanf(temp, "%lf %lf %lf", &c->grayscaleMixer[0], &c->grayscaleMixer[1], &c->grayscaleMixer[2]); c->grayscaleMixerDefined = 1; } if (strcmp("DespeckleWindow", element) == 0) { sscanf(temp, "%lf %lf %lf", &c->despeckleWindow[0], &c->despeckleWindow[1], &c->despeckleWindow[2]); } if (strcmp("DespeckleDecay", element) == 0) { sscanf(temp, "%lf %lf %lf", &c->despeckleDecay[0], &c->despeckleDecay[1], &c->despeckleDecay[2]); } if (strcmp("DespecklePasses", element) == 0) { sscanf(temp, "%lf %lf %lf", &c->despecklePasses[0], &c->despecklePasses[1], &c->despecklePasses[2]); } /* OutputIntent replaces Intent starting from ufraw-0.12. */ if (strcmp("OutputIntent", element) == 0) c->intent[out_profile] = conf_find_name(temp, intentNames, conf_default.intent[out_profile]); if (strcmp("DisplayIntent", element) == 0) c->intent[display_profile] = conf_find_name(temp, intentNames, conf_default.intent[display_profile]); if (!strcmp("Make", element)) g_strlcpy(c->make, temp, max_name); if (!strcmp("Model", element)) g_strlcpy(c->model, temp, max_name); if (!strcmp("Lens", element)) g_strlcpy(c->lensText, temp, max_name); if (!strcmp("DarkframeFile", element)) g_strlcpy(c->darkframeFile, temp, max_path); if (!strcmp("ProfilePath", element)) { char *utf8 = g_filename_from_utf8(temp, -1, NULL, NULL, NULL); if (utf8 != NULL) g_strlcpy(c->profilePath, utf8, max_path); g_free(utf8); } if (!strcmp("Orientation", element)) sscanf(temp, "%d", &c->orientation); if (!strcmp("Crop", element)) sscanf(temp, "%d %d %d %d", &c->CropX1, &c->CropY1, &c->CropX2, &c->CropY2); if (!strcmp("AspectRatio", element)) sscanf(temp, "%lf", &c->aspectRatio); if (!strcmp("Rotation", element)) sscanf(temp, "%lf", &c->rotationAngle); if (!strcmp("Shrink", element)) sscanf(temp, "%d", &c->shrink); if (!strcmp("Size", element)) sscanf(temp, "%d", &c->size); if (!strcmp("OutputType", element)) sscanf(temp, "%d", &c->type); if (!strcmp("CreateID", element)) sscanf(temp, "%d", &c->createID); if (!strcmp("EmbedExif", element)) sscanf(temp, "%d", &c->embedExif); if (!strcmp("ProgressiveJPEG", element)) sscanf(temp, "%d", &c->progressiveJPEG); if (!strcmp("Compression", element)) sscanf(temp, "%d", &c->compression); if (!strcmp("Overwrite", element)) sscanf(temp, "%d", &c->overwrite); if (!strcmp("LosslessCompression", element)) sscanf(temp, "%d", &c->losslessCompress); } int conf_load(conf_data *c, const char *IDFilename) { char *confFilename, line[max_path], *locale; const char *hd; FILE *in; GMarkupParser parser = { &conf_parse_start, &conf_parse_end, &conf_parse_text, NULL, NULL }; GMarkupParseContext *context; GError *err = NULL; int i; conf_init(c); if (IDFilename == NULL) c->ufobject = ufraw_resources_new(); else c->ufobject = ufraw_image_new(); if (IDFilename == NULL) { hd = uf_get_home_dir(); confFilename = g_build_filename(hd, ".ufrawrc", NULL); in = g_fopen(confFilename, "r"); /* We don't mind if ~/.ufrawrc does not exist. */ if (in == NULL) { g_free(confFilename); return UFRAW_SUCCESS; } } else { if (!g_file_test(IDFilename, G_FILE_TEST_IS_REGULAR)) { ufraw_message(UFRAW_SET_ERROR, _("ID file %s does not appear to be a regular file\n%s\n"), IDFilename, strerror(errno)); return UFRAW_ERROR; } if ((in = g_fopen(IDFilename, "r")) == NULL) { ufraw_message(UFRAW_SET_ERROR, _("Can't open ID file %s for reading\n%s\n"), IDFilename, strerror(errno)); return UFRAW_ERROR; } confFilename = g_strdup(IDFilename); } g_snprintf(c->inputURI, max_path, "file://%s", confFilename); struct stat s; fstat(fileno(in), &s); g_snprintf(c->inputModTime, max_name, "%d", (int)s.st_mtime); locale = uf_set_locale_C(); parse_data user_data; user_data.conf = c; if (ufobject_name(c->ufobject) == ufRawImage) user_data.group = c->ufobject; else user_data.group = ufgroup_element(c->ufobject, ufRawImage); user_data.ufrawQuark = g_quark_from_static_string("UFRaw"); context = g_markup_parse_context_new(&parser, 0, &user_data, NULL); line[max_path - 1] = '\0'; if (fgets(line, max_path - 1, in) == NULL && !feof(in)) { ufraw_message(UFRAW_ERROR, _("Error reading from file '%s'."), confFilename); uf_reset_locale(locale); g_free(confFilename); fclose(in); return UFRAW_ERROR; } while (!feof(in)) { if (!g_markup_parse_context_parse(context, line, strlen(line), &err)) { ufraw_message(UFRAW_ERROR, _("Error parsing '%s'\n%s"), confFilename, err->message); g_markup_parse_context_free(context); uf_reset_locale(locale); g_free(confFilename); fclose(in); // We could if needed check explicitly for a version mismatch error //GQuark ufrawQuark = g_quark_from_static_string("UFRaw"); //if (g_error_matches(err, data->ufrawQuark, UFRAW_RC_VERSION)) g_error_free(err); return UFRAW_ERROR; } if (fgets(line, max_path, in) == NULL && !feof(in)) { ufraw_message(UFRAW_ERROR, _("Error reading from file '%s'."), confFilename); uf_reset_locale(locale); g_free(confFilename); fclose(in); return UFRAW_ERROR; } } g_markup_parse_context_end_parse(context, NULL); g_markup_parse_context_free(context); uf_reset_locale(locale); g_free(confFilename); fclose(in); if (c->version == 3) { c->version = conf_default.version; /* Don't add linear part to existing profile curves (except sRGB) */ for (i = 2; i < c->profileCount[in_profile]; i++) c->profile[in_profile][i].linear = 0.0; } if (c->version == 5) { c->version = conf_default.version; } // Display profile should not be read from ID files. if (IDFilename != NULL) c->profileIndex[display_profile] = conf_default.profileIndex[display_profile]; // Support OutputType's deprecated in UFRaw-0.14 if (c->type == ppm16_deprecated_type) { c->type = ppm_type; c->profile[out_profile][c->profileIndex[out_profile]].BitDepth = 16; } if (c->type == tiff16_deprecated_type) { c->type = tiff_type; c->profile[out_profile][c->profileIndex[out_profile]].BitDepth = 16; } if (c->type == png16_deprecated_type) { c->type = png_type; c->profile[out_profile][c->profileIndex[out_profile]].BitDepth = 16; } /* a few consistency settings */ if (c->curveIndex >= c->curveCount) c->curveIndex = conf_default.curveIndex; return UFRAW_SUCCESS; } void conf_file_load(conf_data *conf, char *confFilename) { /* Load the --conf file. version==0 means ignore conf. */ conf->version = 0; if (strlen(confFilename) > 0) { int status = conf_load(conf, confFilename); if (status == UFRAW_SUCCESS) { strcpy(conf->inputFilename, ""); strcpy(conf->outputFilename, ""); strcpy(conf->outputPath, ""); } else { ufraw_message(UFRAW_REPORT, NULL); conf->version = 0; } } } int conf_save(conf_data *c, char *IDFilename, char **confBuffer) { char *buf = NULL; int i, j; char *locale = uf_set_locale_C(); buf = uf_markup_buf(buf, "\n"); buf = uf_markup_buf(buf, "\n", c->version); if (strlen(c->inputFilename) > 0 && IDFilename != NULL) { char *utf8 = g_filename_display_name(c->inputFilename); buf = uf_markup_buf(buf, "%s\n", utf8); g_free(utf8); } if (strlen(c->outputFilename) > 0 && IDFilename != NULL) { char *utf8 = g_filename_display_name(c->outputFilename); buf = uf_markup_buf(buf, "%s\n", utf8); g_free(utf8); } if (strlen(c->outputPath) > 0) { char *utf8 = g_filename_display_name(c->outputPath); buf = uf_markup_buf(buf, "%s\n", utf8); g_free(utf8); } /* GUI settings are only saved to .ufrawrc */ if (IDFilename == NULL) { if (c->saveConfiguration != conf_default.saveConfiguration) buf = uf_markup_buf(buf, "%d\n", c->saveConfiguration); if (c->expander[raw_expander] != conf_default.expander[raw_expander]) buf = uf_markup_buf(buf, "%d\n", c->expander[raw_expander]); if (c->expander[live_expander] != conf_default.expander[live_expander]) buf = uf_markup_buf(buf, "%d\n", c->expander[live_expander]); if (c->histogram != conf_default.histogram) buf = uf_markup_buf(buf, "%d\n", c->histogram); if (c->liveHistogramScale != conf_default.liveHistogramScale) buf = uf_markup_buf(buf, "%d\n", c->liveHistogramScale); if (c->rawHistogramScale != conf_default.rawHistogramScale) buf = uf_markup_buf(buf, "%d\n", c->rawHistogramScale); if (c->LockAspect != conf_default.LockAspect) buf = uf_markup_buf(buf, "%d\n", c->LockAspect); if (c->overExp != conf_default.overExp) buf = uf_markup_buf(buf, "%d\n", c->overExp); if (c->underExp != conf_default.underExp) buf = uf_markup_buf(buf, "%d\n", c->underExp); if (c->blinkOverUnder != conf_default.blinkOverUnder) buf = uf_markup_buf(buf, "%d\n", c->blinkOverUnder); if (c->drawLines != conf_default.drawLines) buf = uf_markup_buf(buf, "%d\n", c->drawLines); if (c->RememberOutputPath != conf_default.RememberOutputPath) buf = uf_markup_buf(buf, "%d\n", c->RememberOutputPath); if (c->WindowMaximized != conf_default.WindowMaximized) buf = uf_markup_buf(buf, "%d\n", c->WindowMaximized); if (strcmp(c->remoteGimpCommand, conf_default.remoteGimpCommand) != 0) buf = uf_markup_buf(buf, "%s\n", c->remoteGimpCommand); if (strlen(c->curvePath) > 0) { char *utf8 = g_filename_display_name(c->curvePath); buf = uf_markup_buf(buf, "%s\n", utf8); g_free(utf8); } if (strlen(c->profilePath) > 0) { char *utf8 = g_filename_display_name(c->profilePath); buf = uf_markup_buf(buf, "%s\n", utf8); g_free(utf8); } } if (c->interpolation != conf_default.interpolation) buf = uf_markup_buf(buf, "%s\n", conf_get_name(interpolationNames, c->interpolation)); // 'smoothing' is boolean at the moment, but we keep the option // to upgrade it to the number of color smoothing passes. if (c->smoothing != 0) { if (c->interpolation == ahd_interpolation) c->smoothing = 3; else c->smoothing = 1; } if (c->smoothing != conf_default.smoothing) buf = uf_markup_buf(buf, "%d\n", c->smoothing); UFObject *image; if (ufobject_name(c->ufobject) == ufRawImage) image = c->ufobject; else image = ufgroup_element(c->ufobject, ufRawImage); { char *xml = ufobject_xml(image, ""); char *newbuf = g_strconcat(buf, xml, NULL); g_free(xml); g_free(buf); buf = newbuf; } if (c->threshold != conf_default.threshold) buf = uf_markup_buf(buf, "%d\n", (int)floor(c->threshold)); if (c->hotpixel != conf_default.hotpixel) buf = uf_markup_buf(buf, "%f\n", c->hotpixel); #ifdef UFRAW_CONTRAST if (c->contrast != conf_default.contrast) buf = uf_markup_buf(buf, "%f\n", c->contrast); #endif if (c->exposure != conf_default.exposure) buf = uf_markup_buf(buf, "%lf\n", c->exposure); if (c->ExposureNorm != conf_default.ExposureNorm) buf = uf_markup_buf(buf, "%d\n", c->ExposureNorm); if (c->restoreDetails != conf_default.restoreDetails) buf = uf_markup_buf(buf, "%s\n", conf_get_name(restoreDetailsNames, c->restoreDetails)); if (c->clipHighlights != conf_default.clipHighlights) buf = uf_markup_buf(buf, "%s\n", conf_get_name(clipHighlightsNames, c->clipHighlights)); if (c->autoExposure != conf_default.autoExposure) buf = uf_markup_buf(buf, "%d\n", c->autoExposure); if (c->autoBlack != conf_default.autoBlack) buf = uf_markup_buf(buf, "%d\n", c->autoBlack); if (c->autoCrop != conf_default.autoCrop) buf = uf_markup_buf(buf, "%d\n", c->autoCrop); if (c->saturation != conf_default.saturation) buf = uf_markup_buf(buf, "%lf\n", c->saturation); for (i = 0; i < max_adjustments; ++i) { lightness_adjustment *a = &c->lightnessAdjustment[i]; if (fabs(a->adjustment - conf_default.lightnessAdjustment[i].adjustment) > 0.01) { buf = uf_markup_buf(buf, "%f %f %f\n", a->adjustment, a->hue, a->hueWidth); } } if (c->grayscaleMode != grayscale_invalid && c->grayscaleMode != conf_default.grayscaleMode) buf = uf_markup_buf(buf, "%s\n", grayscaleModeNames[c->grayscaleMode]); if (c->grayscaleMode == grayscale_mixer) { buf = uf_markup_buf(buf, "%f %f %f\n", c->grayscaleMixer[0], c->grayscaleMixer[1], c->grayscaleMixer[2]); } if (c->despeckleWindow[0] != conf_default.despeckleWindow[0] || c->despeckleWindow[1] != conf_default.despeckleWindow[1] || c->despeckleWindow[2] != conf_default.despeckleWindow[2]) { buf = uf_markup_buf(buf, "%f %f %f\n", c->despeckleWindow[0], c->despeckleWindow[1], c->despeckleWindow[2]); } if (c->despeckleDecay[0] != conf_default.despeckleDecay[0] || c->despeckleDecay[1] != conf_default.despeckleDecay[1] || c->despeckleDecay[2] != conf_default.despeckleDecay[2]) { buf = uf_markup_buf(buf, "%f %f %f\n", c->despeckleDecay[0], c->despeckleDecay[1], c->despeckleDecay[2]); } if (c->despecklePasses[0] != conf_default.despecklePasses[0] || c->despecklePasses[1] != conf_default.despecklePasses[1] || c->despecklePasses[2] != conf_default.despecklePasses[2]) { buf = uf_markup_buf(buf, "%f %f %f\n", c->despecklePasses[0], c->despecklePasses[1], c->despecklePasses[2]); } if (c->size != conf_default.size) buf = uf_markup_buf(buf, "%d\n", c->size); if (c->shrink != conf_default.shrink) buf = uf_markup_buf(buf, "%d\n", c->shrink); if (c->type != conf_default.type) buf = uf_markup_buf(buf, "%d\n", c->type); if (c->createID != conf_default.createID) buf = uf_markup_buf(buf, "%d\n", c->createID); if (c->embedExif != conf_default.embedExif) buf = uf_markup_buf(buf, "%d\n", c->embedExif); if (c->progressiveJPEG != conf_default.progressiveJPEG) buf = uf_markup_buf(buf, "%d\n", c->progressiveJPEG); if (c->compression != conf_default.compression) buf = uf_markup_buf(buf, "%d\n", c->compression); if (c->overwrite != conf_default.overwrite) buf = uf_markup_buf(buf, "%d\n", c->overwrite); if (c->losslessCompress != conf_default.losslessCompress) buf = uf_markup_buf(buf, "%d\n", c->losslessCompress); for (i = 0; i < c->BaseCurveCount; i++) { char *curveBuf = curve_buffer(&c->BaseCurve[i]); /* Write curve if it is non-default and we are not writing to .ufraw */ /* But ALWAYS write the current curve */ if (c->BaseCurveIndex == i || (curveBuf != NULL && IDFilename == NULL)) { if (curveBuf == NULL) curveBuf = g_strdup(""); char *current = i == c->BaseCurveIndex ? "yes" : "no"; switch (i) { case manual_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; case linear_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; case custom_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; case camera_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; default: buf = uf_markup_buf(buf, "%s\n", current, c->BaseCurve[i].name); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); } } g_free(curveBuf); } for (i = 0; i < c->curveCount; i++) { char *curveBuf = curve_buffer(&c->curve[i]); /* Write curve if it is non-default and we are not writing to .ufraw */ /* But ALWAYS write the current curve */ if (c->curveIndex == i || (curveBuf != NULL && IDFilename == NULL)) { if (curveBuf == NULL) curveBuf = g_strdup(""); char *current = i == c->curveIndex ? "yes" : "no"; switch (i) { case manual_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; case linear_curve: buf = uf_markup_buf(buf, "\n", current); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); break; default: buf = uf_markup_buf(buf, "%s\n", current, c->curve[i].name); buf = uf_markup_buf(buf, curveBuf); buf = uf_markup_buf(buf, "\n"); } } g_free(curveBuf); } for (j = 0; j < profile_types; j++) { // Display profile does not belong in ID files. if (IDFilename != NULL && j == display_profile) continue; char *type = j == in_profile ? "InputProfile" : j == out_profile ? "OutputProfile" : j == display_profile ? "DisplayProfile" : "Error"; for (i = 0; i < c->profileCount[j]; i++) { gboolean current = i == c->profileIndex[j]; /* In ID files we only save the current profiles */ if (IDFilename != NULL && !current) continue; /* For the default profiles, if it is not the current profile * and nothing change, do not write it. */ if (i < conf_default.profileCount[j] && !current && (c->profile[j][i].gamma == conf_default.profile[j][i].gamma && c->profile[j][i].linear == conf_default.profile[j][i].linear && c->profile[j][i].BitDepth == conf_default.profile[j][i].BitDepth)) continue; char *profile = ""; if (j == in_profile && i == 0) profile = "No"; if (j == in_profile && i == 1) profile = "Matrix"; if (j == out_profile && i == 0) profile = "sRGB"; if (j == out_profile && i == 1) profile = "sRGBEmbedded"; if (j == display_profile && i == 0) profile = "System"; if (j == display_profile && i == 1) profile = "sRGB"; buf = uf_markup_buf(buf, "<%s%s Current='%s'>%s\n", profile, type, current ? "yes" : "no", c->profile[j][i].name); if (i >= conf_default.profileCount[j]) { char *utf8 = g_filename_display_name(c->profile[j][i].file); buf = uf_markup_buf(buf, "\t%s\n", utf8); g_free(utf8); buf = uf_markup_buf(buf, "\t%s\n", c->profile[j][i].productName); } if (c->profile[j][i].gamma != conf_default.profile[j][1].gamma) buf = uf_markup_buf(buf, "\t%lf\n", c->profile[j][i].gamma); if (c->profile[j][i].linear != conf_default.profile[j][1].linear) buf = uf_markup_buf(buf, "\t%lf\n", c->profile[j][i].linear); if (c->profile[j][i].BitDepth != conf_default.profile[j][1].BitDepth) buf = uf_markup_buf(buf, "\t%d\n", c->profile[j][i].BitDepth); buf = uf_markup_buf(buf, "\n", profile, type); } } if (c->intent[out_profile] != conf_default.intent[out_profile]) buf = uf_markup_buf(buf, "%s\n", conf_get_name(intentNames, c->intent[out_profile])); if (c->intent[display_profile] != conf_default.intent[display_profile]) buf = uf_markup_buf(buf, "%s\n", conf_get_name(intentNames, c->intent[display_profile])); /* We always write the Make and Mode information * to know if the WB setting is relevant */ buf = uf_markup_buf(buf, "%s\n", c->make); buf = uf_markup_buf(buf, "%s\n", c->model); if (IDFilename != NULL) { if (strcmp(c->darkframeFile, conf_default.darkframeFile) != 0) buf = uf_markup_buf(buf, "%s\n", c->darkframeFile); buf = uf_markup_buf(buf, "%s\n", c->timestampText); buf = uf_markup_buf(buf, "%d\n", c->orientation); buf = uf_markup_buf(buf, "%s\n", c->isoText); buf = uf_markup_buf(buf, "%s\n", c->shutterText); buf = uf_markup_buf(buf, "%s\n", c->apertureText); buf = uf_markup_buf(buf, "%s\n", c->focalLenText); buf = uf_markup_buf(buf, "%s\n", c->focalLen35Text); if (strlen(c->lensText) > 0) buf = uf_markup_buf(buf, "%s\n", c->lensText); buf = uf_markup_buf(buf, "%s\n", c->exifSource); buf = uf_markup_buf(buf, "%d %d %d %d\n", c->CropX1, c->CropY1, c->CropX2, c->CropY2); if (c->aspectRatio != 0.0) buf = uf_markup_buf(buf, "%lf\n", c->aspectRatio); buf = uf_markup_buf(buf, "%lf\n", c->rotationAngle); char *log = ufraw_message(UFRAW_GET_LOG, NULL); if (log != NULL) { char *utf8 = g_filename_display_name(log); buf = uf_markup_buf(buf, "\n%s\n", utf8); g_free(utf8); } /* As long as darkframe is not in the GUI we save it only to ID files.*/ } buf = uf_markup_buf(buf, "\n"); uf_reset_locale(locale); if (confBuffer == NULL) { char *confFilename; FILE *out; if (IDFilename == NULL) { const char *hd = uf_get_home_dir(); confFilename = g_build_filename(hd, ".ufrawrc", NULL); } else confFilename = g_strdup(IDFilename); if ((out = g_fopen(confFilename, "w")) == NULL) { ufraw_message(UFRAW_ERROR, _("Can't open file %s for writing\n%s\n"), confFilename, strerror(errno)); g_free(confFilename); g_free(buf); return UFRAW_ERROR; } fputs(buf, out); fclose(out); g_free(confFilename); g_free(buf); } else { *confBuffer = buf; } return UFRAW_SUCCESS; } /* Copy the image manipulation options from *src to *dst */ void conf_copy_image(conf_data *dst, const conf_data *src) { int i, j; UFObject *dstImage; if (ufobject_name(dst->ufobject) == ufRawImage) dstImage = dst->ufobject; else dstImage = ufgroup_element(dst->ufobject, ufRawImage); ufobject_copy(dstImage, src->ufobject); dst->interpolation = src->interpolation; dst->smoothing = src->smoothing; /* make and model are 'part of' ChanMul, * since on different make and model ChanMul are meaningless */ g_strlcpy(dst->make, src->make, max_name); g_strlcpy(dst->model, src->model, max_name); dst->threshold = src->threshold; dst->exposure = src->exposure; dst->hotpixel = src->hotpixel; #ifdef UFRAW_CONTRAST dst->contrast = src->contrast; #endif dst->ExposureNorm = src->ExposureNorm; dst->saturation = src->saturation; dst->black = src->black; dst->autoExposure = src->autoExposure; dst->autoBlack = src->autoBlack; dst->autoCrop = src->autoCrop; dst->restoreDetails = src->restoreDetails; dst->clipHighlights = src->clipHighlights; memcpy(dst->lightnessAdjustment, src->lightnessAdjustment, sizeof dst->lightnessAdjustment); dst->lightnessAdjustmentCount = src->lightnessAdjustmentCount; dst->grayscaleMode = src->grayscaleMode; dst->grayscaleMixerDefined = src->grayscaleMixerDefined; memcpy(dst->grayscaleMixer, src->grayscaleMixer, sizeof dst->grayscaleMixer); memcpy(dst->despeckleWindow, src->despeckleWindow, sizeof(dst->despeckleWindow)); memcpy(dst->despeckleDecay, src->despeckleDecay, sizeof(dst->despeckleDecay)); memcpy(dst->despecklePasses, src->despecklePasses, sizeof(dst->despecklePasses)); g_strlcpy(dst->darkframeFile, src->darkframeFile, max_path); /* We only copy the current BaseCurve */ if (src->BaseCurveIndex <= camera_curve) { dst->BaseCurveIndex = src->BaseCurveIndex; if (src->BaseCurveIndex == manual_curve) dst->BaseCurve[manual_curve] = src->BaseCurve[manual_curve]; } else { /* For non-standard curves we look for a curve with the same name * and override it, assuming it is the same curve. */ for (i = camera_curve + 1; i < dst->BaseCurveCount; i++) { if (!strcmp(dst->BaseCurve[i].name, src->BaseCurve[src->BaseCurveIndex].name)) { dst->BaseCurve[i] = src->BaseCurve[src->BaseCurveIndex]; dst->BaseCurveIndex = i; break; } } /* If the curve was not found we add it. */ if (i == dst->BaseCurveCount) { /* If there is no more room we throw away the last curve. */ if (dst->BaseCurveCount == max_curves) dst->BaseCurveCount--; dst->BaseCurve[dst->BaseCurveCount] = src->BaseCurve[src->BaseCurveIndex]; dst->BaseCurveIndex = dst->BaseCurveCount; dst->BaseCurveCount++; } } /* We only copy the current curve */ if (src->curveIndex <= linear_curve) { dst->curveIndex = src->curveIndex; if (src->curveIndex == manual_curve) dst->curve[manual_curve] = src->curve[manual_curve]; } else { /* For non-standard curves we look for a curve with the same name * and override it, assuming it is the same curve. */ for (i = camera_curve + 1; i < dst->curveCount; i++) { if (!strcmp(dst->curve[i].name, src->curve[src->curveIndex].name)) { dst->curve[i] = src->curve[src->curveIndex]; dst->curveIndex = i; break; } } /* If the curve was not found we add it. */ if (i == dst->curveCount) { /* If there is no more room we throw away the last curve. */ if (dst->curveCount == max_curves) dst->curveCount--; dst->curve[dst->curveCount] = src->curve[src->curveIndex]; dst->curveIndex = dst->curveCount; dst->curveCount++; } } /* We only copy the current input/output profile */ for (j = 0; j < profile_types; j++) { // Ignore the display profile if (j == display_profile) continue; if (src->profileIndex[j] == 0) { dst->profileIndex[j] = src->profileIndex[j]; dst->profile[j][0] = src->profile[j][0]; } else { /* For non-standard profiles we look for a profile with the same * name and override it, assuming it is the same profile. */ for (i = 1; i < dst->profileCount[j]; i++) { if (!strcmp(dst->profile[j][i].name, src->profile[j][src->profileIndex[j]].name)) { dst->profile[j][i] = src->profile[j][src->profileIndex[j]]; dst->profileIndex[j] = i; break; } } /* If the profile was not found we add it. */ if (i == dst->profileCount[j]) { /* If there is no more room we throw away the last profile. */ if (dst->profileCount[j] == max_profiles) dst->profileCount[j]--; dst->profile[j][dst->profileCount[j]] = src->profile[j][src->profileIndex[j]]; dst->profileIndex[j] = dst->profileCount[j]; dst->profileCount[j]++; } } } dst->intent[out_profile] = src->intent[out_profile]; dst->intent[display_profile] = src->intent[display_profile]; } /* Copy the transformation information from *src to *dst. */ void conf_copy_transform(conf_data *dst, const conf_data *src) { dst->orientation = src->orientation; dst->CropX1 = src->CropX1; dst->CropY1 = src->CropY1; dst->CropX2 = src->CropX2; dst->CropY2 = src->CropY2; dst->aspectRatio = src->aspectRatio; dst->rotationAngle = src->rotationAngle; } /* Copy the 'save options' from *src to *dst */ void conf_copy_save(conf_data *dst, const conf_data *src) { /* Filenames get special treatment and are not simply copied g_strlcpy(dst->inputFilename, src->inputFilename, max_path); g_strlcpy(dst->outputFilename, src->outputFilename, max_path); g_strlcpy(dst->outputPath, src->outputPath, max_path); */ g_strlcpy(dst->inputURI, src->inputURI, max_path); g_strlcpy(dst->inputModTime, src->inputModTime, max_name); dst->type = src->type; dst->compression = src->compression; dst->createID = src->createID; dst->embedExif = src->embedExif; dst->shrink = src->shrink; dst->size = src->size; dst->overwrite = src->overwrite; dst->RememberOutputPath = src->RememberOutputPath; dst->progressiveJPEG = src->progressiveJPEG; dst->losslessCompress = src->losslessCompress; dst->embeddedImage = src->embeddedImage; } int conf_set_cmd(conf_data *conf, const conf_data *cmd) { UFObject *cmdImage = ufgroup_element(cmd->ufobject, ufRawImage); ufobject_copy(conf->ufobject, cmdImage); if (cmd->overwrite != -1) conf->overwrite = cmd->overwrite; if (cmd->WindowMaximized != -1) conf->WindowMaximized = cmd->WindowMaximized; if (cmd->restoreDetails != -1) conf->restoreDetails = cmd->restoreDetails; if (cmd->clipHighlights != -1) conf->clipHighlights = cmd->clipHighlights; if (cmd->losslessCompress != -1) conf->losslessCompress = cmd->losslessCompress; if (cmd->embedExif != -1) conf->embedExif = cmd->embedExif; if (cmd->embeddedImage != -1) conf->embeddedImage = cmd->embeddedImage; if (cmd->rotate != -1) conf->rotate = cmd->rotate; if (cmd->rotationAngle != NULLF) conf->rotationAngle = cmd->rotationAngle; if (cmd->autoCrop != -1) conf->autoCrop = cmd->autoCrop; if (cmd->CropX1 != -1 || cmd->CropX2 != -1 || cmd->CropY1 != -1 || cmd->CropY2 != -1) conf->autoCrop = disabled_state; if (cmd->CropX1 != -1) conf->CropX1 = cmd->CropX1; if (cmd->CropY1 != -1) conf->CropY1 = cmd->CropY1; if (cmd->CropX2 != -1) conf->CropX2 = cmd->CropX2; if (cmd->CropY2 != -1) conf->CropY2 = cmd->CropY2; if (cmd->aspectRatio != 0.0) conf->aspectRatio = cmd->aspectRatio; if (cmd->silent != -1) conf->silent = cmd->silent; if (cmd->compression != NULLF) conf->compression = cmd->compression; if (cmd->autoExposure) { conf->autoExposure = cmd->autoExposure; } if (cmd->threshold != NULLF) conf->threshold = cmd->threshold; if (cmd->hotpixel != NULLF) conf->hotpixel = cmd->hotpixel; #ifdef UFRAW_CONTRAST if (cmd->contrast != NULLF) conf->contrast = cmd->contrast; #endif if (cmd->exposure != NULLF) { conf->exposure = cmd->exposure; conf->autoExposure = disabled_state; } if (cmd->profile[0][0].gamma != NULLF) conf->profile[0][conf->profileIndex[0]].gamma = cmd->profile[0][0].gamma; if (cmd->profile[0][0].linear != NULLF) conf->profile[0][conf->profileIndex[0]].linear = cmd->profile[0][0].linear; if (cmd->profile[1][0].BitDepth != -1) conf->profile[1][conf->profileIndex[1]].BitDepth = cmd->profile[1][0].BitDepth; if (cmd->saturation != NULLF) conf->saturation = cmd->saturation; if (cmd->grayscaleMode != -1) { conf->grayscaleMode = cmd->grayscaleMode; if (cmd->grayscaleMode == grayscale_mixer && cmd->grayscaleMixerDefined == 1) { conf->grayscaleMixerDefined = 1; conf->grayscaleMixer[0] = cmd->grayscaleMixer[0]; conf->grayscaleMixer[1] = cmd->grayscaleMixer[1]; conf->grayscaleMixer[2] = cmd->grayscaleMixer[2]; } } if (cmd->BaseCurveIndex >= 0) conf->BaseCurveIndex = cmd->BaseCurveIndex; if (cmd->curveIndex >= 0) conf->curveIndex = cmd->curveIndex; if (cmd->autoBlack) { conf->autoBlack = cmd->autoBlack; } if (cmd->black != NULLF) { CurveDataSetPoint(&conf->curve[conf->curveIndex], 0, cmd->black, 0); conf->autoBlack = disabled_state; } if (cmd->smoothing != -1) conf->smoothing = cmd->smoothing; if (cmd->interpolation >= 0) conf->interpolation = cmd->interpolation; if (cmd->interpolation == obsolete_eahd_interpolation) { conf->interpolation = ahd_interpolation; conf->smoothing = 3; } if (cmd->shrink != NULLF) { conf->shrink = cmd->shrink; conf->size = 0; if (conf->interpolation == half_interpolation) conf->interpolation = ahd_interpolation; } if (cmd->size != NULLF) { conf->size = cmd->size; conf->shrink = 1; if (conf->interpolation == half_interpolation) conf->interpolation = ahd_interpolation; } if (cmd->type >= 0) conf->type = cmd->type; if (cmd->createID >= 0) conf->createID = cmd->createID; if (strlen(cmd->darkframeFile) > 0) g_strlcpy(conf->darkframeFile, cmd->darkframeFile, max_path); if (cmd->darkframe != NULL) conf->darkframe = cmd->darkframe; if (strlen(cmd->outputPath) > 0) g_strlcpy(conf->outputPath, cmd->outputPath, max_path); if (strlen(cmd->outputFilename) > 0) { if (conf->createID != no_id && !strcmp(cmd->outputFilename, "-") && !cmd->embeddedImage) { ufraw_message(UFRAW_ERROR, _("cannot --create-id with stdout")); return UFRAW_ERROR; } g_strlcpy(conf->outputFilename, cmd->outputFilename, max_path); } return UFRAW_SUCCESS; } /* Following are global strings and functions used by both 'ufraw' and * 'ufraw-batch'. ufraw_conf.c is a good home for them since they are * closely related to the other configuration functions. */ char *helpText[] = { N_("UFRaw "), VERSION, N_(" - Unidentified Flying Raw converter for digital camera images.\n"), "\n", N_("Usage: ufraw [ options ... ] [ raw-image-files ... ]\n"), N_(" ufraw-batch [ options ... ] [ raw-image-files ... ]\n"), N_(" ufraw [ options ... ] [ default-directory ]\n"), "\n", N_("By default 'ufraw' displays a preview window for each raw image allowing\n" "the user to tweak the image parameters before saving. If no raw images\n" "are given at the command line, UFRaw will display a file chooser dialog.\n" "To process the images with no questions asked (and no preview) use\n" "'ufraw-batch'.\n"), "\n", N_("The input files can be either raw images or ufraw's ID files. ID files\n" "contain a raw image filename and the parameters for handling the image.\n" "One can also use an ID file with the option:\n"), "\n", N_("--conf=ID-file Apply the parameters in ID-file to other raw images.\n"), "\n", N_("The rest of the options are separated into two groups.\n"), N_("The options which are related to the image manipulation are:\n"), "\n", N_("--wb=camera|auto White balance setting.\n"), N_("--temperature=TEMP Color temperature in Kelvin.\n"), N_("--green=GREEN Green color normalization.\n"), N_("--base-curve=manual|linear|camera|custom|CURVE\n" " Type of base tone curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default camera if such exists, linear otherwise).\n"), N_("--base-curve-file=file\n" " Use base tone curve included in specified file.\n" " Overrides --base-curve option.\n"), N_("--curve=manual|linear|CURVE\n" " Type of luminosity curve to use. CURVE can be any\n" " curve that was previously loaded in the GUI.\n" " (default linear).\n"), N_("--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n"), N_("--restore=clip|lch|hsv\n" " Restore details for negative EV.\n" " 'clip' restores nothing - safe from artifacts.\n" " 'lch' restores in LCH space - giving soft details.\n" " 'hsv' restores in HSV space - giving sharp details.\n" " (default lch).\n"), N_("--clip=digital|film Clip highlights for positive EV.\n" " 'digital' linear digital sensor response.\n" " 'film' emulate soft film response. (default digital).\n"), N_("--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).\n"), N_("--linearity=LINEARITY Linearity of the base curve (default 0.10).\n"), #ifdef UFRAW_CONTRAST N_("--contrast=CONT Contrast adjustment (default 1.0).\n"), #endif N_("--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W output).\n"), N_("--wavelet-denoising-threshold=THRESHOLD\n" " Wavelet denoising threshold (default 0.0).\n"), N_("--hotpixel-sensitivity=VALUE\n" " Sensitivity for detecting and shaving hot pixels (default 0.0).\n"), N_("--exposure=auto|EXPOSURE\n" " Auto exposure or exposure correction in EV (default 0).\n"), N_("--black-point=auto|BLACK\n" " Auto black-point or black-point value (default 0).\n"), N_("--interpolation=ahd|vng|four-color|ppg|bilinear\n" " Interpolation algorithm to use (default ahd).\n"), N_("--color-smoothing Apply color smoothing.\n"), N_("--grayscale=none|lightness|luminance|value|mixer\n" " Grayscale conversion algorithm to use (default none).\n"), N_("--grayscale-mixer=RED,GREEN,BLUE\n" " Grayscale mixer values to use (default 1,1,1).\n"), "\n", N_("The options which are related to the final output are:\n"), "\n", N_("--shrink=FACTOR Shrink the image by FACTOR (default 1).\n"), N_("--size=SIZE Downsize max(height,width) to SIZE.\n"), N_("--out-type=ppm|tiff|tif|png|jpeg|jpg|fits\n" " Output file format (default ppm).\n"), N_("--out-depth=8|16 Output bit depth per channel (default 8).\n"), N_("--create-id=no|also|only\n" " Create no|also|only ID file (default no).\n"), N_("--compression=VALUE JPEG compression (0-100, default 85).\n"), N_("--[no]exif Embed EXIF in output (default embed EXIF).\n"), N_("--[no]zip Enable [disable] TIFF zip compression (default nozip).\n"), N_("--embedded-image Extract the preview image embedded in the raw file\n" " instead of converting the raw image. This option\n" " is only valid with 'ufraw-batch'.\n"), N_("--rotate=camera|ANGLE|no\n" " Rotate image to camera's setting, by ANGLE degrees\n" " clockwise, or do not rotate the image (default camera).\n"), N_("--crop-(left|right|top|bottom)=PIXELS\n" " Crop the output to the given pixel range, relative to the\n" " raw image after rotation but before any scaling.\n"), N_("--auto-crop Crop the output automatically.\n"), N_("--aspect-ratio X:Y Set crop area aspect ratio.\n"), #ifdef HAVE_LENSFUN N_("--lensfun=none|auto Do not apply lens correction or try to apply\n" " correction by auto-detecting the lens (default none).\n"), #endif N_("--out-path=PATH PATH for output file (default use input file's path).\n"), N_("--output=FILE Output file name, use '-' to output to stdout.\n"), N_("--darkframe=FILE Use FILE for raw darkframe subtraction.\n"), N_("--overwrite Overwrite existing files without asking (default no).\n"), N_("--maximize-window Force window to be maximized.\n"), N_("--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n"), "\n", N_("UFRaw first reads the setting from the resource file $HOME/.ufrawrc.\n" "Then, if an ID file is specified, its setting are read. Next, the setting from\n" "the --conf option are taken, ignoring input/output filenames in the ID file.\n" "Lastly, the options from the command line are set. In batch mode, the second\n" "group of options is NOT read from the resource file.\n"), "\n", N_("Last, but not least, --version displays the version number and compilation\n" "options for ufraw and --help displays this help message and exits.\n"), "END" }; char versionText[] = "%s " VERSION "\n" "EXIV2 " #ifdef HAVE_EXIV2 "enabled.\n" #else "disabled.\n" #endif "JPEG " #ifdef HAVE_LIBJPEG "enabled.\n" #else "disabled.\n" #endif "JPEG2000 (libjasper) " #ifdef HAVE_LIBJASPER "enabled.\n" #else "disabled.\n" #endif "TIFF " #ifdef HAVE_LIBTIFF "enabled.\n" #else "disabled.\n" #endif "PNG " #ifdef HAVE_LIBPNG "enabled.\n" #else "disabled.\n" #endif "FITS " #ifdef HAVE_LIBCFITSIO "enabled.\n" #else "disabled.\n" #endif "ZIP " #ifdef HAVE_LIBZ "enabled.\n" #else "disabled.\n" #endif "BZIP2 " #ifdef HAVE_LIBBZ2 "enabled.\n" #else "disabled.\n" #endif "LENSFUN " #ifdef HAVE_LENSFUN "enabled.\n" #else "disabled.\n" #endif ""; /* ufraw_process_args returns values: * -1 : an error occurred. * 0 : --help or --version text were printed. * optint : the index in argv of the first argv-element that is not an option. */ int ufraw_process_args(int *argc, char ***argv, conf_data *cmd, conf_data *rc) { cmd->ufobject = ufraw_command_line_new(); UFObject *cmdImage = ufgroup_element(cmd->ufobject, ufRawImage); int index = 0, c, i; char *base, *locale; char *baseCurveName = NULL, *baseCurveFile = NULL, *curveName = NULL, *curveFile = NULL, *outTypeName = NULL, *rotateName = NULL, *createIDName = NULL, *outPath = NULL, *output = NULL, *conf = NULL, *interpolationName = NULL, *darkframeFile = NULL, *restoreName = NULL, *clipName = NULL, *grayscaleName = NULL, *grayscaleMixer = NULL; static const struct option options[] = { { "wb", 1, 0, 'w'}, { "temperature", 1, 0, 't'}, { "green", 1, 0, 'g'}, #ifdef HAVE_LENSFUN { "lensfun", 1, 0, 'A'}, #endif { "base-curve", 1, 0, 'B'}, { "base-curve-file", 1, 0, 'S'}, { "curve", 1, 0, 'c'}, { "curve-file", 1, 0, 'f'}, { "gamma", 1, 0, 'G'}, { "linearity", 1, 0, 'L'}, { "saturation", 1, 0, 's'}, { "hotpixel-sensitivity", 1, 0, 'H'}, #ifdef UFRAW_CONTRAST { "contrast", 1, 0, 'y'}, #endif { "wavelet-denoising-threshold", 1, 0, 'n'}, { "exposure", 1, 0, 'e'}, { "black-point", 1, 0, 'k'}, { "interpolation", 1, 0, 'i'}, { "grayscale", 1, 0, 'Y'}, { "grayscale-mixer", 1, 0, 'a'}, { "shrink", 1, 0, 'x'}, { "size", 1, 0, 'X'}, { "compression", 1, 0, 'j'}, { "out-type", 1, 0, 'T'}, { "out-depth", 1, 0, 'd'}, { "rotate", 1, 0, 'R'}, { "create-id", 1, 0, 'I'}, { "out-path", 1, 0, 'p'}, { "output", 1, 0, 'o'}, { "darkframe", 1, 0, 'D'}, { "restore", 1, 0, 'r'}, { "clip", 1, 0, 'u'}, { "conf", 1, 0, 'C'}, { "crop-left", 1, 0, '1'}, { "crop-top", 1, 0, '2'}, { "crop-right", 1, 0, '3'}, { "crop-bottom", 1, 0, '4'}, { "aspect-ratio", 1, 0, 'P'}, /* Binary flags that don't have a value are here at the end */ { "zip", 0, 0, 'z'}, { "nozip", 0, 0, 'Z'}, { "overwrite", 0, 0, 'O'}, { "color-smoothing", 0, 0, 'M' }, { "maximize-window", 0, 0, 'W'}, { "exif", 0, 0, 'E'}, { "noexif", 0, 0, 'F'}, { "embedded-image", 0, 0, 'm'}, { "silent", 0, 0, 'q'}, { "help", 0, 0, 'h'}, { "version", 0, 0, 'v'}, { "batch", 0, 0, 'b'}, { "auto-crop", 0, 0, '0'}, { 0, 0, 0, 0} }; UFObject *tmpImage = ufraw_image_new(); void *optPointer[] = { ufgroup_element(tmpImage, ufWB), ufgroup_element(tmpImage, ufTemperature), ufgroup_element(tmpImage, ufGreen), #ifdef HAVE_LENSFUN ufgroup_element(tmpImage, ufLensfunAuto), #endif &baseCurveName, &baseCurveFile, &curveName, &curveFile, &cmd->profile[0][0].gamma, &cmd->profile[0][0].linear, &cmd->saturation, &cmd->hotpixel, #ifdef UFRAW_CONTRAST &cmd->contrast, #endif &cmd->threshold, &cmd->exposure, &cmd->black, &interpolationName, &grayscaleName, &grayscaleMixer, &cmd->shrink, &cmd->size, &cmd->compression, &outTypeName, &cmd->profile[1][0].BitDepth, &rotateName, &createIDName, &outPath, &output, &darkframeFile, &restoreName, &clipName, &conf, &cmd->CropX1, &cmd->CropY1, &cmd->CropX2, &cmd->CropY2, &cmd->aspectRatio }; cmd->autoExposure = disabled_state; cmd->autoBlack = disabled_state; cmd->losslessCompress = -1; cmd->overwrite = -1; cmd->WindowMaximized = -1; cmd->embedExif = -1; cmd->profile[1][0].BitDepth = -1; cmd->embeddedImage = FALSE; cmd->silent = FALSE; cmd->profile[0][0].gamma = NULLF; cmd->profile[0][0].linear = NULLF; cmd->hotpixel = NULLF; #ifdef UFRAW_CONTRAST cmd->contrast = NULLF; #endif cmd->saturation = NULLF; cmd->black = NULLF; cmd->threshold = NULLF; cmd->exposure = NULLF; cmd->shrink = NULLF; cmd->size = NULLF; cmd->compression = NULLF; cmd->rotationAngle = NULLF; cmd->CropX1 = -1; cmd->CropY1 = -1; cmd->CropX2 = -1; cmd->CropY2 = -1; cmd->autoCrop = -1; cmd->aspectRatio = 0.0; cmd->rotate = -1; cmd->smoothing = -1; while (1) { c = getopt_long(*argc, *argv, "h", options, &index); if (c == -1) break; switch (c) { case 'w': // --wb case 't': // --temperature case 'g': // --green case 'A': // --lensfun locale = uf_set_locale_C(); if (!ufobject_set_string(optPointer[index], optarg)) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid value for the --%s option."), optarg, options[index].name); uf_reset_locale(locale); return -1; } uf_reset_locale(locale); if (!ufgroup_add(cmdImage, optPointer[index])) return -1; break; case 'e': if (!strcmp(optarg, "auto")) { cmd->autoExposure = apply_state; break; } case 'k': if (!strcmp(optarg, "auto")) { cmd->autoBlack = apply_state; break; } case 'G': case 'L': case 's': case 'H': #ifdef UFRAW_CONTRAST case 'y': #endif case 'n': locale = uf_set_locale_C(); if (sscanf(optarg, "%lf", (double *)optPointer[index]) == 0) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid value for the --%s option."), optarg, options[index].name); uf_reset_locale(locale); return -1; } uf_reset_locale(locale); break; case 'x': case 'X': case 'j': case 'd': case '1': case '2': case '3': case '4': locale = uf_set_locale_C(); if (sscanf(optarg, "%d", (int *)optPointer[index]) == 0) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid value for the --%s option."), optarg, options[index].name); uf_reset_locale(locale); return -1; } uf_reset_locale(locale); break; case 'B': case 'S': case 'c': case 'f': case 'i': case 'T': case 'R': case 'I': case 'p': case 'o': case 'D': case 'C': case 'r': case 'u': case 'Y': case 'a': *(char **)optPointer[index] = optarg; break; case 'O': cmd->overwrite = TRUE; break; case 'W': cmd->WindowMaximized = TRUE; break; case 'm': cmd->embeddedImage = TRUE; break; case 'M': cmd->smoothing = TRUE; break; case 'q': cmd->silent = TRUE; break; case 'z': #ifdef HAVE_LIBZ cmd->losslessCompress = TRUE; break; #else ufraw_message(UFRAW_ERROR, _("ufraw was build without ZIP support.")); return -1; #endif case 'Z': cmd->losslessCompress = FALSE; break; case 'E': cmd->embedExif = TRUE; break; case 'F': cmd->embedExif = FALSE; break; case 'h': for (i = 0; strcmp(helpText[i], "END") != 0; i++) ufraw_message(UFRAW_SET_WARNING, _(helpText[i])); ufraw_message(UFRAW_WARNING, ufraw_message(UFRAW_GET_WARNING, NULL)); return 0; case 'v': base = g_path_get_basename(*argv[0]); ufraw_message(UFRAW_WARNING, versionText, base); g_free(base); return 0; case 'b': ufraw_message(UFRAW_ERROR, _("--batch is obsolete. Use 'ufraw-batch' instead.")); return -1; case '0': cmd->autoCrop = enabled_state; break; case 'P': { double num = 0.0, denom = 1.0; locale = uf_set_locale_C(); if (sscanf(optarg, "%lf:%lf", &num, &denom) < 2 && sscanf(optarg, "%lf/%lf", &num, &denom) < 2 && sscanf(optarg, "%lf", &num) == 0) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid value for the --%s option."), optarg, options[index].name); uf_reset_locale(locale); return -1; } *(double *)optPointer[index] = num / denom; uf_reset_locale(locale); } break; case '?': /* invalid option. Warning printed by getopt() */ return -1; default: ufraw_message(UFRAW_ERROR, _("getopt returned " "character code 0%o ??"), c); return -1; } } cmd->BaseCurveIndex = -1; if (baseCurveFile != NULL) { baseCurveFile = uf_win32_locale_to_utf8(baseCurveFile); if (cmd->BaseCurveCount == max_curves) { ufraw_message(UFRAW_ERROR, _("failed to load curve from %s, " "too many configured base curves"), baseCurveFile); uf_win32_locale_free(baseCurveFile); return -1; } cmd->BaseCurveIndex = cmd->BaseCurveCount; if (curve_load(&(rc->BaseCurve[cmd->BaseCurveIndex]), baseCurveFile) == UFRAW_ERROR) { ufraw_message(UFRAW_ERROR, _("failed to load curve from %s"), baseCurveFile); uf_win32_locale_free(baseCurveFile); return -1; } uf_win32_locale_free(baseCurveFile); cmd->BaseCurveCount++; } else if (baseCurveName != NULL) { if (!strcmp(baseCurveName, "manual")) cmd->BaseCurveIndex = manual_curve; else if (!strcmp(baseCurveName, "linear")) cmd->BaseCurveIndex = linear_curve; else if (!strcmp(baseCurveName, "custom")) cmd->BaseCurveIndex = custom_curve; else if (!strcmp(baseCurveName, "camera")) cmd->BaseCurveIndex = camera_curve; else { cmd->BaseCurveIndex = -1; for (i = camera_curve + 1; i < rc->BaseCurveCount; i++) { if (!strcmp(baseCurveName, rc->BaseCurve[i].name)) { cmd->BaseCurveIndex = i; break; } } if (cmd->BaseCurveIndex == -1) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid base curve name."), baseCurveName); return -1; } } } cmd->curveIndex = -1; if (curveFile != NULL) { curveFile = uf_win32_locale_to_utf8(curveFile); if (cmd->curveCount == max_curves) { ufraw_message(UFRAW_ERROR, _("failed to load curve from %s, " "too many configured curves"), curveFile); uf_win32_locale_free(curveFile); return -1; } cmd->curveIndex = cmd->curveCount; if (curve_load(&(rc->curve[cmd->curveIndex]), curveFile) == UFRAW_ERROR) { ufraw_message(UFRAW_ERROR, _("failed to load curve from %s"), curveFile); uf_win32_locale_free(curveFile); return -1; } uf_win32_locale_free(curveFile); cmd->curveCount++; } else if (curveName != NULL) { if (!strcmp(curveName, "manual")) cmd->curveIndex = manual_curve; else if (!strcmp(curveName, "linear")) cmd->curveIndex = linear_curve; else { cmd->curveIndex = -1; for (i = linear_curve + 1; i < rc->curveCount; i++) { if (!strcmp(curveName, rc->curve[i].name)) { cmd->curveIndex = i; break; } } if (cmd->curveIndex == -1) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid curve name."), curveName); return -1; } } } cmd->interpolation = -1; if (interpolationName != NULL) { /* Keep compatebility with old numbers from ufraw-0.5 */ /*if (!strcmp(interpolationName, "full")) cmd->interpolation = vng_interpolation; else if (!strcmp(interpolationName, "quick")) cmd->interpolation = bilinear_interpolation; else */ cmd->interpolation = conf_find_name(interpolationName, interpolationNames, -1); // "eahd" is being silently supported since ufraw-0.13. if (cmd->interpolation < 0 || cmd->interpolation == half_interpolation) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid interpolation option."), interpolationName); return -1; } } if (cmd->smoothing != -1) { if (cmd->interpolation == ahd_interpolation) cmd->smoothing = 3; else cmd->smoothing = 1; } cmd->grayscaleMode = -1; cmd->grayscaleMixerDefined = 0; if (grayscaleName != NULL) { cmd->grayscaleMode = conf_find_name(grayscaleName, grayscaleModeNames, grayscale_invalid); if (cmd->grayscaleMode == grayscale_invalid) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid grayscale option."), grayscaleName); return -1; } if (cmd->grayscaleMode == grayscale_mixer) { if (grayscaleMixer != NULL) { double red, green, blue; if (sscanf(grayscaleMixer, "%lf,%lf,%lf", &red, &green, &blue) != 3) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid grayscale-mixer option."), grayscaleMixer); return -1; } cmd->grayscaleMixerDefined = 1; cmd->grayscaleMixer[0] = red; cmd->grayscaleMixer[1] = green; cmd->grayscaleMixer[2] = blue; } } } cmd->restoreDetails = -1; if (restoreName != NULL) { cmd->restoreDetails = conf_find_name(restoreName, restoreDetailsNames, -1); if (cmd->restoreDetails < 0) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid restore option."), restoreName); return -1; } } cmd->clipHighlights = -1; if (clipName != NULL) { cmd->clipHighlights = conf_find_name(clipName, clipHighlightsNames, -1); if (cmd->clipHighlights < 0) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid clip option."), clipName); return -1; } } if (cmd->shrink != NULLF && cmd->size != NULLF) { ufraw_message(UFRAW_ERROR, _("you can not specify both --shrink and --size")); return -1; } if (cmd->profile[1][0].BitDepth != -1) { if (cmd->profile[1][0].BitDepth != 8 && cmd->profile[1][0].BitDepth != 16) { ufraw_message(UFRAW_ERROR, _("'%d' is not a valid bit depth."), cmd->profile[1][0].BitDepth); return -1; } } cmd->type = -1; if (outTypeName != NULL && !cmd->embeddedImage) { if (strcmp(outTypeName, "ppm") == 0) { cmd->type = ppm_type; } else if (strcmp(outTypeName, "ppm8") == 0) { cmd->type = ppm_type; cmd->profile[1][0].BitDepth = 8; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } else if (strcmp(outTypeName, "ppm16") == 0) { cmd->type = ppm_type; cmd->profile[1][0].BitDepth = 16; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } #ifdef HAVE_LIBCFITSIO else if (strcmp(outTypeName, "fits") == 0) { cmd->type = fits_type; } #endif else if (!strcmp(outTypeName, "tiff") || !strcmp(outTypeName, "tif")) #ifdef HAVE_LIBTIFF { cmd->type = tiff_type; } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without TIFF support.")); return -1; } #endif else if (!strcmp(outTypeName, "tiff8")) #ifdef HAVE_LIBTIFF { cmd->type = tiff_type; cmd->profile[1][0].BitDepth = 8; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without TIFF support.")); return -1; } #endif else if (!strcmp(outTypeName, "tiff16")) #ifdef HAVE_LIBTIFF { cmd->type = tiff_type; cmd->profile[1][0].BitDepth = 16; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without TIFF support.")); return -1; } #endif else if (!strcmp(outTypeName, "jpeg") || !strcmp(outTypeName, "jpg")) #ifdef HAVE_LIBJPEG cmd->type = jpeg_type; #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without JPEG support.")); return -1; } #endif else if (!strcmp(outTypeName, "png")) #ifdef HAVE_LIBPNG { cmd->type = png_type; } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without PNG support.")); return -1; } #endif else if (!strcmp(outTypeName, "png8")) #ifdef HAVE_LIBPNG { cmd->type = png_type; cmd->profile[1][0].BitDepth = 8; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without PNG support.")); return -1; } #endif else if (!strcmp(outTypeName, "png16")) #ifdef HAVE_LIBPNG { cmd->type = png_type; cmd->profile[1][0].BitDepth = 16; ufraw_message(UFRAW_WARNING, _("Output type '%s' is deprecated"), outTypeName); } #else { ufraw_message(UFRAW_ERROR, _("ufraw was build without PNG support.")); return -1; } #endif else { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid output type."), outTypeName); return -1; } } if (cmd->embeddedImage) { #ifndef HAVE_LIBJPEG ufraw_message(UFRAW_ERROR, _("ufraw was build without JPEG support.")); return -1; #endif if (outTypeName == NULL || !strcmp(outTypeName, "jpeg") || !strcmp(outTypeName, "jpg")) cmd->type = embedded_jpeg_type; #ifdef HAVE_LIBPNG else if (strcmp(outTypeName, "png") == 0) cmd->type = embedded_png_type; #endif else { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid output type for embedded image."), outTypeName); return -1; } if (cmd->profile[1][0].BitDepth != -1 && cmd->profile[1][0].BitDepth != 8) { ufraw_message(UFRAW_ERROR, _("'%d' is not a valid bit depth for embedded image."), cmd->profile[1][0].BitDepth); return -1; } } if (rotateName != NULL) { if (strcmp(rotateName, "camera") == 0) cmd->rotate = TRUE; else if (strcmp(rotateName, "no") == 0) cmd->rotate = FALSE; else if (sscanf(rotateName, "%lf", &cmd->rotationAngle) == 1) { cmd->rotate = TRUE; } else { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid rotate option."), rotateName); return -1; } } cmd->createID = -1; if (createIDName != NULL) { if (!strcmp(createIDName, "no")) cmd->createID = no_id; else if (!strcmp(createIDName, "also")) cmd->createID = also_id; else if (!strcmp(createIDName, "only")) cmd->createID = only_id; else { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid create-id option."), createIDName); return -1; } } g_strlcpy(cmd->outputPath, "", max_path); if (outPath != NULL) { outPath = uf_win32_locale_to_utf8(outPath); if (g_file_test(outPath, G_FILE_TEST_IS_DIR)) { g_strlcpy(cmd->outputPath, outPath, max_path); uf_win32_locale_free(outPath); } else { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid path."), outPath); uf_win32_locale_free(outPath); return -1; } } g_strlcpy(cmd->outputFilename, "", max_path); if (output != NULL) { if (*argc - optind > 1) { ufraw_message(UFRAW_ERROR, _("cannot output more than one file to the same output")); return -1; } output = uf_win32_locale_to_utf8(output); g_strlcpy(cmd->outputFilename, output, max_path); uf_win32_locale_free(output); } g_strlcpy(cmd->darkframeFile, "", max_path); cmd->darkframe = NULL; if (darkframeFile != NULL) { darkframeFile = uf_win32_locale_to_utf8(darkframeFile); char *df = uf_file_set_absolute(darkframeFile); uf_win32_locale_free(darkframeFile); g_strlcpy(cmd->darkframeFile, df, max_path); g_free(df); } /* cmd->inputFilename is used to store the conf file */ g_strlcpy(cmd->inputFilename, "", max_path); if (conf != NULL) g_strlcpy(cmd->inputFilename, conf, max_path); ufobject_delete(tmpImage); return optind; } ufraw-0.19.2/ufraw-mime.xml0000664000175000017500000001623612115264507012460 00000000000000 UFRaw ID file UFRaw Unidentified Flying Raw Digital raw image DCRaw Digital Camera Raw Adobe Digital Negative DNG Digital Negative Canon raw image CRW Canon RaW Canon raw image CR2 Canon Raw 2 Fuji raw image RAF RAw Format Kodak raw image DCR Digital Camera Raw Kodak raw image K25 Kodak DC25 Kodak raw image KDC Kodak Digital Camera Minolta raw image MRW Minolta RaW Nikon raw image NEF Nikon Electronic Format Nikon raw image NRW Nikon RaW Olympus raw image ORF Olympus Raw Format Panasonic raw image RAW Panasonic RAW <_comment>Panasonic raw2 image RW2 Panasonic RaW format 2 Pentax raw image PEF Pentax Electronic Format Sigma raw image X3F X3 Foveon SRF Sony Raw Format Sony raw image SR2 Sony Raw format 2 Sony raw image ARW Alpha RaW Sony raw image SRW Samsung RaW Samsung raw image ufraw-0.19.2/ufobject.cc0000664000175000017500000010035112115264507011765 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufobject.cc - UFObject C++ implementation and C interface. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufobject.h" #define G_LOG_DOMAIN "UFObject" #include #include #include // for strcmp #include // for sscanf #include // for pow, log, floor #include // for std::max #include // for std::map #include // for std::logic_error #include // for std::bad_cast #include // for std::numeric_limits::quiet_NaN() /***************************\ * UFObject implementation * \***************************/ class _UFObject { public: const UFName Name; void *UserData; char *String; class _UFGroup *Parent; UFEventHandle *EventHandle; explicit _UFObject(UFName name) : Name(name), UserData(NULL), String(NULL), Parent(NULL), EventHandle(NULL) { } virtual ~_UFObject() { g_free(String); if (Parent != NULL) g_warning("%s: Destroyed while having a parent.", Name); } virtual bool Changing() const; virtual void SetChanging(bool state); void CallValueChangedEvent(UFObject *that) { bool saveChanging = Changing(); if (!Changing()) { SetChanging(true); that->OriginalValueChangedEvent(); } that->Event(uf_value_changed); SetChanging(saveChanging); } }; UFObject::UFObject(_UFObject *object) : ufobject(object) { } UFObject::~UFObject() { Event(uf_destroyed); delete ufobject; } UFName UFObject::Name() const { return ufobject->Name; } void UFObject::SetUserData(void *userData) { ufobject->UserData = userData; Event(uf_user_data_set); } void *UFObject::UserData() { return ufobject->UserData; } UFObject::operator class UFNumber&() { return dynamic_cast(*this); } UFObject::operator const class UFNumber&() const { return dynamic_cast(*this); } UFObject::operator class UFNumberArray&() { return dynamic_cast(*this); } UFObject::operator const class UFNumberArray&() const { return dynamic_cast(*this); } UFObject::operator class UFString&() { return dynamic_cast(*this); } UFObject::operator const class UFString&() const { return dynamic_cast(*this); } UFObject::operator class UFGroup&() { return dynamic_cast(*this); } UFObject::operator const class UFGroup&() const { return dynamic_cast(*this); } UFObject::operator class UFArray&() { return dynamic_cast(*this); } UFObject::operator const class UFArray&() const { return dynamic_cast(*this); } bool UFObject::HasParent() const { return ufobject->Parent != NULL; } const char *UFObject::StringValue() const { return ufobject->String; } std::string UFObject::XML(const char *indent) const { if (IsDefault()) return ""; char *value = g_markup_escape_text(StringValue(), -1); std::string str = (std::string)indent + "<" + Name() + ">" + value + "\n"; g_free(value); return str; } void UFObject::Message(const char *format, ...) const { if (format == NULL) return; va_list ap; va_start(ap, format); char *message = g_strdup_vprintf(format, ap); va_end(ap); if (HasParent()) { Parent().Message("%s: %s", Name(), message); } else { fprintf(stderr, "%s: %s\n", Name(), message); } g_free(message); } void UFObject::Throw(const char *format, ...) const { if (format == NULL) return; va_list ap; va_start(ap, format); char *message = g_strdup_vprintf(format, ap); va_end(ap); std::string mess(message); g_free(message); throw UFException(mess); } void UFObject::SetEventHandle(UFEventHandle *handle) { ufobject->EventHandle = handle; } void UFObject::Event(UFEventType type) { if (ufobject->EventHandle != NULL) (*ufobject->EventHandle)(this, type); if (type == uf_value_changed && HasParent()) Parent().Event(type); } void UFObject::OriginalValueChangedEvent() { } /***************************\ * UFNumber implementation * \***************************/ class _UFNumberCommon : public _UFObject { public: double Minimum; double Maximum; const int AccuracyDigits; const double Accuracy; const double Step; const double Jump; _UFNumberCommon(UFName name, double minimum, double maximum, int accuracyDigits, double step, double jump) : _UFObject(name), Minimum(minimum), Maximum(maximum), AccuracyDigits(std::max(accuracyDigits < 0 ? 3 - (int)floor(log(Maximum - Minimum) / log(10.0)) : accuracyDigits, 0)), Accuracy(pow(10.0, -AccuracyDigits)), Step(step == 0.0 ? Accuracy * 10.0 : step), Jump(jump == 0.0 ? Step * 10.0 : jump) { } }; class _UFNumber : public _UFNumberCommon { public: double Number; double Default; _UFNumber(UFName name, double defaultValue, double minimum, double maximum, int accuracyDigits, double step, double jump) : _UFNumberCommon(name, minimum, maximum, accuracyDigits, step, jump), Number(defaultValue), Default(defaultValue) { } }; #define ufnumber (static_cast<_UFNumber *>(ufobject)) UFNumber::UFNumber(UFName name, double minimum, double maximum, double defaultValue, int accuracyDigits, double step, double jump) : UFObject(new _UFNumber(name, defaultValue, minimum, maximum, accuracyDigits, step, jump)) { } const char *UFNumber::StringValue() const { g_free(ufnumber->String); ufnumber->String = g_strdup_printf("%.*f", ufnumber->AccuracyDigits, ufnumber->Number); return ufnumber->String; } double UFNumber::DoubleValue() const { return ufnumber->Number; } void UFNumber::Set(const UFObject &object) { if (this == &object) // Avoid self-assignment return; // We are comparing the strings ADDRESSes not values. if (Name() != object.Name()) Throw("Object name mismatch with '%s'", object.Name()); const UFNumber &number = object; Set(number.DoubleValue()); } void UFNumber::Set(const char *string) { double number; int count = sscanf(string, "%lf", &number); if (count != 1) Throw("String '%s' is not a number", string); Set(number); } void UFNumber::Set(double number) { if (number > Maximum()) { Message(_("Value %.*f too large, truncated to %.*f."), AccuracyDigits(), number, AccuracyDigits(), Maximum()); number = Maximum(); } else if (number < Minimum()) { Message(_("Value %.*f too small, truncated to %.*f."), AccuracyDigits(), number, AccuracyDigits(), Minimum()); number = Minimum(); } if (!this->IsEqual(number)) { ufnumber->Number = number; ufnumber->CallValueChangedEvent(this); } // When numbers are equal up to Accuracy, we still want the new value ufnumber->Number = number; } bool UFNumber::IsDefault() const { return this->IsEqual(ufnumber->Default); } void UFNumber::SetDefault() { ufnumber->Default = ufnumber->Number; Event(uf_default_changed); } void UFNumber::Reset() { Set(ufnumber->Default); } bool UFNumber::IsEqual(double number) const { int oldValue = floor(ufnumber->Number / ufnumber->Accuracy + 0.5); int newValue = floor(number / ufnumber->Accuracy + 0.5); return oldValue == newValue; } double UFNumber::Minimum() const { return ufnumber->Minimum; } double UFNumber::Maximum() const { return ufnumber->Maximum; } int UFNumber::AccuracyDigits() const { return ufnumber->AccuracyDigits; } double UFNumber::Step() const { return ufnumber->Step; } double UFNumber::Jump() const { return ufnumber->Jump; } /********************************\ * UFNumberArray implementation * \********************************/ class _UFNumberArray : public _UFNumberCommon { public: const int Size; double *const Array; double *const Default; _UFNumberArray(UFName name, int size, double minimum, double maximum, double defaultValue, int accuracyDigits, double step, double jump) : _UFNumberCommon(name, minimum, maximum, accuracyDigits, step, jump), Size(size), Array(new double[size]), Default(new double[size]) { for (int i = 0; i < size; i++) Array[i] = defaultValue; for (int i = 0; i < size; i++) Default[i] = defaultValue; } ~_UFNumberArray() { delete [] Array; delete [] Default; } bool SilentChange(UFNumberArray *that, int index, double number) { if (index < 0 || index >= Size) that->Throw("index (%d) out of range 0..%d", index, Size - 1); if (number > Maximum) { that->Message(_("Value %.*f too large, truncated to %.*f."), AccuracyDigits, number, AccuracyDigits, Maximum); number = Maximum; } else if (number < Minimum) { that->Message(_("Value %.*f too small, truncated to %.*f."), AccuracyDigits, number, AccuracyDigits, Minimum); number = Minimum; } if (!that->IsEqual(index, number)) { Array[index] = number; return true; } // When numbers are equal up to Accuracy, we still want the new value Array[index] = number; return false; } }; #define ufnumberarray (static_cast<_UFNumberArray *>(ufobject)) #define _uf_max_string 80 UFNumberArray::UFNumberArray(UFName name, int size, double minimum, double maximum, double defaultValue, int accuracyDigits, double step, double jump) : UFObject(new _UFNumberArray(name, size, minimum, maximum, defaultValue, accuracyDigits, step, jump)) { } const char *UFNumberArray::StringValue() const { g_free(ufnumberarray->String); std::string str = ""; char num[_uf_max_string]; for (int i = 0; i < Size(); i++) { g_snprintf(num, _uf_max_string, "%.*f", ufnumberarray->AccuracyDigits, ufnumberarray->Array[i]); str += num; if (i < Size() - 1) str += " "; } ufnumberarray->String = g_strdup(str.c_str()); return ufnumberarray->String; } double UFNumberArray::DoubleValue(int index) const { if (index < 0 || index >= Size()) Throw("index (%d) out of range 0..%d", index, Size() - 1); return ufnumberarray->Array[index]; } void UFNumberArray::Set(const UFObject &object) { if (this == &object) // Avoid self-assignment return; // We are comparing the strings ADDRESSes not values. if (Name() != object.Name()) Throw("Object name mismatch with '%s'", object.Name()); const UFNumberArray &array = object; if (Size() != array.Size()) Throw("Object size mismatch %d != %d", Size(), array.Size()); bool changed = false; for (int i = 0; i < Size(); i++) changed |= ufnumberarray->SilentChange(this, i, array.DoubleValue(i)); if (changed) ufnumberarray->CallValueChangedEvent(this); } void UFNumberArray::Set(const char *string) { char **token = g_strsplit(string, " ", Size()); for (int i = 0; i < Size(); i++) { if (token[i] == NULL) { Set(i, ufnumberarray->Default[i]); } else { double number; int count = sscanf(token[i], "%lf", &number); if (count != 1) Throw("String '%s' is not a number", string); Set(i, number); } } g_strfreev(token); } void UFNumberArray::Set(int index, double number) { bool changed = ufnumberarray->SilentChange(this, index, number); if (changed) ufnumberarray->CallValueChangedEvent(this); } void UFNumberArray::Set(const double array[]) { bool changed = false; for (int i = 0; i < Size(); i++) changed |= ufnumberarray->SilentChange(this, i, array[i]); if (changed) ufnumberarray->CallValueChangedEvent(this); } bool UFNumberArray::IsDefault() const { for (int i = 0; i < Size(); i++) if (!IsEqual(i, ufnumberarray->Default[i])) return false; return true; } void UFNumberArray::SetDefault() { for (int i = 0; i < Size(); i++) ufnumberarray->Default[i] = ufnumberarray->Array[i]; Event(uf_default_changed); } void UFNumberArray::Reset() { bool changed = false; for (int i = 0; i < Size(); i++) changed |= ufnumberarray->SilentChange(this, i, ufnumberarray->Default[i]); if (changed) ufnumberarray->CallValueChangedEvent(this); } bool UFNumberArray::IsEqual(int index, double number) const { if (index < 0 || index >= Size()) Throw("index (%d) out of range 0..%d", index, Size() - 1); int newValue = floor(number / ufnumberarray->Accuracy + 0.5); int oldValue = floor(ufnumberarray->Array[index] / ufnumberarray->Accuracy + 0.5); return oldValue == newValue; } int UFNumberArray::Size() const { return ufnumberarray->Size; } double UFNumberArray::Minimum() const { return ufnumberarray->Minimum; } double UFNumberArray::Maximum() const { return ufnumberarray->Maximum; } int UFNumberArray::AccuracyDigits() const { return ufnumberarray->AccuracyDigits; } double UFNumberArray::Step() const { return ufnumberarray->Step; } double UFNumberArray::Jump() const { return ufnumberarray->Jump; } /***************************\ * UFString implementation * \***************************/ class _UFString : public _UFObject { public: char *Default; _UFString(UFName name) : _UFObject(name) { } ~_UFString() { g_free(Default); } }; #define ufstring (static_cast<_UFString *>(ufobject)) UFString::UFString(UFName name, const char *defaultValue) : UFObject(new _UFString(name)) { ufstring->Default = g_strdup(defaultValue); ufstring->String = g_strdup(defaultValue); } void UFString::Set(const UFObject &object) { if (this == &object) // Avoid self-assignment return; // We are comparing the strings ADDRESSes not values. if (Name() != object.Name()) Throw("Object name mismatch with '%s'", object.Name()); Set(object.StringValue()); } void UFString::Set(const char *string) { if (this->IsEqual(string)) return; g_free(ufstring->String); ufstring->String = g_strdup(string); ufstring->CallValueChangedEvent(this); } bool UFString::IsDefault() const { return this->IsEqual(ufstring->Default); } void UFString::SetDefault(const char *string) { g_free(ufstring->Default); ufstring->Default = g_strdup(string); Event(uf_default_changed); } void UFString::SetDefault() { SetDefault(ufstring->String); } void UFString::Reset() { Set(ufstring->Default); } bool UFString::IsEqual(const char *string) const { // If the pointers are equal, the strings are equal if (ufstring->String == string) return true; if (ufstring->String == NULL) return false; return strcmp(ufstring->String, string) == 0; } /**************************\ * UFGroup implementation * \**************************/ class _UFNameCompare { public: bool operator()(char const *a, char const *b) const { return strcmp(a, b) < 0; } }; typedef std::map _UFGroupMap; typedef std::pair _UFObjectPair; class _UFGroup : public _UFObject { public: _UFGroupMap Map; UFGroupList List; UFGroup *const This; bool GroupChanging; // Index and Default Index are only used by UFArray int Index; char *DefaultIndex; _UFGroup(UFGroup *that, UFName name, const char *label) : _UFObject(name), This(that), GroupChanging(false), Index(-1), DefaultIndex(NULL) { String = g_strdup(label); } bool Changing() const { if (Parent != NULL) return Parent->Changing(); return GroupChanging; } void SetChanging(bool state) { if (Parent != NULL) Parent->SetChanging(state); else GroupChanging = state; } }; // The following UFObject methods can only be implemented after _UFGroup // is declared, since Parent is a _UFGroup object. bool _UFObject::Changing() const { if (Parent != NULL) return Parent->Changing(); return false; } void _UFObject::SetChanging(bool state) { if (Parent != NULL) Parent->SetChanging(state); } UFGroup &UFObject::Parent() const { if (ufobject->Parent == NULL) Throw("UFObject has not parent"); return *static_cast<_UFGroup*>(ufobject->Parent)->This; } #define ufgroup (static_cast<_UFGroup *>(ufobject)) // object is a and generally not a . // The cast to is needed for accessing ufobject. #define _UFGROUP_PARENT(object) static_cast(object)->ufobject->Parent UFGroup::UFGroup(UFName name, const char *label) : UFObject(new _UFGroup(this, name, label)) { } UFGroup::~UFGroup() { for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { _UFGROUP_PARENT(*iter) = NULL; delete *iter; } g_free(ufgroup->DefaultIndex); } static std::string _UFGroup_XML(const UFGroup &group, UFGroupList &list, const char *indent, const char *attribute) { if (group.IsDefault()) return ""; if (strcmp(attribute, "Index") == 0 && // If object is a UFArray and group.UFGroup::IsDefault()) { // all the array elements are default // Just print the value in a simple format. char *value = g_markup_escape_text(group.StringValue(), -1); std::string xml = (std::string)indent + "<" + group.Name() + ">" + value + "\n"; return xml; } std::string xml = ""; // For now, we don't want to surround the root XML with <[/]Image> tags. if (strlen(indent) != 0) { char *value = g_markup_escape_text(group.StringValue(), -1); if (value[0] == '\0') { xml += (std::string)indent + "<" + group.Name() + ">\n"; } else { xml += (std::string)indent + "<" + group.Name() + " " + attribute + "='" + value + "'>\n"; } g_free(value); } char *newIndent = static_cast(g_alloca(strlen(indent) + 3)); int i = 0; while (indent[i] != 0) { newIndent[i] = indent[i]; i++; } newIndent[i + 0] = ' '; newIndent[i + 1] = ' '; newIndent[i + 2] = '\0'; for (UFGroupList::iterator iter = list.begin(); iter != list.end(); iter++) xml += (*iter)->XML(newIndent); if (strlen(indent) != 0) xml += (std::string)indent + "\n"; return xml; } std::string UFGroup::XML(const char *indent) const { return _UFGroup_XML(*this, ufgroup->List, indent, "Label"); } void UFGroup::Set(const UFObject &object) { if (this == &object) // Avoid self-assignment return; // We are comparing the strings ADDRESSes not values. if (Name() != object.Name()) Throw("Object name mismatch with '%s'", object.Name()); const UFGroup &group = object; for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { if (group.Has((*iter)->Name())) (*iter)->Set(group[(*iter)->Name()]); } } void UFGroup::Set(const char * /*string*/) { Throw("UFGroup does not support string values"); } bool UFGroup::IsDefault() const { for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { if (!(*iter)->IsDefault()) return false; } return true; } void UFGroup::SetDefault() { for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { (*iter)->SetDefault(); } Event(uf_default_changed); } void UFGroup::Reset() { for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { (*iter)->Reset(); } } bool UFGroup::Has(UFName name) const { _UFGroupMap::iterator iter = ufgroup->Map.find(name); return iter != ufgroup->Map.end(); } UFObject &UFGroup::operator[](UFName name) { _UFGroupMap::iterator iter = ufgroup->Map.find(name); if (iter == ufgroup->Map.end()) Throw("No object with name '%s'", name); // out-of-range return *ufgroup->Map[name]; } const UFObject &UFGroup::operator[](UFName name) const { _UFGroupMap::iterator iter = ufgroup->Map.find(name); if (iter == ufgroup->Map.end()) { Throw("No object with name '%s'", name); // out-of-range } return *ufgroup->Map[name]; } const UFGroupList UFGroup::List() const { return ufgroup->List; } UFGroup &UFGroup::operator<<(UFObject *object) { _UFGroupMap::iterator iter = ufgroup->Map.find(object->Name()); if (iter != ufgroup->Map.end()) Throw("index '%s' already exists", object->Name()); ufgroup->Map.insert(_UFObjectPair(object->Name(), object)); ufgroup->List.push_back(object); if (object->HasParent()) { // Remove object from its original group //_UFGroup *parent = static_cast<_UFGroup *>(object->ufobject->Parent); _UFGroup *parent = static_cast<_UFGroup *>(object->Parent().ufobject); parent->Map.erase(object->Name()); for (UFGroupList::iterator iter = parent->List.begin(); iter != parent->List.end(); iter++) { if (*iter == object) { parent->List.erase(iter); break; } } } _UFGROUP_PARENT(object) = ufgroup; Event(uf_element_added); return *this; } UFObject &UFGroup::Drop(UFName name) { _UFGroupMap::iterator iter = ufgroup->Map.find(name); if (iter == ufgroup->Map.end()) Throw("index '%s' does not exists", name); UFObject *dropObject = (*iter).second; ufgroup->Map.erase(name); for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { if (*iter == dropObject) { ufgroup->List.erase(iter); break; } } _UFGROUP_PARENT(dropObject) = NULL; return *dropObject; } void UFGroup::Clear() { for (_UFGroupMap::iterator iter = ufgroup->Map.begin(); iter != ufgroup->Map.end(); iter++) { _UFGROUP_PARENT(iter->second) = NULL; delete iter->second; } ufgroup->Map.clear(); ufgroup->List.clear(); } // object is a and generally not a . // The cast to is needed for accessing ufobject. #define _UFARRAY_PARENT(object) static_cast(object)->ufobject->Parent UFArray::UFArray(UFName name, const char *defaultIndex) : UFGroup(name, defaultIndex) { ufgroup->DefaultIndex = g_strdup(defaultIndex); } std::string UFArray::XML(const char *indent) const { return _UFGroup_XML(*this, ufgroup->List, indent, "Index"); } void UFArray::Set(const UFObject &object) { if (this == &object) // Avoid self-assignment return; // We are comparing the strings ADDRESSes not values. if (Name() != object.Name()) Throw("Object name mismatch with '%s'", object.Name()); const UFArray &array = object; for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++) { if (array.Has((*iter)->StringValue())) (*iter)->Set(array[(*iter)->StringValue()]); } Set(array.StringValue()); } void UFArray::Set(const char *string) { if (this->IsEqual(string)) return; g_free(ufgroup->String); ufgroup->String = g_strdup(string); ufgroup->Index = -1; int i = 0; for (UFGroupList::iterator iter = ufgroup->List.begin(); iter != ufgroup->List.end(); iter++, i++) { if (IsEqual((*iter)->StringValue())) { ufgroup->Index = i; } } ufgroup->CallValueChangedEvent(this); } const char *UFArray::StringValue() const { return ufgroup->String; } bool UFArray::IsDefault() const { if (!IsEqual(ufgroup->DefaultIndex)) return false; return UFGroup::IsDefault(); } void UFArray::SetDefault(const char *string) { g_free(ufgroup->DefaultIndex); ufgroup->DefaultIndex = g_strdup(string); Event(uf_default_changed); } void UFArray::SetDefault() { g_free(ufgroup->DefaultIndex); ufgroup->DefaultIndex = g_strdup(ufgroup->String); Event(uf_default_changed); } void UFArray::Reset() { Set(ufgroup->DefaultIndex); UFGroup::Reset(); } bool UFArray::SetIndex(int index) { UFGroupList::iterator iter = ufgroup->List.begin(); std::advance(iter, index); if (iter == ufgroup->List.end()) return false; ufgroup->Index = index; Set((*iter)->StringValue()); return true; } int UFArray::Index() const { return ufgroup->Index; } bool UFArray::IsEqual(const char *string) const { // If the pointers are equal, the strings are equal if (ufgroup->String == string) return true; if (ufgroup->String == NULL || string == NULL) return false; return strcmp(ufstring->String, string) == 0; } UFArray &UFArray::operator<<(UFObject *object) { _UFGroupMap::iterator iter = ufgroup->Map.find(object->StringValue()); if (iter != ufgroup->Map.end()) Throw("index '%s' already exists", object->StringValue()); ufgroup->Map.insert(_UFObjectPair(object->StringValue(), object)); ufgroup->List.push_back(object); if (IsEqual(object->StringValue())) ufgroup->Index = ufgroup->List.size() - 1; if (object->HasParent()) { // Remove object from its original group. _UFGroup *parent = static_cast(object)->ufobject->Parent; // We assume that the previous parent was also a UFArray. parent->Map.erase(object->StringValue()); for (UFGroupList::iterator iter = parent->List.begin(); iter != parent->List.end(); iter++) { if (*iter == object) { parent->List.erase(iter); break; } } } _UFARRAY_PARENT(object) = ufgroup; Event(uf_element_added); return *this; } UFException::UFException(std::string &Message) : std::runtime_error(Message.c_str()) { } /******************************\ * C interface implementation * \******************************/ extern "C" { UFName ufobject_name(UFObject *object) { return object->Name(); } UFObject *ufobject_delete(UFObject *object) { delete object; return NULL; } UFObject *ufobject_parent(UFObject *object) { try { return &object->Parent(); } catch (UFException &e) { object->Message(e.what()); return NULL; } } const char *ufobject_string_value(UFObject *object) { return object->StringValue(); } UFBoolean ufobject_set_string(UFObject *object, const char *string) { try { object->Set(string); return true; } catch (UFException &e) { // Could be an string-is-not-a-number exception. // Caller should handle the message. return false; } } UFBoolean ufobject_copy(UFObject *destination, UFObject *source) { try { destination->Set(*source); return true; } catch (UFException &e) { destination->Message(e.what()); return false; } } char *ufobject_xml(UFObject *object, const char *indent) { std::string xml = object->XML(indent); return g_strdup(xml.c_str()); } void *ufobject_user_data(UFObject *object) { return object->UserData(); } void ufobject_set_user_data(UFObject *object, void *user_data) { object->SetUserData(user_data); } void ufobject_set_changed_event_handle(UFObject *object, UFEventHandle *handle) { object->SetEventHandle(handle); } UFBoolean ufobject_is_default(UFObject *object) { return object->IsDefault(); } void ufobject_set_default(UFObject *object) { object->SetDefault(); } double ufnumber_value(UFObject *object) { try { return dynamic_cast(*object).DoubleValue(); } catch (std::bad_cast &e) { object->Message(e.what()); return std::numeric_limits::quiet_NaN(); } } UFBoolean ufnumber_set(UFObject *object, double number) { try { dynamic_cast(object)->Set(number); return true; } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } double ufnumber_array_value(UFObject *object, int index) { try { return dynamic_cast(*object).DoubleValue(index); } catch (UFException &e) { object->Message(e.what()); return std::numeric_limits::quiet_NaN(); } catch (std::bad_cast &e) { object->Message(e.what()); return std::numeric_limits::quiet_NaN(); } } UFBoolean ufnumber_array_set(UFObject *object, const double array[]) { try { dynamic_cast(*object).Set(array); return true; } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } UFBoolean ufstring_is_equal(UFObject *object, const char *string) { try { return dynamic_cast(object)->IsEqual(string); } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } UFBoolean ufgroup_has(UFObject *object, UFName name) { try { return dynamic_cast(object)->Has(name); } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } UFObject *ufgroup_element(UFObject *object, UFName name) { try { UFObject &element = dynamic_cast(*object)[name]; return &element; } catch (UFException &e) { object->Message(e.what()); return NULL; } catch (std::bad_cast &e) { object->Message(e.what()); return NULL; } } UFBoolean ufgroup_add(UFObject *group, UFObject *object) { try { dynamic_cast(*group) << object; return true; } catch (UFException &e) { group->Message(e.what()); return false; } catch (std::bad_cast &e) { group->Message(e.what()); return false; } } UFObject *ufgroup_drop(UFObject *group, UFName name) { try { return &dynamic_cast(group)->Drop(name); } catch (UFException &e) { group->Message(e.what()); return NULL; } catch (std::bad_cast &e) { group->Message(e.what()); return NULL; } } UFBoolean ufarray_set_index(UFObject *object, int index) { try { return dynamic_cast(object)->SetIndex(index); } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } int ufarray_index(UFObject *object) { try { return dynamic_cast(object)->Index(); } catch (std::bad_cast &e) { object->Message(e.what()); return -2; } } UFBoolean ufarray_is_equal(UFObject *object, const char *string) { try { return dynamic_cast(object)->IsEqual(string); } catch (std::bad_cast &e) { object->Message(e.what()); return false; } } } // extern "C" ufraw-0.19.2/uf_gtk.h0000664000175000017500000000447512115264507011317 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_gtk.h - gtk compatibility header * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UF_GTK_H #define _UF_GTK_H #include #include #ifdef __cplusplus extern "C" { #endif // Create a GtkCheckButton with a label and a value that gets updated GtkWidget *uf_check_button_new(const char *label, gboolean *valuep); // Create a new ComboBox text with small width. // The widget must be added with GTK_EXPAND|GTK_FILL. GtkWidget *uf_combo_box_new_text(); // Append text with data to combo box void uf_combo_box_append_text(GtkComboBox *combo, const char *text, void *data); // activate combo box according to data or index, if there is no data void uf_combo_box_set_active(GtkComboBox *combo, int value); // remove combo box entry according to data or index, if there is no data void uf_combo_box_remove_text(GtkComboBox *combo, int value); // Set combo box data and keep it up to date void uf_combo_box_set_data(GtkComboBox *combo, int *valuep); // Get the display ICC profile of the monitor associated with the widget. void uf_get_display_profile(GtkWidget *widget, guint8 **buffer, gint *buffer_size); /* * The following functions create GtkWidgets for UFObjects. * These widgets are already created with callbacks, so that changes * in the widget value are applied to the UFObjects and vice-versa. */ GtkWidget *ufnumber_hscale_new(UFObject *object); GtkWidget *ufnumber_spin_button_new(UFObject *object); GtkWidget *ufnumber_array_hscale_new(UFObject *object, int index); GtkWidget *ufnumber_array_spin_button_new(UFObject *object, int index); GtkWidget *ufobject_reset_button_new(const char *tip); void ufobject_reset_button_add(GtkWidget *button, UFObject *object); GtkWidget *ufstring_entry_new(UFObject *object); GtkWidget *ufarray_combo_box_new(UFObject *object); GtkWidget *ufarray_combo_box_entry_new(UFObject *object); #ifdef __cplusplus } #endif #endif /*_UF_GTK_H*/ ufraw-0.19.2/nikon_curve.h0000664000175000017500000001455712115264507012364 00000000000000/*************************************************** nikon_curve.h - read Nikon NTC/NCV files Copyright 2004-2013 by Shawn Freeman, Udi Fuchs This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ****************************************************/ /*************************************************** This program reads in a Nikon NTC/NCV file, interperates it's tone curve, and writes out a simple ascii file containing a table of interpolation values. You'll note that this has been written in way that can be used in a standalone program or incorporated into another program. You can use the functions seperately or you can just call ConvertNikonCurveData with an input and output file. I've tried to document the code as clearly as possible. Let me know if you have any problems! Thanks goes out to Udi Fuchs for wanting to incorporate nikon curve loading into his program. This will make GIMP just that much better. :) @author: Shawn Freeman 1/06/2005 @liscense: GNU GPL ****************************************************/ #ifndef _NIKON_CURVE_H #define _NIKON_CURVE_H #define NC_VERSION "1.2" #define NC_DATE "2005-08-06" #define NIKON_MAX_ANCHORS 20 //file types #define NTC_FILE 0 #define NCV_FILE 1 #define NUM_FILE_TYPES 2 //Curve Types #define TONE_CURVE 0 #define RED_CURVE 1 #define GREEN_CURVE 2 #define BLUE_CURVE 3 #define NUM_CURVE_TYPES 4 //////////////////////// //ERROR HANDLING //////////////////////// #define NC_SUCCESS 0 #define NC_ERROR 100 #define NC_WARNING 104 #define NC_SET_ERROR 200 ////////////////////////////////////////////////////////////////////////////// //DATA STRUCTURES ////////////////////////////////////////////////////////////////////////////// /********************************************************** CurveData: Structure for the curve data inside a NTC/NCV file. ***********************************************************/ typedef struct { double x; double y; } CurveAnchorPoint; typedef struct { char name[80]; //Type for this curve unsigned int m_curveType; //Box data double m_min_x; double m_max_x; double m_min_y; double m_max_y; double m_gamma; //Number of anchor points unsigned char m_numAnchors; //contains a list of anchors, 2 doubles per each point, x-y format //max is 20 points CurveAnchorPoint m_anchors[NIKON_MAX_ANCHORS]; } CurveData; typedef struct { //Number of samples to use for the curve. unsigned int m_samplingRes; unsigned int m_outputRes; //Sampling array unsigned int *m_Samples; } CurveSample; /********************************************* NikonData: Overall data structure for Nikon file data **********************************************/ typedef struct { //Number of output points int m_fileType; unsigned short m_patch_version; CurveData curves[4]; } NikonData; ////////////////////////////////////////////////////////////////////////////// //FUNCTIONS ////////////////////////////////////////////////////////////////////////////// /********************************************* CurveDataSample: Samples from a spline curve constructed from the curve data. curve - Pointer to curve struct to hold the data. sample - Pointer to sample struct to hold the data. **********************************************/ int CurveDataSample(CurveData *curve, CurveSample *sample); /********************************************* * CurveDataReset: * Reset curve to straight line but don't touch the curve name. **********************************************/ void CurveDataReset(CurveData *curve); /********************************************* * CurveDataIsTrivial: * Check if the curve is a trivial linear curve. ***********************************************/ int CurveDataIsTrivial(CurveData *curve); /********************************************* CurveDataSetPoint: Change the position of point to the new (x,y) coordinate. The end-points get a special treatment. When these are moved all the other points are moved together, keeping their relative position constant. **********************************************/ void CurveDataSetPoint(CurveData *curve, int point, double x, double y); /******************************************************* CurveSampleInit: Init and allocate curve sample. ********************************************************/ CurveSample *CurveSampleInit(unsigned int samplingRes, unsigned int outputRes); /******************************************************* CurveSampleFree: Frees memory allocated for this curve sample. ********************************************************/ int CurveSampleFree(CurveSample *sample); /********************************************* LoadNikonData: Loads a curve from a Nikon ntc or ncv file. fileName - The filename. curve - Pointer to curve struct to hold the data. resolution - How many data points to sample from the curve **********************************************/ int LoadNikonData(char *fileName, NikonData *data); /************************************************************ SaveNikonDataFile: Savess a curve to a Nikon ntc or ncv file. data - A NikonData structure containing info of all the curves. fileName - The filename. filetype - Indicator for an NCV or NTC file. **************************************************************/ int SaveNikonDataFile(NikonData *data, char *outfile, int filetype); /******************************************************* RipNikonNEFCurve: The actual retriever for the curve data from the NEF file. file - The input file. infile - Offset to retrieve the data curve - data structure to hold curve in. sample_p - pointer to the curve sample reference. can be NULL if curve sample is not needed. ********************************************************/ int RipNikonNEFCurve(void *file, int offset, CurveData *data, CurveSample **sample_p); #endif ufraw-0.19.2/dcraw.h0000664000175000017500000002442712122217612011130 00000000000000/* dcraw.h - Dave Coffin's raw photo decoder - header for C++ adaptation Copyright 1997-2012 by Dave Coffin, dcoffin a cybercom o net Copyright 2004-2013 by Udi Fuchs, udifuchs a gmail o com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This is a adaptation of Dave Coffin's original dcraw.c to C++. It can work as either a command-line tool or called by other programs. */ #if !defined(uchar) #define uchar unsigned char #endif #if !defined(ushort) #define ushort unsigned short #endif /* * The following is somewhat ugly because of various requirements: * 1. The stand-alone dcraw binary should not depend on glib * 2. The amount of changes to dcraw source code should be minimal * 3. On win32 fopen needs to be replaced by g_fopen * 4. On other systems g_fopen is defined as a macro * 5. g_fopen only exists since glib 2.6 */ #if !defined(DCRAW_NOMAIN) && defined(_WIN32) #include extern "C" { #include } #define fopen g_fopen #endif class DCRaw { public: /* All dcraw's global variables are members of this class. */ FILE *ifp, *ofp; short order; /*const*/ char *ifname, *ifname_display; char *meta_data; char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; time_t timestamp; unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; off_t strip_offset, data_offset; off_t thumb_offset, meta_offset, profile_offset; unsigned thumb_length, meta_length, profile_length; unsigned thumb_misc, *oprof, fuji_layout, shot_select, multi_out; unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; unsigned black, cblack[4], maximum, mix_green, raw_color, zero_is_bad; unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; unsigned tile_width, tile_length, gpsdata[32], load_flags; ushort raw_height, raw_width, height, width, top_margin, left_margin; ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; ushort *raw_image, (*image)[4]; ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; int mask[8][4], flip, tiff_flip, colors; double pixel_aspect, aber[4], gamm[6]; float bright, user_mul[4], threshold; int half_size, four_color_rgb, document_mode, highlight; int verbose, use_auto_wb, use_camera_wb, use_camera_matrix; int output_color, output_bps, output_tiff, med_passes; int no_auto_bright; unsigned greybox[4]; float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; int histogram[4][0x2000]; void (DCRaw::*write_thumb)(), (DCRaw::*write_fun)(); void (DCRaw::*load_raw)(), (DCRaw::*thumb_load_raw)(); jmp_buf failure; struct decode { struct decode *branch[2]; int leaf; } first_decode[2048], *second_decode, *free_decode; struct tiff_ifd { int width, height, bps, comp, phint, offset, flip, samples, bytes; int tile_width, tile_length; } tiff_ifd[10]; struct ph1 { int format, key_off, black, black_off, split_col, tag_21a; float tag_210; } ph1; int tone_curve_size, tone_curve_offset; /* Nikon Tone Curves UF*/ int tone_mode_offset, tone_mode_size; /* Nikon ToneComp UF*/ /* Used by dcraw_message() */ char *messageBuffer; int lastStatus; unsigned ifpReadCount; unsigned ifpSize; unsigned ifpStepProgress; int eofCount; #define STEPS 50 void ifpProgress(unsigned readCount); // Override standard io function for integrity checks and progress report size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); char *fgets(char *s, int size, FILE *stream); int fgetc(FILE *stream); // dcraw only calls fscanf for single variables int fscanf(FILE *stream, const char *format, void *ptr); // calling with more variables would triger a link error //int fscanf(FILE *stream, const char *format, void *ptr1, void *ptr2, ...); /* Initialization of the variables is done here */ DCRaw(); ~DCRaw(); void dcraw_message(int code, const char *format, ...); /* All dcraw functions with the CLASS prefix are members of this class. */ int fcol(int row, int col); void merror(void *ptr, const char *where); void derror(); ushort sget2(uchar *s); ushort get2(); unsigned sget4(uchar *s); unsigned get4(); unsigned getint(int type); float int_to_float(int i); double getreal(int type); void read_shorts(ushort *pixel, unsigned count); void canon_600_fixed_wb(int temp); int canon_600_color(int ratio[2], int mar); void canon_600_auto_wb(); void canon_600_coeff(); void canon_600_load_raw(); void canon_600_correct(); int canon_s2is(); unsigned getbithuff(int nbits, ushort *huff); ushort * make_decoder_ref(const uchar **source); ushort * make_decoder(const uchar *source); void crw_init_tables(unsigned table, ushort *huff[2]); int canon_has_lowbits(); void canon_load_raw(); int ljpeg_start(struct jhead *jh, int info_only); void ljpeg_end(struct jhead *jh); int ljpeg_diff(ushort *huff); ushort * ljpeg_row(int jrow, struct jhead *jh); void lossless_jpeg_load_raw(); void canon_sraw_load_raw(); void adobe_copy_pixel(unsigned row, unsigned col, ushort **rp); void lossless_dng_load_raw(); void packed_dng_load_raw(); void pentax_load_raw(); void nikon_load_raw(); int nikon_e995(); int nikon_e2100(); void nikon_3700(); int minolta_z2(); void ppm_thumb(); void ppm16_thumb(); void layer_thumb(); void rollei_thumb(); void rollei_load_raw(); int raw(unsigned row, unsigned col); void phase_one_flat_field(int is_float, int nc); void phase_one_correct(); void phase_one_load_raw(); unsigned ph1_bithuff(int nbits, ushort *huff); void phase_one_load_raw_c(); void hasselblad_load_raw(); void leaf_hdr_load_raw(); void unpacked_load_raw(); void sinar_4shot_load_raw(); void imacon_full_load_raw(); void packed_load_raw(); void nokia_load_raw(); unsigned pana_bits(int nbits); void panasonic_load_raw(); void olympus_load_raw(); void minolta_rd175_load_raw(); void quicktake_100_load_raw(); void kodak_radc_load_raw(); void kodak_jpeg_load_raw(); void lossy_dng_load_raw(); void kodak_dc120_load_raw(); void eight_bit_load_raw(); void kodak_yrgb_load_raw(); void kodak_262_load_raw(); int kodak_65000_decode(short *out, int bsize); void kodak_65000_load_raw(); void kodak_ycbcr_load_raw(); void kodak_rgb_load_raw(); void kodak_thumb_load_raw(); void sony_decrypt(unsigned *data, int len, int start, int key); void sony_load_raw(); void sony_arw_load_raw(); void sony_arw2_load_raw(); void smal_decode_segment(unsigned seg[2][2], int holes); void smal_v6_load_raw(); int median4(int *p); void fill_holes(int holes); void smal_v9_load_raw(); void redcine_load_raw(); void foveon_decoder(unsigned size, unsigned code); void foveon_thumb(); void foveon_sd_load_raw(); void foveon_huff(ushort *huff); void foveon_dp_load_raw(); void foveon_load_camf(); const char * foveon_camf_param(const char *block, const char *param); void * foveon_camf_matrix(unsigned dim[3], const char *name); int foveon_fixed(void *ptr, int size, const char *name); float foveon_avg(short *pix, int range[2], float cfilt); short * foveon_make_curve(double max, double mul, double filt); void foveon_make_curves (short **curvep, float dq[3], float div[3], float filt); int foveon_apply_curve(short *curve, int i); void foveon_interpolate(); void crop_masked_pixels(); void remove_zeroes(); void bad_pixels(const char *fname); void subtract(const char *fname); void gamma_curve(double pwr, double ts, int mode, int imax); void pseudoinverse(double(*in)[3], double(*out)[3], int size); void cam_xyz_coeff(double cam_xyz[4][3]); void colorcheck(); void hat_transform(float *temp, float *base, int st, int size, int sc); void wavelet_denoise(); void scale_colors(); void pre_interpolate(); void border_interpolate(int border); void lin_interpolate(); void vng_interpolate(); void ppg_interpolate(); void ahd_interpolate(); void median_filter(); void blend_highlights(); void recover_highlights(); void tiff_get(unsigned base, unsigned *tag, unsigned *type, unsigned *len, unsigned *save); void parse_thumb_note(int base, unsigned toff, unsigned tlen); void parse_makernote(int base, int uptag); void get_timestamp(int reversed); void parse_exif(int base); void parse_gps(int base); void romm_coeff(float romm_cam[3][3]); void parse_mos(int offset); void linear_table(unsigned len); void parse_kodak_ifd(int base); int parse_tiff_ifd(int base); int parse_tiff(int base); void apply_tiff(); void parse_minolta(int base); void parse_external_jpeg(); void ciff_block_1030(); void parse_ciff(int offset, int length); void parse_rollei(); void parse_sinar_ia(); void parse_phase_one(int base); void parse_fuji(int offset); int parse_jpeg(int offset); void parse_riff(); void parse_smal(int offset, unsigned fsize); void parse_cine(); void parse_redcine(); char * foveon_gets(int offset, char *str, int len); void parse_foveon(); void adobe_coeff(const char *make, const char *model); void simple_coeff(int index); short guess_byte_order(int words); float find_green(int bps, int bite, int off0, int off1); void identify(); #ifndef NO_LCMS void apply_profile(const char *input, const char *output); #endif void convert_to_rgb(); void fuji_rotate(); void stretch(); int flip_index(int row, int col); void tiff_set(ushort *ntag, ushort tag, ushort type, int count, int val); void tiff_head(struct tiff_hdr *th, int full); void jpeg_thumb(); void write_ppm_tiff(); int main(int argc, const char **argv); }; ufraw-0.19.2/ufraw_icons.c0000664000175000017500000000571312115264507012346 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_icons.c - load icons for UFRaw's GUI. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include "icons/ufraw_icons.h" #include static GdkPixbuf *load_icon(GtkIconFactory *factory, const guint8 *icon, const char *name) { GdkPixbuf *pixbuf = gdk_pixbuf_new_from_inline(-1, icon, FALSE, NULL); GtkIconSet *iconset = gtk_icon_set_new_from_pixbuf(pixbuf); gtk_icon_factory_add(factory, name, iconset); return pixbuf; } void ufraw_icons_init() { GtkIconFactory *factory = gtk_icon_factory_new(); gtk_icon_factory_add_default(factory); GdkPixbuf *pixbuf = load_icon(factory, ufraw_icon, "ufraw"); gtk_icon_theme_add_builtin_icon("ufraw", 48, pixbuf); load_icon(factory, exposure_24, "exposure"); load_icon(factory, film_24, "clip-highlights-film"); load_icon(factory, digital_24, "clip-highlights-digital"); load_icon(factory, restore_lch_24, "restore-highlights-lch"); load_icon(factory, restore_hsv_24, "restore-highlights-hsv"); load_icon(factory, interpolation_24, "interpolation"); load_icon(factory, white_balance_24, "white-balance"); load_icon(factory, color_management_24, "color-management"); load_icon(factory, color_corrections_24, "color-corrections"); load_icon(factory, icc_profile_camera_24, "icc-profile-camera"); load_icon(factory, icc_profile_output_24, "icc-profile-output"); load_icon(factory, icc_profile_display_24, "icc-profile-display"); load_icon(factory, curve_24, "base-curve"); load_icon(factory, flip_horiz_24, "object-flip-horizontal"); load_icon(factory, flip_vert_24, "object-flip-vertical"); load_icon(factory, rotate_90_24, "object-rotate-right"); load_icon(factory, rotate_270_24, "object-rotate-left"); load_icon(factory, lock_24, "object-lock"); load_icon(factory, unlock_24, "object-unlock"); load_icon(factory, automatic_24, "object-automatic"); load_icon(factory, manual_24, "object-manual"); load_icon(factory, exif_24, "exif"); load_icon(factory, crop_24, "crop"); load_icon(factory, rectify_24, "rectify"); load_icon(factory, gimp_24, "gimp"); load_icon(factory, grayscale_24, "grayscale"); load_icon(factory, channel_blue_24, "channel-blue"); load_icon(factory, channel_green_24, "channel-green"); load_icon(factory, channel_red_24, "channel-red"); load_icon(factory, lens_24, "lens"); load_icon(factory, tca_24, "tca"); load_icon(factory, vignetting_24, "vignetting"); load_icon(factory, distortion_24, "distortion"); load_icon(factory, geometry_24, "geometry"); load_icon(factory, hueadjust_24, "hueadjust"); } ufraw-0.19.2/ufraw_lensfun.cc0000664000175000017500000007647012115264507013060 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_lensfun.cc - define lensfun UFObject settings. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ufraw.h" #include #include #include #include #ifdef HAVE_LENSFUN #include #define UF_LF_TRANSFORM ( \ LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE) namespace UFRaw { class Lensfun : public UFGroup { private: static lfDatabase *_LensDB; public: lfCamera Camera; // 'Interpolation' represents the lens the user choose from the LensDB. // Its transformation values are interpolate according to the choice // of FocalLegth, Aperture and Distance. lfLens Interpolation; // 'Transformation' include the transformation the user choose from the // 'Interpolation' lens. lfLens Transformation; double FocalLengthValue; double ApertureValue; double DistanceValue; Lensfun(); #ifdef UFRAW_VALGRIND // Can be useful for valgrind --leak-check=full ~Lensfun() { if (_LensDB != NULL) lf_db_destroy(_LensDB); _LensDB = NULL; } #endif static Lensfun &Parent(UFObject &object) { if (strcmp(object.Parent().Name(), ufLensfun) == 0) return static_cast(object.Parent()); return Lensfun::Parent(object.Parent()); } static const Lensfun &Parent(const UFObject &object) { if (strcmp(object.Parent().Name(), ufLensfun) == 0) return static_cast(object.Parent()); return Lensfun::Parent(object.Parent()); } static lfDatabase *LensDB() { /* Load lens database only once */ if (_LensDB == NULL) { _LensDB = lfDatabase::Create(); _LensDB->Load(); } return _LensDB; } void SetCamera(const lfCamera &camera) { Camera = camera; const char *maker = lf_mlstr_get(camera.Maker); const char *model = lf_mlstr_get(camera.Model); if (model != NULL) { char *fm; if (maker != NULL) fm = g_strdup_printf("%s, %s", maker, model); else fm = g_strdup_printf("%s", model); UFString &CameraModel = (*this)[ufCameraModel]; CameraModel.Set(fm); g_free(fm); // After setting the camera model, we can retry finding the lens. SetLensInterpolation(); } } void SetLensModel(const lfLens &lens); // Set the 'Interpolation' lens from the LensModel. void SetLensInterpolation(); // Interpolate the TCA, Vignetting and Distortion models. void Interpolate(); // Mark settings as manual (not from LensDB). void Manual() { char *lens_model = g_strdup_printf("Generic, Crop factor %.4g", Transformation.CropFactor); (*this)[ufLensModel].Set(lens_model); g_free(lens_model); UFObject::Parent()[ufLensfunAuto].Set("no"); } void Init(bool reset); }; static void parse_maker_model(const char *txt, char *make, size_t sz_make, char *model, size_t sz_model) { while (txt[0] != '\0' && isspace(txt[0])) txt++; const gchar *sep = strchr(txt, ','); if (sep != NULL) { size_t len = sep - txt + 1; len = MIN(len, sz_make); g_strlcpy(make, txt, len); while (*++sep && isspace(sep[0])) { } g_strlcpy(model, sep, sz_model); } else { g_strlcpy(model, txt, sz_model); } } extern "C" { UFName ufCameraModel = "CameraModel"; } class CameraModel : public UFString { public: CameraModel() : UFString(ufCameraModel) { } }; extern "C" { UFName ufLensModel = "LensModel"; } class LensModel : public UFString { public: LensModel() : UFString(ufLensModel) { } void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); if (!HasParent()) return UFObject::Event(type); Lensfun &Lensfun = Lensfun::Parent(*this); Lensfun.SetLensInterpolation(); Lensfun.Interpolate(); return UFObject::Event(type); } void OriginalValueChangedEvent() { if (!HasParent()) return; Lensfun &Lensfun = Lensfun::Parent(*this); // While loading rc/cmd/conf data, do not reset the auto setting if (ufraw_image_get_data(this) != NULL) Lensfun.UFObject::Parent()[ufLensfunAuto].Set("no"); } }; #define _buffer_size 80 char *_StringNumber(char *buffer, double number) { /* int precision = 0; while (floor(number * pow(10, precision))*10 < floor(number * pow(10, precision+1))) precision++;*/ // Compute the floating-point precision which is enough for "normal use". // The criteria is to have 2 or 3 significant digits. int precision; if (number > 10.0 && (int)(10 * number) % 10 != 0) // Support non-integer focal lengths longer than 10mm. precision = MAX(-floor(log(number) / log(10.0) - 1.99), 0); else if (number > 0.0) precision = MAX(-floor(log(number) / log(10.0) - 0.99), 0); else precision = 0; snprintf(buffer, _buffer_size, "%.*f", precision, number); return buffer; } extern "C" { UFName ufFocalLength = "FocalLength"; } class FocalLength : public UFArray { public: FocalLength() : UFArray(ufFocalLength) { } void Event(UFEventType type) { if (type == uf_default_changed && Index() == -1) { // Default value is changed during Init. Reset to this default // value if no other value was set. Reset(); } if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); if (!HasParent()) return UFObject::Event(type); double value; if (sscanf(StringValue(), "%lf", &value) != 1) return UFObject::Event(type); Lensfun::Parent(*this).FocalLengthValue = value; Lensfun::Parent(*this).Interpolate(); ufraw_invalidate_layer(uf, ufraw_transform_phase); return UFObject::Event(type); } void CreatePresets() { if (!HasParent()) return; Clear(); lfLens &lens = Lensfun::Parent(*this).Interpolation; static double focalValues[] = { 4, 5, 6, 7, 8, 10, 12, 14, 17, 21, 24, 28, 35, 43, 50, 70, 85, 105, 135, 200, 300, 400, 600, 800, 0 }; char buffer[_buffer_size]; double min = lens.MinFocal, max = lens.MaxFocal; if (min > 0) *this << new UFString(ufPreset, _StringNumber(buffer, min)); int i = 0; while (focalValues[i] < min && focalValues[i] != 0) i++; if (Has(_StringNumber(buffer, focalValues[i]))) i++; // Comparing strings works better than comparing doubles. while (focalValues[i] < max && focalValues[i] != 0) { *this << new UFString(ufPreset, _StringNumber(buffer, focalValues[i])); i++; } if (max > min) *this << new UFString(ufPreset, _StringNumber(buffer, max)); } }; extern "C" { UFName ufAperture = "Aperture"; } class Aperture : public UFArray { public: Aperture() : UFArray(ufAperture) { } void Event(UFEventType type) { if (type == uf_default_changed && Index() == -1) { // Default value is changed during Init. Reset to this default // value if no other value was set. Reset(); } if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); if (!HasParent()) return UFObject::Event(type); double value; if (sscanf(StringValue(), "%lf", &value) != 1) return UFObject::Event(type); Lensfun::Parent(*this).ApertureValue = value; Lensfun::Parent(*this).Interpolate(); return UFObject::Event(type); } void CreatePresets() { if (!HasParent()) return; Clear(); lfLens &lens = Lensfun::Parent(*this).Interpolation; static double apertureValues[] = { 1, 1.2, 1.4, 1.7, 2, 2.4, 2.8, 3.4, 4, 4.8, 5.6, 6.7, 8, 9.5, 11, 13, 16, 19, 22, 27, 32, 38, 45, 0 }; char buffer[_buffer_size]; double min = lens.MinAperture; if (min == 0) return; *this << new UFString(ufPreset, _StringNumber(buffer, min)); int i = 0; while (apertureValues[i] < min && apertureValues[i] != 0) i++; if (Has(_StringNumber(buffer, apertureValues[i]))) i++; // Comparing strings works better than comparing doubles. while (apertureValues[i] != 0) { *this << new UFString(ufPreset, _StringNumber(buffer, apertureValues[i])); i++; } } }; extern "C" { UFName ufDistance = "Distance"; } class Distance : public UFArray { public: Distance() : UFArray(ufDistance) { } void Event(UFEventType type) { if (type == uf_default_changed && Index() == -1) { // Default value is changed during Init. Reset to this default // value if no other value was set. Reset(); } if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); if (!HasParent()) return UFObject::Event(type); double value; if (sscanf(StringValue(), "%lf", &value) != 1) return UFObject::Event(type); Lensfun::Parent(*this).DistanceValue = value; Lensfun::Parent(*this).Interpolate(); return UFObject::Event(type); } void CreatePresets() { Clear(); char buffer[_buffer_size]; double value = 0.25; while (value < 1001) { *this << new UFString(ufPreset, _StringNumber(buffer, value)); value *= sqrt(2.0); if (value > 127 && value < 129) value = 125; } } }; extern "C" { UFName ufModel = "Model"; } class Param : public UFNumber { public: Param(UFName name, double min, double max, double defaultValue) : UFNumber(name, min, max, defaultValue) { } std::string XML(const char *indent) const { char num[10]; g_snprintf(num, 10, "%.*lf", AccuracyDigits() + 2, DoubleValue()); return (std::string)indent + "<" + Name() + ">" + num + "\n"; } void OriginalValueChangedEvent() { if (!HasParent()) return; // While loading rc/cmd/conf data, do not reset other settings if (ufraw_image_get_data(this) == NULL) return; Lensfun &Lensfun = Lensfun::Parent(*this); Lensfun.Manual(); } }; extern "C" { UFName ufTCA = "TCA"; } class TCA : public UFArray { public: TCA() : UFArray(ufTCA, lfLens::GetTCAModelDesc(LF_TCA_MODEL_NONE, NULL, NULL)) { for (lfTCAModel model = LF_TCA_MODEL_NONE; ; model = lfTCAModel(model + 1)) { const lfParameter **params; const char *model_name = lfLens::GetTCAModelDesc(model, NULL, ¶ms); if (model_name == NULL) break; // End of loop. UFGroup &Model = *(new UFGroup(ufModel, model_name)); (*this) << &Model; assert(params != NULL); for (int i = 0; params[i] != NULL; i++) Model << new Param(params[i]->Name, params[i]->Min, params[i]->Max, params[i]->Default); } } void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); lfLens &lens = Lensfun::Parent(*this).Transformation; if (lens.CalibTCA != NULL) while (lens.CalibTCA[0] != NULL) lens.RemoveCalibTCA(0); lfLensCalibTCA calib; calib.Model = static_cast(Index()); calib.Focal = Lensfun::Parent(*this).FocalLengthValue; const lfParameter **params; lfLens::GetTCAModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; calib.Terms[i] = Param.DoubleValue(); } } lens.AddCalibTCA(&calib); ufraw_invalidate_tca_layer(uf); return UFObject::Event(type); } void Interpolate() { if (!HasParent()) return; Lensfun &Lensfun = Lensfun::Parent(*this); lfLensCalibTCA calib; if (!Lensfun.Interpolation.InterpolateTCA( Lensfun.FocalLengthValue, calib)) { return; } SetIndex(calib.Model - LF_TCA_MODEL_NONE); const lfParameter **params; lfLens::GetTCAModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; Param.Set(calib.Terms[i]); } } } }; extern "C" { UFName ufVignetting = "Vignetting"; } class Vignetting : public UFArray { public: Vignetting() : UFArray(ufVignetting, lfLens::GetVignettingModelDesc(LF_VIGNETTING_MODEL_NONE, NULL, NULL)) { for (lfVignettingModel model = LF_VIGNETTING_MODEL_NONE; ; model = lfVignettingModel(model + 1)) { const lfParameter **params; const char *model_name = lfLens::GetVignettingModelDesc(model, NULL, ¶ms); if (model_name == NULL) break; // End of loop. UFGroup &Model = *(new UFGroup(ufModel, model_name)); (*this) << &Model; assert(params != NULL); for (int i = 0; params[i] != NULL; i++) Model << new Param(params[i]->Name, params[i]->Min, params[i]->Max, params[i]->Default); } } void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); lfLens &lens = Lensfun::Parent(*this).Transformation; if (lens.CalibVignetting != NULL) while (lens.CalibVignetting[0] != NULL) lens.RemoveCalibVignetting(0); lfLensCalibVignetting calib; calib.Model = static_cast(Index()); calib.Focal = Lensfun::Parent(*this).FocalLengthValue; calib.Aperture = Lensfun::Parent(*this).ApertureValue; calib.Distance = Lensfun::Parent(*this).DistanceValue; const lfParameter **params; lfLens::GetVignettingModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; calib.Terms[i] = Param.DoubleValue(); } } lens.AddCalibVignetting(&calib); ufraw_invalidate_layer(uf, ufraw_first_phase); return UFObject::Event(type); } void Interpolate() { ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return; Lensfun &Lensfun = Lensfun::Parent(*this); lfLensCalibVignetting calib; if (!Lensfun.Interpolation.InterpolateVignetting( Lensfun.FocalLengthValue, Lensfun.ApertureValue, Lensfun.DistanceValue, calib)) { return; } SetIndex(calib.Model - LF_VIGNETTING_MODEL_NONE); const lfParameter **params; lfLens::GetVignettingModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; Param.Set(calib.Terms[i]); } } } }; extern "C" { UFName ufDistortion = "Distortion"; } class Distortion : public UFArray { public: // The elements of Distortion are distortion models: // UFGroup &Model = (*this)[StringValue()]; // The elements of Model are the model's parameters: // UFNumber Param = Model[params[i].Name]; // In XML it would look something like this: // // // 0.0100 // -0.0100 // // // 0.0010 // 0.0023 // // Distortion() : UFArray(ufDistortion, lfLens::GetDistortionModelDesc(LF_DIST_MODEL_NONE, NULL, NULL)) { for (lfDistortionModel model = LF_DIST_MODEL_NONE; ; model = lfDistortionModel(model + 1)) { const lfParameter **params; const char *model_name = lfLens::GetDistortionModelDesc(model, NULL, ¶ms); if (model_name == NULL) break; // End of loop. UFGroup &Model = *(new UFGroup(ufModel, model_name)); (*this) << &Model; assert(params != NULL); for (int i = 0; params[i] != NULL; i++) Model << new Param(params[i]->Name, params[i]->Min, params[i]->Max, params[i]->Default); } } void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); lfLens &lens = Lensfun::Parent(*this).Transformation; if (lens.CalibDistortion != NULL) while (lens.CalibDistortion[0] != NULL) lens.RemoveCalibDistortion(0); lfLensCalibDistortion calib; calib.Model = static_cast(Index()); calib.Focal = Lensfun::Parent(*this).FocalLengthValue; const lfParameter **params; lfLens::GetDistortionModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; calib.Terms[i] = Param.DoubleValue(); } } lens.AddCalibDistortion(&calib); ufraw_invalidate_layer(uf, ufraw_transform_phase); return UFObject::Event(type); } void Interpolate() { if (!HasParent()) return; Lensfun &Lensfun = Lensfun::Parent(*this); lfLensCalibDistortion calib; if (!Lensfun.Interpolation.InterpolateDistortion( Lensfun.FocalLengthValue, calib)) { return; } SetIndex(calib.Model - LF_DIST_MODEL_NONE); const lfParameter **params; lfLens::GetDistortionModelDesc(calib.Model, NULL, ¶ms); if (params != NULL) { UFGroup &Model = (*this)[StringValue()]; for (int i = 0; params[i] != NULL; i++) { UFNumber &Param = Model[params[i]->Name]; Param.Set(calib.Terms[i]); } } } }; extern "C" { UFName ufLensGeometry = "LensGeometry"; } class LensGeometry : public UFArray { public: explicit LensGeometry(UFName name = ufLensGeometry) : UFArray(name, lfLens::GetLensTypeDesc(LF_UNKNOWN, NULL)) { for (lfLensType type = LF_UNKNOWN; ; type = lfLensType(type + 1)) { const char *typeName = lfLens::GetLensTypeDesc(type, NULL); if (typeName == NULL) break; // End of loop. *this << new UFString("Type", typeName); } } void Event(UFEventType type) { if (type != uf_value_changed) return UFObject::Event(type); ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return UFObject::Event(type); Lensfun::Parent(*this).Transformation.Type = lfLensType(Index()); ufraw_invalidate_layer(uf, ufraw_transform_phase); return UFObject::Event(type); } void OriginalValueChangedEvent() { if (!HasParent()) return; // While loading rc/cmd/conf data, do not reset other settings if (ufraw_image_get_data(this) == NULL) return; Lensfun &Lensfun = Lensfun::Parent(*this); Lensfun.Manual(); } }; extern "C" { UFName ufTargetLensGeometry = "TargetLensGeometry"; } class TargetLensGeometry : public UFArray { public: explicit TargetLensGeometry(UFName name = ufTargetLensGeometry) : UFArray(name, lfLens::GetLensTypeDesc(LF_UNKNOWN, NULL)) { for (lfLensType type = LF_UNKNOWN; ; type = lfLensType(type + 1)) { const char *typeName = lfLens::GetLensTypeDesc(type, NULL); if (typeName == NULL) break; // End of loop. *this << new UFString("Type", typeName); } } void OriginalValueChangedEvent() { ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return; ufraw_invalidate_layer(uf, ufraw_transform_phase); } }; extern "C" { UFName ufLensfun = "Lensfun"; } Lensfun::Lensfun() : UFGroup(ufLensfun), FocalLengthValue(0.0), ApertureValue(0.0), DistanceValue(0.0) { *this << new CameraModel << new LensModel << new FocalLength << new Aperture << new Distance << new TCA << new Vignetting << new Distortion << new LensGeometry << new TargetLensGeometry ; } void Lensfun::SetLensInterpolation() { char make[200] = "", model[200] = ""; parse_maker_model((*this)[ufLensModel].StringValue(), make, sizeof(make), model, sizeof(model)); double crop_factor = 1.0; int count = sscanf(model, "Crop factor %lf", &crop_factor); if ((strcmp(make, "Generic") == 0 && count == 1) || (strcmp(make, "") == 0 && strcmp(model, "") == 0)) { lfLens cropLens; cropLens.SetMaker(make); cropLens.SetModel(model); cropLens.CropFactor = crop_factor; cropLens.MinFocal = 1.0; cropLens.MaxFocal = 800.0; UFArray &LensGeometry = (*this)[ufLensGeometry]; cropLens.Type = lfLensType(LensGeometry.Index()); Interpolation = cropLens; } else { const lfLens **lensList = LensDB()->FindLenses(&Camera, make, model, LF_SEARCH_LOOSE); if (lensList == NULL || lensList[0] == NULL) { lfLens emptyLens; Interpolation = emptyLens; } else { Interpolation = *lensList[0]; } if (lensList != NULL) lf_free(lensList); } Transformation.CropFactor = Interpolation.CropFactor; UFArray &LensGeometry = (*this)[ufLensGeometry]; LensGeometry.SetIndex(Interpolation.Type); static_cast((*this)[ufFocalLength]).CreatePresets(); static_cast((*this)[ufAperture]).CreatePresets(); static_cast((*this)[ufDistance]).CreatePresets(); } void Lensfun::SetLensModel(const lfLens &lens) { UFString &LensModel = (*this)[ufLensModel]; const char *maker = lf_mlstr_get(lens.Maker); const char *model = lf_mlstr_get(lens.Model); if (model != NULL) { char *fm; if (maker != NULL) fm = g_strdup_printf("%s, %s", maker, model); else fm = g_strdup_printf("%s", model); if (LensModel.IsEqual(fm)) { // Even if the lens has not changed, we still want to triger // a change event. LensModel.Event(uf_value_changed); } else { LensModel.Set(fm); } g_free(fm); } } void Lensfun::Interpolate() { static_cast((*this)[ufTCA]).Interpolate(); static_cast((*this)[ufVignetting]).Interpolate(); static_cast((*this)[ufDistortion]).Interpolate(); } lfDatabase *Lensfun::_LensDB = NULL; void Lensfun::Init(bool reset) { ufraw_data *uf = ufraw_image_get_data(this); if (uf == NULL) return; UFGroup &Image = UFObject::Parent(); /* Set lens and camera from EXIF info, if possible */ if (uf->conf->real_make[0] || uf->conf->real_model[0]) { const lfCamera **cams = LensDB()->FindCameras( uf->conf->real_make, uf->conf->real_model); if (cams != NULL) { SetCamera(*cams[0]); lf_free(cams); } } UFString &CameraModel = (*this)[ufCameraModel]; CameraModel.SetDefault(CameraModel.StringValue()); char buffer[_buffer_size]; UFArray &FocalLength = (*this)[ufFocalLength]; FocalLength.SetDefault(_StringNumber(buffer, uf->conf->focal_len)); UFArray &Aperture = (*this)[ufAperture]; Aperture.SetDefault(_StringNumber(buffer, uf->conf->aperture)); UFArray &Distance = (*this)[ufDistance]; Distance.SetDefault(_StringNumber(buffer, uf->conf->subject_distance)); if (!reset) { (*this)[ufTCA].Event(uf_value_changed); (*this)[ufVignetting].Event(uf_value_changed); (*this)[ufDistortion].Event(uf_value_changed); return; } FocalLength.Reset(); Aperture.Reset(); Distance.Reset(); UFString &LensfunAuto = Image[ufLensfunAuto]; if (LensfunAuto.IsEqual("yes")) { if (strlen(uf->conf->lensText) > 0) { const lfLens **lenses = LensDB()->FindLenses(&Camera, NULL, uf->conf->lensText, LF_SEARCH_LOOSE); if (!CameraModel.IsEqual("") && lenses != NULL) { SetLensModel(*lenses[0]); // Changing the lens reset Auto="no". So set it back. LensfunAuto.Set("yes"); lf_free(lenses); // When loading a configuration file nothing changes, so we // need to manually trigger the uf_value_changed event. (*this)[ufTCA].Event(uf_value_changed); (*this)[ufVignetting].Event(uf_value_changed); (*this)[ufDistortion].Event(uf_value_changed); return; } } // Try using the "standard" lens of compact cameras. const lfLens **lenses = LensDB()->FindLenses(&Camera, NULL, "Standard", LF_SEARCH_LOOSE); if (!CameraModel.IsEqual("") && lenses != NULL) { SetLensModel(*lenses[0]); // Changing the lens reset Auto="no". So set it back. LensfunAuto.Set("yes"); lf_free(lenses); // When loading a configuration file nothing changes, so we // need to manually trigger the uf_value_changed event. (*this)[ufTCA].Event(uf_value_changed); (*this)[ufVignetting].Event(uf_value_changed); (*this)[ufDistortion].Event(uf_value_changed); return; } } // LensfunAuto == "no" (*this)[ufTCA].Reset(); (*this)[ufVignetting].Reset(); (*this)[ufDistortion].Reset(); } extern "C" { void ufraw_lensfun_init(UFObject *lensfun, UFBoolean reset) { static_cast(lensfun)->Init(reset); } void ufraw_convert_prepare_transform(ufraw_data *uf, int width, int height, gboolean reverse, float scale) { UFGroup &Image = *uf->conf->ufobject; UFRaw::Lensfun &Lensfun = static_cast(Image[ufLensfun]); if (uf->modifier != NULL) uf->modifier->Destroy(); uf->modifier = lfModifier::Create(&Lensfun.Transformation, Lensfun.Camera.CropFactor, width, height); if (uf->modifier == NULL) return; UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry]; uf->modFlags = uf->modifier->Initialize(&Lensfun.Transformation, LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue, Lensfun.DistanceValue, scale, lfLensType(targetLensGeometry.Index()), UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING, reverse); if ((uf->modFlags & (UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING)) == 0) { uf->modifier->Destroy(); uf->modifier = NULL; } } void ufraw_prepare_tca(ufraw_data *uf) { UFGroup &Image = *uf->conf->ufobject; UFRaw::Lensfun &Lensfun = static_cast(Image[ufLensfun]); ufraw_image_data *img = &uf->Images[ufraw_raw_phase]; if (uf->TCAmodifier != NULL) uf->TCAmodifier->Destroy(); uf->TCAmodifier = lfModifier::Create(&Lensfun.Transformation, Lensfun.Camera.CropFactor, img->width, img->height); if (uf->TCAmodifier == NULL) return; UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry]; int modFlags = uf->TCAmodifier->Initialize(&Lensfun.Transformation, LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue, Lensfun.DistanceValue, 1.0, lfLensType(targetLensGeometry.Index()), LF_MODIFY_TCA, false); if ((modFlags & LF_MODIFY_TCA) == 0) { uf->TCAmodifier->Destroy(); uf->TCAmodifier = NULL; } } UFObject *ufraw_lensfun_new() { return new Lensfun(); } const struct lfCamera *ufraw_lensfun_camera(const UFObject *lensfun) { return &static_cast(lensfun)->Camera; } void ufraw_lensfun_set_camera(UFObject *lensfun, const struct lfCamera *camera) { static_cast(lensfun)->SetCamera(*camera); } const struct lfLens *ufraw_lensfun_interpolation_lens(const UFObject *lensfun) { return &static_cast(lensfun)->Interpolation; } void ufraw_lensfun_set_lens(UFObject *lensfun, const struct lfLens *lens) { dynamic_cast(*lensfun).SetLensModel(*lens); } lfDatabase *ufraw_lensfun_db() { return Lensfun::LensDB(); } } // extern "C" } // namespace UFRaw #endif // HAVE_LENSFUN ufraw-0.19.2/ac_openmp.m40000644000175000017500000000671711335734227012075 00000000000000# openmp.m4 serial 4 dnl Copyright (C) 2006-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file can be removed once we assume autoconf >= 2.62. # _AC_LANG_OPENMP # --------------- # Expands to some language dependent source code for testing the presence of # OpenMP. AC_DEFUN([_AC_LANG_OPENMP], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # _AC_LANG_OPENMP(C) # ------------------ m4_define([_AC_LANG_OPENMP(C)], [ #ifndef _OPENMP choke me #endif #include int main () { return omp_get_num_threads (); } ]) # _AC_LANG_OPENMP(C++) # -------------------- m4_copy([_AC_LANG_OPENMP(C)], [_AC_LANG_OPENMP(C++)]) # _AC_LANG_OPENMP(Fortran 77) # --------------------------- m4_define([_AC_LANG_OPENMP(Fortran 77)], [AC_LANG_FUNC_LINK_TRY([omp_get_num_threads])]) # _AC_LANG_OPENMP(Fortran) # --------------------------- m4_copy([_AC_LANG_OPENMP(Fortran 77)], [_AC_LANG_OPENMP(Fortran)]) # AC_OPENMP # --------- # Check which options need to be passed to the C compiler to support OpenMP. # Set the OPENMP_CFLAGS / OPENMP_CXXFLAGS / OPENMP_FFLAGS variable to these # options. # The options are necessary at compile time (so the #pragmas are understood) # and at link time (so the appropriate library is linked with). # This macro takes care to not produce redundant options if $CC $CFLAGS already # supports OpenMP. It also is careful to not pass options to compilers that # misinterpret them; for example, most compilers accept "-openmp" and create # an output file called 'penmp' rather than activating OpenMP support. AC_DEFUN([AC_OPENMP], [ OPENMP_[]_AC_LANG_PREFIX[]FLAGS= AC_ARG_ENABLE([openmp], [AS_HELP_STRING([--disable-openmp], [do not use OpenMP])]) if test "$enable_openmp" != no; then AC_CACHE_CHECK([for $CC option to support OpenMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp], [AC_LINK_IFELSE([_AC_LANG_OPENMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='none needed'], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='unsupported' dnl Try these flags: dnl GCC >= 4.2 -fopenmp dnl SunPRO C -xopenmp dnl Intel C -openmp dnl SGI C, PGI C -mp dnl Tru64 Compaq C -omp dnl IBM C (AIX, Linux) -qsmp=omp dnl If in this loop a compiler is passed an option that it doesn't dnl understand or that it misinterprets, the AC_LINK_IFELSE test dnl will fail (since we know that it failed without the option), dnl therefore the loop will continue searching for an option, and dnl no output file called 'penmp' or 'mp' is created. for ac_option in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $ac_option" AC_LINK_IFELSE([_AC_LANG_OPENMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp=$ac_option]) _AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS if test "$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp" != unsupported; then break fi done])]) case $ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp in #( "none needed" | unsupported) ;; #( *) OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp ;; esac fi AC_SUBST([OPENMP_]_AC_LANG_PREFIX[FLAGS]) ]) ufraw-0.19.2/aclocal.m40000664000175000017500000015547512123734472011540 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR ufraw-0.19.2/ufraw-setup.jpg0000644000175000017500000015433511335734227012656 00000000000000ÿØÿàJFIFHHÿávÔExifMM* @ž Þêú(2 ‚˜‡i8Ä¥8irExif_JPEG_PICTURE DSC_Maker DSC HH2008:10:10 03:23:39(C) by DSC User PrintIM0250d ¬ ă ' '—'°''^'‹'Ë'å'‚šŽ‚–ˆ"ˆ'0221ž²‘‘Æ’Î’ Ö’ Þ’æ’’’  ’ î’|dVö’†hL 0100  ¤ 9 iT¤¤¤¤ úd2008:09:06 18:51:302008:09:06 18:51:30d ÿÿÿÚ úd3 Dnote Rdcp xˆ0˜˜ ÊÈRev0516 @ °  Q0úd|> [Maker Camera Info]ɨ‚"?8š@  6 6 F €P+@N Ž@l]-Ô® ‚R8’0Ê„ú2007:12:04 2007:07:31 µ³ØðÀ@ÀlµŠ°“ä¢ÒttŒll ··—ww<<ÕÕïÏÏÏÙ×××××w æÚÚÚÚÚÚ]]]]]]FFFFFF‹‹‹‹‹‹ÿØÿÛÅ                  ÿÀð@!ÿÄ¢ }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú w!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ø’HüÊÝûÈåë(ÇæH±Rb@Þc…øþöPqþÀQŠä©³4¦õ;ÏZ}£J–]üÿiÞA.}<«WÌýU¤ñ›i<¶oÜ„ò¤_ö¿˜õê+‚¢÷¾g|>—ùš}»¸'Ê”.0Dd_”ðÅdó‘€ri~ÇöB.gH&_,¹’زໃÁ¼g½%-üÑ¥¶õei¦û<‘ºÑÊ.Bãº=ñË>¼WŸ|Dƒþ&Z>œ Eþ£8îæ;¨Ò,àò 2‘ÇÞN9ÓAÞKÑœµ•¢ýQ’T–r2r\g'†#'ëüFº/|5?5éš{/Lðö’uMX ÌÏ2˜ÂD:<óc°˜‚v^ºùœ“v¦ýQì‡Äà_°iÀYé¶Ú]¾›i \*Ú[ÛÃlŠÇ¬¤".Y‰$ŒŒt®ÆÿRÏJ:6£¯<Ÿi8‚Òeiàý÷”BÊ:×-Ã-wNVRôg.ò•¿<39–&GÏîJ°úH ~ ×M3I åFIôuñìG>Â¼Š›¿SÔ¦ôù[ÄA~üÉ*“ŸáoƒéÔ¥nÁ´¤6蛤•Âc“‘½Gó8®F¯5ç$t§h?B…’#sks¦ÝCÛ")@#¹/°û*¿rEDW€{aÀ~¸®¼Õ^TÿÀreÏÝ©þ ÔlbÖl ¬Ðƒ° iþ(äWÏèMy„|[/€|eká›ØLÚ}¥óÇhËÈg½¹’> ¶ÓÈÀñÏ>]S•KÐÛ ¨úÿ‘î0C¶Xæ•Z8‹€¼Ë·ó;¸ö$Ö~·^JZ;ùr¨äT“Ó¾Y1î í×Í¿¼w=¾ã‚½²»–Y,â¸Ä0ê‰&â§ zä™É|m ª± ×HÁBCÉX …#ÉÏÌ© äûü‹Éî¾¹­ê;òùÓÝúÿ˜ùlw©ÿ–p¶ü?©¬bÅ䄯‡{¤ˆdíù‰Ç¡ã­g ש³øYÏ?ƒôøïÖEÞ»‚̶A (#> œŽ¾½+¢›s,iõI)ž¥‹zÿ{&µ©Ríz3– ×õ’6 0Hw:ç-žA#§èO§Ï,REaNï݇Éãˆ^ ]"‘RwÎ#BÓÛ4€q›ŠÉ¹÷ª:”d*FK*‰7 wlIŸÓ4Ò×äÇ}—©Ü?z©eQ éµ^^xÎ8bZ”Je·‚5·H ’1òÇ9þ«káþ»äe^ÜJ¬rt1†¦S%—åqž§ð¬+×’HÂç,‘Èàzü þ ?Lñ[Cõ1¨÷ôFL¡îîád·òcC$w DòPÊI,F:œuà¹wcY™*¤ÜmFN;çhõ5½Ik÷~‡<—ÍœŒÚ°´¼6qo0BêÙTÃ8~ï;p}¹­h Ä| cãieŒ@j¤¬“»f¼ãw€pïCÏú‘ø}*öÅ’T Â\JÍëÈU?\ö¨›ÑŽÕzg†æ‘ešÌœèÌzñ<ãØ#ŸjÝ»³76¾~àL&Öé–) /|}ÓèA®:ÏÝ_#¶—ÄýN³G³X4˜ãl,ÒˆCÁÛƒÓ¶ÖãŸQø_¾Ò–kxÓþ[[ÇfÑ‘3q ¼Ùú#ïÇÝÀë\ÑzüÿÌêfSè&äAp­ƒ¯¨˜8ÆõGPFq‚§¨þ{yïÅ«1äSC„xd¾Ó°É%ŽXÇ^Fç˜õþ.﮾KÔÃÝü×èpÁ( #eB@;z‘‘ƒ‚@êzW»|Gмs¨¯Ë.µ©j×Q¸ÎYt½RDRyÝ‹©äûâ½üýûÿù6+ø_4`|X¸·ŽÝa ÅoeAÑÌj^N;’}9ë_4ørÆïZÖémÓ½Ó\ÌÇ»’Yãƒôx‰ZLœ:÷~g·h:Žå®&HãŽu=ÐòÈ:63ëÐó†¯K°h&¶YÉ&!–9Oel¨çÓü:×YûÈõ)¯ušöð‰²cåûDÇ Ëº&óÀ— ¼Û+¸®{àŽx®jRýü<¦¿C¢ªýÜ¿ÂÿS´ñ†–©¥<,oÍo°7¢îWƒ¹\„qÈùNFAçìïa¶ci,f;‘rÁÎÆ(±“ô –ãœãÖ½\áiVyÙcÖ_"ûHˆ<ˆ1å´Êàrq“ŽXñž{sÎj¶­¾©ja’Ý^?´´ê[iÚÑMÊõ îS3^ w=w³,YĶÌÌ@$r3{üŠ@9>±×ž* ÛÄÉpcÉ´±îp»@÷#vNN(îKègÎ<ÆŒ2ੑϹ?0“Ã¥Q¹ŸË UP8í† ùúãÞ…ú†âáQAÞ|¿3ýß5qýx®CÄ~ O}Ì™g—tJxgÆ“‘Û§rkJ1æŸÜEWhü†xR§—Q¾¹•dº»¿M9ÕOú±e$±8èC—ú3É5X¼¶ÓàÙ,¢6v1Â:³8RprÝWóéZM~õú¤D~èaÍâµßµífUòÆ_ Ãhƒ€Ä¨¶A\Œ{ÔÞ'´…a‘%˜$ÄFJ±vÙ’TÛrË’å†9«P|ßט¹´#±ÕÌû×í8ÞUAHÏÜ–BÜw);~`}0qœÕÉ`vy$˜¼ŽP®_ÁQŒ 8:däœÒµ›õcÝ|ˆíf-æ Lgqz1ÀÇÔèqS™îfÚ@‰Oi Ìyüxúõ #ŸÔãÝqòÁ½~V3ü#> c<óYò,PZMs.FÒ¤?„&ìàg'¸™ïÇBw·ÈÅ«Ø^Ç<~dnžÅƒÇÓéKq$,»ç÷[ú®qéÙqKi2zÞ£¤ÛÜêfé²ssê«¡ã=ºš ‰¢é!Ä7žT@€8* úevÛ ò+w+ÛÓüˆJ×õÎê9ä;1¾71H8$òà§OÒ»Mμû›…,1åRªÃ>á[·~{Rª·C¦uÞÓá–þöè6Ô:~œë¸IÁTçæ Ñº:ŠÚ†Õ¯­ÞSþªÌ‘OVÝ;¹Ç]ß+½û×—RV¿È^õ:[[x¡Ó.¯‘vÝ<Ïæ9o,­º·²üûò@=kFÔ‰,e´yO‘, ¹?(ŒËnå²~é «ó{3Îø-ùš¥ï¥Ý0ÓníîüQw{g:“õ½ÄAcçnd?¼Æ~c¹¹èæàf¹‹:+êZ%Íèxd’=JyNÆB¯*”hÎ>èá[»q÷ˆ¨Â/ÞÇÒÄâ¿„þóÁ£m¬ÊÀNGaåô¿Æ½—ÂZ›xRÙIò-5{N“p¬×Z¤²¶=s –äñÖ¾›í7éú£ÁÅ/ݯ_ó>wø¿â7Ö¼q¨X[>,-u[‹öô*WBÞã;¶ûsôê¼5¤gévûγqêÛGÿ¯»z]Ç"¬`óp§%å°ÃîŒôêéÓü'ZøŸÈé,îî§@‘¡Ý¼·,w9wåœd $1äs˜ÏAÞü<ð;ø†ÃQ°Ùýœ^d3°Žæ+µWf#ææ0¤—ÎJç€HxzWšþ»“^v‹ô=[Å^½Ñ¼)á™#ò-AÓthî@Úd‚ÍŒP,‘ÿ ލ 9*À¯¾ƒeÕú0Ìw®§s"·g»¹¹—§±cÇAÒ½Í~æûߡżŸ¡BÞií§’Ö4V„[[›';wCâ;±ózuË ›kyr¬w:nó¾Q´0ÜÉçnFsŽÒ¼~G¨SŠé§½B¬Òº£3`í]åsóB§' `k^ÏO œ»Èq«’S?/=³Á'¯Zo@JìŠæÅiVÞBŽ™_•³žzŸQÚ³5«ÿìˆC–y’ˆIµrT¼êœõ^£ ËŠÍ+¿š Ž`Ý\øÂàiÚ\rÛ#\pc•¹U0­÷‡©¹ª*ðµÇ‡´í2X¿u©kiiä$¶³Ê2O™"ù{dnŠ$)‡\׳†¥Ë‡oÉœ5§z©y•LA,D ¶‹pvCˆ” ÎÒ7àzúñÔÔÃO[WßGΔ7,cNynI#“Ͼ+‰?xêkÝû„–2ÌÌ~]¸FùÁÈõ#×Ò«ñÂôöª‚½½H“9[yÞG)d/– frêyçvHéŽ?ˆôÍO³_ÙÊ÷Ï^!†#æBåG9,Xäð@ +®›´Œ*«Ä¯¢AncÀžqÜð¹8îxüª?³†àú ¶ ¯•Dž¿0KDDÖö‰$Ûœ‡lŸWFÇÿZ³îíÖx$Œäd\FãÕA8§ùÅ>‹ä>æÙL·@³ÃìÈ `§9ë·×Ú½ÀF Ùci€)q§ÚÜ„= ©@ê&ÜÓ¤oäg†W‘è—³7P›Q}ÂÓPŠÚÚè¯-=dVÛÜ)íÝI+§Ó4µº±P¶6·8hpŒ¹RØc†èAÈ`:W‹WoTzôWàhêVöz‡'¼½mKÄ*ÜìѳçÔóŸî“ÔŒ›üqâ±#ºÍuåÛĬ«×åfZâ= 8>™Îví‚5ýIÅÎßqÂè>(Õlõøõ}÷KkEl%ù‹ o$ž1ž£8㜑Rê:߉õB}^ïP-w&!Ûåæ+±(ؘaÕG¯<×´©%/‘㺎ß6kÛ)l&8÷cÕ†Oõ¬O뚆™h–6—-µÝÒ]̃çG ŒÝW+…lª8q~úÖqŸàoƒßÌ»·¹1ýìp?_Jõ->)‰h•F«c¸QÔ}+ K¹½a·zq‘&\,…Â:¨úò1ëÍfh×ÒÜO-¬¤¥Í¬q™Tú?FO~ c Wâk5i}Äþ#š;Ûí?M¹“ýjjkä"Gá÷pîFMw? >+ÚxfÜGo­0¸±Óµ(™Y£{#2Ä d Š~CÁ!<¬¾1éá]©/CÏÅ+ÍúŸ^øöªðÞ³á-VÍÚîm´]JéŒLɾ+['š]Hî‡p`B•6ù¥üwÄ]ZóÄ"V-BâÈev—‰Õ]›–ŒŒ÷Æ7däœó*ŸìËÎa…«?ð•Ã!`ŠŠ¦I9Ér?\⦕,J_ æL@e¶©ê9n>•â#Õ{š¶.-á‰46êx&ß,~F;Z}Ìæ;†ÀÉòƒ #nìréÛÚ¦J÷õù‹ö¯´[ÄB…´ã“”²võþÜWx†í¯5Ë€ µÃ´@ãïÊ‘¹9úp=³ëU‡^ûôgîüÌVñ®£á vÚ÷O\y¶·ò3 ÆÛ¤ŠR„ ÊÆär>^ziˆ×þ%·›K\ke}%“ÝM½ÛgØä’B#FbS/×%º¸׳Zƒÿùžd£zëÔ˜ÇËH’¦ü«çðâŸByDL9G<}ãúûúó^M¿3Ñ-¾ž<±}ÖY8ãrü¹>¸ª·0¶ǰSùQî±ÛQ³Æ'tŒã"ãlœœp2~£_ëÉgt—‘ÉÓ¢ªN¸Âmägî§v @1Ï4-þñ?Ô¡¨4âÖD[¹y!#L·Èza2 #ߎ§š«Š+ @Ì›%,I8á‰ç8çŽ9äÖ±Z½þà…s&aöî?PN8ª¯ xcå‚O®â¿ŽI5_äC)ÞFªÒÀ8ƒŒðÒ/R?Ù'·luªPíB°Äޏ=Á*ç×§côªoÝùÚ¡g5€¬6‘œôÆyúÖuýò®# 6²{àDäÏ}x¡+þ#oc,À[r>~Ç:îqêq’§JÚð^«öPÙ!Ûr‚fLó Í€x%KgèAéZâ5§/CžŽ•©ëÐk?l·ÞÆ@[›i#qÓ*§$®ù¸Æ+U=Òù¼e%šEÚçðFï/;Kd©ã×âYóü‘ì¶¹Oñ¿‹µ}k[k8îKZèÚŽ¦-Ø¥äclÏÙ‰Ø`c gšçôû Ü ËÀÏ1–½,~p2}+èhAF’ôÿ3Æ­+Íú%¬É"à7 #ulŽ™À wç®kL ¬œïüwŸÎ†B-ÆCnÇðÍî¯õ4·ÁrŠ.0•†{0À9ŸR“4¡ºDT02Tú~•vÉà p gÛ'bGs¹z~UŒÖ§U6idü¢BgŠF¦Â7} =ý=+ñ|Üýš{Y¶ê·2¼yÎ Ãa=%yç¸Æ gâ/CJÜû‰üI ®½á{ Û¨àÔ$î¼n¡×;€'ŸBsŸ\ù|5áÈ4(Œ¥Ä‘E(-–+»·Ýù|Ðç×gxÙy˜&ý «o èZÜÑ[i—’­ÈmΣ«F˜Ü%wcƒïÇ_¡<+¢YèZ qÁaŠÊMÜÅeÛ’Jç=úW*£÷S:0ñWfŠõ»oØ´—5ÃÊ«÷Øyc¯nL{xêFÚ΋^»ÔI¹û*C03ãäñÇ €=8\œÔ¨{—ò+›Þùv©G rKù‘ƒôSÔ¸?þº»¨Æ·:kH‡t™uà`‚ZUØáXF>÷Ýú•} ?Ù^izh·¹¸kŒ šWaå.sÉ-É8$ž0¬=vÅÞò6 Y®'‘ãè«}9Î3ëŠÞ›´ß̉뜗L‹T³¹Óä$­Ã‘8>o—½H÷P¡±Ð­"Á¡´‚ЮÓ´ŠÞí?øñ'žõÑRZ?S*kUèt±Ù1FXÈòñ²HLŒ{Ž9ì $6 mÈ@öq!9üë‰=N†9-OÙQ>rÚ³?9ýëqÏLäûUYìÕÜ+’&îI,6s“íj–ýà[’,+bzåKÛ‰p²+ß9?AÇ5‚š´?l’w] É''ý€2Ä· ÇzÑlKz²ƒkY€–AÕº±eÝø œãÓ§JmԌ֪qÏ–Ê}‹IÔúõöíõ­zÛó+éÁ›{‘”i#o|íçëïúU)®ZelŒ ŽÝW?Þ`qÏnBãÖšè&·2õg6—’`‹‰`K|tÜ~N}9õõÅ x£‘¾ùPdã8‘oNÞõQÿ2:g—É%JáŠ}O§¯nõxrŒ†fcø’yÛ§zÑ~¨%Ôt3†D‘x(IQü¹ÏáUµAsi2w4rî²’Çp8úŒúõ®×¿Üp§ª&m{]†Ê+!,rE– #‚$Ø]±»6=òxäñ\åìºÄÒ¶ë£æ],…ñ€Dh ˜r ³žõ4é¥SiÔºEí6Õm¬"€œ•v,}Xá¿•hª"uV#×’E7¹H^™ÆÖ<åAÏê \…˜±$‚·o€Y:àú†íêÞÀ·-‡XØäݰúžzcÛŠ™%í»¦8ôÁÇNýÿZ·&ˆ`À|¡HoL2ß÷ÏáÖ¬,®ªvÆ ý?,àtëŒÔIhkÌAîÐ+>ØTÜ6A;›<ÿ01ׯ4¶ˆb›÷|©Qué?óâ¥FÑù–Ýä[Ô¼RêÐÃg¨Ao#„ºŸK²¹dåW–[„Ú[$*†#¯Ì8­%Ý'æ„§ûÛyÖv7R`Ë…Ú_èÿtà{{×'âCª«ÛØï’#¤îÉ@ÈRy9Ï' àç„#«õfµ$”L¼“(À:ÿ/Ãü+BÑr\öÞ‹íÈQÿ×®›œˆè´´Ê'#€¸\ ©n"åZ–¯=…öèÀ)±Ì òÐpÙÁ#ÛÔW,ÝÓGDšôGw¢ø‹ÏŒ…ÿ{k;6à4­:Ä·ïd¨ã‚3ÁêZeÕ˜²’Å™tùs9¸=úãkÌjÓ;otŒ‰¯NË®ãÞY ácÜNxr£>ªØÀ®vÓ÷ú„S9ÌñKv±)<á'¹ÜIÉí»“œ@¶§·ÏüÌžïÐÒ{¨æŠ9 äbvòôÆìâPþÕÉÞxž!tÑÇ›hd$#;1¼ß0Ç8È'uÒ æmØôÏK`ÚE¶¡&Zk›1$j~O.&-‚ÀŒ‚Àåx!ʰbã¼GâX[ÆsxjÝy¶6w7Š UE&dA’K±Ú¯×€GRN=7\ýºq§|Jõ(_ÞØ±1K,yM±¸;NÒ !äôã<ñÞ¹m3[}?Sm6êMö“ê—ö²p‘öžàr€6yP[šóaÅýçl¥ª6|Ci·£ÂB ÑLJá²Y×=®sŒŒïh‡DI:››¨Ù]ºax\Ì9ç®;SRýÛAo}z›òñI)Ây¨ œ“©ïŸ»Žýqšž[6X¢Œá<°‡ñ*@<ç¥JÙ÷3.ÝmÉǘÖÄœð0À¦x÷út®zûS…ƒû¶­ÂÈë¸3ÇåšÒ*é|¿Qu0¯¯Œœù Š/\©ê=ðOù榴ÒÒÊ yçÎ니bŒѼ¹ŸÁëƒé]ô£j2ôg%I~ñz”5}B&hËaB’Ãø³1Ìþ5‹-ü-æaù Ýx<t÷â°Œlå+±ÑÝ ‡ ,lO²çúÔðirBíϰUAÜú`WMô9Q"@¬¬ã# 88?s'ôþf¤·´q"¯ÌdvUO_Þ¼crj>ÈÓ÷¾eù.PÀá£$G°=He2{õéôÅ$¸ˆþ„‘ÛíÛ½D~ê\·%Æ­À'qã‚?™Ïÿª¡ºÛrí„;‚ž™Â±üp9#üjОå{{Û¨íša’Þv‰¤ÍXK¨f?wwÝÏLþ³éÖñÍ¨ØØo =õÖž°ç©ûD±D¤»y#>ÙÍSŽÞ¬ÿ$zΞúW†4yu´•öe„×·¨¸gŽ4 œãÌ‘Wääöó¿#ø»YÕµvR––mÕïÔ“ËÝݳ$aøÉgldcäØÈ®š°ø“2¤õ“þº†lÒó^Ô$UIµ½¼d`åµ…XF¹8]Ĩ8,ËŒ“šðýZogÔäi&Ô'žY œçÌV$L’NåKðD(|lB©w{ö±ò¿z,×øV$Ú ÐddôîGJÒA'£o—8ÿlŽßL×3Ù²X—i9ìêßP@­­>ÔÊ‹ÙÛLç®ÄgŸN cVVERÙÓé‚8|´PZU‰Aî6n þU¸0AiœÈrFíÌÍÔû·8•ç¹kó;’/èWIn\)É]Á»ŒI/原Z¹.ªdº™­ÙC¾’bbçn<ÄP§dóÉ<€yæf®þAª'» ui9‘·Æïl äáy%¹®Š×ÈÊ_õg_wl0FÅ~œrK1wçn3ÓÖ¹'BÔ«%µƒoŸQÖ-lí£a¿Ì–w’%ÉÀË4²(àv⮋÷—›BžÇÓ×:n™á?kÞ*3ÃzeåÀaó³Ó­ÛË+ýó墪Žùu¯šu Ö|C©ø–sÖ§´ºT$1Há´·„Æ)œ™À$r},cµ4¿¼Î2½Iz"¼VÆâᜆ˜¡ú…?¨ªúŽ‚Òï0€²\2‚N×”t*¥ö°8¯25,zžÔFaœÐ4i’Y³¹@.G’À´tî ­'ÔK&÷!”òx?þ½a%výkDHdSŸQ¸QÓ Î>¹?¨õ^ŽÛÏP-s¬Q_ðçoPßÉ&p7Ú¬ššËöXšT·¹á4Õ»ò3øñ\Ô‘ÊAW0¸àn$Sé^Y}ç%Iêwß <#qª\\Io–ì"ˆÃ |à)ÀÉù¹=8ì0Mu^:ðy[w¶Õ\[I`ò]¾pc°ºa†ç~ã”ã«gŠôµêq_÷‡„ΡpUp$ÿ0aøöªÎ¡€;rFAüø`×1ÐÍ̪֔§;Gš¸ I?ó©#C±Áà¨n3˜~\gð¬–ĽÉÑßy;~@ê;ó´öaZïÞŸ)RÇ é’ þùÝúœvü* Yhä»°_÷T*~2·áƒSжh[)pÊNk‘îB¾Aý9¬mvšxQÄVq• ‘–•äÈô8+úš´õBo}£Ûè×vwñÈ÷¢…M¡w¬|y¹Î2à Ên›ÃÖí¯ÙÚiú|ërÖwë$VÀ0Æ= ±]듃ij ä×\^¨É«_Ôöïé–qëðŠøŽÐÁo«H÷,®„•v»µ[쎡Þ0›†P¬ã.G­übÒüV%´+ÏŒd’Ãð$Ÿåþq]’³\ˆâ*LHBgºÂà‚A<€Woôã5Ï_ô4£ÔèJýŸÊÄlÄ–oP$ç?^ÕvmV8ŠÆcr›Á”ä*¾ÑÏAò±$Ð{ ãµþó©;·ºƒ c·ŽÚP¿g· € ’d^O÷rC qÔ{S³•hÌdl ˆAæT Ó0qŒãñâ·Œl¾FmêhY2¼tä/û_8#z÷ŽÇŠÔ´·škß³gšâeØÈÀ¶P0Oû@ä“€O¡Fò· ÛÐèï<"ï¯&™osºšÚÑW$¬rHvB1ÇÌ6Õàóƒ“õOÀÏizn‹²IêÖ¶èÚ‘ ÒH÷Žf íUr˜À p3“éa(Z£81oOæÏ1ý´|1Ô ¬¥-5x_M¹ÕìõîkprÓGctc¹¯›l#Dµ†ÙGF?÷SËœÈÇêk<ÕZºÿ5ÀkEÿ‰”ù†ìüܰÀŸá þø§™  žp»GO•˜u>ù†q^C^ñ譾⤒)bG2[ƒŽpÁø 1ÏëYú”PB|ÐBÈB©¡ÂÿÙzûb´O™f`j׌ѼŠvB~Þ1ïœÓ­s7“™Ž63½×Œ}xü«²ŠÔåªÿ"œ·OËhß< >;íeaõÃsõšFºÐÝÂe2Gm 8& þéÂòTyä~éWlwG+Z3Úü%ûCËáý\Í¥èP·úÌ@Ììï–Àãh@£ÕFxÀ ÇSDå[9RÀ¿}CZ½ûEíÃÈêÒa¥bÄ d‘Î2OV$údóZ·ú—êt¼ƒJ¾´”·¤ˆ·qgi’4‘Km|‡ŒŒ`àŒœ`ø{ªx ûTÔtÛ¦žÅüC¯[±yv¢%ª(ŒFÇqHÈ !W#n ÀŒ£õÖ¿#£øáðËLð-µö¡ex.4]:É.HÝev[—X£W+Â3<ˆ0 ÝŠùûMÕ£¼™’ÚÙ£¶háWËKëÐg¸ZUÖŸpèêÍ{yc…¹BX•ä`€äýk¢Ò¯Ä˜-•EÞqÁ è:ØÁ<òk˨¶;éèh­ÏÉæEŒÇ,èù;p»<O›§_jÕ‰Œ¨ªÇ÷‹½Ÿ rĽ‘‘œãƒŠÆEŽ’X<¢~b¢6àíÚÞf8Ï=½3œf³µN==bid@ò(,\UðÈ?xdä§¥\udt¦ê6ڴ͇1Ín’c¨$ZKÈ8lØ9yàã¹Óõ{MÃzeô—¶Ë-ý¶¹9ŒÈ‰"5µÕäQ¶ÒCc²¾x&ºðŸÆ~Qÿ# GÀ½NcLøËáètÍN ˜n'¸¶´šM0€¨$K…Œ6w"–9 S8ÎTU/ þÓº·‡5¶š×M·:töÒ[K ´ŒÆѶ<Ü€uRf8ÆÜW§–å8;¦ix“ã®±ñjö-6ê;{M?M¼¸¼Ó#_™üÃm: ÎÇ÷…Uœª sŠ…çŠÎŒ/ÏätÃ(†8ü+ÈÇK›þG¥„-êÌa"HŽÀ´m´¢àõL†î1ÈÛŸ 4·q,æBHH¤Þ,Äg§sƒþÌ֦͘ڕþÔ“/Ÿg#8ûßwü­sñ_@—LÒ„9¦G_|šÑ'É÷ͯÌɼ•.'’FÈ]òyc°àcúúÕw%•üóˆö±ô®øiMz#‘üoæ".Ø÷ºÈ²wŸÆ¨ÜFgB‡æH0¤sËZIïò)- j¶ÚóÌmDÎm£ F>`È$çQøUßxÂç[ókMmD'8H¤‘ÀÉÎ:‘Æ=룛Ü^‡?'ï©Í$»°Ü`1#ܦ*}˹p@Î;ðKcùš„·4ìo°s¼©À-!©À#ËüñQĹˆß;6{‚1n.jä’G“Ïq´óîÇçúUÈ”mÎGßlÿ¼¡OsRÞá»-( çþxŸ¦w?\õ ×+ÔäåON¹ÏéGùŒö8!±‡r.=:{ñÊ„XÊ—ç%vóœåoNëT´üÔUùÐITóí´þ=zþtåv`ì:c¿mÁOóJŸó+¡¼A¡€õw‚ßð(ãlç¶N~‚’K-cfoùdÊÜðPóëÀ==©·ªZ9H8;ð=þYˆ>Oþ=ëL»Ó£¼*XaŽ=ÇÊó¢ö n7L†òÙ$Ó£¸ìÛ§®ãV!—*È2™ÁåGáÇJèmmƒLQN„#3§ëÇøzgVWü ¤½åêjÛi걉7áC²>xàäþ­iÚBÅæZ- wÆÕnƒÜcôâ¸[Ñú©~Fƒ™rb&9àœ®qCÈÍUµÖÖÚM»[ËRQ¸ãjôÇsƇè)ÇTý{²ôÚÓ٬䣴¼m§i[H’¿ÌxPB…cÛ?5qQÂ+ܽ8šB} ùˆÈôbGÓêjéÿ¤,c^LóF0ö©æeI¨+òñלœ0 ®BçA»½Ô0‘íˆË"¯<(<Ž?Ý þ5ÕIÙóZ›1x)HÏ–`ÌÃÎйýG­léû#‹Ê"H‚GËFGn:ž¹êiN¦¡j_Óí`¶´h#…U .qüYÏR~ö=ÇéYºí‰»…È#Œ²§2éŽ íùºvã¶k4ýô[øI|p4{å¹òÌâæÍıÂb«Í‰\¶r1ÇS¼E§Ëuu,ò8 Å%Ž,yw˜.ÐÀí¼r:EeêÌT=çèŒÅ±hX)“0ûP`}2yç·^´ö„=Öð9VE=þùoð?‡ZÁËSU…ž³‘¸ÛÆ¿ððü3ÇáÚ³å@AXÇT*Iê~R3ÿÖéQ WÍ”ÑFBOÊ]½¾^ëëQúlá£Eõänþ¿ýjÙ2-¡RPY‰î¸côVü?:ŠDÁ>­‚~¤ÿ×­¢ÿ#9Ƹ*îâG·Ì½þ´ÖA‚ÝÀ=zž«¯ÜIÑÌl3üo´{•'w*>\í'ÜŸëùúÔ‘a€ó”îáÈéé´ñáùö¢Õrå?ßÚ=B?­KØimèT¼gy”IÂ(Ú£ áÏ'ÔóMµ@…ŠŒ}ÍÞ¸UCœþbªÚ׿<9ÎGñ#òoê)ÅÈÇû[úcý*­¨t"i íÀÉCÛ¿^þüþnÒëÈmï¼{32“´ãËÉÃsƒœ`}1Ü÷wô*,’‹‚è›’¡Y·ª09ðϯ×dbÒòê¦)?ˆ¥ðüÆIón*9Ú‚Ÿ÷ÕZ2c$¶3 -øí?‡j›jUÇZ(7'ï ~¤õÿ?Ÿ]HrY@á’Dê:?ô5œŠêttèA¡~i7ÊÚÀïòŸåVn.’[wppÐË9SœmP\Œ{©ïž¸ãŠá”}ï™ÚžŸ#âWš0…@ù¾;囿R>÷_ÃËt[‰Š±ùÃQÜœ„à}üë[i÷™'«-CfD“J¬p¤¬ƒ³*’ÜŽøl{wªLc3”‚Ñ»ïïó)ì9ÇLgÛ9Í\WáoÔ/¢'ò¼±…xP}‰ê{d{v•ÜŠO¡;›‘ùϹ¬—_@Òw8sò³È (åCy`uÈ9e•QØ®¢¢’Êàg[ùSd`f=\ÉÓÜ©æˆþƒ¾‚)S6Òpæ5?båM‘7““÷vcêI=~¢„ÿP[ y6¾F~û{ þµf%Ü.yÚ¯ô% 4ÿÌ¥°ÔùdöÃnÁ3üé¬Ëg±~…þ¿‘©êúü ­_c©ãnò>ägô#§zÑÔøˆñÉázÿßUOÔÒžÿy`ÜJޏ| ÞøPOç‘éj^ǹV^».y8cÏ8íês¸ÜÕ¿Ìéü9¢Ükú~¡yjA¤XIwsƒóR-ÙòÇ$Êàö®B+V½šrå„q¼ÍùpøÁR:ç $œ¼Vü¶Ÿ74އOÕ›MÒî4¦³ó¾Ù ¼Vr Ã $±oU ©ŒcãëN£°¶eD;Ù’g˳’pI<ŽçÓ€jj»Â>…RÒ¤†ßÜ<öKqFÕÊdàÌìy=ù,¼úž”ÝÞó^ÕítëýåÇœÓñœ:© Æ!sß%†=)Ò†¤ÕžŸ!šÄWv»>:mþÏr.²rL±*žøÝôÃAÍgÿh¢Íœ1¢.sò±?ÃŒûÇ'œâ®kR"îSšäH7ƒ£žAÆö8‰'ñ¨žæU?#œ» úíÁýGëR‹CäÖf„ne#KŽØÇîÕ¤ã‚Nr9ü1SϪ4ÄèŽ2yù÷mcÔr ÁȦ¡ú‡6ÿ#3ívârÉeI“ì¹zŽøëÖ´­îâÓyR7¬ z6`û‚w~TMh½H¾¬w˜c‘ŸpÊ¡üW`$ãù} Vó„NpVUˆý sÆ8ÿõÔ=_ÈÑ=Â$1î?9V'¸8éÇçžk6êq4¹'îî=:^ÜãúS‚Õ¶ftù(]O ¹ÿ€çùb«¿Ý“éÀÜ:~|ýk¥iÆ8ÉÏt8ÿ?ZkÍþÎà?üyãMnÉèuˆ˜uL`3LG׿¶âjYÁã£G+°÷“Çã\ý~@9A(rV,ÇŽƒ‘××9¨ùT缞¹UU?áùЂÆs)k’O1Áî îÎ=ðÕx¦Ä¡¶öT¯çþ«_ä!îq€~ðsÓ ~¼ÿõé#C±_qüŸüþµ_e‰ $’y@ôÉ#ÿ­M’@7sÈÁz}ïÇ‘BÜæA9òËŸîÈÿžY•õQùí+ÿë§!¡àœò…ÿkÆ;ñšHÎÖ\'ßßãŠImè3CM9ó2¿( O¯ÝüMZòÒ7ÀÆÓ¸û+Û¦1úÖSëêió,CɪîMÏžã<=ù$þrj㘋:…û¼çŸÃ<~™¬×äl¶ùŨ‰ÇÙó «‡h°¿¸—=ÇÊß\´ë­E,¶ÎV9#LôÇ =Ï~½M&ïÊM­r£ø’¥‰È5X¨'næR0§nìdädzvªKâmðI‘üñ—èPl+œútãµtr~†-”¤ÕduÚ°MÑœÊvö#¯§JÑÒõ½FÊâ CO™â2¯Âá´rïqÎAéZEÙüÈ”nˆ5›««bóL^S4’ÜÈܳ;ÍÉÏnHJªÍ‰ UÚ#ˆþ˜¬¯£õ5è½ ÷†[ÄvˆÚHÏPK.Þ=1‘Umå“íÐè­!Áé„u„šÒ;2ëÔ· ÄVÚÅ­äÈe‚&u‘uò¤_cÀ0ät®›Æþ9·×¬¢²JŽáÓìlÕÇÞýÆ m½‰'ÉÀàÞÜ3’÷Î.bDxm®K&xÆväãžøèjk+ç· CF 8ÇœŒÿŸ®kÆæ±z“=àt*NÖ$Žz‚Ó 8ÇJF¸D·Hƒr°ll÷Ú¿â3õ¨åЫ”^à±eQó1+ÔÇþº&_.`Ã0± ä|Àµ¬V„64ÈY˜7F'$úç×ñ4²áA`vª®=Ëþ`ŸÆŸêDåUˆ¤ŽñÜ?£fù'•açõý*º|ÎÈ!,P /l`0çÛ¨ÿõT‰ùÇ̱Ÿ¦çüûdõ¬¨]~ll[|Àm ´ãÓ÷¨¤dóõrBŒ~„æß¥.€3QPöå”melxÎÓƒþ5àýã€êxöÇÙþ•¬vû‰êN›¥”ÊGOEðÅXcˆØ ðϸV?Άô)½Š’\ çz„Ï^ô͘|ƒóý3Ïèj‘2äu^2Îzå×?ÏùÕUfYXUã¶‚º–Œ¸9è8þðU™_ç'‘†ÏcƒÇô§ÔDÑ,w׆ö$ {ƒúSçº[6EsÐ'ª“øƒëQ/Ô¨½Ýë0ÇmåÇ–u‘BñÀØÑ°<ý8êsU_Y±Úй`$œ¶:tp;òeÈj¤W:¥Ä’nyÛrùapvà(tÇaT¤fis“¸§'<‚zž§µh£fEÄR$WnK"?©þy¦±*XõÁ$þŸýz» ú|ÍÝ'KûUÄëuŠÒÎ efܤ»º©]¬Hàñž­S’1ƒƒ2…fä+.w)ïþsNQ%Kó"Žó‡Ub­ö€c?#+“Û£u'nÐ@$¹öcõ¬§̨2»¸ÚA~rå>¼öö#¥Wr]CÿQŸ PsUµ½FF+³9åsøË?…B[-œýÕvü˜ÿJ¤‰}=Fù‡8JœýK‡ò¨Ù°Iéž?ãùÕ7ù üÅ=±ìê( žO§PšØž¤y‡þƒž”æ`…ðxË{v‘W™–E¹òQéÈ'©úÒ;ι‰ ƒØôÿ?4´zˆÇ¡Î@Áü|²?Ãó¦³Ìv’XüœÒ€;«9Z8÷ Ñ?B­üxÄSÙˆˆ§%\+6=¯ojçèK%cä —«ä¶z…=»u5Zà;(œœ³m,;`É“üÍJZš=Š÷K¾ÆuQóÇ® )?þŸZ¥eÁó·2?âA?ϧB:š¨å†U³€yè ÿëÓdŒ'ºc»BÄàT¹BhÊ:Œc™<†bxõÉ<þ´ØAóJã‡Ùøß—à*Þß ì¥.=>oOéüª–4‰:™VDô1£1Á>¸À­ –m%F ÎíèÎééÓ‘þ5ÝeŠªò­µ^3ŸÇ¯ó愵b¸ønå æ¥|²ª¼ó¹YGgíþÐçõ&ŸQÞ}=5ȦÔÁ:| <’ÆéÂ.@8ÎãÇ!Hšµu}¤ßj3D†Þ)dˆÆ¯¸íBxÆrF9í“Ç['©OW²[³É©$7+;E´ä©9ÿ¾Ï®F8ÉÍ3ž »®Õÿ ™­MÐ7ýߨ9ü3üéŽIBGñ/=úþŠIb9PÀ)àŽ½9"•˜¡\Ž|Æñ§ANÚ“rb>aÐ|ÿšŒH ãñÿ ÓæÇ}G†ºÓµ7®?ÙB•4„4ÑÉ@Ãñ$õúSÓ$†î0ùüÍ}Jô#“¸þkšaôÎãù?,P·%þ§nˆd†BFdÚ^Xç'×–zÔÌDlÜaI8Ÿ0?ãY1t >ÞH<’?‰cϯøÔs0ØÀÌÐmØ|ÿŸnjЫèV›”àõõ$c>Äf©GÀd#äÌþ½\vùŠÄ‘íØ{ëþy<Ô§‡ÌH'ÐHqTº¢À^^9‚Œz|¿×…BÈ:"¨o©ÁŸ£q*ƒ–o±Ä’‘ŽÈ#ÙnÜðºã]Ü:ç÷ s3@£°;qêÁW'=¸ã…>b¿¼VÓøãèzJR9Cß‚?ëüª_êP …#åf@ÿøé×ó§FŠÏ’: íêúŠÀ,Q¬`…à•¾¤ð¥ÙÐ~bW¶hèÁô“*Üò9ô¿ÏáMÃ3Œ0”~cpþT×è+ˆ3´Ø€*N‰žüûp@ý?Æ“è4Æ0úpXŸÄ?Æ¢S…g‡Þ#û®9öàS@À)Uv×®@^ß>6S ›Ó,T„ú†§éO šF Vþ÷ä9¦ÊNq´·þƒJÚ è.îÄÊÐúéÌÀŒA»ïéEµ«ÔínµÛ»ÚCõ ³?“õëVcÚcÛýÒ¬=²ÈOÓ áëóFˆ}Áòì¼=Ù›¡ü?ZwÆå8ÿDZ^ž Ó^§.V¤ý‹ÄÞ }+ˆï7DñXFÌÁñÿçž8¯7½Š!˜¶`4¤1þ- çé[â¡Ës <ù’ù—Â(n¥’ñ ~MÀ ®GP:gžÿeºþß>GÓq¯*_æzQR#„"¶AäñжÓÔ÷ãü*9I,™ûÀ1Çj–ôEZÝM>DÏÆûIWê AA¦Æ~pˆQ´IeϽª_B—_Q¾6zmóÕ“…wlàòýqþ—¸ï¡a¤ •ÿ¾IŽ9©óò÷%Tþ ò?Ò›R}ß½qýæ*¿MÆš¬wûÎWë†þ•_Pãæ°'Ó8ëôÍ;fÎ3‚6ô8ïù€°ÆRÃ=·mQ·ƒéQ.º•·}0W¯Ó­WQ˜ùË··9÷9$}yýiŒ:‘÷†Ïä?úÿÒ€ÊKŸ÷øúsÚ£<:ÈýôÏãMAÿ/ÝõØ=øã¯ãHàsœeYY?QýéG_šÄ9#©ó1ô;M9˜§ .?“LÚÇ+mDêãiqî|ÂOèzú ØHÄè6œG6à2IU·ÝÇ¡Î{×$Þ¥[ò.}’+—E$«nne‡™Ð2>m͹qí×Óž–R·hÑ©ù\¬yô‰Øô2£8µ ú¢OÂÒÛÏvljcq€%ýÔKÇûÙïÅRµ4çDp K _S„e9é–8­#ð/P4mm\[y²U£äs¼í…~µNEÑIÿ¾«Ç“×î=xþ¢ªîVÁàIÿÜ?•ÒN3÷°2k2ÒÐnÜ)?ôÑÇáŠ,dõ H?‰Sþ4ÁrY‡äMKçæ=‚íúäÒ¾ÃB»¨OP–iåÀØØ8+Àú“R·ù ž2ŒsÐ׎†žàíï˾¹ÁþT_Q4F¼|ž ÿ#JN®óþ<~TºŽÂŽTŽÁ—ñÀÍB—*àÆËŒ³“þï©)~c˜ghrÄýBóýj,ýá×–Ï×ýz)Š~è'©'n=²h`Xó¤}sŽŸJi“a¤|¤w$Ã’c=ä–A¡~£è4œÈ~¯üš„çôí×ò§Ô=HDRàKd„í½GNǯ®O5gE¸H.L1Hï¾x˜¯A†'¯Þ€ä×¾£¿ÞY¿¸Ù­¬Œ ÏÇl¼änF$6îz)^=qÏz“Za™’Ù–8n£–HÚwË$÷ù—`Šùò™Ët<²FGå“Úº)¯}# FzáI?‰ü*HŽóŒñúþ½u.¦l¿há@oP üY{~8úšèô™¥¼†ÞÙæ¹ž(ãU™¤, £%‰<2Ojë¢õ_×cž·Â΃\¼¼²º¾Òïá’Ë;¶Žæ9”¤‰ ‚†\ŒЊãï.÷¤úuÏøŠªÒ÷Ÿ  ½ÕêfM>K9,O¿$æÎN8\ûòkŽ[l×… ~„ŸëQ£.ü8ù^€ÿéP÷-~¡æ “þ‘\+cCg=z ” <Ì|¤ðÄ/ç¸è*U` çøÎßÄþµ·Œ ÒIŸq´ÿõÇ^ôöUÝÃh^þáúÿ¥%¸Æ2˜ålç@üþ5+@b~mäúñ¹¿¦:`Fß1Pxvf#?í#¦iû@êz¾ßÚãD™0Î gŒ•ú;zõúTMØ„¾ïÅØZŸó„.Xޤúžxõã?…Bp€¸ç“ôÏó5KõÃr¼;»pqÅ ~À²ç¶~Z?à@>:°êN(ιLŸj- =…ÏÍ‘Áƒüi„áŽÌS™ÙDÒ0§)±ñŸUëúÔÐuVMmS ÑÈPÝŸÇ Nzg9À®9/uüËOÞFýÎÝOSX.È-‹¾â$[ÔƒëÍ]´‚ÚÃKò%z÷ ã¼Éû“‚yñÆöKúîh¶9SDkxáˆJ¥dqÀ˜ò0+notIjXÔîLe‚UnðÁOßò˨í÷ºuý0jf³Y-Þ!&ÆÆøcÝ~Sœr1Èî:b¥l†Þ¦¹5µ¾Ÿ0‘@‘Œ¥BðIpû~nvô?\Œ× 4­)2;e˜"Ÿ¢€?×EhýL¦õù GËìß™ T™ì}1øk¡þ¦h°‡j7»ãß8~Ÿ¥{'ì…4qþÓ_ (‰þ&øR<€ÅÙò5*H$0ʾ|¦nNôŸ¾½L« ”h»»‰~<üB–õvÞ?Ä¿´£Ë0?µn67pcÞ€9-’K–bIòÉdË–Îs´÷‡ùþU>&:kÝ^ˆÈǨ}E4®~aü%‡éÿ׬™¢ýDÀ 0yÚùüJT%íR÷)l'ñíþñ+Ÿ¨Å7;œ ôΚÿ0ÿ1I9™ñÿAÉÏ|’âMØypáYÿ"ßþºhÆÓìì=ñ†Å&Šéò$ Ô‚äÿOn4#çÝÑ}þlðý)Ø”õ,T“Âmú‚iñÎ|üz™3Ÿp®(}FÉVPfÁ=ŽúÐóSÃ}vãÿ¯SmwvínÂ5ŠQµ"”\HÙ\à«9RzöW9«ë­q Aͽ²Fvç Ãq Sô䦯/‘mþc­^äI??<ÎyÀèbt8ÇNƒøô¨æºš®­åo1¦–Ô’Ã$–A&~n¸ãœqØæ´Š!³î`_¦r;ô'ŸÏó«NÊÑâ=å0'ŒÉã¡çÛµjÄ‹—lZ4>XX}ø'¸_óÇ­T*ÛÆçØ¯øÒ[ î+°|Æì*úr9ýjÚ“9õÛ‘×£|ßή;¿Rå‹{ºþ@Òôlmà9ü𽽪‰è"’©z±ðÛ^¡ð3\¸Ò5Ýb;="ÏP¾Ô¼!â?(ݨ"Ú+->âúicÜBX"ôÜpd7z2´þLΪ¼>hóýgQ¹Õu9¯®çyï.LFi%bîåcTË9äá µRÆ1þÖY#ý3Y·«ù–ú Ôn8È#?PIüx¦1ù@ìr¿†©€ÝŽë“ù.)yÆ:)_ÃOåšú9ÞÇ _×b¥0Žë»ƒø6§ëCý$Ž?€ÿ&§…+Ó¬ÇÿB¥}¨‡æQéÈý?úÔ»pÞÙúÿõé?Ñ\7º¹? ¡œíퟨ⎣ŒãÛ¯à4.ÿ|~@ };wÌFÊŽ?­$™àÊ@üèCc1”-è9üKÓG ÷êMèÅŽï“ÛÓ§é@=ÿÚŒ~<‘I1ØI ·û Ó4Æ:”ŸÌ‘@˜å`%9ì þÈþtÒß!8ã'é’OøSûB.Ù\ª á”ûçªc˜>våÐ'¶?â+¸ï±»ivß1óIqD p8ȼŽúU{À&ºùxSÁ’Ëòò?N½+4½ï˜Êra$x‰É+´öÿ?áN´“Ëúà~`#úVÝ·'’RHà ®R>Aé¿éëÍ2Fù )æÁöÜIü(Òg >ê)íÆÓÇéPΟ9n€²gþ`ÏáMtUuÃØw#ë·oùö¡y{ayöÍh‰'휷ëþrÎöK{[¸£`õ”6·J%åØÁ<¯ïbŒä`àm?) Aõ+’7Üb9ñÅ7??#¸?–hcè"Ç”Œ¸ý­1×§©}>j—¸º ‰›?t·_¯õ¥1üž¤œÄÕ-Áˆx\z€?¦¯.ý¨ÿ­.Þ£ ¨œŒëKÐäõúÿŸÎ˜†‘ƒ»¿ÍŸÄ­9 Üyàg\ :‡Acþ,õ;ñøŠAÇáåJÀ˜¼*c0§þŠiÈf®9üÚÄäØ7_ÆŒíÏ¿ÈÕ ƒd;ƒÌ⢠†>¥Éü‰¥þ`<¶±þ.ºä{Ÿ˜}xÇó͇œùËü•…Ó'õ4&/øwß+ù`Ò{v š]Lí"ñûÍËõÈþ¢¥sç Œ,mÎ;åóÏãX uܲaHo“$ú`)ç¿5,ŒÒ ËÀ3ŸÃ §×î)?Í30^71ls€ÓÁ!Æ;l'þúÏãWÐD ÈcЈöûÙþµ&s §L)ü²3õŸ@]HÕ‰a؃ÿ î4IlòJgØŒÿŸÎ…þ`VpwœðGæs@ÎpGÌ ëøw5}Ú†ÍùåB‘øœÿOÖŸ´£’N>܃ÿë¡‚§$ç#Õ©ÍÔóüõõ¢âCcŒŸpÅOòiÊ€=±ùîÇëü©=ÀG±Áà³Oâ#ùf$íb{|ÇóÀ?ÊŽ£KqÆ!œõþ}€¥X‰Ü^”?Ô-¯Èc.ÌóÐ;q¸¯>©D{‰ú~ ŠWý-Ä—pƒïýzN’§á'óÅ éóžVÜ@I÷ñ FrG÷XÀNú•aYv‚=òš@Á8ÏÞ9üE ˜˜Ð¿)$üÁëHSûŒý1š "‘³8ùöÌ‘ý(#i9Çf?¥;þA׿5WÌÎà?€„0ãŽG§½ ¶Ÿ1 fCÇ,Pþ$ƒŠWR¤ÙˆüóEÂߘÁÏQŸ©Ïô£†r~™úgü(O_˜[Qÿx('¸~+ëZYMŸâ1®sü;³Óò==1RöùClG˜\¹%/éÈ-üÍ>vc.AÆ0€`sϽ.¥I.ížÅ€údP§úøàgùU“Ì™OÝ$òA? ¡ÉÜ0z6,ž´t)þƒ–í þ”¤áqžXãéȦ&4|¬2:Cüø¨I9ärJÿëúÓ@Á”ÄvÈ?Pqþ4ü@ ÆGç‘úŽÞ€¸¥ˆ\ ?1Kœ:–LÁ¡˜ ~U¿Î?˜Ïÿª—v ä¸úwâ…° œ®s»êÃËœØÁããÿßþžß0¾rOÞ'w哚FrT×o?…/ó2¤ÿuCûç<’¬>¬OÔôX}>CT*  ’Ÿò~”­»«·‡4ú‚vç8ÿ0 kïëþñý lNy›”wû»‡ãH9èA ~Doa!­‘‚9,Ì?­< dçn'ÿ¯ù~€˜’ã ÔR•¹ü²Fh@8ภ×÷ƒé×ÿÕP¸#žì¹‰ZhlRÙÝè?«P¹b?¼=ñ×ùŠBCsÉÇ\¯ò§ÝØ2ÿ3Ld›*{ª¾?1Og,¬¹àþùÇùúÔ ˜Ìí*ÀáF öèû¾]ƒ§˜TúsŠ Þ§×îþ¹§!;ƒúàõÿJ® I‘»‘ó~ì~è)I1'¦ÏÌŒÓê ÁÆpæsýJ^3·ÜŽ¿îš˜ŠÃiÊ‚GãÿëÅ*¨àçøáO u7R{¹–?ÀR® óøõ©=À$UÆHù€ÈTXUù½°h¬@Ç£n?“ R¹ ‡ñê?Æ›ÙQUs‘œcoå×ùâœXŸ˜ôÅÁŽdÛÆx8ÇNØïý)|¼¯§Ê£×©Áý3H ’Y»óô ?¯ò© *;í?¦º]Áõæ1‘‘ùmÊ¥@î©@žÂŒ#<6òÞņÃúS@ƒÜœûàøqLc íRHûá±é‚ME±JŸm„~_ãŠ.! `0Ç÷²~Ÿç4ƒÏã·Óµ$b=Ÿ)=•ÂþcoãÞ•FÒxÏ#N´úŒb‚:›ù\RHFHÿi:~?ýj:…ô eO¹?™æ…À*OL®?ÿ]  ûÈÿúèîûG?‚àŸzwñ€Xñ÷wŸ¡ÍÜHþîsùÔ½˜à¡ÛØüù©$b©Èà¾}F0Æ•À‹ÄúÈã?•?½BþZ`8²pæ?ÒœXHÈ;¿™ÿiƒÜoÉŒ¶}~”‹Î[¹Àê¿ýjOpè;Œâ'óPÔÁAÀ;9ÿwéGoP[ƒŒýÜø§¯è]ÿ>”/ÔQcÀVóŒþIå†`csøúÑpˆ Wæé‘ùf•ÆzŒýH'üh¾ámE(çøËƒ‘Û¡¦€¸èpWðÅLz©ÞA_›qêxÆ>´òÁÎ$®qçK¨=„rì'! ÏÔ?‡®:àNÿëSo_˜u>V=¹'þúãñéR†\ã,Ùõ'õ¡n*?Ì}6o®æ¤-‚¤ŒírÐ`Ô´Q„±-ƒÉ9öä&IVnxeϹÉÿ9¦!¥IVlù¡”žH瀧ãOüÉFT“üJã=óÅ! 18ãqoĆŒ’AÁ°€ËùÓJåˆ÷'óü)ô£Y3Ƕ?ŸøR0>˜gúa€¦ ŒÏ|ü•©»@P?(o~‡ÿ¯CAr|/qÕAïõ¡Ð)8èÇçŒã·qIlÄØ%\tÚçôöïÍ.Ò÷}ýT’0©>ÃaÛôëør)ÿÄ änu?C·çÚªÚ‡@#7ðIü6Ó6èN4ƒ ¡FãÛæcøf© Gª¯åÏøÐÆÇxÄ;uÀÏéŸëM …|uÜ£þú„€sÔ¸ü?©ëAp@PÄPú•lch>ã¡ 8cÏ#åJÛ× ÇwûJGû¼MÄ'Œm€ÎOçE†ÆN?tœãô©#Fn:™÷ãq –;¡?(Áúü ÿ:W;Ôå¸SóôÏåBCß>; ØþîTÿOð ¨Ï© ßþ¯Ò„¿0c„gspd>ÜcëD£ç+މüãžý)!ßA\|£·ÈßÈÑ ;\T¶Ü}@Ó&•„ ž (ð%ÆOçL|îfÿhmú uü*º Bòzïþ€Ÿ¥7wU=qÇŸO¬&1´çŒƒü‡òýiŒq´I ŸÇ­&€R lu,Ì?4Å €2œç8?øî?4õ¸Î8bvþCŸëM#æ^y ÇñÇõ¢Ú¡S×Õ‰?\©¦c'¯ ?Jÿ1ñÐ…'êN?•;ÍÝ–<·ËûèsùR¶þ¢rpOvaùdÔcç'9çñÒÌrNM=ÈõÀÿÔÑmJ[$ƒòî?$ÿ*\#žrsø‚?•R@25Îr:`þ Z0KÏ!w~ ýiu^£èääðÄ~„Ò¸}ã÷M qt›Ü+/æ þTì¼ö(?ž–*šÐ.=8ô;üTô “‚1—óÍ$¿!½ma‡é‘!?‰aB.0þ³C9 ÷qø-<Ó=Y1ÿ}ËŠQ@;E_ö=ðõ`¹9Ïþù OõýhH'o•ö‘üD~#¤óCŽ›“PHÏó§m~bFŒôÝúÿú©eãã*?ÿןçI-WÈbŒóµ¿öOëN –#ÝóïÅ7¸†°!€í´nü3H¤neÏÞT'èÄãõ5g÷üÁ€éí·ùÓq‡'ÔŒ~güh°¯ù†ÜcŽIãñÇøÓ¶ Ê=T±úì?ýzlöW³,QüÅ+©] ôbásëåäÿ$¿16FO>€óúý);žÜ‘øñOüÊC_–#·_Í–›°–ùF0Üÿß—Úù‚ÜÿÙASCII R980100PrintIM0250d ¬ ă ' '—'°''^'‹'Ë'å'gtg|ASCII R980100iÀiÈ(iÐ üHHÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¤U"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?â$žàTˆ›È@Øã8¦Ä °ç©Ï4øò'ns´rEs¶n‹1ÒS’p8ò›ƒð¥BÒFrÝÀæ“í Ë—ÈïY´Û¹ZK…†5R0ÍHã|[08鞕ɌQœñ“ŠS&Ö'ŽxéHÞCVéÏãOŽõÜ85N{¸#Þ¹èjå¼/x6Ûùà‘Ð{Õr·¡7]IÜDNáý¨VŠ52JC7Ö«h’Zi&hn\† ÈãÏ­¥Üƒ÷úƒö#Z©Sqz‚š{òIÒ÷y¢²F“·=Ô‘š)h5¢;0ª8$ž´’˜Ó ¸x·Wyä­T· 3—“‡$àö•ÞãØ˜ž2PÐUå‚WEè{Õâ­0Øvƒ‚OZ@Î̤€Ê;Z«’g½“_o—÷wɦM-íºâ8FaPð¿\ÕÒû®˜†Q×¥8œ…ãÓ+m[QºXeFDfù˜àµÙÙß!…F (zã¹÷¨-”ÛÚ´¥@y>UǧsR 6H­òg ”Oâaëô®˜+# jË··ÑÞéòÀe¶ý+˜R®w•=6Õ¹&@ìûDh«ój¥½Ìl@¡GaYÕîiO±3º 9÷¢š$s’¡F{QXØÐ$g½CûÆHWãý}À§¬‘Çò×äÈÀ9©àvc·Ì¢ّå§$u8¡ Ô²“<Ùi ó‘Ç4Ç!›,O`O!P20݆jU•xìpz„ûЋ„=·“Æj_'Ìp‹Ì{ThÈÅkèÑÇ=ÞK °¡‘\`SK™¤ Ù\°`Ž %™wAîÑ3þ±Ç_ÃÖ«]\É?Í#nfê}?›5ÈžMÍò¢¨¤ôª’̯*ì9ìk¬æÜÁñT­oe`àJüûTô»‹tEJ€žÕcÆ`µµ¬ƒ%C0?¥ai¬s…5•EsXhv(ñ‘ò°Ç®qš+ r î?CEaÈÍyŽˆÇVQÆ{çœúS—%¤*@àzÐR5‹z€{Ó]ñ€mþtŽyˆËœzâ°å½šä‘ £Ï Ÿ˜Ôú­ÉØÑ‚ÙÎî­V¶E•TÆùžŸ…\R݉öe¼ˆ ·l{ ëšÛðýíÐŽôÈèíå »W¬¸­%|ïÚqÐzÖ§‡íÝo®Pó@Øü?Ò®oBd‰þÕ3¹ õæµt»žty WA׊Ïò KŽ 'ë¥ÒîVT'ÓÜÖÉjdÌOø|j2Ej¬%r!õôÍpöæÜaÆNô_kKÒËÂq<ÇËCýßS\«oB[œòO\ÔVkbé*#;xíEJ# ÏOlÑ\üÖêmcUÝvŽŒ:Tm**ob8¼×C5¼wV£$*õ“ʪ-Ñ58É8íéZÅô%¢›jSñ–E^ ¯Ö¶ü%qý¿ne˜›rŒAªÛeä8ùÍ_Ó-P_[G ƒ=éÆKk Ïvu—¶nå™ÏAŠ«o1YÔtéÇ¥vzñ[«©ºGò â¹I켉C»šék±…Îoâ4çfœ½ŽöþB°ô¹D«ÈàVÏÄHÙ¡Óeãk¯ò¬ &)’ÀÜÖ5‘­3hG¸uàqE8¦0<ÁøÑ\悪‚»È€ nÐÈyÇcJ¤³léíCÃ(\ÿ;…ÚG¶>”2~ë;úm51ƒžÞ•ìKòòžÝhØÆÜî<Ž1Ü×q ø|mxèÁãŒ}2q‘XÞ´‚}Y|ù;7”Zïml. ¼k{kƒ:nÈb:gßÒµ§ ç"Ãéï{¹Ñ~fçëY×-Ë(@¥XžwW_il¹µ2jÃFÌ÷â%òáSoäŸÊŠp@ƒ°;EcuØÓSNšHfw ±8ëéV­u*ìb$Ãå÷UM”ÕDS1Ê6Ïá[:†ŸöxÚrD¿Ç#ã[Ó^éŒþ+ÓL$œü¥y®sWñ4ë#[X8Ž5á¤^¬}½[Öµë1o*[Î%¸a³rÌ×M;…‰Úöå²Zæcž§yæ¡íM§F `Þ”†I 3,zVáÓ¤gPô,95fÚÊU2+3޾™­"üÆ8æ¡Ë±Iíôè¢l•,}MY¯§1J$m¼‚9õI·x;×>ž•nPÖÙÆâÅ»óÒŠD>^w!%Žr¼ÑI´/µÁ‹lÛÔ9$ãJÏñ‰®5¢¾dÌÊ @0©ª%d»Úg'hûˆ?„UK¤]Š1Wa2–Oùc< ;úÕÛ6@Xp+M‰ÜK}6iðFæ´íôÅ€† 1÷«Ñ®ÈÎÞ¢£3*ͰƒÔnéY96U’‰ùéÇZkªëNiÀyÝè£5»ÈÌBÆM-ÀRÙ` ãµ.Ìm"0IÎFÚ é–rÒ/\ô¥pÀ+ ž¤žGã@ÊÿËbÊ{Í]—ÔŽ26œÑFƒƒå#'¯ô¬Û’Dçžy¢Š´CØt6ñ¹É¶-¢HÀe^xþTQCذs³vH$U}Ù%J©Ï"Š* ‡—»ñêjy™¥ØØ*àäQE8ƒ''`÷±øT‘€ !G~ÔQK¨†¤œôQEQHÿÙÿÛC          ÿÛC    ÿÀ9¤!ÿÄ ÿÄM !1A"Qa2q#B‘¡ R±Ábr‚$35st’²´Ñáð4Cu¢³µñƒ6DSÿÄÿÄ>!aqÁ"1Q±Ñð#2Ar‘¡3‚Rbá$BÂs’C¢ÒâñÿÚ ?âZRþí,qX™¤¬”v ¬êTÍÀ·ô½ºãJ–÷‰^›u4ÏÙThcåÔ^ݼXÄ ÓZ¤¶ÀªÆãÉ8ËZZj` B‘Ê$™ïµÉ àokx ŽžVÆñG5]\*Þ­!Šìn k°{ýe®‹?Ô²Ù ”ÅdRÒKMDVÒ)ä·R ÆŒÓ¹öÿ,dôF*4Ž@,#c°!˜^þ~xÎí/µ[s ˆ"Cò’‰[3¨¦‘”­<|ËeEéõÃ:êg2‘¨4”Î ßÆ/ØõíùßlÚM̓uzŽHû3—Ür—œ®“*Á “ûÍ¥[‘ùïˆ*‰£ÌDs(Ðyt* þ¢„ŽÞ/á~øck¾C‚#›&Ë”æhË=x“7š¦!áÓãXT~&w¹ÚþCþXF”{±qbnZbàPRÇ—+Õ1%¥iC“æ#-úZß\%›òZi8`¨kaªc±=®ªM½=p6¸ýW­hPæè·J^»1ñ&Ö.w¾µúY‡_LFeuq•d6b•1-ÅÀ> 7ùôõÅšÍoùC{‰Š0äåqK ûHèw|D|ºÿ.˜ÒS k¬€Âúƒ“Q£ø¡͸I ¬ÈÙ%¼b'—kl®Q·÷Onýpî¦"Â6f¦5ÌæÖð|KóðÜuéÓyœ?tsýlJ,\ˆˆvThÐÂZHÒÞ¶ÕséÓl乚ÁE¬Á¤T þvcïë`1w T¼5èLÒ)¤ÙûI'!@øåoÒëåÚßL),Ôu2©VûÊ`¤Ãr~+[çFmV¢Èž¶'9‡S#F] s(#úÚä/åÛ5|q–Ó Ø«ª9!ŽòÙ”U9"Àù©µÇC¹ß£;¸6[<Ò±l‘;JC…sh+h£©I9Ëã§*E¹,Ôœf%ÎÒ6*µ€´[ä ÐHf‘˜Ü'o°E o¸ ŽÛ®þ’¹(Y*X“CSG+ ]]Ú5»êJ?«¾ÆØÑ}„u±¢RÝÁ3Ígvú›\nøPµÃ[ÊÛ-°O³­*‚ßì/qˆ¹'è-¹ê|öÁimîçûy&ayu±?=e*ʲTŽª3m¼Q‰w>d*áÆT‹rJZ Â[©y^äþDò8Å|Y½ãcf›:Æ$Ç:®’­N˜åsror-¾w?­°þ9cJ!˜O¼¢x¢dêtë6 ì ‹Ÿ.Ø­ŸôÎÚHã%:vIÖSP“óŸºbǯÞK{oÓ}ÏË$´Ôñ8ŒRÑøz‚,ÀØ÷Ü7Ôz,Ä6‰ù7|€P‹x-+¤–êèʨɢݙAF·é{(ÂM!¦PH.c ?‰ˆ7íúŽÝqèN¬ 8 Ï^ì”-dj¶<Æ¥XiÚÄ@X°v6 ,%”R$r¹æ,Ñ ÉÐ’_Ì›1¬.l t¿ ¤!2Ãw ß²¬ñ«ê=ÞIV%Å_bÒ+0'~·SòÅÙ?5Agç‚{›WÐålóÏ-9Úä[Ti{Úíü}0ó‚ó:*š[ :<Ò…¹ŠBƒý“ùÞøMàŸ—²i¦Á¿%´ó¬³Ô½3Ù*^-[v AßÔï*…P‰àˆ?&D‚çÍLvc½­áëÓ§CƒAeZ„ùÙì“s´]ˆUïWf”ä¡ñÑÓSæD]G„©› À[¶#½ŸñüðËTï#oCË¿ÌãÓl7Ôk/(Q"Èœr £}•p•ÒẺ¡†iÁfpT˜kØuºƒäAÇDû<áúN¢T°*ÈÂrw:,MžÞÚû}qÕöE é0ÏY3ù ´)À Ú‰ãÍx ³.¨Mq¾e’›6áL…oõ?ž8¸äôyUDp¢±šòtÄÁc·_ÈaN݉8­¼ ‘»&qƒ¹'«˜(×(¢@M­Úþdì6ÞÞƒ¬-T’F’ÕU,v’ƒò#ëŽWéUŸëh[­)±)e0¢é,-sßçŒÀ›GÑlC-3EOQÑeÔì×9.ÚKH·Ø±×kúb+.Êž¢X©Hâo;ƒâŒ•$wÐÞØ$WÕk‰Ú2L@iëb/’f§DXÅ£ˆ$vôb[Êö¿ë¬÷U*A¬Y¥XïÐ*,W?;ƒçßÏ…¤æïWpÐ8r[VÖGW4Q01«I·1iwüF×îpljꡉ*©!ñÏá±ÜhŒ\¥ŽÂúHþ# ±•\éù’s§;¥’Í*–*5JsªI5’£Ä°ï`<ºßðeG2š©Äñ´!NÍËXÉ:X ‹ ~x¤ gåXðPñײOŒ²‹Ã&UM Ñò£Y[RäQkÞöBE·¿lGPÕÓðÒÇG_ M­Z¢-:Á½C°*G@YØ.†Áõ,×a÷’†:ÆÍäaI O¸Ô£PÈ‹O"‰ÖÌ#‘VPosøv;^çþÒý«ªÏWOBZD¨vXü*lŸS{ìz퉇—Wň¯Œ*»­Š³¨ãìÆª*ˆµ/Þsêl-¡Û½µ;ïÜ߿؇¹UsñÖe:‡+JÈ©VO†Z÷T~„)ø½mÓô5b`gÁcÒ¢Náó%Öí´T´ó¼’®Ê®vÙ{Xì¶,îã83=i( פô“åØìvù[Ì‹8‚¨,²Ù‡$ÃÚ즿"ÍhÅ´˜Ò­ »¦–þòÇñ|èTk]bò@ÃmÕlÇV˜Ý·÷¨þ§…±ÙFAØ·$Ã,§i^¶V:c3SÇñÊËav¸ßnÃn˜"É(ù.XR?[[]Ðþ¶?¦9ø‡L…kÄñž¶$óJH„ïªPÄ´pÀ|LÆÖô8ÌÎ3*ÀØ0EsiŸ7j‰€Ð‹ ½­(;ÿvöþX{ý ¨ñĈº¤ÈsÌe;ûo…# ÍmÁÙ#4IÇ’âœÙ©¢–ÃS@#¢³îoÚÝ~CüPssS[Pú •³:h±º—$ôø@„œ?š3ÚФe'•ANòòÑu„庿šüDw¹¾þfýq¬ÔT¸§”ÿ Pª;ˆäm‰°#fÒO®×ìf»LÏw°H»X¼©FÈ’…e’ž+ËJf$`B°;ÚàtúýpLJhÚ¦i½Øœ¤ª_£(ª;Ø¿Ë[¢ÿHÉXñ½fYYtŸzÁ擜«{%™Íûü[üÏ–5ž¡ëªŒ¬ÃÎÊàmxZ@æ×½ºžÝF=F!ëb£Û¢1‚ö¥ÃÔ¼\E=Qk™"ñ%‹}Ò‹ ‘áøPüÆë=’d‘^™ÄˆQuƒ{ì¤\v;éüpìD ³z œNK^ ö7“WKO šY&š¤é_»v‹HӵɽÎÇ/ÅÙT+AA ‚¢$F@zÏ0W7'©µ¯¾Ý6Ýì÷Ö¢Ä7òE5½ü/t#X Äe%mµ¿n½=1#SU=¥Z0kÝIóЫ×Ô‡†5õ±'‹ã‚(àÞ9U) Ët’:˜ŸmŠ©éæ/Š?j¥£âꌲpÐÓ‡«×ÔÎ¥H>×Ìa:|:ÔgbÝÕ^p%ÿ£%«Eª,ú%š•‚í°–Ç`-Ô|W¾ÛayÕ ŠhÙ™c:Eí½ÇÄv¹¸–9Ⱦ?ˆà¶Yg¿$Ö«(rTÙlÉ/O„Ž÷õ½ñ˜B$m7bTj=â5’xc©ˆYF¨öêF›~ÂýñžæPÐÐÌÂÞðº¾ÌÏfíÐý ÷€¶¶¿`ž6ã’­rz•âJé*+€|¾«^Uê²II=¬ÛÞÊt“ôÁ½=$µÂ#JŒ SAN÷ðƑĀëhüScZ ì’´—MÛù)œ­×)©ž(Á OV _v±¾×ÛYêz^çl7¨ÌRKÕC.¹d1=ȶ¢¶Ç,Rg%ž@ü»ìkzØ’Íë%c³4ŠŽf±v ¢ßRTâC-Í£Bk”¨nHék:BõÁE­Ÿ‘h±\krB9Üõpæm ñ=z%"—^‘¨YÆþDoÒýpCN±G@µDÝTÓF€m©ÊÄy‹í{tÁZA£‹íùŽñ{ 2z”Fy”u6P/rÌ-mº‹ØN¸sšVèHT­ã—CÉn¡œ%‡Êà~x6'¨d®O5cûŽ$j¾$©KG•ÓÔÔXí¨Å'Ý(ó/%¾ƒœmUSšÏ,ò¶©ªfi¯s¼ŽÀ›Ÿ¯Lv4hr¡BÞx.b3ɧ:ê¡{Á\›ftóæS³Á—rKÛ¬á-sÐ}q*•4”­c%£ŒJ©¿ˆ8 þc0äZv¨6Œ$QUNÙŒÁ¥‘A;®©™À6õþcƹ’PT,rD=çÇJ-ñc# ùE…ûá*Yî]$Ýw»¹-rjé&uˆ¹#@W=•™NßêúõǹÆoALˆ“VöøÅØzloë¶9²e9~¡ó%¹ X=ÒtùœÓk )Ë&âöó·Ó‚– ªÌ#¼º7j©ù£S‡r¤]´ ±úâö§ÓÖ­t¢š™æYZÄ ³ã_?ˆíå„(äÀ‹²M9šßÚI÷ÒSW‰*ÚTL) ¥ÄuÓÄ슛k'Oâ'aqÖø°¸i%ŽzZ)\1’zX‹uÓòè>07òîmhæ~F\xtÚp(‚£!¥¡Íó˜õsS.©¨¦g= Àïak~˜­Ë‘kXBë¡ÓáA$ [µî~˜^3äø’Úa©˜/)yaÒ9B—ŒÊ‚ç`Kqõé·–3QªÕ?¼ò@%[O–ðk2êÙ"C÷d„20ù£ÏQ]ÞG$˜a©ãI5ê^Ê €ôyâbJ7˜ËW4¶_iìça×cÓÐaˆz >so%¢ y ئŒ/ˆ²›‘ÔjkQüÎeq-MhŒèÍF›ïv`¨»^û(ü·Å!‚èðïˆ,ÿŠ4c(bà­¿h&M”å9 þíœV½ƒÁ¢%?ÙB[æøÓØ/KÅõòÔÔL´ù6R‚³3öD§B¿›2ªõ%­Žüê`jäIÑ7¸ä­?maKQ–CÃY>ï‘e‰:Ó¯âš@2ÊFÅšäÛ ùÇ0ñe:lŠäÔ–þ²’mëßxpäªÇI£’žª,ƒ.­Î¦ØPARBËw½ºë·çŽz©ãêž"ªv1yª\¹D·=MŽÃ×Ë”Æè3zÔ¢‰Ä84pV?f¼ÊxY  ÔmmFê/ûÖ&ûzߦ©ÌQ ¼w!”Mk^éE'Ëmþ›˜åžÝ05Z¸ÇM®STèú\¢3¥PØÜ›ã1`lU0íYíˆdɨ)!¤¨0ÍdȲ… _}+ƬPor©vØs¶iø#“šÅW˜Hõæ¨R›˜I<ºp[S\سK§µ½;`0]VÈþá’«ŸYçÒQ±ž8ó$J}RÃFÝ‚‰QmqÖÄtü°’fO–W×¼²fuQ«-dž(êPbý²Ü/ÄM®-¾kj½·Öù!.ØS o൥¬«b²ÔLÒ&aUVóÛ`Ř¶Ã®ÀõúŒDŽLGJÆŽI;EŽþwßq|O›Ü,f &›.§¨I–Ó-MT¬½‰™’æýoaçç†|K˜{Ltt‹¦j´š–ø•eX•ÉônMÿw¶3ý£å[S[¹eË¢vw×,²TTLÌ7,áìµÍ¿S‡¹z³AUH$µãª·[ÔEͬH¦‰ ÜùSÄëÇ$¤ ¬ “͉.:(ðì@úÿ ý›¸^ ž#ަbyh®Ì¦=l±+3’{Xmò87f‰Ò¡\xI-Nt¨ÏôÉäew´N*’ qÿ{jª™¶RF¤’Äü*‘ “丞öŸÄžéEÁy ˜ò ¦u–føZ¶½µJöípt/@¯ˆã¯ž–. Ÿ«¢Û‡$ÄÕ¼¶q¦Êgp;>•, æ0‰„ò/îÂé·FPÀÿ,@µÇvJ6cÉs×Ûz½òþ¥ËI:kó8&–û H¸Ö`mÜ ñϞəŒô»Ù&dH¶»ke…MÿºNØÍ§ ¹¾“šÑ¢;DbOÒžÎiÌtôÉ,‡L†ú×} ÿXÇJŽ„˜ÃÁ®û]£(T_¥ì}1ÊÅ"b÷H-¸M›w¥–EÂjÔ]‰¹c|fKZfj'ÙÇ CG,™´s=Eo¹B9¯Õ\òËiPÁÓßM·Äï5EE4‹4¤I4U’Ü~³iÛïb;uÃà9¸êYú€ü” $¯qԻΰ¼ï©‡…|(à2€/apI?Çæ™yYçåÝf ÈÀBެ ü…½wÁHÒ=lGÕ §kB ÉfÐåd‘!ÐÜ(¶°í°?A¾Ø}P©ÒÌÌ ocåsµ­Ü_þ8QÌ‘iØ÷ v´ÖöIfµQ$l@@uÆâþKf;ú.2lñ—7‘c‹˜óÄA²¨%Ô‘×Ë® f ÞQ´[å"ËY ’È¥ƒÎûøUK.ÃÔo‰¦ä¡25Ñ$bèXÓÔùâ\áU¸Œ”0p Jz6«‘emôë[Zàýqpû4¤l³‚몣ˆ{ÏÏI–F¹1ꌽ¼Ë€yôÆ—`éS¢Üø¤;Iò¡¶÷…5í=‹‚xq¸.ÿ+æ±C'J:¬[h¦Sù™=l½*ü®¥Ù.9hKÄ ¿éŽœøÎ ,‰Øw ?7¬ )†{ |"?ìM¯ôÆÙ}–Á€‚‡¤‹úöÄiܤ6ÅÉ_´ÉÕ³\Š\”JI+kT¼ƒcçá_Ÿ@vÇ8p†iUI9ZQyõ]ü˜€?C½ðµ1³•í ª/€õ±[Ïø¢,¯˜FËKNe…eœ+F¤©7¹ñw7ëë·lf3[B¢zäf*°©sH9R­::óY%rÁl{Ûa·l4ŠZšè=×/¦&Y²I$’à+Ü-Î忺6¶4‹ƒbZ‚í[“µEÈ©* v™?»+±"÷+{„݇¯– ¤§iªâ‘¼‘µ[³_`ÏgI=¶±?ñÀÚéÒÉ;æª$û¶Ý,‘´ÑÃ-@:¢X/v*ÀÆ×ëkžÞ˜Oˆb0Ã2S‚` Mî²¹÷Ü/C>È£’L§$ÆŽ†Ž CCýÑçDEÈ,¶f½÷7µ…Ï–Så4”QG]å$ HNíxÃ)õ$’?,DX’žôa¯w%&óHVq¥Va؆}ÿ[cj"*ž7F×Ë,í1cõ7\ô[y‚»ÿ³vH¢„ Šˆé@šô¨Qã°þ?Çí©ÓÙÞ]‘Ë ý–eô”Y|bÄš¹©Rie þÌ€7·–:úm€2’`=Ûz{ÁsÝ<¯YS>a2±iJT31½ä‘ý{ßë‰ ÝaÎÖ'––;_XÕÓÎûãe†M7‘’ÎpÒ;²AÜgP‚MCÄ‹¤=ûkèoý 1%“ê̯»&˜îO_Çê0³ŸÞ jt7ò\£ûM©„9‡Ta>[V.w¹‚¦gµºö½­ß½”TF’ÆÃᘛ°$) ÛÐoL–tÛé ¨>hð‰i"…v-M5Ï“¤`wæýwý,<º5iUQ¨ ¨^効 å`I1†ã!½ß⟫«ñÉ8ZŠë¢„©±+¹ñü7Ú÷ÕõÆay&>ª¿ixŽjéŠQÒ’“­rvb³+€Nûo}É7Øc3Š×ÈêéÒ¡ô‰¡ƒžÇ¤j€?xx~Ms…ÄÛÂñ~²Òº†’wLÄÈÖtçÀ@¹& È€)¹°6:í‰Ì¶j9"† ýÜ"©4Ü›¾á½7¾ÿ©Åì´,Ý% ñbBqÄs«h°1F¤¨ í!0¿ÇlfuñE Áœ•i£ÔmrÚôô¿ñ‘(ÐÎÀ>d9³qÉARæ+ Dвó–a 2ÇwÐ; m}BÿQ‰8ï" žª”×5=KÖ*ÉÎ$2ËS¿`E‡–ûá¨l&xkåÕXÞ¶)Ü‹‰2¹/SIRÕJ„¤båmÌ>"{_vÐŽ¸—\Î;)‰ô9i…HíuˆªÛËebF¦n³Ï„‘YÏÙþcUÆ95/3ÞRjê&1‹Xˆù$Fþ"#×ËGÚ¯1‡ˆ8¯4ž¦£ÇNE %Ù"JUÒë~癨Ÿ[õÇUØ¢­÷–ð ´ ã3ÒrU,é=2U¨09B⾞½¬?çˆìî–¦±£ÔÆÌìH³ ‚Ö[þ–ù8]aëbIáÉFÉ“fD*¡žûXÞàºx…ðW˜ðöe–A õPʤyå ¡£Ië’EõJ¤ØX\ÛaáØ_#†¤.©c*jæŒ-s¾Ë½À ¨õ¸76ò3Þ ¦:±P¶Oêå|þϪ<Ã"ö“–ÖÔW¼ðL瞯âÓ0™zü$0&ýîo‹CÚuYs^ú€&«0’AØ,êK©`píÈ'Õ?€’ˆ;áé’\ÆJ¸äŒê $ÅI¾Ä°U7?Bîl:âW-¤yRãHTmb·Šßž- ¶™íä¬í[‚=à\¦¦ZšXc‰¹fªú†ÖÔv÷º’IóêJ¬ÂYòˆ2š¸„´Ñ±T jl{ ¶xÒ¡²«º¹#Ð:ب¿´We|K’ÖeÔÁ’ª¢žªœ¥ü,$*àPê ½6ÇÌN#àŠÞâ:üº²’vÙ®5ÆLª-óUôê"œ'EqØIàB¶0Ã’±ršhÛELhDb*¢Tõ¼qÊfî/§~ç®øŽdŠg˜¤ :tf;|®ooÌã…s»Æâãï%у'Èàš(å’(Áø£Q¹mºÞÀ|fXŒ”Âå_œæ*j#*6 sM…ûv¿üqÆÞô´‘Hh¡†)”Þë© oébwÞçÖý}h¦ dÜJcžÕÅ–Átí¹Z¾üÉ=)oK†Üù˜£=¹W#»d(ˆjê]…\¤@©‚'²’,4޶?>˜~„;Óê!9Òa'­IŽE‡Ý ÜGMN‡cá- …¯Úçr~¢ø•ɪZ’Cm@‰ÃRûˆŽãU»ßÓ-tâºâ•†e»Êq_:´/¸ÖÄ܆ öÖWan»[ +h&Ž%–ÿàüÓ øâ[­Îê.môÛn¶^â­³ëqöIÍhü*¬4êÏ(©$Ù’ªC ü'`wµ±}{e ‚1«£/+TÖÄUFå#•ŸÈŒiQÆÄ,úC»Ð?o$”rKU2iH¬?ts ùw¿Ìß\Nžð"Pð y”=­o¯LZ¯zÜ'òݨ`º—Ùý eTã“Là´ÒH,:G¥ DZú†àM°ÊºcNËJEÜÙ˜ô*ñÈ×¹¹7"ÂçË ”úý*‘_kqB<]ÒeÓWÕUîÔ‚'¦S{¼ÑfðÇ{w۱śfÕ‘“$Þòi†à8©¨‘É·ö)" ûÀ<cµ³Ú <ɨ©êòó]FÖVŽve#S§HÍï×á$#~¸”Ÿ(JªFhŤ÷j~›´ŠnG{ ÞûÞÛØbbº«ÁØ>ázŒ3.µ-¸3†ªÖ¾_x“À©DáOãŽ3sضPOlL¾@Ô»*ê†G‘c7ÞÒ´£po{×ë‰tyÅÚÌ— ÃÑ·ÎiÄôO“Ik×fÜ?W ßîê  _¾­ üºã²¾ÐÜ?/ý§Î žDHùKÚíQ1˜ä,GÐ펊€Ù²%ÕVm(IÍ8Ž ©’cŽiVfwˆAÞÜË2\ìÜàÇÙœ)kW.û|‰&A½½® œ0 X–·pÉ]>Ï3€esE9oÄ ‡ícèqld™¿¿Cï l¬¼‹v±PßÄ ñ¡ Ú[¹$žÙ4b3~Òh'ƒx¼R9Ž·<59L,áf…ÝÈ=Ž‘mÿ{l|ÒölÓK;3 %“šä›øõ‹ÜXÖÃý³[€Éhöl?ÿ´xj~lFчŽ7 ¶êÚ]nwÙ­¶ãm»œMBÜæ´KÌC¸=ÉïÐtæ^ëa0gï%º--Ã’u^]èCµ;.H6>˜ÌeEÞ»ÔS…ŠÜË$ M+쬪±¹Ø–vV·ÊÛ_rå¤&¨d6ªXÒ@ÇÄArN‘øM†«íåÓ°›Ã’ÐõœIJdZT‚š”1zBnIîwß˾Êa–“W4‚¦:mØ„”ißÑmˆ“|þd†Ö÷‡­Š¨ãXió*Ê•’Å¥ž…ΞšŒÌw=¶ŸSŠëí 0f4ñk@°ÃÃQ¢(°c Ê·bæýôõïZ§HeÐÊq ïW$5OQY”PÓf4æÓ0¨Z‹‹jâ#°½Ç_Å‹ØßI˜Ç%%j)÷hS…ZÓ7—r¯¥¬p*|)Ñ"^«EtW#n.â4É(c«` †jET ã®ßáp?ž#ÚŽ]\‘$Ë,Hâ%”YLe·Ù›«×c±í…(´r!^åð˜¤DœQøäœŽ?ʧ̠äk FbvUÐ¥ÒÉä6é¶>Šû{¥9æ[‘gÐ,l¹®OÕ3ô]F®G¯1ùc¡ìGÔŸœ6|I-Juf`ç ƒÎ(m,uk“ǧ ‘À]ûâN‘ Ö¤iuŠš'ŒöR¯ýᇪ[ŠÇò*[,Ì=â /‘óNˆ¶ßÖçøbåàZ³%ÂøB¨ô#®†dó»$­›w.ý²Ù¬_Â92îÃ.«¯pmmU•³F·ýÝ¢>½qÊ^Ì™_CÊ®eNû¬qêµï¾çøfvÌÉ75§‚ÓìørŒÕŨfI EðSÁF‹ÒÞ(®Îöç±Äõ"%LñI“@Ç!/¢&{Æ Z-ú’L[ƒ„šÞñDrjŒy.ý³$kp„!"ʸ5ÿ‰W(¡Ao˜ý:c”ò’:¨ÁT4EuÄî<¬oÛ Óß?Ó/€´(n˜Œ•÷ìÒ·˜©¤10xˆ6 KDÊæì56óÝ1fäu ÑO.Í¡Áïw±Vù]oôÛœA) ¶-xv¹¸O‚yQ*¹[0#‚0 Å‚¨õßþ‡lf+Ѭª)é¥X—SDÄÚá™Í®;zúbj§=‹%¡äE©ë&‰ªuc( kÚö»m×a‰ˆÊÎü‚°`Üx!™òçÍj£¬­~mE, S"(:"mHEÎ娂;u;aÜ55cÂÙÄ(-qu;³l¡ïЀEöǜٶ[d8+–÷„ÝÉ5ÌæŽ©Ì0E¢PÕÌên(#†ß¿Q…hál£Ýâk”Œ£ƒqs36ÇÓcqòhïó¡ww=®#‚âL†^2ž¡§ãŠ8çH”­¬HÄß½Ïé€*¤¡0³ÏÌ©‚j)®ƒ`c•Û@¹¸ðÍúïl:#I¤Ó4¹…7ƒ†J‚Y3ÚΙ¦hÐi¸ÉÃsØyuÛ®ŽŠ›&0ѧ¼ډúxåHã©îMûX¨¶Ãñ-2ý@Ÿ„È~¬BuX»¹IdVSLŠA>$(¹7¹ºëòµÆ>þǘ¦Êø#ÚVr/÷|7—d”įYšÈäÜžZ)'ȃß½†ñõ¡àî%ev¡œ~9"ÜΩŸãò£t=5‹Ÿ–ØϨ⪑’DèÉÜÜmõ8êYi¥†æÈ Ù*³8q!Õ:ßZ穱Q¨ ÿÖø_ÙÔ«Ì¢» #°µ·BöÿXd£2ò¬OvWþÚì¹Û80ÒGô‡e2®oLV”‹úr‘‡¡>Xã®§êJ½Æ¡;{`A&Þc¶í #ÎæŸ€Ÿ }¦ Ë¢=‹eSeæÅ*S<šO¨þ/3«o@,:ÞÔËâ‰)‰fP²(írSUú÷ðŸ×lqñ8î7—@( Ü8&¨´“ÝùêN¦S·uÛŠ˜¶ª`Á!2E™Ð‘$s¡[䜯^ž¡¾ØZ‚‚4!‹3rÑÙvÿYˆ¸ô[ oâ$íÌ ½ú#ñ Zª`ŽiLf(ã4Ò®“³$ÊÇrMÍ……ro¾I,Âè$7N^¹ ,Š»Ü+p,w½†ø¡ox=3ß0ŒI²ñL¨)Œš`°(¬cv±øPDÛ7Mü&׿žØSˆ¡XÚž sÎäEš÷;þ-=ûâŸR³¯{Y5`5ÚrKÄ’$IPÊdÑrå*E˜DÁma~ã­ïsb{â ˆ$4þàò<`ÌÒȽÓÞl-çc¿}½p(N¿‰â¼Ë" Ù'4àËQïuÔ ¤$\*‚ÈcS{\w½öèq/GfFŠmV »œdv´Ä06ŽKN‚ÝârWnPªræh¥Ô³²ÂAixÑ;oø±ëcÛd•¢‚ 1º¨³ZÚcKüÅý~Xåi:5}KvVŒFIÖe—Ô´¥ÒEñÝØn™‰¹¾þ\f<`¤¢DÓv%KpÕ2TÌ ’6¹aIVÿ…#ˆÜtºz÷a¾æU 3L)œ ja!.ÄУX“ÜoåŠD=óÌ0Û`ŒKJZºcEKK r¤’>æà4§mD Ë\ÚÝûâ?‰VZé$[ó‘ûÑ*(±Úÿ‰‰õ66Ûk¥?IÉ ælJÅOèmùy`¾ÛÏî‚óŒÃq—¯C]PÞðüÉ ‘ÿvÜ÷Æ•.•C#Þm2@Qä ƒCåŒÆƒøä›#D Ò²ÃO,ê¡1š ºnG€¡$?A{ ŸLy˜¼1ÇÈÅ$Ó»KoórØß©³µûâ±0}Lø’=g’ôó&÷R±îΆ} €UY£½È7%l|¯nƒ jå…Øh!Š{l LþÄ‹¯µ¬0I¸òFhÒÞšæÂ(^p@3T”øA¿-‹É`Ýì ¯é°ß¸v Òј–2ÿ|!;_ÅÎ$ŽçW]ïõÅË+ m–J¬?߆ršœç72ÇNE4²•‚R6c$“¾÷ ZßÇßÀ\'ý ÃÜ®ë,óÿ‰)Òì/úãb‡E¾–…›%`Ç™¢¿bœc˜ÑÑPå9ÔFJ”›2v –YMŸv³o½ñ~û+Ήj¦¥(4 ’ž˜]´Ä›ÛÒÿ˜ÃÍp¸¤cyõ±[Y/ºQÁ1kMJÃP菱íôþX°¸r M HWòÊNlYóœúب/kI%gS!6¤sò%ŽiªG:D? 9ÿWsóóƼ¢/<’1ßÞ 9'Ü#]-3ÝZüÒă¸(T,}1Çßµ?Øæ_>[Çy`dLØËGZ ÜGS»€£°u$½Š6Å© ýŽw´‘(•:ä çVe›B3/èÀ†4V39üE9¡o{m¹é{[Í?ô<®ÌViD’ €Œå{·[aÜ‹\mšÅ0m3ù ¹aŸÔ7‘ðv]&Qš‰kꆩ*&‘“e6ˆ*…>›üÉÆc5æO6ù”VÁ2"ÌÎù}K4JY¦íbÒ¼Š;loÒýºœMpÕ0h©éÌcM70i`ÞZ`mkmg·¨'|0Ë*_#í$0|Wä‘̲A¨’9t$Ô·e§³1OÄG˜uëi%IB/}Éó ž–;_lHÕ‹ó`ŠîÝ’œ‚N|µQUÉÊŽž iê[±6ðéÚÖë¾Ë‘fÖÁmË–¡ã±6y$™Q€c¸½À½ÆÄZÀbAuåKuî9!™fCRd—Rl”žÁ#—¸ð‚m~—=ûâK)fx†v4ð¹{“ñò ½€ÁáØ0hÉAçº?öWÅRðÕsRÑMÌ ­›]dLu+I*Ho BÄv}Cûq–_‘äeVZe®ŽÞîH^žµˆ;’–kú†5û:!3Ä 6’Ú±Màq :<’n!Í#0ÂæÕ¹X$ºlN×Ü_ÿ²ÿgÑd4)](´ôÏ̸º~XÜ„ÛMç’Ë¥>ßl”ðÌDu ¶hžÓæ\ëþC{2ÍOôÅJ¸u={i$“,Ÿ[7·Ç†§6xãèÈ­'ÌŸùb¸ Êš$™Á%5 ·ê8Ú£ílHÅ,y%d£jUHâø‰æM÷ùâ™û}Jð{-Ï^P^:y2Óû­ï:. éáfúLo ½.QDÔBõ1|¢Žƒ.IcÌbéLÐTDA°åhBoá°Á·Îjr˜è–ïW-XÆŒŒM÷¹Ý‡óß-¤Ä¬g°‘òÕôv¶DÞP7ºSÓ…‰ØBʨ ­ía°7vòÆc%ðMcŠwê+‡*ã¯T[L0ÔÔ¤.åDkùµ··}±¶[[U ˆ[]D’Vµ=»± ¤ÿW Ã/† @?o%™ Öœ9'‘ÄdJºYœ¢—Âl å’Sã>Lÿ³c¶<áš¡´®÷$)}ÈßEíªþ·ÛÏn˜v‰È%F N3à¡x¡¢rü¢cf‘fcbn¨ÏÎê/ó°Ä>WU$s52Jur¦Œ)nH·EÕ{^×Ûò)jÏÏøLji)Z¸Dtòì?ñ%e"ì G«YokÖÃÉ´D±Ð©û£©+r5Ĉn§n‡§˜ß ÒÝ?¦›Å»Ú­ ºçúy'œ)WÙ”tòZzJŒ¥TÉ+QôØïߦ>Å{®£‹+ ¨ÌÐG*ÒÐmÃJ¥ÍöÆå¥´ˆ†æŽ 3´ˆ,g[A{0Íòu“™Mêk(þðoϵrµ}ÑJ¤/~`êOAŽŠKFì—90‡8†ž‡.‚iAgx’~¤›Ÿ–!äQ‘dõy£°ç¼·_½o× \:؃忒«ø:!ž¢¶–)Y×ñ—fýï®,ª<$â¯E(¦œÆ­Ë‹mÀ~ƒ{cMŽª0É)ÍÇH/‰ør§+WŠDmWºùÓµŽ(?¶öTÓû-âñ£PZ* ö±Ž¶œoç±7ôë‚ÒY¢ïIà©G|£3ýÁ’ù'–DM’0SN\€.À[¡ÓÛÖþ†[‹¸§/¦#‘x¢Ô¶]ãÕaÜx·ÇÉ©Æ|ºµ}:ü74p<ò3 €3G$§Åݦ—¦Çµélf.[jõEfÃP—‡-§³F󄘂v:ê%Øvû°ôùaìÕ ÉKîñZtIREî±ÊXÕ­¿¯[áÒ¤I÷)hL›ˆY­*ÕÞ ¥:ÉÖ’îÇn»Üß{aü©Í£š‹GŒÍH›Úä/Òà àpHl“ØqÉLQiÄä…ªàxªá¦eÓ%JMÆý –ú\÷ÚÞ{iŸÄÔqµZ(–xÿ£©'b ƒ~×ÙXÜž‡¥ðÁujÓý<КdÓþ©ÌÔÕ9T”ò,¦…‘”|VU=¬7úã"áššúÓ^‘û¼M23¸Ò¬ÈÎãÂ~"nvPl:õÄÐèåÿNZ­âÕgÆîŽ#%Ó`¿f#:âš)aGM$¥dŽ4ß’Ìn}0P.I=íŽÅö£%[Šj(f–m³Æ’mßÇs+c¯¬3/3És´“Þ þÍk2ú¸æYç›}ü"ÁIÛç‹[Ùÿ´,Êz…¦ª)ä¦÷;lI8#¡Ê[²JD3;¹+j©ß.q˜T±«²]?Üôþ'~Ðs÷Ì%>Šœ°TŒïv8ÒI»’ÑŒ™¹Aep¼¯“t¨^Þ?炉gX!P»4›uØ h7Æ7¬Öë8Œ’ù_VRi‹_2-Zt¸¸³·ÓíöÉÁ¼ÁÙ®CÄ5B–«Š2¬Ê:hã:’hõ+rú¨æXßÓl/H‹RŸšbŽÉ½¸¯ŽqñLõ2Á(hcZ™# ÞÊ9‰pN×!‡A{Ž“=†¯œ·¨ÓB ¼…’GR,„õ°qÛ6ŠîùÇcÊú!Ý3’’Ȳ:Z8*I$’´—%–Ê#{iüïŒÅ\ûMˆ¢$‚´2ÚX ÷wu-Ïjcoq…Y€Zä…mrwê ½0ã]TÈlE¡w°SÃù씫2†g2C0ÞÄ*¸"þ[éÛç…éÄv%i[ï’µh¸´I@ùZŸ{²Iè<"ߘÄSq M,ñ˜j i!ˆúÿË|¶Ã– ÿÚ0ä§²8©ÒÑHÜÍBHÍû‚†×>—ÛõÆùrÈm†›™åºÈ·ÒÖÅa»I½lBp³xÉMQçUÙƒA!Q”bw!”›|¯µñyû6ûFA쯇*é3ùâ4¯íNe;#¬I]Åö°;ÛÓ”9ì'$³¼@m pN}ý¨øs‰²:üâ )ktÅ=DBJ²I¸oƒîÁ&öqÅßk_Ú%N]U’ð†HÔõºfCSRèËZAt‰~-ìnǧc…E<˜Vmä¬(sŠvY’ù‘íg‹óN4ͪóÌâ©ê«*Z`ìûßpß@ úwØ[t¬ÑHÜ6˜›ßJê móßòòÆlGN¾<–Ä1'3pàŒý‘±ç8mÙf˜ƒÔ¥\õÜí厎ö{ šh ƒJ÷•G¨e¶Ý7-ëµöÆ9Ò{¤'0Ü–Ó \åb –Å»{Üu'·ÎÿË„@óMƒ`Õ©mÅ4éEMI?»«SR˜ÂÛW…‚ŸõP®pòf™~o'¼LIPŒMؤÕbG[°±¡$°ÃaÿHëܤûñé'™-gyÄY\ -I’¤Á  Â?ÇÉö}«nQQ°DÈr>/Ì$ [ïÍ(ùå>XÞìh`5Çhdö«¦à:ÔiÃuÍPrÁÄ *U!é%Áãe·s¤†¿fPF}«pÂQ†«¥©êÒv§fýÔò"äéåmmÝÉ <…Ã$•eeæ­¬À¤X©úm‡™~YÉÍRº„æI,z\±a·¦Ã Ô—¸G§ÒrYÁ5\ÆãI›æ’7úØ’á̾I¢Uk³THÉ=”«¹±ï¸ü±/ðobÀ0äŒ8oƒÞŽè yŸÉù€>¦Ç¸ÏþÏðu ¹–y]-5¥uÔlÌå—á\ÞãnøaͪÉÝÉ Æo—,{vû[RÑÇ>UÁô‡Uêa5UÙÍÔ€\m±ñ7k¾8ÏÚ?ç\_\ÙŽoZóÊÒ*¦£{*’<)Ñ' ï…\úßNz­É9ZÛeÉ%S*=ÐåD€1”;åëlcLÒ UÿÇ“ØX»í~þ¶”†ñ’d6ÞÌ“yËWoÅ,ewîwÿþ8Ò®MnºM€WnŒÌý0a#;ÿ…$H‘xF~ÊÙ¡—pÌà©·R _¶áO—c×®SÆÔ¼6É!gäÈbP.Ö@èù Ï–2),œmÜ“0X{ÎJw,öÉ]$m$yECÆòJÊPìµÇÂwÕsÔõÆaOô·§{ á9„i«,’@Õ1½k’NÜÚàö(ì6ÜŒ0âLÊ®jžhB U9R@Ò#–§™KŽö88cz£ž}•Ñì ,¥Ë©'Îäj ÍÕ÷_Ïs·kâÛັ ñÎj ±\®‚ˆ¹×]] ÿ0§Lut1V‹x.~ùÒøŽ ²ö[˜ÉIW+ÊHŠBQU Kj ÜÞâÝ6Ëg;Œs©'òú‰9´øŒG–ª%UîlHaÝWÎØe¯OxCxïF”^w•ÿETƒ§\rRÁÉe7 „•#Ìb>¾¸*à\‰«åz”J:6R;]"Ü_½Î%Œ“Åòɶ‰^SðzV“–m=@A~€ -o1Ô`Ž¡2¤V‘l#‰4ÿhŸ?žl9`rC/µª‰ûXý¢²ÏgK”ÑÄ•9ô¢O ÁŽ˜”¸2»Á<÷8ù»íŽs~6Í¥Ísª¦ž¢s0M^UÜéU ·LdÓ_XàFKF†ÉzZYïp/m÷TgüüWýwÂR1bò·BZU¿råHý7Å"XÆáÉ .®HØÆà“Õ‚‘~Àüº}q¸Aâ@ÁDÿ­aoõ·ýpJ–7­ŠAµ¸Œ’²G¬cÖ)‰·gFÕ¿÷–%„ŽOˆ”ù cùar$z¹]ÇÅ%-’U¼À#KÔJ ØX‹†ü”‘¾-b¹=<‘VÕ@jù,ăà%Ê€µÆ¥;î/é„©&UzØDÒxÞ¬ÁÉQ»¤.­( Û‘ÞæÃ§•ºí¾3®ŒXA*Þ«÷X²yó (rJ•3@¶7)"›íÔü@}pÖ\3é –ŸB»RÉTª-¥ãD>":›¨½¼ìM°¼#XÂõ±ß’¸*בEG—Æ|1rgoí¼v’>g|.ŸÙÿ2~"àúAkô/Íå?;’¿\u HL—òí$­ff-{ÜÖý­m¶¸¸Û„*OÍyº‚µa­›¨ÂÀÚ=Ói`Ž '7ɤí²"±ú§º;jŒ\éÐ%Ü_ûÖïÛhÒ_-Ü—´”m*ˆÔî«ÐvdQ¿ÔÛùaYcXކºÇ™/—Oã±Å¢Ø}²WhÑ;üKeyTÕ’ D7sNŸ1t^»_múv±Å‘Â<±nêCøtˆJ€Üu#Ôš@ uá fáˆÉZM8˨Ö%U¤¶÷•ÕÒäm«±·¥ˆ¾$*ë½Ê4C E‘bRŠ,n×”^ÆçÃÛá³q Nöœ“u¤áê 2Ì¥g2Ä Hµ‹JÍ!ùü]q˜MÍ‘6y¦ª+”LôÒMOïiv¤‘9hThŒ¼m½÷o;ß© bÂá÷¡ácR®ÜêªÙÖF›CÆOaµíôøÒì‹iSÙ Ù,ÚhîþàÉDž#dy¨u±nŠêê7Ýqh{>ö‡–IÁYŽ_"²æqg1TÇkjI¨c„¾ýÖEÓn¶aç¶ëbwŸ˜Y.ž*°âœýg•Šì$J–%»,¾ÏÈþ½0Ë"’:™IC¥‰F6è“õÞß®$ ¸aÉuFîJ”û]ûe¨¦5<)3ÆiôÓUÔ)gûådKn]Üì6Ç(æ3©ž¢Fg2½DŒÇ­ì ÛûFÞ{ßyïÀä­ ºõ¬:¡&Û‡ ¶*¦+þªNßÏ<ˆ.“ÌÔzp…¬mç§õß?lzOÌ“ße¼ |LnuHí~žìl-ûÇËç&Tf¬‚ûõ {[éÿWÀðã.€¤}<–ô Ì/kS;Æ¿ÂÃòÁpëe”‹W^yHì͸æ1V`@]ûXÜùXâ^ó6ü!¶¶Iïd•YªLôÉÉEæ*Šï{^×oÍï徨.áþŠ•ç$³2ÂHêX¨½‰M€·bw”ˆòs™w$Ã!L·vHË…¨h¨äW0š©Z•Ü€ZÀõDµím±',,$ªFÃ’‚9m»L©cµ‡‰=ÆöóÆe!“ˆ|ƉMB23¾\:a 4R ã‘"ÓÉ©ì:2ƒetÔ:ùá|š(jj *%£xK^Åe[›yî_¡¿¦uÞ8*Íþå+\"Y^8cP°‘\‰; Xä1˜YÃH«ÔVæ0ë_{U©]=Hu’ívTöÙoltUkÂ<7Rï’†©'Óâßé ¯·Ë¯•·Æ¿b2n—ŸÒ2½º 7¶À©-,hG1à„N­¦Ê¢I%ˆªÞÞVÂq- ì pM5ÒaÄdŸÔÇ1¹"úd¤KË+º‘¾ö°"ÿÙ'nþT¡u‘£3EÙA6 y ¼ü6؇ 7SF‚†‰JÿáBTË*@iìº#”€Zåʈ·ó¿‰¾v]Åð—ת%,”¡õˆ¦U6ܰ$¶ÓoÛ0† Ør‡ùf‹»ÖzmJe™h’äœÚWX‹I?ÎûÿõŒÇŒ[‘ZtFñU™ÄJåó+‚™F~ržö¹C)¹õß‹ö̤¬ášì¸Í£0Êg!@*iêYO[I¬[¨Æ‡eÄþ¢â^òY]¬Óþ™×HŒ(½îFi)Ä’´Š.< r[ðv¹¶+n$àªÊ§×a"2.z[ÜÜýGÖøèãÃàrXÔWè¶*㸗#áÎt–kMvztt ’ìN‘{·ë×Uö­ã8ø³Šdjr_/¡Hh©ôŸ‰Q£b×#é‰í¶3û^6’x4ÖnÉ•_$Œe W¡™‡}œô°7¿ž4§mW$ék×ßÀŒHùöÂíñËŽŽùðZjn—¨Ô¶é«Smés¾2p/¤ívåØŽ–°$y\ÜýN%‡@Ýü/:©Tpce[+Gb/oÂT_ù|ñ1ÂÔO›T¤p=6§;í¨€?Õõí|LS6Œ9+;‚¼²F ‚\¶wŽI2ú*²ìN§z÷bE÷è-a¾2Š•j*éƒWPQn,ª±.·Ø:uÚØÄ„fêvI€$ÖÞÎKJZŠ––H'²Eª±BX·!Q¯·v{~,Eçõi ²Å;ž[ *,vÐìz-‰QשÄIJ Rz¾ËÊy5d‘ÓS³D9Š•r+ð‚ËrJÚÆé¹ë|He Ϧˑ•MÊÚÜ«Xt7o¥ŽãœïRls·d˜æÙjѪI„™¦¤”ê¹ #ç!PzX1êË 3øka™ýÖ;¬Am®@h…¶$ï«Êä_® Ze½lPv1䖪͠¤åÁ<\ÉÒ(LÌzódØwµ‰éålf3ÌâTJ×Ì¥_tItø¡§Í ÕýÞGpëpݰsöiâæán"ÉóVp´µÒfI¹†³J·W*àÛðÛ Á}X̹í?(¯lèÑ'æø ²þÓ>ÑxkÙ–EiRÉ=^aJµTq¡TO Ìù ?]öÇÊ_µ··,ÿŽêåW¬x¨J¸éጕNZ„`JŒ‡¿RzŽ®™I¬Àé2X=Ÿ«ævÍ•3 %™Ùµ3BÅω;|Ûþo"˜÷¿ŒÄ‚×ýà½ý<°œ;:ØŸŠéÜ’Q¸ó±&a¸EROË·ÐcÍWkßðÍ¿˜aúuiÓ(_Ú:ؼ:¼Iaá‡Üï»[{ù¢ÙOï4`(=îÌ¿ÆÛ|ñc¨nÉD!Þ9äµUr¦€tÉˉÁ× HéÐÜ~g|\-’ÔåðSÇ0¼0bXÃco1±õ·¶¥E ô¦XÙ¸bO?ÙVb&˜-:"Í<‡Â.ëZ|ûZæàíÒÛc׊¢øi „‰¢ªæ0øtbåFäYIëb<°“<[¬]9]5#™¿))ä`â'+)€éTakV ïk_ÆdwÖ§îeNok•ä#¥îl.oæ0 q ·Hd™‚Ù“€É#¹Ë'¥i˜2WÈ=Á¤–YºuÔBþdôò¾*¶¤Ž*iµ-C¸Ó! ˆ#aÒרôÞ÷üðÓLˆQWºgÉ0‡)¬j©AœDˆÍÛ—/ÞAëy¹èIêq1Aj!i¤.'š±ä:Y¢@ßêÛÃÞäöÀ¢:«O™™ÉKY1ì¢d«‹™)†™]Zj’u Y  [ó·lf•ÅRJÆ0¤ÙY¥w{Ì¡«jw ŽPzQm 6Á‰Û{ßsåˆùlžJêÉeˆSEY ,nU”¡e=w¹ù©m·ÁZéÆ#Îg€L7Àg¶|yí+Ú y Ï>ººâÖnÚVS{Øéôé×—æ"º¾©£ծé_6í¸ß¾ÛãV‚Ò JÒ"N$îä fT*¬ ™dKzÛ¨·}¬qˆÁ5-ú+æô8q¾!s¹%kéž¶-¤mzXxJ)Ò“þ}:ch!22BÄ4ªoجQÞÿS† ÝPköÉðç Õ×$„ }Üêó "°·È©ý,öx”q¬órDµ­·7eµÅÇî‹\ô'¹ßÂ$¦æõæ]Šh£ž5ÒÑh-{5›½÷íÝèFØ•JY¨¦ˆ›˜H«¸[i#H¹¿SãtìÛ ̲Vë †·Åéä¤rºÙ½Õj¤º4²ÆŽI-à‰ßEÈø|7íÚÛãjÜÝ ±*Nó†ñYL1ÉâÔv³HK^ÄâŽ:#ïíÆY(Šš‰%jªPÀ<*³GqÞUC>„¯{ D%T”ôrÚxÊÀ¯œÍôÄ@•XØ0q°ùî1êÚ{ù)kjƒ€Ém%K‘Å:,†D…\IR‚< k\®*…ª€ÔFMNÈWTrAAÔÛ—°óǘ-žÊêï>x-3XÿÃÚ­UÄ)Ì4ÙZP€Û½Å»öÃ`õ³ËK# Jz_&À²É§&öHñFìpo$ZÖn**Ï2óbfdPˆ”¯]÷ß}íŒÁ[cF^º‡“Œ(8r޵'•Z©¦ª5:–•ç¨f‘BŸÁ¤è7>}/|Sù¥~yÄQ¨•‰€ÎeTc`ZeÕ}úõ¿smÆ Dƒ(„íhàƒL‰¬ ²Ig)££iePXL®B‘¥CºÛé§oz VÒQ–ÅVK|Ø#. ÷Ã1ù¹IœL¨¥³]Û§þ®=ˆ—Õ`4é’ÿ•þ—7'suîɾu.’ðÄÎѩߔî×V Óþ¶Ádz\ˆW²SÊŽI¦åˆ]»ßfQ·™ÄEt âQ`6nW/PêeXÖÑP™×Wïã©·[ŽÛú‘ñ¸ðƒ£ò¸{Û†$žÿPÉ:ajëb/!™!‘¬XÉ¡@Ó&­ïmîú:í‡ÍJЪUTjDXª@ÔÊä©mŠžç¨ëåèFO#e¾à(ˆf¸pLs1K–¹äzå’äÙK…{€;XåsëªÎ»ÊŸtÒÓ*ÛróÞcmGò _s¦Ïp­ ³s…Ü“8U ží#†§‚iÒ&èúAë`*@òÚæØe.{AHóA,J Ú¢PËsd m@ô:¬@ü±qál¼¤x Äð²?¼HДÍTıÑŒªî<µXt¾ø‘Ëózœ¾’QÊ.kQ.¡Ébª ÷³óÛ.›n¬î ¢¢~#%+•K*R®i%Du<•$+ ÄN\é_},¤Ÿ%Âøh¹U@+(^S4Ó;héï{¡>/Þ¸¶$ X4‡¤ü¨¬ÂhL§ÄÊ| ¸mñ ›çŒÇª«‰H`«ÞÉ¥Ìg“;Í5IU4´¬ÄÜ@ °?…X[m€ÁžXŽìCX”­ÜdÔlu›\wÁénÓt¼‡$ ›B>Óî­gd‰ Ymp£`wºúþ‘¶3BÇ$¸eŠU$ok³ì;nß®†g ·žH:ÛâDé³N޵ûþ&ÔÿÆçÝÆÿÎESòº€~{Œ·Vì€Ö§ø:‰§‘Ìon6ÖÒ5‡ÐwÅÝÂÐa¥er…g]KûâökÛm™°ç R_"våº#vHÚ†!Re u:„rÇo†ÜÂ;øXü·ïˆn"+Q¹ N*!Ñ#j½acÝXßÐ c1°û£´é?8$ø††*EÕ@ê ÈIßQ… ×wÜ›!bÖP~xUyÅ4êµAª šwÓq¥QfuÕ±ðÝXmÔX_ŒA75¼|INW×RÅ V°ÒCOPr×$4ñoØìPH$àr«2•V¦½! 0·åFÑ`ok[çk[ƒhlì -êоyÃÐÔfôÓIX¦&ªjaU²²EM*LNž¶'ñÉcm±+ÑÁ”USgQI̲R,ÚûÇ#ÄíÑ‚€GbuuÅœà"8~ð8(>ÏdÔÊftÙ˜’–(É™ÔMøUˆ{\Û pRòiÖ eÜS‚ºZS«o%E]¿­‰s¦÷„ Ã[oþ”IZòÏJªÏ/‰B¶¶±>@êà‰n¸mK’æÕHªÂEO%sÌ«{ZuM÷k›ý ë¶<è–“xàƒ«`Ÿ†GšÊhxÁd’eÞÝ/{zÛ§LføZG"Ð0QÙ3Ú¥¨í¼þõ¨‘`AeRÀú[¸Ô/‰š™˜TM åB!^ÀFÁÅüîÀÛ¸aØ€ýC-¡RŽéCw·í¡ª§’ØÆ'Bø‰] þ¿•îp8³+Ó5ÞV±=5e#ë±þîÝpû¬†Ìà’s´ßyä£Ö‚Y  <ÀŸPmn÷ÛÐâ[…²y¦©å„7I‘œÛ@%˜n¢ûn,>x³âX}-á¶}`¬ná÷ êûÁNÈ6>ÈËaÔî„÷;Û¦,Ì¢—Ý xdÐF¸ SpÄ\8ÈŽ‡éq¾ÛÓL=îd´Õ%5Lâ8€P±7ÒÒ–ùF×=/|#U¤é2r÷”Õ) ` «ž¶_ás…Ü%hý+³ÄëÝÉDÐRekOîòg–jB·6± *ê6·Vkùôn­#Ê¡¢™šŒ»Í%Å"ž¦*Tz‚ ½óÀç8NÇ‚µAY…: š¹ÕÖJd(’H£ÝÙn.Ãúàöï±ÛqNa¤ÈnX››—§c~ê­ñAÅÝ8Bñ’9ðïÈ%8?7¢lÅjU¯-TtDH7z–³0Ô/𨵼ÎÌh õÕ5ŒFÕrUFÞ"Uýài~ø]ŽÄÛ> ø´ðI[ç%¤´qM9ŠJº©+&6™”Æ lÚã§í3 ®ŠV‚º\E_-d‡Cq ‚1ýÛ‚öù¢Ñ ÍæS ØÛ€ÉId£ VrU#V7@«L€mÔ ®oÜcÌÞ¦ ,ÂHâI$—0HîÆÂ:x‰Úç ño[ß 1“féü+´ÈTø&ð€º¥R£ÞLU ©w,ÑF·ÚÖØØÌK&7™®…2O‚—ÿ)—øÒaÎ]ÿwªÿO›ÿr|K>ÑõÃÍ(Ïò9*çÚÅ7þ_UþÎÏøˆ?ÍÇü Ãð7rQÞX‘v[ÿ{oíÑÿ»¶ ø‹ü˜ÿèUÿ±)îŒy¢Aû[ʱrïò±ÿE¥ÿr‹Õß÷ Ÿÿ9£ÿx“ÆûãH£Pô”cø™ÎAÿµ]®&铤æŸìÓ`To Ç0‰æÝê+-ÿ*û*?Þª±-—ŠÌ>Yûrb±<Jðüc¢²Ïò•WùúþF§þ[£ÿH¡ÿ~¦ÃŸ÷ úFJð¾Ãñæ˜çå¸ÿµ]þôØ´&ÿ]ý„ÿãÓÒ|_ˆâ…Eð;­ˆ?<éžÌøøpEí?üw÷³ýó„­¾ƒ’~ó¿-˜ÿ—$ÿA“ÿj,7Ì¿þ5Wò›ý±‚Âû' ‚óü{›Áæßÿ[ý/ÿdã0ÆÌ+|#¿ÿÙufraw-0.19.2/curveeditor_widget.h0000664000175000017500000000161112115264507013723 00000000000000/*************************************************** * curveeditor_widget.h - a curve editor widget for GTK+ * Copyright 2004-2013 by Shawn Freeman, Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. **************************************************/ GtkWidget *curveeditor_widget_new(int height, int width, void (*callback)(), gpointer userdata); void curveeditor_widget_update(GtkWidget *widget); void curveeditor_widget_set_curve(GtkWidget *widget, CurveData *curve); CurveData *curveeditor_widget_get_curve(GtkWidget *widget); gboolean curveeditor_widget_get_coordinates(GtkWidget *widget, double *x, double *y); ufraw-0.19.2/curveeditor_widget.c0000664000175000017500000005272112115264507013726 00000000000000/*************************************************** * curveeditor_widget.c - a curve editor widget for GTK+ * Copyright 2004-2013 by Shawn Freeman, Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. **************************************************/ //#ifdef HAVE_CONFIG_H //# include "config.h" //#endif #include #include #include #include #include #include "nikon_curve.h" //All the internal data of curve widget is held in this structure typedef struct { CurveData *curve; CurveData drawnCurve; int selectedPoint, drawnSelectedPoint; GdkPixmap *pixmap; int width, height; void (*callback)(); gpointer userdata; GtkWidget *widget; } CurveEditorWidgetData; /******************************************************** curveeditor_point_exists: *********************************************************/ static gboolean curveeditor_point_exists(CurveData *curve, int selectedPoint, double x) { int i; for (i = 0; i < curve->m_numAnchors; i++) { if (i != selectedPoint && fabs(x - curve->m_anchors[i].x) < 1.0 / 256.0) { return TRUE; } } return FALSE; } /******************************************************** curveeditor_widget_qsort_compare: Comparator for qsort function call. This is a local helper function only. *********************************************************/ static int curveeditor_widget_qsort_compare(const void *arg1, const void *arg2) { /* Compare points. Must define all three return values! */ if (((CurveAnchorPoint*)arg1)->x > ((CurveAnchorPoint*)arg2)->x) { return 1; } else if (((CurveAnchorPoint*)arg1)->x < ((CurveAnchorPoint*)arg2)->x) { return -1; } //this should not happen. x-coords must be different for spline to work. return 0; } /********************************************** Draws the curve on the drawing area. ***********************************************/ static void curveeditor_widget_draw(CurveEditorWidgetData *data) { if (data->pixmap == NULL) return; /* If curve has not changed, do nothing */ if (memcmp(&data->drawnCurve, data->curve, sizeof(data->drawnCurve)) == 0 && data->drawnSelectedPoint == data->selectedPoint) return; GdkPoint graphPoints[NIKON_MAX_ANCHORS]; //get the graphics context GdkGC *gc = gdk_gc_new(data->pixmap); GdkColormap *colormap = gdk_colormap_new(gdk_rgb_get_visual(), FALSE); gdk_gc_set_colormap(gc, colormap); //Used to alter colors while drawing GdkColor color; CurveData *curve = data->curve; int w = data->width, h = data->height; GdkPixmap *graph = data->pixmap; double selectedPoint_x = 0; //fill bg of graph to black color.red = 0; color.green = 0; color.blue = 0; gdk_gc_set_rgb_fg_color(gc, &color); gdk_draw_rectangle(graph, gc, TRUE, 0, 0, w, h); //draw the grid lines grey color.red = 0x4000; color.green = 0x4000; color.blue = 0x4000; gdk_gc_set_rgb_fg_color(gc, &color); //draw grid lines gdk_draw_line(graph, gc, 1 * w / 4, 0, 1 * w / 4, h); gdk_draw_line(graph, gc, 2 * w / 4, 0, 2 * w / 4, h); gdk_draw_line(graph, gc, 3 * w / 4, 0, 3 * w / 4, h); gdk_draw_line(graph, gc, 0, 1 * h / 4, w, 1 * h / 4); gdk_draw_line(graph, gc, 0, 2 * h / 4, w, 2 * h / 4); gdk_draw_line(graph, gc, 0, 3 * h / 4, w, 3 * h / 4); //redraw the curve CurveSample *sample = CurveSampleInit(w, h); switch (curve->m_curveType) { case TONE_CURVE: //tone curve in white color.red = 0xFFFF; color.green = 0xFFFF; color.blue = 0xFFFF; break; case RED_CURVE: //red curve in red color.red = 0xFFFF; color.green = 0; color.blue = 0; break; case GREEN_CURVE: //green curve in green color.red = 0; color.green = 0xFFFF; color.blue = 0; break; case BLUE_CURVE: //blue curve in blue color.red = 0; color.green = 0; color.blue = 0xFFFF; break; default: //?? break; } //set the color to draw the curve gdk_gc_set_rgb_fg_color(gc, &color); //check to see if this curve contains any data //We should not ever get here. if (curve->m_numAnchors == 0) { //init this curve to a straight line CurveDataReset(curve); } int i = 0; //get current selected point x value if (data->selectedPoint >= 0) selectedPoint_x = curve->m_anchors[data->selectedPoint].x; //make sure the points are in sorted order by x coord qsort(curve->m_anchors, curve->m_numAnchors, sizeof(CurveAnchorPoint), curveeditor_widget_qsort_compare); //update the selection to match the sorted list if (data->selectedPoint >= 0) { for (i = 0; i < curve->m_numAnchors; i++) { if (curve->m_anchors[i].x == selectedPoint_x) { data->selectedPoint = i; break; } } } if (CurveDataSample(curve, sample) != NC_SUCCESS) for (i = 0; i < (int)sample->m_samplingRes; i++) sample->m_Samples[i] = sample->m_outputRes * i / sample->m_samplingRes; for (i = 0; i < (int)sample->m_samplingRes; i++) { gdk_draw_point(graph, gc, i, h - 1 - sample->m_Samples[i]); } CurveSampleFree(sample); double g = 1 / curve->m_gamma; for (i = 0; i < curve->m_numAnchors; i++) { graphPoints[i].x = (int)(curve->m_anchors[i].x * (w - 1)); graphPoints[i].y = (int)((1 - pow(curve->m_anchors[i].y, g)) * (h - 1)); } for (i = 0; i < curve->m_numAnchors; i++) { gdk_draw_rectangle(graph, gc, TRUE, graphPoints[i].x - 1, graphPoints[i].y - 1, 5, 5); } //highlight selected point if (data->selectedPoint >= 0) { gdk_draw_rectangle(graph, gc, FALSE, graphPoints[data->selectedPoint].x - 3, graphPoints[data->selectedPoint].y - 3, 8, 8); gdk_draw_rectangle(graph, gc, TRUE, graphPoints[data->selectedPoint].x - 1, graphPoints[data->selectedPoint].y - 1, 5, 5); } gtk_widget_queue_draw(data->widget); g_object_unref(gc); g_object_unref(colormap); data->drawnCurve = *data->curve; data->drawnSelectedPoint = data->selectedPoint; } /******************************************************** curveeditor_widget_on_focus_event: *********************************************************/ static gboolean curveeditor_widget_on_focus_event(GtkWidget *widget, GdkEventFocus *event, CurveEditorWidgetData *data) { widget = widget; if (event->in) data->selectedPoint = 0; else data->selectedPoint = -1; curveeditor_widget_draw(data); return FALSE; } /******************************************************** curveeditor_widget_on_button_press_event: *********************************************************/ static gboolean curveeditor_widget_on_button_press_event(GtkWidget * widget, GdkEventButton * event, CurveEditorWidgetData *data) { int i; gtk_widget_grab_focus(widget); if (event->button != 1) return FALSE; CurveData *curve = data->curve; int w = data->width; int h = data->height; double g = 1 / curve->m_gamma; data->selectedPoint = -1; for (i = 0; i < curve->m_numAnchors; i++) { if (abs(event->x - curve->m_anchors[i].x * (w - 1)) < 7 && abs(event->y - (1 - pow(curve->m_anchors[i].y, g)) * (h - 1)) < 7) { data->selectedPoint = i; break; } } double x = (double) event->x / (w - 1); // Add point only if no other point exists with the same x coordinate // and the added point is between the first and the last points. if (data->selectedPoint == -1 && !curveeditor_point_exists(curve, -1, x) && x > curve->m_anchors[0].x && x < curve->m_anchors[curve->m_numAnchors - 1].x) { //add point int num = curve->m_numAnchors; //nikon curve files don't allow more than 20 anchors if (curve->m_numAnchors >= NIKON_MAX_ANCHORS) return TRUE; //add it to the end curve->m_anchors[num].x = x; curve->m_anchors[num].y = (double)(h - 1 - event->y) / (h - 1); data->selectedPoint = num; curve->m_numAnchors = num + 1; //Make sure the selected point draws at the mouse location //This is done by taking the point and raising it to the gamma. //When the gamma is calculated later, the 1/gamma cancels this out //leaving the point where it has been placed. curve->m_anchors[data->selectedPoint].y = pow(curve->m_anchors[data->selectedPoint].y, curve->m_gamma); } curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); return TRUE; } /******************************************************** curveeditor_widget_on_show_event: *********************************************************/ static void curveeditor_widget_on_realize(GtkWidget *widget, CurveEditorWidgetData *data) { /* We can create the pixmap only after widget is connected to * a GdkWindow. It is needed to get the depth of the pixmap */ data->pixmap = gdk_pixmap_new(gtk_widget_get_parent_window(widget), data->width, data->height, -1); GtkWidget *curveImage = gtk_image_new_from_pixmap(data->pixmap, NULL); g_object_unref(data->pixmap); gtk_container_add(GTK_CONTAINER(widget), curveImage); gtk_widget_show(curveImage); curveeditor_widget_draw(data); } /******************************************************** curveeditor_widget_on_motion_notify_event: *********************************************************/ static gboolean curveeditor_widget_on_motion_notify_event(GtkWidget *widget, GdkEventButton *event, CurveEditorWidgetData *data) { widget = widget; CurveData *curve = data->curve; int w = data->width; int h = data->height; if ((event->state & GDK_BUTTON1_MASK) == 0) return TRUE; if (data->selectedPoint < 0) return TRUE; // If point is dragged outside of the editor, delete it. if ((event->x < -10 || event->x > w + 10) && data->selectedPoint > 0 && data->selectedPoint < curve->m_numAnchors - 1) { int i; for (i = data->selectedPoint; i < curve->m_numAnchors - 1; i++) { curve->m_anchors[i].x = curve->m_anchors[i + 1].x; curve->m_anchors[i].y = curve->m_anchors[i + 1].y; } curve->m_numAnchors--; data->selectedPoint = -1; curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); return TRUE; } double x = (double)event->x / (double)(w - 1); double y = pow((double)(h - event->y) / (double)(h - 1), curve->m_gamma); if (x < 0) x = 0; if (x > 1) x = 1; if (y < 0) y = 0; if (y > 1) y = 1; // Don't allow a draging point to exceed or preceed neighbors or // else the spline algorithm will explode. // Also prevent moving central points beyond the two end points. if (!curveeditor_point_exists(curve, data->selectedPoint, x) && (data->selectedPoint == 0 || x > curve->m_anchors[0].x) && (data->selectedPoint == curve->m_numAnchors - 1 || x < curve->m_anchors[curve->m_numAnchors - 1].x)) { CurveDataSetPoint(curve, data->selectedPoint, x, y); curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); } return TRUE; } /******************************************************** curveeditor_widget_on_key_press_event: *********************************************************/ static gboolean curveeditor_widget_on_key_press_event(GtkWidget *widget, GdkEventKey * event, CurveEditorWidgetData *data) { int i; widget = widget; CurveData *curve = data->curve; int w = data->width, h = data->height; //There must be a point selected if (data->selectedPoint < 0) return FALSE; //insert adds a point between the current one an the next one if (event->keyval == GDK_Insert) { if (data->selectedPoint >= curve->m_numAnchors - 1) return TRUE; if (curve->m_numAnchors >= NIKON_MAX_ANCHORS) return TRUE; if ((curve->m_anchors[data->selectedPoint + 1].x - curve->m_anchors[data->selectedPoint].x) < 2.0 / (w - 1)) return TRUE; CurveSample *sample = CurveSampleInit(w, h); if (CurveDataSample(curve, sample) != NC_SUCCESS) for (i = 0; i < (int)sample->m_samplingRes; i++) sample->m_Samples[i] = sample->m_outputRes * i / sample->m_samplingRes; //Add the point at the end - it will be sorted later anyway curve->m_anchors[curve->m_numAnchors].x = (curve->m_anchors[data->selectedPoint].x + curve->m_anchors[data->selectedPoint + 1].x) / 2; curve->m_anchors[curve->m_numAnchors].y = (double)sample->m_Samples[(int)(curve->m_anchors[ curve->m_numAnchors].x * (w))] / (h - 1); CurveSampleFree(sample); data->selectedPoint = curve->m_numAnchors++; //redraw graph curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); return TRUE; } //delete removes points if (event->keyval == GDK_Delete) { //a minimum of two points must be available at all times! if (curve->m_numAnchors == 2) return TRUE; for (i = data->selectedPoint; i < curve->m_numAnchors - 1; i++) { curve->m_anchors[i].x = curve->m_anchors[i + 1].x; curve->m_anchors[i].y = curve->m_anchors[i + 1].y; } curve->m_numAnchors--; //set selected point to next point, but dont move to last point if (data->selectedPoint >= curve->m_numAnchors - 1) data->selectedPoint--; //redraw graph curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); return TRUE; } //Home jumps to first point if (event->keyval == GDK_Home) { data->selectedPoint = 0; curveeditor_widget_draw(data); return TRUE; } //End jumps to last point if (event->keyval == GDK_End) { data->selectedPoint = curve->m_numAnchors - 1; curveeditor_widget_draw(data); return TRUE; } //Page Up jumps to previous point if (event->keyval == GDK_Page_Up) { data->selectedPoint--; if (data->selectedPoint < 0) data->selectedPoint = 0; curveeditor_widget_draw(data); return TRUE; } //Page Down jumps to next point if (event->keyval == GDK_Page_Down) { data->selectedPoint++; if (data->selectedPoint >= curve->m_numAnchors) data->selectedPoint = curve->m_numAnchors - 1; curveeditor_widget_draw(data); return TRUE; } //Up/Down/Left/Right moves the point around if (event->keyval == GDK_Up || event->keyval == GDK_Down || event->keyval == GDK_Left || event->keyval == GDK_Right) { if (event->keyval == GDK_Up) { curve->m_anchors[data->selectedPoint].y += 1.0 / (h - 1); if (curve->m_anchors[data->selectedPoint].y > 1.0) curve->m_anchors[data->selectedPoint].y = 1.0; } if (event->keyval == GDK_Down) { curve->m_anchors[data->selectedPoint].y -= 1.0 / (h - 1); if (curve->m_anchors[data->selectedPoint].y < 0.0) curve->m_anchors[data->selectedPoint].y = 0.0; } if (event->keyval == GDK_Right) { double x = curve->m_anchors[data->selectedPoint].x + 1.0 / (w - 1); double y = curve->m_anchors[data->selectedPoint].y; if (x > 1.0) x = 1.0; // Update point only if it does not override the next one if (data->selectedPoint == curve->m_numAnchors - 1 || x < curve->m_anchors[data->selectedPoint + 1].x - 0.5 / (w - 1)) { CurveDataSetPoint(curve, data->selectedPoint, x, y); } } if (event->keyval == GDK_Left) { double x = curve->m_anchors[data->selectedPoint].x - 1.0 / (w - 1); double y = curve->m_anchors[data->selectedPoint].y; if (x < 0.0) x = 0.0; // Update point only if it does not override the previous one if (data->selectedPoint == 0 || x > curve->m_anchors[data->selectedPoint - 1].x + 0.5 / (w - 1)) { CurveDataSetPoint(curve, data->selectedPoint, x, y); } } curveeditor_widget_draw(data); if (data->callback != NULL) (*data->callback)(data->widget, data->userdata); return TRUE; } return FALSE; } /******************************************************** curveeditor_widget_on_destroy: *********************************************************/ static void curveeditor_widget_on_destroy(GtkWidget *widget, CurveEditorWidgetData *data) { widget = widget; g_free(data->curve); g_free(data); } GtkWidget *curveeditor_widget_new(int height, int width, GCallback callback, gpointer userdata) { CurveEditorWidgetData *data = g_new0(CurveEditorWidgetData, 1); CurveData *curve = g_new0(CurveData, 1); GtkWidget *curveEventBox, *curveAlign; curveEventBox = gtk_event_box_new(); GTK_WIDGET_SET_FLAGS(curveEventBox, GTK_CAN_FOCUS); gtk_widget_set_size_request(curveEventBox, width, height); curveAlign = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_container_add(GTK_CONTAINER(curveAlign), curveEventBox); data->pixmap = NULL; data->curve = curve; data->drawnCurve.m_gamma = -1.0; data->widget = curveAlign; data->height = height; data->width = width; data->callback = callback; data->userdata = userdata; data->selectedPoint = 0; data->drawnSelectedPoint = -1; g_signal_connect_after((gpointer)curveEventBox, "button-press-event", G_CALLBACK(curveeditor_widget_on_button_press_event), data); g_signal_connect_after((gpointer)curveEventBox, "realize", G_CALLBACK(curveeditor_widget_on_realize), data); g_signal_connect_after((gpointer)curveEventBox, "motion-notify-event", G_CALLBACK(curveeditor_widget_on_motion_notify_event), data); g_signal_connect_after((gpointer)curveEventBox, "key-press-event", G_CALLBACK(curveeditor_widget_on_key_press_event), data); g_signal_connect_after((gpointer)curveEventBox, "focus-in-event", G_CALLBACK(curveeditor_widget_on_focus_event), data); g_signal_connect_after((gpointer)curveEventBox, "focus-out-event", G_CALLBACK(curveeditor_widget_on_focus_event), data); g_signal_connect_after((gpointer)curveEventBox, "destroy", G_CALLBACK(curveeditor_widget_on_destroy), data); g_object_set_data(G_OBJECT(curveAlign), "curve-widget-data", data); return curveAlign; } void curveeditor_widget_update(GtkWidget *widget) { CurveEditorWidgetData *data = g_object_get_data(G_OBJECT(widget), "curve-widget-data"); curveeditor_widget_draw(data); } void curveeditor_widget_set_curve(GtkWidget *widget, CurveData *curve) { CurveEditorWidgetData *data = g_object_get_data(G_OBJECT(widget), "curve-widget-data"); *data->curve = *curve; curveeditor_widget_draw(data); } CurveData *curveeditor_widget_get_curve(GtkWidget *widget) { CurveEditorWidgetData *data = g_object_get_data(G_OBJECT(widget), "curve-widget-data"); return data->curve; } /********************************************** curveeditor_widget_get_coordinates: ***********************************************/ gboolean curveeditor_widget_get_coordinates(GtkWidget *widget, double *x, double *y) { CurveEditorWidgetData *data = g_object_get_data(G_OBJECT(widget), "curve-widget-data"); if (data->selectedPoint != -1) { *x = data->curve->m_anchors[data->selectedPoint].x; *y = data->curve->m_anchors[data->selectedPoint].y; return TRUE; } else { return FALSE; } } ufraw-0.19.2/Makefile.in0000664000175000017500000017177512123734473011747 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # $Id: Makefile.am,v 1.60 2013/03/14 09:00:16 nkbj Exp $ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @MAKE_EXTRAS_FALSE@bin_PROGRAMS = ufraw-batch$(EXEEXT) @MAKE_EXTRAS_TRUE@bin_PROGRAMS = ufraw-batch$(EXEEXT) dcraw$(EXEEXT) \ @MAKE_EXTRAS_TRUE@ nikon-curve$(EXEEXT) @MAKE_GTK_TRUE@gtk_PROGRAMS = ufraw$(EXEEXT) @MAKE_GIMP_TRUE@gimpbin_PROGRAMS = ufraw-gimp$(EXEEXT) @MAKE_CINEPAINT_TRUE@cinepaintbin_PROGRAMS = ufraw-cinepaint$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/ufraw-setup.iss.in $(top_srcdir)/configure COPYING \ TODO config.guess config.sub depcomp install-sh missing \ mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = ufraw-setup.iss CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libufraw_a_AR = $(AR) $(ARFLAGS) libufraw_a_LIBADD = am__libufraw_a_SOURCES_DIST = dcraw.cc ufraw_ufraw.c ufraw_routines.c \ ufraw_developer.c ufraw_conf.c ufraw_writer.c ufraw_embedded.c \ ufraw_message.c ufraw.h ufobject.cc ufobject.h \ ufraw_settings.cc ufraw_lensfun.cc wb_presets.c dcraw_api.cc \ dcraw_api.h dcraw_indi.c dcraw.h nikon_curve.c nikon_curve.h \ uf_progress.h uf_glib.h ufraw_exiv2.cc iccjpeg.c iccjpeg.h \ uf_gtk.cc uf_gtk.h ufraw_preview.c ufraw_saver.c \ ufraw_delete.c ufraw_chooser.c ufraw_icons.c \ icons/ufraw_icons.h curveeditor_widget.c curveeditor_widget.h \ ufraw_lens_ui.c ufraw_ui.h @MAKE_GTK_FALSE@am_libufraw_a_OBJECTS = dcraw.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_ufraw.$(OBJEXT) ufraw_routines.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_developer.$(OBJEXT) ufraw_conf.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_writer.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_embedded.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_message.$(OBJEXT) ufobject.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_settings.$(OBJEXT) \ @MAKE_GTK_FALSE@ ufraw_lensfun.$(OBJEXT) wb_presets.$(OBJEXT) \ @MAKE_GTK_FALSE@ dcraw_api.$(OBJEXT) dcraw_indi.$(OBJEXT) \ @MAKE_GTK_FALSE@ nikon_curve.$(OBJEXT) ufraw_exiv2.$(OBJEXT) \ @MAKE_GTK_FALSE@ iccjpeg.$(OBJEXT) @MAKE_GTK_TRUE@am_libufraw_a_OBJECTS = dcraw.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_ufraw.$(OBJEXT) ufraw_routines.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_developer.$(OBJEXT) ufraw_conf.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_writer.$(OBJEXT) ufraw_embedded.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_message.$(OBJEXT) ufobject.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_settings.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_lensfun.$(OBJEXT) wb_presets.$(OBJEXT) \ @MAKE_GTK_TRUE@ dcraw_api.$(OBJEXT) dcraw_indi.$(OBJEXT) \ @MAKE_GTK_TRUE@ nikon_curve.$(OBJEXT) uf_gtk.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_exiv2.$(OBJEXT) iccjpeg.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_preview.$(OBJEXT) ufraw_saver.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_delete.$(OBJEXT) ufraw_chooser.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_icons.$(OBJEXT) \ @MAKE_GTK_TRUE@ curveeditor_widget.$(OBJEXT) \ @MAKE_GTK_TRUE@ ufraw_lens_ui.$(OBJEXT) libufraw_a_OBJECTS = $(am_libufraw_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cinepaintbindir)" \ "$(DESTDIR)$(gimpbindir)" "$(DESTDIR)$(gtkdir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdir)" \ "$(DESTDIR)$(schemasdir)" PROGRAMS = $(bin_PROGRAMS) $(cinepaintbin_PROGRAMS) \ $(gimpbin_PROGRAMS) $(gtk_PROGRAMS) am__dcraw_SOURCES_DIST = dcraw.cc @MAKE_EXTRAS_TRUE@am_dcraw_OBJECTS = dcraw-dcraw.$(OBJEXT) dcraw_OBJECTS = $(am_dcraw_OBJECTS) am__DEPENDENCIES_1 = @MAKE_EXTRAS_TRUE@dcraw_DEPENDENCIES = $(am__DEPENDENCIES_1) dcraw_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(dcraw_LDFLAGS) \ $(LDFLAGS) -o $@ am__nikon_curve_SOURCES_DIST = nikon_curve.c @MAKE_EXTRAS_TRUE@am_nikon_curve_OBJECTS = \ @MAKE_EXTRAS_TRUE@ nikon_curve-nikon_curve.$(OBJEXT) nikon_curve_OBJECTS = $(am_nikon_curve_OBJECTS) @MAKE_EXTRAS_TRUE@nikon_curve_DEPENDENCIES = $(am__DEPENDENCIES_1) ufraw_SOURCES = ufraw.c ufraw_OBJECTS = ufraw.$(OBJEXT) ufraw_LDADD = $(LDADD) @UFRAW_WIN32_TRUE@am__DEPENDENCIES_2 = ufraw_icon.opc ufraw_DEPENDENCIES = libufraw.a $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) am_ufraw_batch_OBJECTS = ufraw-batch.$(OBJEXT) ufraw_batch_OBJECTS = $(am_ufraw_batch_OBJECTS) ufraw_batch_LDADD = $(LDADD) ufraw_batch_DEPENDENCIES = libufraw.a $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) am__ufraw_cinepaint_SOURCES_DIST = ufraw-gimp.c @MAKE_CINEPAINT_TRUE@am_ufraw_cinepaint_OBJECTS = \ @MAKE_CINEPAINT_TRUE@ ufraw_cinepaint-ufraw-gimp.$(OBJEXT) ufraw_cinepaint_OBJECTS = $(am_ufraw_cinepaint_OBJECTS) am__DEPENDENCIES_3 = libufraw.a $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) @MAKE_CINEPAINT_TRUE@ufraw_cinepaint_DEPENDENCIES = \ @MAKE_CINEPAINT_TRUE@ $(am__DEPENDENCIES_3) \ @MAKE_CINEPAINT_TRUE@ $(am__DEPENDENCIES_1) \ @MAKE_CINEPAINT_TRUE@ $(am__DEPENDENCIES_1) am__ufraw_gimp_SOURCES_DIST = ufraw-gimp.c @MAKE_GIMP_TRUE@am_ufraw_gimp_OBJECTS = \ @MAKE_GIMP_TRUE@ ufraw_gimp-ufraw-gimp.$(OBJEXT) ufraw_gimp_OBJECTS = $(am_ufraw_gimp_OBJECTS) @MAKE_GIMP_TRUE@ufraw_gimp_DEPENDENCIES = $(am__DEPENDENCIES_3) \ @MAKE_GIMP_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libufraw_a_SOURCES) $(dcraw_SOURCES) \ $(nikon_curve_SOURCES) ufraw.c $(ufraw_batch_SOURCES) \ $(ufraw_cinepaint_SOURCES) $(ufraw_gimp_SOURCES) DIST_SOURCES = $(am__libufraw_a_SOURCES_DIST) \ $(am__dcraw_SOURCES_DIST) $(am__nikon_curve_SOURCES_DIST) \ ufraw.c $(ufraw_batch_SOURCES) \ $(am__ufraw_cinepaint_SOURCES_DIST) \ $(am__ufraw_gimp_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(app_DATA) $(schemas_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CARBON_LIBS = @CARBON_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFITSIO_CFLAGS = @CFITSIO_CFLAGS@ CFITSIO_LIBS = @CFITSIO_LIBS@ CFLAGS = @CFLAGS@ CINEPAINT_CFLAGS = @CINEPAINT_CFLAGS@ CINEPAINT_LIBS = @CINEPAINT_LIBS@ CINEPAINT_PROGRAMPLUGINDIR = @CINEPAINT_PROGRAMPLUGINDIR@ COMMENT_ICON = @COMMENT_ICON@ CONSOLE = @CONSOLE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOSPREFIX = @DOSPREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXIV2_CFLAGS = @EXIV2_CFLAGS@ EXIV2_LIBS = @EXIV2_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIMP_2_4_CFLAGS = @GIMP_2_4_CFLAGS@ GIMP_2_4_LIBS = @GIMP_2_4_LIBS@ GIMP_2_9_CFLAGS = @GIMP_2_9_CFLAGS@ GIMP_2_9_LIBS = @GIMP_2_9_LIBS@ GIMP_CFLAGS = @GIMP_CFLAGS@ GIMP_LIBDIR = @GIMP_LIBDIR@ GIMP_LIBS = @GIMP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKBASE_CFLAGS = @GTKBASE_CFLAGS@ GTKBASE_LIBS = @GTKBASE_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ ISCC = @ISCC@ LCMS_CFLAGS = @LCMS_CFLAGS@ LCMS_LIBS = @LCMS_LIBS@ LDFLAGS = @LDFLAGS@ LENSFUN_CFLAGS = @LENSFUN_CFLAGS@ LENSFUN_LIBS = @LENSFUN_LIBS@ LIBOBJS = @LIBOBJS@ LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBTIFF_CFLAGS = @LIBTIFF_CFLAGS@ LIBTIFF_LIBS = @LIBTIFF_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POD2MAN = @POD2MAN@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PREFIX = @PREFIX@ PROGRAMFILES = @PROGRAMFILES@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UFRAW_CPPFLAGS = @UFRAW_CPPFLAGS@ UFRAW_LDADD = @UFRAW_LDADD@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ WINE = @WINE@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = po icons @MAKE_GTK_TRUE@gtkdir = $(bindir) @MAKE_GIMP_TRUE@gimpbindir = $(GIMP_LIBDIR)/plug-ins @MAKE_CINEPAINT_TRUE@cinepaintbindir = $(CINEPAINT_PROGRAMPLUGINDIR)/plug-ins man_MANS = ufraw.1 noinst_LIBRARIES = libufraw.a MAINTAINERCLEANFILES = ufraw.1 CLEANFILES = ufraw.schemas ufraw_icon.opc ufraw-setup.bmp @INSTALL_MIME_TRUE@app_DATA = ufraw.desktop @INSTALL_MIME_TRUE@appdir = $(datadir)/applications # Not needed since it is contained in shared-mime-info 0.21 # mime_DATA = ufraw-mime.xml # mimedir = $(datadir)/mime/packages @INSTALL_MIME_TRUE@schemas_DATA = ufraw.schemas @INSTALL_MIME_TRUE@schemasdir = $(datadir)/gconf/schemas @UFRAW_WIN32_FALSE@UFRAW_ICON = @UFRAW_WIN32_TRUE@UFRAW_ICON = ufraw_icon.opc EXTRA_DIST = ufraw.desktop ufraw_icon.ico ufraw_icon.rc \ ufraw-mime.xml generate_schemas.sh ac_openmp.m4 Doxyfile \ ufraw-setup.jpg autogen.sh mkinstalldirs MANIFEST ufraw.pod ufraw.1 AM_CPPFLAGS = $(UFRAW_CPPFLAGS) -DDCRAW_NOMAIN \ -DUFRAW_LOCALEDIR=\"$(datadir)/locale\" LDADD = libufraw.a $(UFRAW_ICON) $(UFRAW_LDADD) LINK = $(CXXLINK) @MAKE_GTK_FALSE@libufraw_a_SOURCES = \ @MAKE_GTK_FALSE@ dcraw.cc ufraw_ufraw.c ufraw_routines.c ufraw_developer.c \ @MAKE_GTK_FALSE@ ufraw_conf.c ufraw_writer.c ufraw_embedded.c ufraw_message.c ufraw.h \ @MAKE_GTK_FALSE@ ufobject.cc ufobject.h ufraw_settings.cc ufraw_lensfun.cc \ @MAKE_GTK_FALSE@ wb_presets.c dcraw_api.cc dcraw_api.h dcraw_indi.c dcraw.h \ @MAKE_GTK_FALSE@ nikon_curve.c nikon_curve.h uf_progress.h \ @MAKE_GTK_FALSE@ uf_glib.h ufraw_exiv2.cc iccjpeg.c iccjpeg.h @MAKE_GTK_TRUE@libufraw_a_SOURCES = \ @MAKE_GTK_TRUE@ dcraw.cc ufraw_ufraw.c ufraw_routines.c ufraw_developer.c \ @MAKE_GTK_TRUE@ ufraw_conf.c ufraw_writer.c ufraw_embedded.c ufraw_message.c ufraw.h \ @MAKE_GTK_TRUE@ ufobject.cc ufobject.h ufraw_settings.cc ufraw_lensfun.cc \ @MAKE_GTK_TRUE@ wb_presets.c dcraw_api.cc dcraw_api.h dcraw_indi.c dcraw.h \ @MAKE_GTK_TRUE@ nikon_curve.c nikon_curve.h uf_progress.h \ @MAKE_GTK_TRUE@ uf_glib.h uf_gtk.cc uf_gtk.h ufraw_exiv2.cc iccjpeg.c iccjpeg.h \ @MAKE_GTK_TRUE@ ufraw_preview.c ufraw_saver.c ufraw_delete.c \ @MAKE_GTK_TRUE@ ufraw_chooser.c ufraw_icons.c icons/ufraw_icons.h \ @MAKE_GTK_TRUE@ curveeditor_widget.c curveeditor_widget.h \ @MAKE_GTK_TRUE@ ufraw_lens_ui.c ufraw_ui.h ufraw_batch_LINK = $(CXXLINK) @CONSOLE@ ufraw_batch_SOURCES = ufraw-batch.c @MAKE_GIMP_TRUE@ufraw_gimp_SOURCES = ufraw-gimp.c @MAKE_GIMP_TRUE@ufraw_gimp_CPPFLAGS = $(AM_CPPFLAGS) $(GIMP_CFLAGS) @MAKE_GIMP_TRUE@ufraw_gimp_LDADD = $(LDADD) $(GIMP_LIBS) $(GTK_LIBS) @MAKE_CINEPAINT_TRUE@ufraw_cinepaint_SOURCES = ufraw-gimp.c @MAKE_CINEPAINT_TRUE@ufraw_cinepaint_CPPFLAGS = $(AM_CPPFLAGS) $(CINEPAINT_CFLAGS) \ @MAKE_CINEPAINT_TRUE@ -DUFRAW_CINEPAINT @MAKE_CINEPAINT_TRUE@ufraw_cinepaint_LDADD = $(LDADD) $(CINEPAINT_LIBS) $(GTK_LIBS) @MAKE_EXTRAS_TRUE@dcraw_SOURCES = dcraw.cc @MAKE_EXTRAS_TRUE@dcraw_CPPFLAGS = $(UFRAW_CPPFLAGS) @MAKE_EXTRAS_TRUE@dcraw_LDFLAGS = @CONSOLE@ @MAKE_EXTRAS_TRUE@dcraw_LDADD = $(UFRAW_LDADD) @MAKE_EXTRAS_TRUE@nikon_curve_SOURCES = nikon_curve.c @MAKE_EXTRAS_TRUE@nikon_curve_CPPFLAGS = $(UFRAW_CPPFLAGS) -D_STAND_ALONE_ @MAKE_EXTRAS_TRUE@nikon_curve_LDFLAGS = @CONSOLE@ @MAKE_EXTRAS_TRUE@nikon_curve_LDADD = $(UFRAW_LDADD) @MAKE_EXTRAS_TRUE@nikon_curve_LINK = $(CXXLINK) @CONSOLE@ all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .1 .c .cc .o .obj .pod am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 ufraw-setup.iss: $(top_builddir)/config.status $(srcdir)/ufraw-setup.iss.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libufraw.a: $(libufraw_a_OBJECTS) $(libufraw_a_DEPENDENCIES) $(EXTRA_libufraw_a_DEPENDENCIES) $(AM_V_at)-rm -f libufraw.a $(AM_V_AR)$(libufraw_a_AR) libufraw.a $(libufraw_a_OBJECTS) $(libufraw_a_LIBADD) $(AM_V_at)$(RANLIB) libufraw.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) install-cinepaintbinPROGRAMS: $(cinepaintbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(cinepaintbin_PROGRAMS)'; test -n "$(cinepaintbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cinepaintbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cinepaintbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(cinepaintbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(cinepaintbindir)$$dir" || exit $$?; \ } \ ; done uninstall-cinepaintbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(cinepaintbin_PROGRAMS)'; test -n "$(cinepaintbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(cinepaintbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(cinepaintbindir)" && rm -f $$files clean-cinepaintbinPROGRAMS: -test -z "$(cinepaintbin_PROGRAMS)" || rm -f $(cinepaintbin_PROGRAMS) install-gimpbinPROGRAMS: $(gimpbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(gimpbin_PROGRAMS)'; test -n "$(gimpbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gimpbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gimpbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(gimpbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(gimpbindir)$$dir" || exit $$?; \ } \ ; done uninstall-gimpbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(gimpbin_PROGRAMS)'; test -n "$(gimpbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(gimpbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gimpbindir)" && rm -f $$files clean-gimpbinPROGRAMS: -test -z "$(gimpbin_PROGRAMS)" || rm -f $(gimpbin_PROGRAMS) install-gtkPROGRAMS: $(gtk_PROGRAMS) @$(NORMAL_INSTALL) @list='$(gtk_PROGRAMS)'; test -n "$(gtkdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gtkdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gtkdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(gtkdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(gtkdir)$$dir" || exit $$?; \ } \ ; done uninstall-gtkPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(gtk_PROGRAMS)'; test -n "$(gtkdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(gtkdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gtkdir)" && rm -f $$files clean-gtkPROGRAMS: -test -z "$(gtk_PROGRAMS)" || rm -f $(gtk_PROGRAMS) dcraw$(EXEEXT): $(dcraw_OBJECTS) $(dcraw_DEPENDENCIES) $(EXTRA_dcraw_DEPENDENCIES) @rm -f dcraw$(EXEEXT) $(AM_V_CXXLD)$(dcraw_LINK) $(dcraw_OBJECTS) $(dcraw_LDADD) $(LIBS) nikon-curve$(EXEEXT): $(nikon_curve_OBJECTS) $(nikon_curve_DEPENDENCIES) $(EXTRA_nikon_curve_DEPENDENCIES) @rm -f nikon-curve$(EXEEXT) $(AM_V_GEN)$(nikon_curve_LINK) $(nikon_curve_OBJECTS) $(nikon_curve_LDADD) $(LIBS) ufraw$(EXEEXT): $(ufraw_OBJECTS) $(ufraw_DEPENDENCIES) $(EXTRA_ufraw_DEPENDENCIES) @rm -f ufraw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ufraw_OBJECTS) $(ufraw_LDADD) $(LIBS) ufraw-batch$(EXEEXT): $(ufraw_batch_OBJECTS) $(ufraw_batch_DEPENDENCIES) $(EXTRA_ufraw_batch_DEPENDENCIES) @rm -f ufraw-batch$(EXEEXT) $(AM_V_GEN)$(ufraw_batch_LINK) $(ufraw_batch_OBJECTS) $(ufraw_batch_LDADD) $(LIBS) ufraw-cinepaint$(EXEEXT): $(ufraw_cinepaint_OBJECTS) $(ufraw_cinepaint_DEPENDENCIES) $(EXTRA_ufraw_cinepaint_DEPENDENCIES) @rm -f ufraw-cinepaint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ufraw_cinepaint_OBJECTS) $(ufraw_cinepaint_LDADD) $(LIBS) ufraw-gimp$(EXEEXT): $(ufraw_gimp_OBJECTS) $(ufraw_gimp_DEPENDENCIES) $(EXTRA_ufraw_gimp_DEPENDENCIES) @rm -f ufraw-gimp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ufraw_gimp_OBJECTS) $(ufraw_gimp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curveeditor_widget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcraw-dcraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcraw_api.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcraw_indi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iccjpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nikon_curve-nikon_curve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nikon_curve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uf_gtk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufobject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw-batch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_chooser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_conf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_delete.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_developer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_embedded.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_exiv2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_gimp-ufraw-gimp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_icons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_lens_ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_lensfun.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_message.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_preview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_routines.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_saver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_ufraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_writer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wb_presets.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` nikon_curve-nikon_curve.o: nikon_curve.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nikon_curve_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nikon_curve-nikon_curve.o -MD -MP -MF $(DEPDIR)/nikon_curve-nikon_curve.Tpo -c -o nikon_curve-nikon_curve.o `test -f 'nikon_curve.c' || echo '$(srcdir)/'`nikon_curve.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nikon_curve-nikon_curve.Tpo $(DEPDIR)/nikon_curve-nikon_curve.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nikon_curve.c' object='nikon_curve-nikon_curve.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nikon_curve_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nikon_curve-nikon_curve.o `test -f 'nikon_curve.c' || echo '$(srcdir)/'`nikon_curve.c nikon_curve-nikon_curve.obj: nikon_curve.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nikon_curve_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nikon_curve-nikon_curve.obj -MD -MP -MF $(DEPDIR)/nikon_curve-nikon_curve.Tpo -c -o nikon_curve-nikon_curve.obj `if test -f 'nikon_curve.c'; then $(CYGPATH_W) 'nikon_curve.c'; else $(CYGPATH_W) '$(srcdir)/nikon_curve.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nikon_curve-nikon_curve.Tpo $(DEPDIR)/nikon_curve-nikon_curve.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nikon_curve.c' object='nikon_curve-nikon_curve.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nikon_curve_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nikon_curve-nikon_curve.obj `if test -f 'nikon_curve.c'; then $(CYGPATH_W) 'nikon_curve.c'; else $(CYGPATH_W) '$(srcdir)/nikon_curve.c'; fi` ufraw_cinepaint-ufraw-gimp.o: ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_cinepaint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw_cinepaint-ufraw-gimp.o -MD -MP -MF $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Tpo -c -o ufraw_cinepaint-ufraw-gimp.o `test -f 'ufraw-gimp.c' || echo '$(srcdir)/'`ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Tpo $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw-gimp.c' object='ufraw_cinepaint-ufraw-gimp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_cinepaint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw_cinepaint-ufraw-gimp.o `test -f 'ufraw-gimp.c' || echo '$(srcdir)/'`ufraw-gimp.c ufraw_cinepaint-ufraw-gimp.obj: ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_cinepaint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw_cinepaint-ufraw-gimp.obj -MD -MP -MF $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Tpo -c -o ufraw_cinepaint-ufraw-gimp.obj `if test -f 'ufraw-gimp.c'; then $(CYGPATH_W) 'ufraw-gimp.c'; else $(CYGPATH_W) '$(srcdir)/ufraw-gimp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Tpo $(DEPDIR)/ufraw_cinepaint-ufraw-gimp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw-gimp.c' object='ufraw_cinepaint-ufraw-gimp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_cinepaint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw_cinepaint-ufraw-gimp.obj `if test -f 'ufraw-gimp.c'; then $(CYGPATH_W) 'ufraw-gimp.c'; else $(CYGPATH_W) '$(srcdir)/ufraw-gimp.c'; fi` ufraw_gimp-ufraw-gimp.o: ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_gimp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw_gimp-ufraw-gimp.o -MD -MP -MF $(DEPDIR)/ufraw_gimp-ufraw-gimp.Tpo -c -o ufraw_gimp-ufraw-gimp.o `test -f 'ufraw-gimp.c' || echo '$(srcdir)/'`ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw_gimp-ufraw-gimp.Tpo $(DEPDIR)/ufraw_gimp-ufraw-gimp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw-gimp.c' object='ufraw_gimp-ufraw-gimp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_gimp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw_gimp-ufraw-gimp.o `test -f 'ufraw-gimp.c' || echo '$(srcdir)/'`ufraw-gimp.c ufraw_gimp-ufraw-gimp.obj: ufraw-gimp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_gimp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw_gimp-ufraw-gimp.obj -MD -MP -MF $(DEPDIR)/ufraw_gimp-ufraw-gimp.Tpo -c -o ufraw_gimp-ufraw-gimp.obj `if test -f 'ufraw-gimp.c'; then $(CYGPATH_W) 'ufraw-gimp.c'; else $(CYGPATH_W) '$(srcdir)/ufraw-gimp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw_gimp-ufraw-gimp.Tpo $(DEPDIR)/ufraw_gimp-ufraw-gimp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw-gimp.c' object='ufraw_gimp-ufraw-gimp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_gimp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw_gimp-ufraw-gimp.obj `if test -f 'ufraw-gimp.c'; then $(CYGPATH_W) 'ufraw-gimp.c'; else $(CYGPATH_W) '$(srcdir)/ufraw-gimp.c'; fi` .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` dcraw-dcraw.o: dcraw.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dcraw_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dcraw-dcraw.o -MD -MP -MF $(DEPDIR)/dcraw-dcraw.Tpo -c -o dcraw-dcraw.o `test -f 'dcraw.cc' || echo '$(srcdir)/'`dcraw.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dcraw-dcraw.Tpo $(DEPDIR)/dcraw-dcraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dcraw.cc' object='dcraw-dcraw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dcraw_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dcraw-dcraw.o `test -f 'dcraw.cc' || echo '$(srcdir)/'`dcraw.cc dcraw-dcraw.obj: dcraw.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dcraw_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dcraw-dcraw.obj -MD -MP -MF $(DEPDIR)/dcraw-dcraw.Tpo -c -o dcraw-dcraw.obj `if test -f 'dcraw.cc'; then $(CYGPATH_W) 'dcraw.cc'; else $(CYGPATH_W) '$(srcdir)/dcraw.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dcraw-dcraw.Tpo $(DEPDIR)/dcraw-dcraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dcraw.cc' object='dcraw-dcraw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dcraw_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dcraw-dcraw.obj `if test -f 'dcraw.cc'; then $(CYGPATH_W) 'dcraw.cc'; else $(CYGPATH_W) '$(srcdir)/dcraw.cc'; fi` install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-appDATA: $(app_DATA) @$(NORMAL_INSTALL) @list='$(app_DATA)'; test -n "$(appdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appdir)" || exit $$?; \ done uninstall-appDATA: @$(NORMAL_UNINSTALL) @list='$(app_DATA)'; test -n "$(appdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appdir)'; $(am__uninstall_files_from_dir) install-schemasDATA: $(schemas_DATA) @$(NORMAL_INSTALL) @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(schemasdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(schemasdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemasdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \ done uninstall-schemasDATA: @$(NORMAL_UNINSTALL) @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(schemasdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cinepaintbindir)" "$(DESTDIR)$(gimpbindir)" "$(DESTDIR)$(gtkdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdir)" "$(DESTDIR)$(schemasdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-cinepaintbinPROGRAMS clean-generic \ clean-gimpbinPROGRAMS clean-gtkPROGRAMS clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-appDATA install-cinepaintbinPROGRAMS \ install-gimpbinPROGRAMS install-gtkPROGRAMS install-man \ install-schemasDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-appDATA uninstall-binPROGRAMS \ uninstall-cinepaintbinPROGRAMS uninstall-gimpbinPROGRAMS \ uninstall-gtkPROGRAMS uninstall-man uninstall-schemasDATA uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-cinepaintbinPROGRAMS clean-generic clean-gimpbinPROGRAMS \ clean-gtkPROGRAMS clean-noinstLIBRARIES ctags ctags-recursive \ dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-appDATA install-binPROGRAMS \ install-cinepaintbinPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-gimpbinPROGRAMS install-gtkPROGRAMS install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-schemasDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-appDATA uninstall-binPROGRAMS \ uninstall-cinepaintbinPROGRAMS uninstall-gimpbinPROGRAMS \ uninstall-gtkPROGRAMS uninstall-man uninstall-man1 \ uninstall-schemasDATA @MAKE_GTK_TRUE@ ufraw_SOURCES = ufraw.c @MAKE_GTK_TRUE@ ufraw_CPPFLAGS = $(UFRAW_CPPFLAGS) @MAKE_GTK_TRUE@ ufraw_LDADD = $(LDADD) $(GTK_LIBS) #ufraw_icon.ico: icons/ufraw.png # { pngtopnm $^ | pnmquant 256; pngtopnm -alpha $^; } | ppmtowinicon -andpgms -output $@ - - ufraw_icon.opc: ufraw_icon.rc ufraw_icon.ico $(WINDRES) --include-dir=$(srcdir) --input $< --output $@ .pod.1: $(POD2MAN) --section 1 --center "" --release UFRAW $< $@ ufraw.schemas: generate_schemas.sh $(srcdir)/generate_schemas.sh $(prefix) $@ install-windows: windows-installer $(WINE) ./ufraw-$(VERSION)-setup.exe windows-installer: ufraw-$(VERSION)-setup.exe ufraw-$(VERSION)-setup.exe: ufraw-setup.iss ufraw.exe ufraw-batch.exe \ ufraw-gimp.exe ufraw-setup.bmp ufraw_icon.bmp ufraw_icon.ico \ $(PREFIX)/bin/liblcms-1.dll strip ufraw.exe ufraw-batch.exe ufraw-gimp.exe $(WINE) $(ISCC) ufraw-setup.iss ufraw-setup.bmp: ufraw-setup.jpg montage -geometry +0+0 $< $@ ufraw_icon.bmp: icons/ufraw.png montage -geometry +0+0 $< $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ufraw-0.19.2/mkinstalldirs0000775000175000017500000000672212115264507012472 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the 'mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because '.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ufraw-0.19.2/ufobject.h0000664000175000017500000005535712115264507011646 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufobject.h - UFObject definitions. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UFOBJECT_H #define _UFOBJECT_H /***********************************\ * UFObject C/C++ common interface * \***********************************/ /// Type definition for the name of a UFObject. typedef const char *UFName; /// UFObject is base class for both the C and C++ interfaces. typedef struct UFObject UFObject; /// Events that can be triggered and should be handled by the event handler. typedef enum { uf_value_changed, ///< Value changed. uf_default_changed, ///< Default value changed. uf_element_added, ///< An UFObject was added to a UFGroup or a UFArray. uf_user_data_set, ///< User data was set. uf_destroyed ///< UFObject is being destroyed. } UFEventType; /// Function prototype for handling events. typedef void (UFEventHandle)(UFObject *, UFEventType); /**************************\ * UFObject C++ interface * \**************************/ #ifdef __cplusplus #include #include #include // for std::runtime_error /** * UFObjects are smart data containers, which are suppose to know everything * that is needed to handle and manipulated their content. * * UFObject is an abstract class. There are four UFObject implementations: * - UFNumber - holds a number with a defined range and accuracy. * - UFNumberArray - holds a fixed length array of numbers. * - UFString - holds a string and possibly a list of tokens for this string. * - UFGroup - holds a group of UFObjects. * - UFIndex - holds an indexed group of UFObjects. * * There are downcasting definitions from all these implementations down * to UFObject. These are needed because each UFObject type has different * methods. Downcasting eases the access to these methods. An * std::bad_cast exception will be thrown if invalid downcasting is attempted. * * Each UFObject has a UFName. This name identifies the object and should be * unique. It is also used to access UFGroup members. * * The C++ interface of UFObject throws an exception is case of failure. * Therefore, there is no error indication in the return-value of any of * the methods. Most exceptions indicated programming errors and can be avoided. * Only in the case of UFObject::Set(const char *string), a UFException could * result from a user input error. * * \anchor C-interface * The C interface of UFObject is shielded from all exception. Failure will * be indicated in the return-value of the calling function and result in a * call to UFObject::Message() that sends an error to the console by default. * In the case of ufobject_set_string(), UFObject::Message() is not called, * since it is assumes that the exception resulted from user input error. * * \exception UFException is the common exception thrown in case of errors. * \exception std::bad_cast is thrown when the downcasting operators fail. */ class UFObject { public: /// Trigger a #uf_destroyed event and destroy the object. An object that /// has a Parent() should never be destroyed directly. It will be /// destroyed when its parent is destroyed. virtual ~UFObject(); UFName Name() const; ///< Retrieve the name of the UFObject. /// Set pointer to general user data. /// A #uf_user_data_set event is triggered. void SetUserData(void *userData); void *UserData(); ///< Retrieve pointer to general user data. /// Downcast UFObject to UFNumber. operator class UFNumber&(); /// Downcast const UFObject to const UFNumber. operator const class UFNumber&() const; /// Downcast UFObject to UFNumberArray. operator class UFNumberArray&(); /// Downcast const UFObject to const UFNumberArray. operator const class UFNumberArray&() const; /// Downcast UFObject to UFString. operator class UFString&(); /// Downcast const UFObject to const UFString. operator const class UFString&() const; /// Downcast UFObject to UFGroup. operator class UFGroup&(); /// Downcast const UFObject to const UFGroup. operator const class UFGroup&() const; /// Downcast UFObject to UFArray. operator class UFArray&(); /// Downcast const UFObject to const UFArray. operator const class UFArray&() const; bool HasParent() const; ///< Return true if object belongs to a UFGroup. /// Return the UFGroup the object belongs too. /// A std::logic_error will be thrown if the objects belongs to no group. /// \exception UFException is thrown if the object has no parent. /// This exception can be avoided with the use of HasParent(). UFGroup &Parent() const; /// Translate object to a string. UFObject takes care of the memory /// allocation and freeing of the string. virtual const char *StringValue() const; /// Create an XML block for the object. /// If the object value is its default, create and empty XML block. /// \param indent - Controls the XML block indentations. virtual std::string XML(const char *indent = "") const; /// Send an informational message in case of an error or warning. /// This method is used internally in the implementation of UFObject. /// Override this method to implement your own message handling. /// The default handling is to send the message to the parent object. /// If no patent exists, send the message to stderr. /// \param format - a printf-like string format. virtual void Message(const char *format, ...) const; /// Throw a UFException. Use this method to throw exceptions from /// within customized Event() methods. /// \param format - a printf-like string format. void Throw(const char *format, ...) const; /// Set the value of the object to the value of the object parameter. /// Objects must be of same type and must have the same name. If the /// value changes, a #uf_value_changed event is triggered. /// \exception UFException is thrown if the two objects do not /// have the same Name(). This is probably a programming error. virtual void Set(const UFObject &object) = 0; /// Set the value of the object from the string value. This is the /// reverse of the StringValue() method. If the value changes, an /// #uf_value_changed event is triggered. /// \exception UFException is thrown if the the string can not be /// converted to the object type. This could result from a user input /// error. virtual void Set(const char *string) = 0; /// Return true if object has its default value. For numerical objects, /// the values has to the same up to the prescribed accuracy. virtual bool IsDefault() const = 0; /// Set the current object value to its default value. /// A #uf_default_changed event is triggered. virtual void SetDefault() = 0; /// Reset the object value to its default value. If the value changes, /// a #uf_value_changed event is triggered. virtual void Reset() = 0; /// Set a C-style event handler. /// C++ events can be set by overriding the Event() virtual member. void SetEventHandle(UFEventHandle *handle); /// Handle any #UFEventType event. Override this method to implement your /// own event handling. The default handling is to call the event handle /// set by SetEventHandle() and in the case of #uf_value_changed, to call /// also the parent's Event(). If you override this method, you probably /// want to call UFObject::Event() from your own implementation of Event(). virtual void Event(UFEventType type); /// Handle a #uf_value_changed event for the object that originated the /// change. This method should be overridden if one wants to change /// the values of other objects when the original object value has /// changed. It is needed to prevent infinite loops where several /// objects keep changing each other. The default method does not /// do anything. virtual void OriginalValueChangedEvent(); protected: /// UFObject 's internal implementation is hidden here. class _UFObject *const ufobject; /// UFObject is an abstract class, therefore it cannot be constructed /// directly. explicit UFObject(_UFObject *object); private: UFObject(const UFObject &); // Disable the copy constructor. UFObject &operator=(const UFObject &); // Disable the assignment operator. }; /** * UFNumber is a UFObject that holds a number which has an allowed range of * values, a specified accuracy and default value. */ class UFNumber : public UFObject { public: /// Construct a UFNumber whose initial value is set to its default value. /// The number of accuracy digits effects the format of the StringValue() /// of the number. The IsEqual() test is also controlled by /// @a accuracyDigits. @a step and @a jump have no direct effect on the /// object. They are useful for constructing a GtkAdjustment as in /// ufnumber_hscale_new() and ufnumber_spin_button_new(). /// /// @a accuracyDigits, @a step and @a jump are /// optional arguments, if they are not given they will be automatically /// generated. @a accuracyDigits will be calculated from @a minimum, /// @a maximum to given between 3 and 4 significant digits. @a step will /// be set to 10 times the accuracy and @a jump to 10 times @a step. UFNumber(UFName name, double minimum, double maximum, double defaultValue, int accuracyDigits = -1, double step = 0.0, double jump = 0.0); const char *StringValue() const; /// Return the numerical value of the object. This @a double value can /// have better accuracy than @a accuracyDigits. So, for example, after /// an object.Set(1.0/3.0) command, the result of the condition /// (obj.DoubleValue() == 1.0/3.0) should be true (but it is never /// safe to rely on such behavior for floating-point numbers). double DoubleValue() const; void Set(const UFObject &object); void Set(const char *string); /// Set the value of the object to the given number. If the number is /// outside of the allowed range, the number will be truncated and the /// Message() method will be called to report this incident. void Set(double number); bool IsDefault() const; void SetDefault(); void Reset(); /// Return true if object value is equal to @a number up to the prescribed /// accuracy. bool IsEqual(double number) const; double Minimum() const; double Maximum() const; int AccuracyDigits() const; double Step() const; double Jump() const; }; /** * UFNumberArray is a UFObject that holds an fixed sized array of numbers. */ class UFNumberArray : public UFObject { public: /// Construct a UFNumberArray with the given @a size. The initial value of /// the array elements is set to its default value. /// The number of accuracy digits effects the format of the StringValue() /// of the number. The IsEqual() test is also controlled by /// @a accuracyDigits. @a step and @a jump have no direct effect on the /// object. They are useful for constructing a GtkAdjustment as in /// ufnumber_array_hscale_new() and ufnumber_array_spin_button_new(). /// /// The object is create with one default value for all elements. Once /// SetDefault() is called, each element can have a different default. /// \sa @a accuracyDigits, @a step and @a jump are optional arguments, /// their default values are discussed in UFNumber::UFNumber(). UFNumberArray(UFName name, int size, double minimum, double maximum, double defaultValue, int accuracyDigits = 0xff, double step = 0.0, double jump = 0.0); const char *StringValue() const; /// Return the numerical value of the @a index element of the object. /// This @a double value can have better accuracy than @a accuracyDigits. /// \sa UFNumber::StringValue() for more information. /// \exception UFException is thrown if the index is negative or larger /// than (Size()-1). This is probably a programming error. double DoubleValue(int index) const; void Set(const UFObject &object); void Set(const char *string); /// Set the value of the @a index element to the given number. If the /// number is outside of the allowed range, the number will be truncated /// and the Message() method will be called to report this incident. /// \exception UFException is thrown if the index is negative or larger /// than (Size()-1). This is probably a programming error. void Set(int index, double number); /// Set the values of all the array elements at once. This is useful if /// one wants the #uf_value_changed event to be triggered only once. /// @a array[] is assumed to be of the right Size(). void Set(const double array[]); bool IsDefault() const; void SetDefault(); void Reset(); /// Return true if the @a index element value is equal to @a number /// up to the prescribed accuracy. /// \exception UFException is thrown if the index is negative or larger /// than (Size()-1). This is probably a programming error. bool IsEqual(int index, double number) const; int Size() const; double Minimum() const; double Maximum() const; int AccuracyDigits() const; double Step() const; double Jump() const; }; /** * UFString is a UFObject that holds a character string. */ class UFString : public UFObject { public: /// Construct a UFString whose initial value is set to its default value. explicit UFString(UFName name, const char *defaultValue = ""); void Set(const UFObject &object); void Set(const char *string); bool IsDefault() const; void SetDefault(); /// Set @a string as a default value. /// A #uf_default_changed event is triggered. void SetDefault(const char *string); void Reset(); /// Return true if object value is equal to @a string. bool IsEqual(const char *string) const; }; /// A list of UFObjects returned by UFGroup or UFArray. typedef std::list UFGroupList; /** * UFGroup is a UFObject that contain a group of UFObject elements. This * object is considered the Patent() of these elements. */ class UFGroup : public UFObject { public: /// Construct an empty UFGroup, containing no objects. /// The @a label is used to index the UFGroup inside a UFArray. explicit UFGroup(UFName name, const char *label = ""); /// Destroy a UFGroup after destroying all the objects it contains. ~UFGroup(); std::string XML(const char *indent = "") const; void Set(const UFObject &object); void Set(const char *string); bool IsDefault() const; void SetDefault(); void Reset(); /// Return true if the UFGroup contains an object called @a name. bool Has(UFName name) const; /// Access a UFObject element in a UFGroup. /// \exception UFException is thrown if an element with the given name /// does not exist. This can be avoided with the use of the Has() method. UFObject &operator[](UFName name); /// Access a constant UFObject element in a constant UFGroup. /// \exception UFException is thrown if an element with the given name /// does not exist. This can be avoided with the use of the Has() method. const UFObject &operator[](UFName name) const; /// Return a list of all UFObjects in the group. const UFGroupList List() const; /// Add (append) a UFObject to a UFGroup. If the object belonged to /// another group before, it will be detached from the original group. /// \exception UFException is thrown if UFGroup already contains /// an object with the same name. This can be avoided with the use of the /// Has() method. virtual UFGroup &operator<<(UFObject *object); /// Drop an object from the group. The dropped object is returned. /// If it is not needed any more it should be deleted to free its memory. /// \exception UFException is thrown if an element with the given name /// does not exist. This can be avoided with the use of the Has() method. /// For UFArray, the index does not get updated. UFObject &Drop(UFName name); /// Remove all elements from the group. /// The removed elements are deleted from memory. /// For UFArray, the index does not get updated. void Clear(); }; /** * UFArray is a UFObject that contain an indexed group of UFObject elements. * The array's elements are indexed by their StringValue(). In the current * implementation, the StringValue() should not be changed after the * UFObject was added to the UFArray. */ class UFArray : public UFGroup { public: /// Construct an empty UFArray, containing no objects. explicit UFArray(UFName name, const char *defaultIndex = ""); std::string XML(const char *indent = "") const; void Set(const UFObject &object); void Set(const char *string); const char *StringValue() const; bool IsDefault() const; void SetDefault(); /// Set @a string as a default string value for the UFArray. As opposed /// to the SetDefault() method with no arguments, this method does not /// changes the default of the array's elements. /// A #uf_default_changed event is triggered. void SetDefault(const char *string); void Reset(); /// Set the current index position in the array. /// Return false if @a index is out of range. bool SetIndex(int index); /// Retriew the current index location in the array. -1 is returned /// if the string index value corresponds to no element's label. int Index() const; /// Return true if the string index value is equal to @a string. bool IsEqual(const char *string) const; /// Add (append) a UFObject to a UFArray. If the object belonged to /// another array before, it will be detached from the original array. /// \exception UFException is thrown if UFArray already contains /// an object with the same StringValue. This can be avoided with the /// use of the Has() method. UFArray &operator<<(UFObject *object); }; /// This is the common exception thrown by the UFObject implementation. /// Usually, it represents a programming error. But in the case of /// UFObject::Set(const char *string), a UFException could result from /// a user input error. class UFException : public std::runtime_error { public: explicit UFException(std::string &Message); }; #endif // __cplusplus /*************************\ * UFObject C interface * \*************************/ typedef int UFBoolean; #define UF_FALSE (0) #define UF_TRUE (!UF_FALSE) #ifdef __cplusplus extern "C" { #endif /// Delete a UFObject and free its resources. Never use free() on UFObject s. UFObject *ufobject_delete(UFObject *object); /// Retrieve the name of the UFObject. UFName ufobject_name(UFObject *object); UFObject *ufobject_parent(UFObject *object); /// Translate object to a string. See UFObject::StringValue() for details. const char *ufobject_string_value(UFObject *object); /// Set the value of the object from the string value. /// Returns false on failure. /// See \ref C-interface and UFObject::Set(const char *string) for details. UFBoolean ufobject_set_string(UFObject *object, const char *string); /// Copy the value of the source object to the destination object. /// Returns false on failure. /// See \ref C-interface and UFObject::Set(const UFObject &object) for details. UFBoolean ufobject_copy(UFObject *destination, UFObject *source); /// Create an XML block for the object. The returned buffer should be /// free()'d by the caller. See UFObject::XML() for details. char *ufobject_xml(UFObject *object, const char *indent); void *ufobject_user_data(UFObject *object); void ufobject_set_user_data(UFObject *object, void *user_data); void ufobject_set_changed_event_handle(UFObject *object, UFEventHandle *handle); /// Return TRUE if object is set to its default value. UFBoolean ufobject_is_default(UFObject *object); /// Set the current object value to its default value. void ufobject_set_default(UFObject *object); /// Return the numerical value of the object. Returns NaN if object is not a /// UFNumber. See \ref C-interface and UFNumber::DoubleValue() for more details. double ufnumber_value(UFObject *object); /// Set the value of the object to the given number. Returns false if @a object /// is not a UFNumber. See \ref C-interface and UFNumber::Set(double number) /// for more details. UFBoolean ufnumber_set(UFObject *object, double number); /// Return the numerical value of the @a index element of the object. /// Returns NaN if @a object is not a UFNumberArray or @a index is out of range. /// See \ref C-interface and UFNumberArray::DoubleValue() for more details. double ufnumber_array_value(UFObject *object, int index); /// Set the value of all the array elements at once. /// Returns false if @a object is not a UFNumberArray. See \ref C-interface /// and UFNumberArray::Set(const double array[]) for more details. UFBoolean ufnumber_array_set(UFObject *object, const double array[]); /// Return true if string value is equal to @a string. /// Return false if it is not equal or if object is not a UFString. /// See \ref C-interface for more details. UFBoolean ufstring_is_equal(UFObject *object, const char *string); /// Return true if the UFGroup @a object contains an object called name. /// Return false if it does not, or if object is not a UFGroup. /// See \ref C-interface for more details. UFBoolean ufgroup_has(UFObject *object, UFName name); /// Return a UFObject element in a UFGroup. Return NULL if element is not found /// or if @a object is not a UFGroup. See \ref C-interface for more details. UFObject *ufgroup_element(UFObject *object, UFName name); /// Add a UFObject to a UFGroup. Return false if UFGroup already contains /// an object with the same name. See \ref C-interface for more details. UFBoolean ufgroup_add(UFObject *group, UFObject *object); /// Drop an object from the group. The dropped object is returned. /// If it is not needed any more it should be deleted to free its memory. UFObject *ufgroup_drop(UFObject *group, UFName name); /// Set the current index position in the array. UFBoolean ufarray_set_index(UFObject *object, int index); /// Retriew the current index location in the array. -1 is returned /// if the string index value corresponds to no element's label. int ufarray_index(UFObject *object); /// Return true if array's string value is equal to @a string. /// Return false if it is not equal or if object is not a UFArray. /// See \ref C-interface for more details. UFBoolean ufarray_is_equal(UFObject *object, const char *string); #ifdef __cplusplus } // extern "C" #endif #endif /*_UFOBJECT_H*/ ufraw-0.19.2/ufraw.h0000664000175000017500000005015212115264507011155 00000000000000 /* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw.h - Common definitions for UFRaw. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UFRAW_H #define _UFRAW_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "uf_glib.h" #include "ufobject.h" #include "nikon_curve.h" #include "uf_progress.h" /* macro to clamp a number between two values */ #ifndef LIM #define LIM(x,min,max) MAX(min,MIN(x,max)) #endif #define MAXOUT 255 /* Max output sample */ #define max_curves 20 #define max_anchors 20 #define max_profiles 20 #define max_path 200 #define max_name 80 #define max_adjustments 3 /* An impossible value for conf float values */ #define NULLF -10000.0 /* Options, like auto-adjust buttons can be in 3 states. Enabled and disabled * are obvious. Apply means that the option was selected and some function * has to act accourdingly, before changing to one of the first two states */ enum { disabled_state, enabled_state, apply_state }; extern const char uf_spot_wb[]; extern const char uf_manual_wb[]; extern const char uf_camera_wb[]; extern const char uf_auto_wb[]; /* * UFObject Definitions for ufraw_settings.cc */ extern UFName ufWB; extern UFName ufPreset; extern UFName ufWBFineTuning; extern UFName ufTemperature; extern UFName ufGreen; extern UFName ufChannelMultipliers; extern UFName ufLensfunAuto; extern UFName ufLensfun; extern UFName ufCameraModel; extern UFName ufLensModel; extern UFName ufFocalLength; extern UFName ufAperture; extern UFName ufDistance; extern UFName ufTCA; extern UFName ufVignetting; extern UFName ufDistortion; extern UFName ufModel; extern UFName ufLensGeometry; extern UFName ufTargetLensGeometry; extern UFName ufRawImage; extern UFName ufRawResources; extern UFName ufCommandLine; #ifdef __cplusplus extern "C" { #endif // __cplusplus UFObject *ufraw_image_new(); #ifdef HAVE_LENSFUN UFObject *ufraw_lensfun_new(); void ufraw_lensfun_init(UFObject *lensfun, UFBoolean reset); struct lfDatabase *ufraw_lensfun_db(); /* mount/camera/lens database */ const struct lfCamera *ufraw_lensfun_camera(const UFObject *lensfun); void ufraw_lensfun_set_camera(UFObject *lensfun, const struct lfCamera *camera); const struct lfLens *ufraw_lensfun_interpolation_lens(const UFObject *lensfun); void ufraw_lensfun_set_lens(UFObject *lensfun, const struct lfLens *lens); #endif struct ufraw_struct *ufraw_image_get_data(UFObject *obj); void ufraw_image_set_data(UFObject *obj, struct ufraw_struct *uf); UFObject *ufraw_resources_new(); UFObject *ufraw_command_line_new(); #ifdef __cplusplus } // extern "C" #endif // __cplusplus enum { rgb_histogram, r_g_b_histogram, luminosity_histogram, value_histogram, saturation_histogram }; enum { linear_histogram, log_histogram }; /* The following enum should match the dcraw_interpolation enum * in dcraw_api.h. */ enum { ahd_interpolation, vng_interpolation, four_color_interpolation, ppg_interpolation, bilinear_interpolation, none_interpolation, half_interpolation, obsolete_eahd_interpolation, num_interpolations }; enum { no_id, also_id, only_id, send_id }; enum { manual_curve, linear_curve, custom_curve, camera_curve }; enum { in_profile, out_profile, display_profile, profile_types}; enum { raw_expander, live_expander, expander_count }; enum { ppm_type, ppm16_deprecated_type, tiff_type, tiff16_deprecated_type, jpeg_type, png_type, png16_deprecated_type, embedded_jpeg_type, embedded_png_type, fits_type, num_types }; enum { clip_details, restore_lch_details, restore_hsv_details, restore_types }; enum { digital_highlights, film_highlights, highlights_types }; typedef enum { display_developer, file_developer, auto_developer } DeveloperMode; typedef enum { perceptual_intent, relative_intent, saturation_intent, absolute_intent, disable_intent } Intent; typedef enum { ufraw_raw_phase, ufraw_first_phase, ufraw_transform_phase, ufraw_develop_phase, ufraw_display_phase, ufraw_phases_num } UFRawPhase; typedef enum { grayscale_none, grayscale_lightness, grayscale_luminance, grayscale_value, grayscale_mixer, grayscale_invalid } GrayscaleMode; typedef struct { const char *make; const char *model; const char *name; int tuning; double channel[4]; } wb_data; typedef struct { double adjustment; double hue; double hueWidth; } lightness_adjustment; typedef struct { DeveloperMode mode; unsigned rgbMax, max, exposure, colors, useMatrix; int restoreDetails, clipHighlights; int rgbWB[4], colorMatrix[3][4]; double gamma, linear; char profileFile[profile_types][max_path]; void *profile[profile_types]; Intent intent[profile_types]; gboolean updateTransform; void *colorTransform; void *working2displayTransform; void *rgbtolabTransform; double saturation; #ifdef UFRAW_CONTRAST double contrast; #endif CurveData baseCurveData, luminosityCurveData; guint16 gammaCurve[0x10000]; void *luminosityProfile; void *TransferFunction[3]; void *saturationProfile; void *adjustmentProfile; GrayscaleMode grayscaleMode; double grayscaleMixer[3]; lightness_adjustment lightnessAdjustment[max_adjustments]; } developer_data; typedef guint16 ufraw_image_type[4]; typedef struct { char name[max_name]; char file[max_path]; char productName[max_name]; double gamma, linear; int BitDepth; } profile_data; typedef struct { gint x; gint y; gint width; gint height; } UFRectangle; /* conf_data holds the configuration data of UFRaw. * The data can be split into three groups: * IMAGE manipulation, SAVE options and GUI settings. * The sources for this information are: * DEF: UFRaw's defaults from conf_defaults. * RC: users defaults from ~/.ufrawrc. These options are set from the last * interactive session. * If saveConfiguration==disabled_state, IMAGE options are not saved. * ID: UFRaw ID files used on their original image. * CONF: same ID files used as configuration for other raw images. * CMD: command line options. * UI: interactive input. * The options are set in the above order, therefore the last sources will * override the first ones with some subtelties: * * ID|CONF contains only data which is different from DEF, still it is * assumed that IMAGE and SAVE options are included. Therefore missing * options are set to DEF overwriting RC. * * if both CONF and ID are specified, only in/out filenames are taken from ID. * * in batch mode SAVE options from RC are ignored. * Some fields need special treatment: * RC|CONF: auto[Exposure|Black]==enable_state it is switched to apply_state. * RC|CONF: if !spot_wb reset chanMul[] to -1.0. * CONF|ID: curve/profile are added to the list from RC. * CONF: inputFilename, outputFilename are ignored. * outputPath can only be specified in CMD or guessed in interactive mode. * ID: createID==only_id is switched to no_id in case of ufraw-batch. * ID: chanMul[] override wb, green, temperature. */ typedef struct { /* Internal data */ int version; // Eventually ufobject should replace conf_data. UFObject *ufobject; /* IMAGE manipulation settings */ double threshold; double hotpixel; #ifdef UFRAW_CONTRAST double contrast; #endif double exposure, saturation, black; /* black is only used in CMD */ int ExposureNorm; int restoreDetails, clipHighlights; int autoExposure, autoBlack, autoCrop; int BaseCurveIndex, BaseCurveCount; CurveData BaseCurve[max_curves]; int curveIndex, curveCount; CurveData curve[max_curves]; int profileIndex[profile_types], profileCount[profile_types]; profile_data profile[profile_types][max_profiles]; Intent intent[profile_types]; int interpolation; int smoothing; char darkframeFile[max_path]; struct ufraw_struct *darkframe; int CropX1, CropY1, CropX2, CropY2; double aspectRatio; int orientation; double rotationAngle; int lightnessAdjustmentCount; lightness_adjustment lightnessAdjustment[max_adjustments]; int grayscaleMode; double grayscaleMixer[3]; int grayscaleMixerDefined; double despeckleWindow[4]; double despeckleDecay[4]; double despecklePasses[4]; /* SAVE options */ char inputFilename[max_path], outputFilename[max_path], outputPath[max_path]; char inputURI[max_path], inputModTime[max_name]; int type, compression, createID, embedExif, progressiveJPEG; int shrink, size; gboolean overwrite, losslessCompress, embeddedImage; gboolean rotate; /* GUI settings */ double Zoom; gboolean LockAspect; /* True if aspect ratio is locked */ int saveConfiguration; int histogram, liveHistogramScale; int rawHistogramScale; int expander[expander_count]; gboolean overExp, underExp, blinkOverUnder; gboolean RememberOutputPath; gboolean WindowMaximized; int drawLines; char curvePath[max_path]; char profilePath[max_path]; gboolean silent; char remoteGimpCommand[max_path]; /* EXIF data */ int CameraOrientation; float iso_speed, shutter, aperture, focal_len, subject_distance; char exifSource[max_name], isoText[max_name], shutterText[max_name], apertureText[max_name], focalLenText[max_name], focalLen35Text[max_name], lensText[max_name], flashText[max_name], whiteBalanceText[max_name]; char timestampText[max_name], make[max_name], model[max_name]; time_t timestamp; /* Unfortunately dcraw strips make and model, but we need originals too */ char real_make[max_name], real_model[max_name]; } conf_data; typedef struct { guint8 *buffer; int height, width, depth, rowstride; /* This bit field marks valid pieces of the image with 1's. The variable contains a fixed 4x8 matrix of bits, every bit containing the validity of the respective subarea of the whole image. The subarea sizes are determined by dividing the width by 4 and height by 8. This field must always contain at least 32 bits. */ guint32 valid; gboolean rgbg; gboolean invalidate_event; } ufraw_image_data; typedef struct ufraw_struct { int status; char *message; char filename[max_path]; int initialHeight, initialWidth, rgbMax, colors, raw_color, useMatrix; int rotatedHeight, rotatedWidth; int autoCropHeight, autoCropWidth; gboolean LoadingID; /* Indication that we are loading an ID file */ gboolean WBDirty; float rgb_cam[3][4]; ufraw_image_data Images[ufraw_phases_num]; ufraw_image_data thumb; void *raw; gboolean HaveFilters; void *unzippedBuf; gsize unzippedBufLen; developer_data *developer; developer_data *AutoDeveloper; guint8 *displayProfile; gint displayProfileSize; conf_data *conf; guchar *inputExifBuf; guint inputExifBufLen; guchar *outputExifBuf; guint outputExifBufLen; int gimpImage; int *RawHistogram; int RawChanMul[4]; int RawCount; #ifdef HAVE_LENSFUN int modFlags; /* postprocessing operations (LF_MODIFY_XXX) */ struct lfModifier *TCAmodifier; struct lfModifier *modifier; #endif /* HAVE_LENSFUN */ int hotpixels; gboolean mark_hotpixels; unsigned raw_multiplier; gboolean wb_presets_make_model_match; } ufraw_data; extern const conf_data conf_default; extern const wb_data wb_preset[]; extern const int wb_preset_count; extern const char raw_ext[]; extern const char *file_type[]; /* ufraw_binary contains the name of the binary file for error messages. * It should be set in every UFRaw main() */ extern char *ufraw_binary; #ifdef __cplusplus extern "C" { #endif /* prototypes for functions in ufraw_ufraw.c */ ufraw_data *ufraw_open(char *filename); int ufraw_config(ufraw_data *uf, conf_data *rc, conf_data *conf, conf_data *cmd); int ufraw_load_raw(ufraw_data *uf); int ufraw_load_darkframe(ufraw_data *uf); void ufraw_developer_prepare(ufraw_data *uf, DeveloperMode mode); int ufraw_convert_image(ufraw_data *uf); ufraw_image_data *ufraw_get_image(ufraw_data *uf, UFRawPhase phase, gboolean bufferok); ufraw_image_data *ufraw_convert_image_area(ufraw_data *uf, unsigned saidx, UFRawPhase phase); void ufraw_close_darkframe(conf_data *uf); void ufraw_close(ufraw_data *uf); void ufraw_flip_orientation(ufraw_data *uf, int flip); void ufraw_flip_image(ufraw_data *uf, int flip); void ufraw_invalidate_layer(ufraw_data *uf, UFRawPhase phase); void ufraw_invalidate_tca_layer(ufraw_data *uf); void ufraw_invalidate_hotpixel_layer(ufraw_data *uf); void ufraw_invalidate_denoise_layer(ufraw_data *uf); void ufraw_invalidate_darkframe_layer(ufraw_data *uf); void ufraw_invalidate_despeckle_layer(ufraw_data *uf); void ufraw_invalidate_whitebalance_layer(ufraw_data *uf); void ufraw_invalidate_smoothing_layer(ufraw_data *uf); int ufraw_set_wb(ufraw_data *uf); void ufraw_auto_expose(ufraw_data *uf); void ufraw_auto_black(ufraw_data *uf); void ufraw_auto_curve(ufraw_data *uf); void ufraw_normalize_rotation(ufraw_data *uf); void ufraw_unnormalize_rotation(ufraw_data *uf); void ufraw_get_image_dimensions(ufraw_data *uf); /* Get scaled crop coordinates in final image coordinates */ void ufraw_get_scaled_crop(ufraw_data *uf, UFRectangle *crop); UFRectangle ufraw_image_get_subarea_rectangle(ufraw_image_data *img, unsigned saidx); unsigned ufraw_img_get_subarea_idx(ufraw_image_data *img, int x, int y); /* prototypes for functions in ufraw_message.c */ char *ufraw_get_message(ufraw_data *uf); /* The following functions should only be used internally */ void ufraw_message_init(ufraw_data *uf); void ufraw_message_reset(ufraw_data *uf); void ufraw_set_error(ufraw_data *uf, const char *format, ...); void ufraw_set_warning(ufraw_data *uf, const char *format, ...); void ufraw_set_info(ufraw_data *uf, const char *format, ...); int ufraw_get_status(ufraw_data *uf); int ufraw_is_error(ufraw_data *uf); // Old error handling, should be removed after being fully implemented. char *ufraw_message(int code, const char *format, ...); void ufraw_batch_messenger(char *message); /* prototypes for functions in ufraw_preview.c */ int ufraw_preview(ufraw_data *uf, conf_data *rc, int plugin, long(*save_func)()); void ufraw_focus(void *window, gboolean focus); void ufraw_messenger(char *message, void *parentWindow); /* prototypes for functions in ufraw_routines.c */ const char *uf_get_home_dir(); void uf_init_locale(const char *exename); char *uf_file_set_type(const char *filename, const char *type); char *uf_file_set_absolute(const char *filename); /* Set locale of LC_NUMERIC to "C" to make sure that printf behaves correctly.*/ char *uf_set_locale_C(); void uf_reset_locale(char *locale); char *uf_markup_buf(char *buffer, const char *format, ...); double profile_default_linear(profile_data *p); double profile_default_gamma(profile_data *p); void Temperature_to_RGB(double T, double RGB[3]); void RGB_to_Temperature(double RGB[3], double *T, double *Green); int curve_load(CurveData *cp, char *filename); int curve_save(CurveData *cp, char *filename); char *curve_buffer(CurveData *cp); /* Useful functions for handling the underappreciated Glib ptr arrays */ int ptr_array_insert_sorted(GPtrArray *array, const void *item, GCompareFunc compare); int ptr_array_find_sorted(const GPtrArray *array, const void *item, GCompareFunc compare); void ptr_array_insert_index(GPtrArray *array, const void *item, int index); /* prototypes for functions in ufraw_conf.c */ int conf_load(conf_data *c, const char *confFilename); void conf_file_load(conf_data *conf, char *confFilename); int conf_save(conf_data *c, char *confFilename, char **confBuffer); /* copy default config to given instance and initialize non-const fields */ void conf_init(conf_data *c); /* Copy the image manipulation options from *src to *dst */ void conf_copy_image(conf_data *dst, const conf_data *src); /* Copy the transformation options from *src to *dst */ void conf_copy_transform(conf_data *dst, const conf_data *src); /* Copy the 'save options' from *src to *dst */ void conf_copy_save(conf_data *dst, const conf_data *src); int conf_set_cmd(conf_data *conf, const conf_data *cmd); int ufraw_process_args(int *argc, char ***argv, conf_data *cmd, conf_data *rc); /* prototype for functions in ufraw_developer.c */ // Convert linear RGB to CIE-LCh void uf_rgb_to_cielch(gint64 rgb[3], float lch[3]); // Convert CIE-LCh to linear RGB void uf_cielch_to_rgb(float lch[3], gint64 rgb[3]); void uf_raw_to_cielch(const developer_data *d, const guint16 raw[4], float lch[3]); developer_data *developer_init(); void developer_destroy(developer_data *d); void developer_profile(developer_data *d, int type, profile_data *p); void developer_display_profile(developer_data *d, unsigned char *profile, int size, char productName[]); void developer_prepare(developer_data *d, conf_data *conf, int rgbMax, float rgb_cam[3][4], int colors, int useMatrix, DeveloperMode mode); void develop(void *po, guint16 pix[4], developer_data *d, int mode, int count); void develop_display(void *pout, void *pin, developer_data *d, int count); void develop_linear(guint16 in[4], guint16 out[3], developer_data *d); /* prototype for functions in ufraw_saver.c */ long ufraw_save_now(ufraw_data *uf, void *widget); long ufraw_send_to_gimp(ufraw_data *uf); /* prototype for functions in ufraw_writer.c */ int ufraw_write_image(ufraw_data *uf); void ufraw_write_image_data( ufraw_data *uf, void * volatile out, const UFRectangle *Crop, int bitDepth, int grayscaleMode, int (*row_writer)(ufraw_data *, void * volatile, void *, int, int, int, int, int)); /* prototype for functions in ufraw_delete.c */ long ufraw_delete(void *widget, ufraw_data *uf); /* prototype for functions in ufraw_embedded.c */ int ufraw_read_embedded(ufraw_data *uf); int ufraw_convert_embedded(ufraw_data *uf); int ufraw_write_embedded(ufraw_data *uf); /* prototype for functions in ufraw_chooser.c */ void ufraw_chooser(conf_data *conf, conf_data *rc, conf_data *cmd, const char *defPath); /* prototype for functions in ufraw_icons.c */ void ufraw_icons_init(); /* prototype for functions in ufraw_exiv2.cc */ int ufraw_exif_read_input(ufraw_data *uf); int ufraw_exif_prepare_output(ufraw_data *uf); int ufraw_exif_write(ufraw_data *uf); #ifdef __cplusplus } // extern "C" #endif /* status numbers from DCRaw and UFRaw */ #define UFRAW_SUCCESS 0 //#define UFRAW_DCRAW_ERROR 1 /* General dcraw unrecoverable error */ //#define UFRAW_DCRAW_UNSUPPORTED 2 //#define UFRAW_DCRAW_NO_CAMERA_WB 3 //#define UFRAW_DCRAW_VERBOSE 4 //#define UFRAW_DCRAW_OPEN_ERROR 5 #define UFRAW_DCRAW_SET_LOG 4 /* DCRAW_VERBOSE */ #define UFRAW_ERROR 100 #define UFRAW_CANCEL 101 #define UFRAW_RC_VERSION 103 /* Mismatch in version from .ufrawrc */ #define UFRAW_WARNING 104 #define UFRAW_MESSAGE 105 #define UFRAW_SET_ERROR 200 #define UFRAW_SET_WARNING 201 #define UFRAW_SET_LOG 202 #define UFRAW_GET_ERROR 203 /* Return the warning buffer if an error occured */ #define UFRAW_GET_WARNING 204 /* Return the warning buffer */ #define UFRAW_GET_LOG 205 /* Return the log buffer */ #define UFRAW_BATCH_MESSAGE 206 #define UFRAW_INTERACTIVE_MESSAGE 207 #define UFRAW_REPORT 208 /* Report previous messages */ #define UFRAW_CLEAN 209 /* Clean all buffers */ #define UFRAW_RESET 210 /* Reset warnings and errors */ #define UFRAW_SET_PARENT 211 /* Set parent window for message dialog */ #endif /*_UFRAW_H*/ ufraw-0.19.2/ufraw_exiv2.cc0000664000175000017500000003525012115264507012432 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_exiv2.cc - read the EXIF data from the RAW file using exiv2. * Copyright 2004-2013 by Udi Fuchs * * Based on a sample program from exiv2 and neftags2jpg. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #ifdef HAVE_EXIV2 #include #include #include #include #include /* * Helper function to copy a string to a buffer, converting it from * current locale (in which exiv2 often returns strings) to UTF-8. */ static void uf_strlcpy_to_utf8(char *dest, size_t dest_max, Exiv2::ExifData::const_iterator pos, Exiv2::ExifData& exifData) { std::string str = pos->print(&exifData); char *s = g_locale_to_utf8(str.c_str(), str.length(), NULL, NULL, NULL); if (s != NULL) { g_strlcpy(dest, s, dest_max); g_free(s); } else { g_strlcpy(dest, str.c_str(), dest_max); } } extern "C" int ufraw_exif_read_input(ufraw_data *uf) { /* Redirect exiv2 errors to a string buffer */ std::ostringstream stderror; std::streambuf *savecerr = std::cerr.rdbuf(); std::cerr.rdbuf(stderror.rdbuf()); try { uf->inputExifBuf = NULL; uf->inputExifBufLen = 0; Exiv2::Image::AutoPtr image; if (uf->unzippedBuf != NULL) { image = Exiv2::ImageFactory::open( (const Exiv2::byte*)uf->unzippedBuf, uf->unzippedBufLen); } else { char *filename = uf_win32_locale_filename_from_utf8(uf->filename); image = Exiv2::ImageFactory::open(filename); uf_win32_locale_filename_free(filename); } assert(image.get() != 0); image->readMetadata(); Exiv2::ExifData &exifData = image->exifData(); if (exifData.empty()) { std::string error(uf->filename); error += ": No Exif data found in the file"; throw Exiv2::Error(1, error); } /* List of tag names taken from exiv2's printSummary() in actions.cpp */ Exiv2::ExifData::const_iterator pos; /* Read shutter time */ if ((pos = Exiv2::exposureTime(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->shutterText, max_name, pos, exifData); uf->conf->shutter = pos->toFloat(); } /* Read aperture */ if ((pos = Exiv2::fNumber(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->apertureText, max_name, pos, exifData); uf->conf->aperture = pos->toFloat(); } /* Read ISO speed */ if ((pos = Exiv2::isoSpeed(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->isoText, max_name, pos, exifData); } /* Read focal length */ if ((pos = Exiv2::focalLength(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->focalLenText, max_name, pos, exifData); uf->conf->focal_len = pos->toFloat(); } /* Read focal length in 35mm equivalent */ if ((pos = exifData.findKey(Exiv2::ExifKey( "Exif.Photo.FocalLengthIn35mmFilm"))) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->focalLen35Text, max_name, pos, exifData); } /* Read full lens name */ if ((pos = Exiv2::lensName(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->lensText, max_name, pos, exifData); } /* Read flash mode */ if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Photo.Flash"))) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->flashText, max_name, pos, exifData); } /* Read White Balance Setting */ if ((pos = Exiv2::whiteBalance(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->whiteBalanceText, max_name, pos, exifData); } if ((pos = Exiv2::make(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->real_make, max_name, pos, exifData); } if ((pos = Exiv2::model(exifData)) != exifData.end()) { uf_strlcpy_to_utf8(uf->conf->real_model, max_name, pos, exifData); } /* Store all EXIF data read in. */ Exiv2::Blob blob; Exiv2::ExifParser::encode(blob, Exiv2::bigEndian, exifData); uf->inputExifBufLen = blob.size(); uf->inputExifBuf = g_new(unsigned char, uf->inputExifBufLen); memcpy(uf->inputExifBuf, &blob[0], blob.size()); ufraw_message(UFRAW_SET_LOG, "EXIF data read using exiv2, buflen %d\n", uf->inputExifBufLen); g_strlcpy(uf->conf->exifSource, EXV_PACKAGE_STRING, max_name); std::cerr.rdbuf(savecerr); ufraw_message(UFRAW_SET_LOG, "%s\n", stderror.str().c_str()); return UFRAW_SUCCESS; } catch (Exiv2::AnyError& e) { std::cerr.rdbuf(savecerr); std::string s(e.what()); ufraw_message(UFRAW_SET_WARNING, "%s\n", s.c_str()); return UFRAW_ERROR; } } static Exiv2::ExifData ufraw_prepare_exifdata(ufraw_data *uf) { Exiv2::ExifData exifData = Exiv2::ExifData(); /* Start from the input EXIF data */ Exiv2::ExifParser::decode(exifData, uf->inputExifBuf, uf->inputExifBufLen); Exiv2::ExifData::iterator pos; if (uf->conf->rotate) { /* Reset orientation tag since UFRaw already rotates the image */ if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.Orientation"))) != exifData.end()) { ufraw_message(UFRAW_SET_LOG, "Resetting %s from '%d' to '1'\n", pos->key().c_str(), pos->value().toLong()); pos->setValue("1"); /* 1 = Normal orientation */ } } /* Delete original TIFF data, which is irrelevant*/ if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.ImageWidth"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.ImageLength"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.BitsPerSample"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.Compression"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.PhotometricInterpretation"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.FillOrder"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.SamplesPerPixel"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.StripOffsets"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.RowsPerStrip"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.StripByteCounts"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.XResolution"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.YResolution"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.PlanarConfiguration"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.ResolutionUnit"))) != exifData.end()) exifData.erase(pos); /* Delete various MakerNote fields only applicable to the raw file */ // Nikon thumbnail data if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Nikon3.Preview"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.NikonPreview.JPEGInterchangeFormat"))) != exifData.end()) exifData.erase(pos); // DCRaw handles TIFF files as raw if DNGVersion is found. if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.DNGVersion"))) != exifData.end()) exifData.erase(pos); // DNG private data if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.DNGPrivateData"))) != exifData.end()) exifData.erase(pos); // Pentax thumbnail data if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Pentax.PreviewResolution"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Pentax.PreviewLength"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Pentax.PreviewOffset"))) != exifData.end()) exifData.erase(pos); // Minolta thumbnail data if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Minolta.Thumbnail"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Minolta.ThumbnailOffset"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Minolta.ThumbnailLength"))) != exifData.end()) exifData.erase(pos); // Olympus thumbnail data if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Olympus.Thumbnail"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Olympus.ThumbnailOffset"))) != exifData.end()) exifData.erase(pos); if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Olympus.ThumbnailLength"))) != exifData.end()) exifData.erase(pos); /* Write appropriate color space tag if using sRGB output */ if (!strcmp(uf->developer->profileFile[out_profile], "")) exifData["Exif.Photo.ColorSpace"] = uint16_t(1); /* sRGB */ /* Add "UFRaw" and version used to output file as processing software. */ exifData["Exif.Image.ProcessingSoftware"] = "UFRaw " VERSION; return exifData; } extern "C" int ufraw_exif_prepare_output(ufraw_data *uf) { /* Redirect exiv2 errors to a string buffer */ std::ostringstream stderror; std::streambuf *savecerr = std::cerr.rdbuf(); std::cerr.rdbuf(stderror.rdbuf()); try { uf->outputExifBuf = NULL; uf->outputExifBufLen = 0; Exiv2::ExifData exifData = ufraw_prepare_exifdata(uf); int size; Exiv2::Blob blob; Exiv2::ExifParser::encode(blob, Exiv2::bigEndian, exifData); size = blob.size(); const unsigned char ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00}; /* If buffer too big for JPEG, try deleting some stuff. */ if (size + sizeof(ExifHeader) > 65533) { Exiv2::ExifData::iterator pos; if ((pos = exifData.findKey(Exiv2::ExifKey("Exif.Photo.MakerNote"))) != exifData.end()) { exifData.erase(pos); ufraw_message(UFRAW_SET_LOG, "buflen %d too big, erasing Exif.Photo.MakerNote " "and related decoded metadata\n", size + sizeof(ExifHeader)); /* Delete decoded metadata associated with * Exif.Photo.MakerNote, otherwise erasing it isn't * effective. */ for (pos = exifData.begin(); pos != exifData.end();) { if (!strcmp(pos->ifdName(), "Makernote")) pos = exifData.erase(pos); else pos++; } blob.clear(); Exiv2::ExifParser::encode(blob, Exiv2::bigEndian, exifData); size = blob.size(); } } if (size + sizeof(ExifHeader) > 65533) { Exiv2::ExifThumb thumb(exifData); thumb.erase(); ufraw_message(UFRAW_SET_LOG, "buflen %d too big, erasing Thumbnail\n", size + sizeof(ExifHeader)); blob.clear(); Exiv2::ExifParser::encode(blob, Exiv2::bigEndian, exifData); size = blob.size(); } uf->outputExifBufLen = size + sizeof(ExifHeader); uf->outputExifBuf = g_new(unsigned char, uf->outputExifBufLen); memcpy(uf->outputExifBuf, ExifHeader, sizeof(ExifHeader)); memcpy(uf->outputExifBuf + sizeof(ExifHeader), &blob[0], blob.size()); std::cerr.rdbuf(savecerr); ufraw_message(UFRAW_SET_LOG, "%s\n", stderror.str().c_str()); return UFRAW_SUCCESS; } catch (Exiv2::AnyError& e) { std::cerr.rdbuf(savecerr); std::string s(e.what()); ufraw_message(UFRAW_SET_WARNING, "%s\n", s.c_str()); return UFRAW_ERROR; } } extern "C" int ufraw_exif_write(ufraw_data *uf) { /* Redirect exiv2 errors to a string buffer */ std::ostringstream stderror; std::streambuf *savecerr = std::cerr.rdbuf(); std::cerr.rdbuf(stderror.rdbuf()); try { Exiv2::ExifData rawExifData = ufraw_prepare_exifdata(uf); char *filename = uf_win32_locale_filename_from_utf8(uf->conf->outputFilename); Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename); uf_win32_locale_filename_free(filename); assert(image.get() != 0); image->readMetadata(); Exiv2::ExifData &outExifData = image->exifData(); Exiv2::ExifData::iterator pos = rawExifData.begin(); while (!rawExifData.empty()) { outExifData.add(*pos); pos = rawExifData.erase(pos); } outExifData.sortByTag(); image->setExifData(outExifData); image->writeMetadata(); std::cerr.rdbuf(savecerr); ufraw_message(UFRAW_SET_LOG, "%s\n", stderror.str().c_str()); return UFRAW_SUCCESS; } catch (Exiv2::AnyError& e) { std::cerr.rdbuf(savecerr); std::string s(e.what()); ufraw_message(UFRAW_SET_WARNING, "%s\n", s.c_str()); return UFRAW_ERROR; } } #else extern "C" int ufraw_exif_read_input(ufraw_data *uf) { (void)uf; ufraw_message(UFRAW_SET_LOG, "ufraw built without EXIF support\n"); return UFRAW_ERROR; } extern "C" int ufraw_exif_prepare_output(ufraw_data *uf) { (void)uf; return UFRAW_ERROR; } extern "C" int ufraw_exif_write(ufraw_data *uf) { (void)uf; return UFRAW_ERROR; } #endif /* HAVE_EXIV2 */ ufraw-0.19.2/COPYING0000644000175000017500000004311011335731650010706 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ufraw-0.19.2/ufraw_writer.c0000664000175000017500000010316112122220077012533 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_writer.c - functions to output image files in different formats. * Copyright 2004-2013 by Udi Fuchs * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "ufraw.h" #include #include /* for errno */ #include #include #ifdef HAVE_LIBTIFF #include #endif #ifdef HAVE_LIBJPEG #include #include "iccjpeg.h" #endif #ifdef HAVE_LIBPNG #include #ifdef HAVE_LIBZ #include /* for libpng 1.5.x */ #endif #if PNG_LIBPNG_VER_MAJOR == 1 && (PNG_LIBPNG_VER_MINOR < 5 || \ (PNG_LIBPNG_VER_MINOR == 5 && PNG_LIBPNG_VER_RELEASE < 1)) #define png_const_bytep png_charp #endif #endif #ifdef _OPENMP #include #define uf_omp_get_thread_num() omp_get_thread_num() #else #define uf_omp_get_thread_num() 0 #endif #ifdef HAVE_LIBCFITSIO #include #endif #define DEVELOP_BATCH 64 static void grayscale_buffer(void *graybuf, int width, int bitDepth) { int i; if (bitDepth > 8) { guint16 *pixbuf16 = graybuf; guint16 *graybuf16 = graybuf; for (i = 0; i < width; ++i, ++graybuf16, pixbuf16 += 3) * graybuf16 = pixbuf16[1]; } else { guint8 *pixbuf8 = graybuf; guint8 *graybuf8 = graybuf; for (i = 0; i < width; ++i, ++graybuf8, pixbuf8 += 3) * graybuf8 = pixbuf8[1]; } } static int ppm_row_writer(ufraw_data *uf, void *volatile out, void *pixbuf, int row, int width, int height, int grayscale, int bitDepth) { (void)row; int rowStride = width * (grayscale ? 1 : 3) * (bitDepth > 8 ? 2 : 1); int i; if (bitDepth > 8) { guint16 *pixbuf16 = (guint16 *)pixbuf; for (i = 0; i < 3 * width * height; i++) pixbuf16[i] = g_htons(pixbuf16[i]); } for (i = 0; i < height; i++) { if ((int)fwrite(pixbuf + i * width * (bitDepth > 8 ? 6 : 3), rowStride, 1, out) < 1) { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, g_strerror(errno)); return UFRAW_ERROR; } } return UFRAW_SUCCESS; } #ifdef HAVE_LIBTIFF // There seem to be no way to get the libtiff message without a static variable // Therefore the folloing code is not thread-safe. static char ufraw_tiff_message[max_path]; static void tiff_messenger(const char *module, const char *fmt, va_list ap) { (void)module; vsnprintf(ufraw_tiff_message, max_path, fmt, ap); } int tiff_row_writer(ufraw_data *uf, void *volatile out, void *pixbuf, int row, int width, int height, int grayscale, int bitDepth) { (void)grayscale; int rowStride = width * (bitDepth > 8 ? 6 : 3); int i; for (i = 0; i < height; i++) { if (TIFFWriteScanline(out, pixbuf + i * rowStride, row + i, 0) < 0) { // 'errno' does seem to contain useful information ufraw_set_error(uf, _("Error creating file.")); ufraw_set_error(uf, ufraw_tiff_message); ufraw_tiff_message[0] = '\0'; return UFRAW_ERROR; } } return UFRAW_SUCCESS; } #endif /*HAVE_LIBTIFF*/ #ifdef HAVE_LIBJPEG static void jpeg_warning_handler(j_common_ptr cinfo) { ufraw_data *uf = cinfo->client_data; ufraw_set_warning(uf, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); } static void jpeg_error_handler(j_common_ptr cinfo) { /* We ignore the SOI error if second byte is 0xd8 since Minolta's * SOI is known to be wrong */ ufraw_data *uf = cinfo->client_data; if (cinfo->err->msg_code == JERR_NO_SOI && cinfo->err->msg_parm.i[1] == 0xd8) { ufraw_set_info(uf, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); return; } ufraw_set_error(uf, cinfo->err->jpeg_message_table[cinfo->err->msg_code], cinfo->err->msg_parm.i[0], cinfo->err->msg_parm.i[1], cinfo->err->msg_parm.i[2], cinfo->err->msg_parm.i[3]); } static int jpeg_row_writer(ufraw_data *uf, void *volatile out, void *pixbuf, int row, int width, int height, int grayscale, int bitDepth) { (void)row; (void)grayscale; (void)bitDepth; int i; for (i = 0; i < height; i++) { guint8 *pixbuf8 = pixbuf + 3 * width * i; jpeg_write_scanlines((struct jpeg_compress_struct *)out, &pixbuf8, 1); if (ufraw_is_error(uf)) return UFRAW_ERROR; } return UFRAW_SUCCESS; } #endif /*HAVE_LIBJPEG*/ #ifdef HAVE_LIBPNG static void png_error_handler(png_structp png, png_const_charp error_msg) { ufraw_data *uf = png_get_error_ptr(png); ufraw_set_error(uf, "%s: %s.", error_msg, g_strerror(errno)); longjmp(png_jmpbuf(png), 1); } static void png_warning_handler(png_structp png, png_const_charp warning_msg) { ufraw_data *uf = png_get_error_ptr(png); ufraw_set_warning(uf, "%s.", warning_msg); } static void PNGwriteRawProfile(png_struct *ping, png_info *ping_info, char *profile_type, guint8 *profile_data, png_uint_32 length); int png_row_writer(ufraw_data *uf, void *volatile out, void *pixbuf, int row, int width, int height, int grayscale, int bitDepth) { (void)uf; (void)row; (void)grayscale; int rowStride = width * (bitDepth > 8 ? 6 : 3); int i; for (i = 0; i < height; i++) png_write_row(out, (guint8 *)pixbuf + rowStride * i); return UFRAW_SUCCESS; } #endif /*HAVE_LIBPNG*/ #if defined(HAVE_LIBCFITSIO) && defined(_WIN32) /* localtime_r() is not included in the _WIN32 API. */ static struct tm *localtime_r(const time_t *timep, struct tm *result) { struct tm *p = localtime(timep); memset(result, 0, sizeof(*result)); if (p) { *result = *p; p = result; } return p; } #endif /*HAVE_LIBCFITSIO && _WIN32*/ void ufraw_write_image_data( ufraw_data *uf, void * volatile out, const UFRectangle *Crop, int bitDepth, int grayscaleMode, int (*row_writer)(ufraw_data *, void * volatile, void *, int, int, int, int, int)) { int row, row0; int rowStride = uf->Images[ufraw_first_phase].width; ufraw_image_type *rawImage = (ufraw_image_type *)uf->Images[ufraw_first_phase].buffer; int byteDepth = (bitDepth + 7) / 8; guint8 *pixbuf8 = g_new(guint8, Crop->width * 3 * byteDepth * DEVELOP_BATCH); progress(PROGRESS_SAVE, -Crop->height); for (row0 = 0; row0 < Crop->height; row0 += DEVELOP_BATCH) { progress(PROGRESS_SAVE, DEVELOP_BATCH); #ifdef _OPENMP #pragma omp parallel for default(shared) private(row) #endif for (row = 0; row < DEVELOP_BATCH; row++) { if (row + row0 >= Crop->height) continue; guint8 *rowbuf = &pixbuf8[row * Crop->width * 3 * byteDepth]; develop(rowbuf, rawImage[(Crop->y + row + row0)*rowStride + Crop->x], uf->developer, bitDepth, Crop->width); if (grayscaleMode) grayscale_buffer(rowbuf, Crop->width, bitDepth); } int batchHeight = MIN(Crop->height - row0, DEVELOP_BATCH); if (row_writer(uf, out, pixbuf8, row0, Crop->width, batchHeight, grayscaleMode, bitDepth) != UFRAW_SUCCESS) break; } g_free(pixbuf8); } int ufraw_write_image(ufraw_data *uf) { /* 'volatile' supresses clobbering warning */ void * volatile out; /* out is a pointer to FILE or TIFF */ #ifdef HAVE_LIBCFITSIO fitsfile *fitsFile; #endif char * volatile confFilename = NULL; int grayscaleMode = uf->conf->grayscaleMode != grayscale_none; ufraw_message_reset(uf); if (uf->conf->createID == only_id || uf->conf->createID == also_id) { confFilename = uf_file_set_type(uf->conf->outputFilename, ".ufraw"); if (!strcmp(confFilename, uf->conf->outputFilename)) { ufraw_set_error(uf, _("Image filename can not be the " "same as ID filename '%s'"), confFilename); g_free(confFilename); return ufraw_get_status(uf); } } if (uf->conf->createID == only_id) { if (uf->conf->autoCrop && !uf->LoadingID) { ufraw_get_image_dimensions(uf); uf->conf->CropX1 = (uf->rotatedWidth - uf->autoCropWidth) / 2; uf->conf->CropX2 = uf->conf->CropX1 + uf->autoCropWidth; uf->conf->CropY1 = (uf->rotatedHeight - uf->autoCropHeight) / 2; uf->conf->CropY2 = uf->conf->CropY1 + uf->autoCropHeight; } int status = conf_save(uf->conf, confFilename, NULL); g_free(confFilename); return status; } #ifdef HAVE_LIBTIFF if (uf->conf->type == tiff_type) { TIFFSetErrorHandler(tiff_messenger); TIFFSetWarningHandler(tiff_messenger); ufraw_tiff_message[0] = '\0'; if (!strcmp(uf->conf->outputFilename, "-")) { out = TIFFFdOpen(fileno((FILE *)stdout), uf->conf->outputFilename, "w"); } else { char *filename = uf_win32_locale_filename_from_utf8(uf->conf->outputFilename); out = TIFFOpen(filename, "w"); uf_win32_locale_filename_free(filename); } if (out == NULL) { ufraw_set_error(uf, _("Error creating file.")); ufraw_set_error(uf, ufraw_tiff_message); ufraw_set_error(uf, g_strerror(errno)); ufraw_tiff_message[0] = '\0'; return ufraw_get_status(uf); } } else #endif #ifdef HAVE_LIBCFITSIO if (uf->conf->type == fits_type) { if (strcmp(uf->conf->outputFilename, "-") != 0) { if (g_file_test(uf->conf->outputFilename, G_FILE_TEST_EXISTS)) { if (g_unlink(uf->conf->outputFilename)) { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, g_strerror(errno)); return ufraw_get_status(uf); } } } int status = 0; char *filename = uf_win32_locale_filename_from_utf8(uf->conf->outputFilename); if (strcmp(filename, "-") != 0) // Use fits_create_diskfile() to allow more characters in // filenames. fits_create_diskfile(&fitsFile, filename, &status); else // fits_create_file() can write to stdout. fits_create_file(&fitsFile, filename, &status); uf_win32_locale_filename_free(filename); if (status) { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); char errBuffer[max_name]; fits_get_errstatus(status, errBuffer); ufraw_set_error(uf, errBuffer); while (fits_read_errmsg(errBuffer)) ufraw_set_error(uf, errBuffer); return ufraw_get_status(uf); } } else #endif { if (!strcmp(uf->conf->outputFilename, "-")) { out = stdout; } else { if ((out = g_fopen(uf->conf->outputFilename, "wb")) == NULL) { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, g_strerror(errno)); return ufraw_get_status(uf); } } } // TODO: error handling ufraw_convert_image(uf); UFRectangle Crop; ufraw_get_scaled_crop(uf, &Crop); volatile int BitDepth = uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].BitDepth; if (BitDepth != 16) BitDepth = 8; if (uf->conf->type == ppm_type && BitDepth == 8) { fprintf(out, "P%c\n%d %d\n%d\n", grayscaleMode ? '5' : '6', Crop.width, Crop.height, 0xFF); ufraw_write_image_data(uf, out, &Crop, BitDepth, grayscaleMode, ppm_row_writer); } else if (uf->conf->type == ppm_type && BitDepth == 16) { fprintf(out, "P%c\n%d %d\n%d\n", grayscaleMode ? '5' : '6', Crop.width, Crop.height, 0xFFFF); ufraw_write_image_data(uf, out, &Crop, BitDepth, grayscaleMode, ppm_row_writer); #ifdef HAVE_LIBTIFF } else if (uf->conf->type == tiff_type) { TIFFSetField(out, TIFFTAG_IMAGEWIDTH, Crop.width); TIFFSetField(out, TIFFTAG_IMAGELENGTH, Crop.height); TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, grayscaleMode ? 1 : 3); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitDepth); TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(out, TIFFTAG_PHOTOMETRIC, grayscaleMode ? PHOTOMETRIC_MINISBLACK : PHOTOMETRIC_RGB); #ifdef HAVE_LIBZ if (uf->conf->losslessCompress) { TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE); TIFFSetField(out, TIFFTAG_ZIPQUALITY, 9); TIFFSetField(out, TIFFTAG_PREDICTOR, 2); } else #endif TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_NONE); /* Embed output profile if it is not the internal sRGB. */ if (strcmp(uf->developer->profileFile[out_profile], "")) { char *buf; gsize len; if (g_file_get_contents(uf->developer->profileFile[out_profile], &buf, &len, NULL)) { TIFFSetField(out, TIFFTAG_ICCPROFILE, len, buf); g_free(buf); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->developer->profileFile[out_profile], uf->conf->outputFilename); } } else if (uf->conf->profileIndex[out_profile] == 1) { // Embed sRGB. cmsHPROFILE hOutProfile = cmsCreate_sRGBProfile(); gsize len = 0; _cmsSaveProfileToMem(hOutProfile, 0, &len); // Calculate len. if (len > 0) { unsigned char buf[len]; _cmsSaveProfileToMem(hOutProfile, buf, &len); TIFFSetField(out, TIFFTAG_ICCPROFILE, len, buf); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].name, uf->conf->outputFilename); } cmsCloseProfile(hOutProfile); } TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(out, 0)); ufraw_write_image_data(uf, out, &Crop, BitDepth, grayscaleMode, tiff_row_writer); #endif /*HAVE_LIBTIFF*/ #ifdef HAVE_LIBJPEG } else if (uf->conf->type == jpeg_type) { if (BitDepth != 8) ufraw_set_warning(uf, _("Unsupported bit depth '%d' ignored."), BitDepth); struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr); cinfo.err->output_message = jpeg_warning_handler; cinfo.err->error_exit = jpeg_error_handler; cinfo.client_data = uf; jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, out); cinfo.image_width = Crop.width; cinfo.image_height = Crop.height; if (grayscaleMode) { cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; } else { cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; } jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, uf->conf->compression, TRUE); if (uf->conf->compression > 90) cinfo.comp_info[0].v_samp_factor = 1; if (uf->conf->compression > 92) cinfo.comp_info[0].h_samp_factor = 1; if (uf->conf->progressiveJPEG) jpeg_simple_progression(&cinfo); cinfo.optimize_coding = 1; jpeg_start_compress(&cinfo, TRUE); /* Embed output profile if it is not the internal sRGB. */ if (strcmp(uf->developer->profileFile[out_profile], "")) { char *buf; gsize len; if (g_file_get_contents(uf->developer->profileFile[out_profile], &buf, &len, NULL)) { write_icc_profile(&cinfo, (unsigned char *)buf, len); g_free(buf); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->developer->profileFile[out_profile], uf->conf->outputFilename); } } else if (uf->conf->profileIndex[out_profile] == 1) { // Embed sRGB. cmsHPROFILE hOutProfile = cmsCreate_sRGBProfile(); gsize len = 0; _cmsSaveProfileToMem(hOutProfile, 0, &len); // Calculate len. if (len > 0) { unsigned char buf[len]; _cmsSaveProfileToMem(hOutProfile, buf, &len); write_icc_profile(&cinfo, buf, len); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].name, uf->conf->outputFilename); } cmsCloseProfile(hOutProfile); } if (uf->conf->embedExif) { ufraw_exif_prepare_output(uf); if (uf->outputExifBuf != NULL) { if (uf->outputExifBufLen > 65533) { ufraw_set_warning(uf, _("EXIF buffer length %d, too long, ignored."), uf->outputExifBufLen); } else { jpeg_write_marker(&cinfo, JPEG_APP0 + 1, uf->outputExifBuf, uf->outputExifBufLen); } } } ufraw_write_image_data(uf, &cinfo, &Crop, 8, grayscaleMode, jpeg_row_writer); if (ufraw_is_error(uf)) { char *message = g_strdup(ufraw_get_message(uf)); ufraw_message_reset(uf); ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, message); g_free(message); } else jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); #endif /*HAVE_LIBJPEG*/ #ifdef HAVE_LIBPNG } else if (uf->conf->type == png_type) { png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, uf, png_error_handler, png_warning_handler); png_infop info = png_create_info_struct(png); if (setjmp(png_jmpbuf(png))) { char *message = g_strdup(ufraw_get_message(uf)); ufraw_message_reset(uf); ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, message); g_free(message); png_destroy_write_struct(&png, &info); } else { png_init_io(png, out); png_set_IHDR(png, info, Crop.width, Crop.height, BitDepth, grayscaleMode ? PNG_COLOR_TYPE_GRAY : PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_set_compression_level(png, Z_BEST_COMPRESSION); png_text text[2]; text[0].compression = PNG_TEXT_COMPRESSION_NONE; text[0].key = "Software"; text[0].text = "UFRaw"; text[1].compression = PNG_TEXT_COMPRESSION_NONE; text[1].key = "Source"; text[1].text = g_strdup_printf("%s%s", uf->conf->make, uf->conf->model); png_set_text(png, info, text, 2); g_free(text[1].text); /* Embed output profile if it is not the internal sRGB. */ if (strcmp(uf->developer->profileFile[out_profile], "")) { char *buf; gsize len; if (g_file_get_contents(uf->developer->profileFile[out_profile], &buf, &len, NULL)) { png_set_iCCP(png, info, uf->developer->profileFile[out_profile], PNG_COMPRESSION_TYPE_BASE, (png_const_bytep) buf, len); g_free(buf); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->developer->profileFile[out_profile], uf->conf->outputFilename); } } else if (uf->conf->profileIndex[out_profile] == 1) { // Embed sRGB. cmsHPROFILE hOutProfile = cmsCreate_sRGBProfile(); gsize len = 0; _cmsSaveProfileToMem(hOutProfile, 0, &len); // Calculate len. if (len > 0) { char buf[len]; _cmsSaveProfileToMem(hOutProfile, buf, &len); png_set_iCCP(png, info, uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].name, PNG_COMPRESSION_TYPE_BASE, (png_const_bytep) buf, len); } else { ufraw_set_warning(uf, _("Failed to embed output profile '%s' in '%s'."), uf->conf->profile[out_profile] [uf->conf->profileIndex[out_profile]].name, uf->conf->outputFilename); } cmsCloseProfile(hOutProfile); } if (uf->conf->embedExif) { ufraw_exif_prepare_output(uf); if (uf->outputExifBuf != NULL) PNGwriteRawProfile(png, info, "exif", uf->outputExifBuf, uf->outputExifBufLen); } png_write_info(png, info); if (BitDepth != 8 && G_BYTE_ORDER == G_LITTLE_ENDIAN) png_set_swap(png); // Swap byte order to big-endian ufraw_write_image_data(uf, png, &Crop, BitDepth, grayscaleMode, png_row_writer); png_write_end(png, NULL); png_destroy_write_struct(&png, &info); } #endif /*HAVE_LIBPNG*/ #ifdef HAVE_LIBCFITSIO } else if (uf->conf->type == fits_type) { // image data and min/max values guint16 *image; guint16 max[3] = { 0, 0, 0 }, min[3] = { 65535, 65535, 65535 }; guint64 sum[3] = { 0, 0, 0 }; // FITS Header (taken from cookbook.c) int bitpix = USHORT_IMG; // Use float format int naxis = 3; // 3-dimensional image int status = 0; // status variable for fitsio long naxes[3] = { Crop.width, Crop.height, 3 }; long dim = Crop.width * Crop.height; long offset = 0; image = g_new(guint16, 3 * dim); int row; int i; ufraw_image_type *rawImage = (ufraw_image_type *)uf->Images[ufraw_first_phase].buffer; int rowStride = uf->Images[ufraw_first_phase].width; guint16 pixbuf16[3]; // Avoid FITS images being saved upside down ufraw_flip_image(uf, 2); progress(PROGRESS_SAVE, -Crop.height); for (row = 0; row < Crop.height; row++) { progress(PROGRESS_SAVE, 1); for (i = 0; i < Crop.width; i++) { offset = row * Crop.width + i; develop_linear(rawImage[(Crop.y + row)*rowStride + Crop.x + i], pixbuf16, uf->developer); int c; for (c = 0; c < 3; c++) { sum[c] += image[c * dim + offset] = pixbuf16[c]; max[c] = MAX(pixbuf16[c], max[c]); min[c] = MIN(pixbuf16[c], min[c]); } } } // calculate averages float average[3]; int c; for (c = 0; c < 3; c++) average[c] = (float)sum[c] / dim; guint16 maxAll = MAX(MAX(max[0], max[1]), max[2]); guint16 minAll = MIN(MIN(min[0], min[1]), min[2]); fits_create_img(fitsFile, bitpix, naxis, naxes, &status); fits_write_img(fitsFile, TUSHORT, 1, 3 * dim, image, &status); g_free(image); fits_update_key(fitsFile, TUSHORT, "DATAMIN", &minAll, "minimum data (overall)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMAX", &maxAll, "maximum data (overall)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMINR", &min[0], "minimum data (red channel)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMAXR", &max[0], "maximum data (red channel)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMING", &min[1], "minimum data (green channel)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMAXG", &max[1], "maximum data (green channel)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMINB", &min[2], "minimum data (blue channel)", &status); fits_update_key(fitsFile, TUSHORT, "DATAMAXB", &max[2], "maximum data (blue channel)", &status); fits_update_key(fitsFile, TFLOAT, "AVERAGER", &average[0], "average (red channel)", &status); fits_update_key(fitsFile, TFLOAT, "AVERAGEG", &average[1], "average (green channel)", &status); fits_update_key(fitsFile, TFLOAT, "AVERAGEB", &average[2], "average (blue channel)", &status); // Save known EXIF properties if (strlen(uf->conf->shutterText) > 0) fits_update_key(fitsFile, TSTRING, "EXPOSURE", &uf->conf->shutterText, "Exposure Time", &status); if (strlen(uf->conf->isoText) > 0) fits_update_key(fitsFile, TSTRING, "ISO", &uf->conf->isoText, "ISO Speed", &status); if (strlen(uf->conf->apertureText) > 0) fits_update_key(fitsFile, TSTRING, "APERTURE", &uf->conf->apertureText, "Aperture", &status); if (strlen(uf->conf->focalLenText) > 0) fits_update_key(fitsFile, TSTRING, "FOCALLEN", &uf->conf->focalLenText, "Focal Length", &status); if (strlen(uf->conf->focalLen35Text) > 0) fits_update_key(fitsFile, TSTRING, "FOCALLE2", &uf->conf->focalLen35Text, "Focal Length (resp. 35mm)", &status); if (strlen(uf->conf->lensText) > 0) fits_update_key(fitsFile, TSTRING, "LENS", &uf->conf->lensText, "Lens", &status); // formating the date according to the FITS standard // http://archive.stsci.edu/fits/fits_standard/node40.html#s:dhist if (uf->conf->timestamp != 0) { char *time = g_new(char, 40); struct tm tmStamp; strftime(time, 40, "%Y-%m-%dT%H:%M:%S", localtime_r(&uf->conf->timestamp, &tmStamp)); fits_update_key(fitsFile, TSTRING, "DATE", time, "Image taken at this date", &status); g_free(time); } if (strlen(uf->conf->make) > 0) fits_update_key(fitsFile, TSTRING, "MANUFACT", &uf->conf->make, "Camera Manufacturer", &status); if (strlen(uf->conf->model) > 0) fits_update_key(fitsFile, TSTRING, "INSTRUME", &uf->conf->model, "Camera Model", &status); fits_write_comment(fitsFile, "This file contains one RGB color image.", &status); // Creator Ufraw fits_update_key(fitsFile, TSTRING, "CREATOR", "UFRaw " VERSION, "Creator Software", &status); fits_close_file(fitsFile, &status); if (status) { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); char errBuffer[max_name]; fits_get_errstatus(status, errBuffer); ufraw_set_error(uf, errBuffer); while (fits_read_errmsg(errBuffer)) ufraw_set_error(uf, errBuffer); return ufraw_get_status(uf); } #endif /* HAVE_LIBCFITSIO */ } else { ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, _("Unknown file type %d."), uf->conf->type); } #ifdef HAVE_LIBTIFF if (uf->conf->type == tiff_type) { TIFFClose(out); if (ufraw_tiff_message[0] != '\0') { if (!ufraw_is_error(uf)) { // Error was not already set before ufraw_set_error(uf, _("Error creating file.")); ufraw_set_error(uf, ufraw_tiff_message); } ufraw_tiff_message[0] = '\0'; } else { if (uf->conf->embedExif) ufraw_exif_write(uf); } } else #endif #ifdef HAVE_LIBCFITSIO // Dummy to prevent fclose if (uf->conf->type == fits_type) {} else #endif { if (strcmp(uf->conf->outputFilename, "-")) if (fclose(out) != 0) { if (!ufraw_is_error(uf)) { // Error was not already set before ufraw_set_error(uf, _("Error creating file '%s'."), uf->conf->outputFilename); ufraw_set_error(uf, g_strerror(errno)); } } } if (uf->conf->createID == also_id) { if (ufraw_get_message(uf) != NULL) ufraw_message(UFRAW_SET_LOG, ufraw_get_message(uf)); // TODO: error handling conf_save(uf->conf, confFilename, NULL); g_free(confFilename); } return ufraw_get_status(uf); } /* Write EXIF data to PNG file. * Code copied from DigiKam's libs/dimg/loaders/pngloader.cpp. * The EXIF embeding is defined by ImageMagicK. * It is documented in the ExifTool page: * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PNG.html */ #ifdef HAVE_LIBPNG static void PNGwriteRawProfile(png_struct *ping, png_info *ping_info, char *profile_type, guint8 *profile_data, png_uint_32 length) { png_textp text; long i; guint8 *sp; png_charp dp; png_uint_32 allocated_length, description_length; const guint8 hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; text = png_malloc(ping, sizeof(png_text)); description_length = strlen(profile_type); allocated_length = length * 2 + (length >> 5) + 20 + description_length; text[0].text = png_malloc(ping, allocated_length); text[0].key = png_malloc(ping, 80); text[0].key[0] = '\0'; g_strlcat(text[0].key, "Raw profile type ", 80); g_strlcat(text[0].key, profile_type, 80); sp = profile_data; dp = text[0].text; *dp++ = '\n'; g_strlcpy(dp, profile_type, allocated_length); dp += description_length; *dp++ = '\n'; *dp = '\0'; #if (PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && \ PNG_LIBPNG_VER_MINOR > 2)) && (defined(INT_MAX) && INT_MAX > 0x7ffffffeL) g_snprintf(dp, allocated_length - strlen(text[0].text), "%8u ", length); #else g_snprintf(dp, allocated_length - strlen(text[0].text), "%8lu ", length); #endif dp += 8; for (i = 0; i < (long) length; i++) { if (i % 36 == 0) *dp++ = '\n'; *(dp++) = hex[((*sp >> 4) & 0x0f)]; *(dp++) = hex[((*sp++) & 0x0f)]; } *dp++ = '\n'; *dp = '\0'; text[0].text_length = (dp - text[0].text); text[0].compression = -1; if (text[0].text_length <= allocated_length) png_set_text(ping, ping_info, text, 1); png_free(ping, text[0].text); png_free(ping, text[0].key); png_free(ping, text); } #endif /*HAVE_LIBPNG*/ ufraw-0.19.2/Makefile.am0000664000175000017500000001007712122217612011707 00000000000000# $Id: Makefile.am,v 1.60 2013/03/14 09:00:16 nkbj Exp $ SUBDIRS = po icons if MAKE_EXTRAS bin_PROGRAMS = ufraw-batch dcraw nikon-curve else bin_PROGRAMS = ufraw-batch endif if MAKE_GTK gtk_PROGRAMS = ufraw gtkdir = $(bindir) endif if MAKE_GIMP gimpbin_PROGRAMS = ufraw-gimp gimpbindir = $(GIMP_LIBDIR)/plug-ins endif if MAKE_CINEPAINT cinepaintbin_PROGRAMS = ufraw-cinepaint cinepaintbindir = $(CINEPAINT_PROGRAMPLUGINDIR)/plug-ins endif POD2MAN = @POD2MAN@ man_MANS = ufraw.1 noinst_LIBRARIES = libufraw.a MAINTAINERCLEANFILES = ufraw.1 CLEANFILES = ufraw.schemas ufraw_icon.opc ufraw-setup.bmp if INSTALL_MIME app_DATA = ufraw.desktop appdir = $(datadir)/applications # Not needed since it is contained in shared-mime-info 0.21 # mime_DATA = ufraw-mime.xml # mimedir = $(datadir)/mime/packages schemas_DATA = ufraw.schemas schemasdir = $(datadir)/gconf/schemas endif if UFRAW_WIN32 UFRAW_ICON = ufraw_icon.opc else UFRAW_ICON = endif EXTRA_DIST = ufraw.desktop ufraw_icon.ico ufraw_icon.rc \ ufraw-mime.xml generate_schemas.sh ac_openmp.m4 Doxyfile \ ufraw-setup.jpg autogen.sh mkinstalldirs MANIFEST ufraw.pod ufraw.1 AM_CPPFLAGS = $(UFRAW_CPPFLAGS) -DDCRAW_NOMAIN \ -DUFRAW_LOCALEDIR=\"$(datadir)/locale\" LDADD = libufraw.a $(UFRAW_ICON) $(UFRAW_LDADD) LINK = $(CXXLINK) if MAKE_GTK libufraw_a_SOURCES = \ dcraw.cc ufraw_ufraw.c ufraw_routines.c ufraw_developer.c \ ufraw_conf.c ufraw_writer.c ufraw_embedded.c ufraw_message.c ufraw.h \ ufobject.cc ufobject.h ufraw_settings.cc ufraw_lensfun.cc \ wb_presets.c dcraw_api.cc dcraw_api.h dcraw_indi.c dcraw.h \ nikon_curve.c nikon_curve.h uf_progress.h \ uf_glib.h uf_gtk.cc uf_gtk.h ufraw_exiv2.cc iccjpeg.c iccjpeg.h \ ufraw_preview.c ufraw_saver.c ufraw_delete.c \ ufraw_chooser.c ufraw_icons.c icons/ufraw_icons.h \ curveeditor_widget.c curveeditor_widget.h \ ufraw_lens_ui.c ufraw_ui.h else libufraw_a_SOURCES = \ dcraw.cc ufraw_ufraw.c ufraw_routines.c ufraw_developer.c \ ufraw_conf.c ufraw_writer.c ufraw_embedded.c ufraw_message.c ufraw.h \ ufobject.cc ufobject.h ufraw_settings.cc ufraw_lensfun.cc \ wb_presets.c dcraw_api.cc dcraw_api.h dcraw_indi.c dcraw.h \ nikon_curve.c nikon_curve.h uf_progress.h \ uf_glib.h ufraw_exiv2.cc iccjpeg.c iccjpeg.h endif ufraw_batch_LINK = $(CXXLINK) @CONSOLE@ if MAKE_GTK ufraw_SOURCES = ufraw.c ufraw_CPPFLAGS = $(UFRAW_CPPFLAGS) ufraw_LDADD = $(LDADD) $(GTK_LIBS) endif ufraw_batch_SOURCES = ufraw-batch.c if MAKE_GIMP ufraw_gimp_SOURCES = ufraw-gimp.c ufraw_gimp_CPPFLAGS = $(AM_CPPFLAGS) $(GIMP_CFLAGS) ufraw_gimp_LDADD = $(LDADD) $(GIMP_LIBS) $(GTK_LIBS) endif if MAKE_CINEPAINT ufraw_cinepaint_SOURCES = ufraw-gimp.c ufraw_cinepaint_CPPFLAGS = $(AM_CPPFLAGS) $(CINEPAINT_CFLAGS) \ -DUFRAW_CINEPAINT ufraw_cinepaint_LDADD = $(LDADD) $(CINEPAINT_LIBS) $(GTK_LIBS) endif if MAKE_EXTRAS dcraw_SOURCES = dcraw.cc dcraw_CPPFLAGS = $(UFRAW_CPPFLAGS) dcraw_LDFLAGS = @CONSOLE@ dcraw_LDADD = $(UFRAW_LDADD) nikon_curve_SOURCES = nikon_curve.c nikon_curve_CPPFLAGS = $(UFRAW_CPPFLAGS) -D_STAND_ALONE_ nikon_curve_LDFLAGS = @CONSOLE@ nikon_curve_LDADD = $(UFRAW_LDADD) nikon_curve_LINK = $(CXXLINK) @CONSOLE@ endif #ufraw_icon.ico: icons/ufraw.png # { pngtopnm $^ | pnmquant 256; pngtopnm -alpha $^; } | ppmtowinicon -andpgms -output $@ - - ufraw_icon.opc: ufraw_icon.rc ufraw_icon.ico $(WINDRES) --include-dir=$(srcdir) --input $< --output $@ .pod.1: $(POD2MAN) --section 1 --center "" --release UFRAW $< $@ ufraw.schemas: generate_schemas.sh $(srcdir)/generate_schemas.sh $(prefix) $@ install-windows: windows-installer $(WINE) ./ufraw-$(VERSION)-setup.exe windows-installer: ufraw-$(VERSION)-setup.exe ufraw-$(VERSION)-setup.exe: ufraw-setup.iss ufraw.exe ufraw-batch.exe \ ufraw-gimp.exe ufraw-setup.bmp ufraw_icon.bmp ufraw_icon.ico \ $(PREFIX)/bin/liblcms-1.dll strip ufraw.exe ufraw-batch.exe ufraw-gimp.exe $(WINE) $(ISCC) ufraw-setup.iss ufraw-setup.bmp: ufraw-setup.jpg montage -geometry +0+0 $< $@ ufraw_icon.bmp: icons/ufraw.png montage -geometry +0+0 $< $@