ufraw-0.20/0000775000175000017500000000000012410700170007552 500000000000000ufraw-0.20/dcraw_indi.c0000644000175000017500000014566212401246236011765 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_indi.c - DCRaw functions made independent * Copyright 2004-2014 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 #if !defined(ushort) #define ushort unsigned short #endif 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, const int top_margin, const int left_margin, /*const*/ char xtrans[6][6]) { 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 } }; if (filters == 1) return filter[(row + top_margin) & 15][(col + left_margin) & 15]; if (filters == 9) return xtrans[(row + 6) % 6][(col + 6) % 6]; 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[1] == 0) pre_mul[1] = 1; 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, dcraw_data *h) { 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, h->top_margin, h->left_margin, h->xtrans); sum[f] += image[y * width + x][f]; sum[f + 4]++; } f = fcol_INDI(filters, row, col, h->top_margin, h->left_margin, h->xtrans); 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, dcraw_data *h) /*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*/ if (filters == 9) size = 6; border_interpolate_INDI(height, width, image, filters, colors, 1, h); for (row = 0; row < size; row++) { for (col = 0; col < size; col++) { ip = code[row][col] + 1; f = fcol_INDI(filters, row, col, h->top_margin, h->left_margin, h->xtrans); 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, h->top_margin, h->left_margin, h->xtrans); 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, dcraw_data *h) /*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, h); /*UF*/ dcraw_message(dcraw, DCRAW_VERBOSE, _("VNG interpolation...\n")); /*UF*/ if (filters == 1) prow = pcol = 16; if (filters == 9) prow = pcol = 6; 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, h->top_margin, h->left_margin, h->xtrans); if (fcol_INDI(filters, row + y2, col + x2, h->top_margin, h->left_margin, h->xtrans) != color) continue; diag = (fcol_INDI(filters, row, col + 1, h->top_margin, h->left_margin, h->xtrans) == color && fcol_INDI(filters, row + 1, col, h->top_margin, h->left_margin, h->xtrans) == 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, h->top_margin, h->left_margin, h->xtrans); if (fcol_INDI(filters, row + y, col + x, h->top_margin, h->left_margin, h->xtrans) != color && fcol_INDI(filters, row + y * 2, col + x * 2, h->top_margin, h->left_margin, h->xtrans) == 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,h) \ 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, h->top_margin, h->left_margin, h->xtrans); 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, dcraw_data *h) { int dir[5] = { 1, width, -1, -width, 1 }; int row, col, diff[2] = { 0, 0 }, guess[2], c, d, i; ushort(*pix)[4]; border_interpolate_INDI(height, width, image, filters, colors, 3, h); dcraw_message(dcraw, DCRAW_VERBOSE, _("PPG interpolation...\n")); /*UF*/ #ifdef _OPENMP #pragma omp parallel \ default(none) \ shared(image,dir,diff) \ private(row,col,i,d,c,pix,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); } } } } void CLASS cielab_INDI(ushort rgb[3], short lab[3], const int colors, const float rgb_cam[3][4]) { int c, i, j, k; float r, xyz[3]; static float cbrt[0x10000], xyz_cam[3][4]; if (!rgb) { 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]; return; } xyz[0] = xyz[1] = xyz[2] = 0.5; FORCC { xyz[0] += xyz_cam[0][c] * rgb[c]; xyz[1] += xyz_cam[1][c] * rgb[c]; xyz[2] += xyz_cam[2][c] * rgb[c]; } xyz[0] = cbrt[CLIP((int) xyz[0])]; xyz[1] = cbrt[CLIP((int) xyz[1])]; xyz[2] = cbrt[CLIP((int) xyz[2])]; lab[0] = 64 * (116 * xyz[1] - 16); lab[1] = 64 * 500 * (xyz[0] - xyz[1]); lab[2] = 64 * 200 * (xyz[1] - xyz[2]); } #define TS 512 /* Tile Size */ /* Frank Markesteijn's algorithm for Fuji X-Trans sensors */ void CLASS xtrans_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, dcraw_data *hh, const int passes) { int c, d, f, g, h, i, v, ng, row, col, top, left, mrow, mcol; int val, ndir, pass, hm[8], avg[4], color[3][8]; static const short orth[12] = { 1, 0, 0, 1, -1, 0, 0, -1, 1, 0, 0, 1 }, patt[2][16] = { { 0, 1, 0, -1, 2, 0, -1, 0, 1, 1, 1, -1, 0, 0, 0, 0 }, { 0, 1, 0, -2, 1, 0, -2, 0, 1, 1, -2, -2, 1, -1, -1, 1 } }, dir[4] = { 1, TS, TS + 1, TS - 1 }; short allhex[3][3][2][8], *hex; ushort min, max, sgrow = 0, sgcol = 0; ushort(*rgb)[TS][TS][3], (*rix)[3], (*pix)[4]; short(*lab) [TS][3], (*lix)[3]; float(*drv)[TS][TS], diff[6], tr; char(*homo)[TS][TS], *buffer; dcraw_message(dcraw, DCRAW_VERBOSE, _("%d-pass X-Trans interpolation...\n"), passes); /*NKBJ*/ cielab_INDI(0, 0, colors, rgb_cam); border_interpolate_INDI(height, width, image, filters, colors, 6, hh); ndir = 4 << (passes > 1); /* Map a green hexagon around each non-green pixel and vice versa: */ for (row = 0; row < 3; row++) for (col = 0; col < 3; col++) for (ng = d = 0; d < 10; d += 2) { g = fcol_INDI(filters, row, col, hh->top_margin, hh->left_margin, hh->xtrans) == 1; if (fcol_INDI(filters, row + orth[d], col + orth[d + 2], hh->top_margin, hh->left_margin, hh->xtrans) == 1) ng = 0; else ng++; if (ng == 4) { sgrow = row; sgcol = col; } if (ng == g + 1) FORC(8) { v = orth[d ] * patt[g][c * 2] + orth[d + 1] * patt[g][c * 2 + 1]; h = orth[d + 2] * patt[g][c * 2] + orth[d + 3] * patt[g][c * 2 + 1]; allhex[row][col][0][c ^ (g * 2 & d)] = h + v * width; allhex[row][col][1][c ^ (g * 2 & d)] = h + v * TS; } } /* Set green1 and green3 to the minimum and maximum allowed values: */ for (row = 2; row < height - 2; row++) for (min = ~(max = 0), col = 2; col < width - 2; col++) { if (fcol_INDI(filters, row, col, hh->top_margin, hh->left_margin, hh->xtrans) == 1 && (min = ~(max = 0))) continue; pix = image + row * width + col; hex = allhex[row % 3][col % 3][0]; if (!max) FORC(6) { val = pix[hex[c]][1]; if (min > val) min = val; if (max < val) max = val; } pix[0][1] = min; pix[0][3] = max; switch ((row - sgrow) % 3) { case 1: if (row < height - 3) { row++; col--; } break; case 2: if ((min = ~(max = 0)) && (col += 2) < width - 3 && row > 2) row--; } } #ifdef _OPENMP #pragma omp parallel \ default(shared) \ private(top, left, row, col, pix, mrow, mcol, hex, color, c, pass, rix, val, d, f, g, h, i, diff, lix, tr, avg, v, buffer, rgb, lab, drv, homo, hm, max) #endif { buffer = (char *) malloc(TS * TS * (ndir * 11 + 6)); merror(buffer, "xtrans_interpolate()"); rgb = (ushort(*)[TS][TS][3]) buffer; lab = (short(*) [TS][3])(buffer + TS * TS * (ndir * 6)); drv = (float(*)[TS][TS])(buffer + TS * TS * (ndir * 6 + 6)); homo = (char(*)[TS][TS])(buffer + TS * TS * (ndir * 10 + 6)); progress(PROGRESS_INTERPOLATE, -height); #ifdef _OPENMP #pragma omp for #endif for (top = 3; top < height - 19; top += TS - 16) { progress(PROGRESS_INTERPOLATE, TS - 16); for (left = 3; left < width - 19; left += TS - 16) { mrow = MIN(top + TS, height - 3); mcol = MIN(left + TS, width - 3); for (row = top; row < mrow; row++) for (col = left; col < mcol; col++) memcpy(rgb[0][row - top][col - left], image[row * width + col], 6); FORC3 memcpy(rgb[c + 1], rgb[0], sizeof * rgb); /* Interpolate green horizontally, vertically, and along both diagonals: */ for (row = top; row < mrow; row++) for (col = left; col < mcol; col++) { if ((f = fcol_INDI(filters, row, col, hh->top_margin, hh->left_margin, hh->xtrans)) == 1) continue; pix = image + row * width + col; hex = allhex[row % 3][col % 3][0]; color[1][0] = 174 * (pix[ hex[1]][1] + pix[ hex[0]][1]) - 46 * (pix[2 * hex[1]][1] + pix[2 * hex[0]][1]); color[1][1] = 223 * pix[ hex[3]][1] + pix[ hex[2]][1] * 33 + 92 * (pix[ 0 ][f] - pix[ -hex[2]][f]); FORC(2) color[1][2 + c] = 164 * pix[hex[4 + c]][1] + 92 * pix[-2 * hex[4 + c]][1] + 33 * (2 * pix[0][f] - pix[3 * hex[4 + c]][f] - pix[-3 * hex[4 + c]][f]); FORC4 rgb[c ^ !((row - sgrow) % 3)][row - top][col - left][1] = LIM(color[1][c] >> 8, pix[0][1], pix[0][3]); } for (pass = 0; pass < passes; pass++) { if (pass == 1) memcpy(rgb += 4, buffer, 4 * sizeof * rgb); /* Recalculate green from interpolated values of closer pixels: */ if (pass) { for (row = top + 2; row < mrow - 2; row++) for (col = left + 2; col < mcol - 2; col++) { if ((f = fcol_INDI(filters, row, col, hh->top_margin, hh->left_margin, hh->xtrans)) == 1) continue; pix = image + row * width + col; hex = allhex[row % 3][col % 3][1]; for (d = 3; d < 6; d++) { rix = &rgb[(d - 2) ^ !((row - sgrow) % 3)][row - top][col - left]; val = rix[-2 * hex[d]][1] + 2 * rix[hex[d]][1] - rix[-2 * hex[d]][f] - 2 * rix[hex[d]][f] + 3 * rix[0][f]; rix[0][1] = LIM(val / 3, pix[0][1], pix[0][3]); } } } /* Interpolate red and blue values for solitary green pixels: */ for (row = (top - sgrow + 4) / 3 * 3 + sgrow; row < mrow - 2; row += 3) for (col = (left - sgcol + 4) / 3 * 3 + sgcol; col < mcol - 2; col += 3) { rix = &rgb[0][row - top][col - left]; h = fcol_INDI(filters, row, col + 1, hh->top_margin, hh->left_margin, hh->xtrans); memset(diff, 0, sizeof diff); for (i = 1, d = 0; d < 6; d++, i ^= TS ^ 1, h ^= 2) { for (c = 0; c < 2; c++, h ^= 2) { g = 2 * rix[0][1] - rix[i << c][1] - rix[-i << c][1]; color[h][d] = g + rix[i << c][h] + rix[-i << c][h]; if (d > 1) diff[d] += SQR(rix[i << c][1] - rix[-i << c][1] - rix[i << c][h] + rix[-i << c][h]) + SQR(g); } if (d > 1 && (d & 1)) if (diff[d - 1] < diff[d]) FORC(2) color[c * 2][d] = color[c * 2][d - 1]; if (d < 2 || (d & 1)) { FORC(2) rix[0][c * 2] = CLIP(color[c * 2][d] / 2); rix += TS * TS; } } } /* Interpolate red for blue pixels and vice versa: */ for (row = top + 1; row < mrow - 1; row++) for (col = left + 1; col < mcol - 1; col++) { if ((f = 2 - fcol_INDI(filters, row, col, hh->top_margin, hh->left_margin, hh->xtrans)) == 1) continue; rix = &rgb[0][row - top][col - left]; i = (row - sgrow) % 3 ? TS : 1; for (d = 0; d < 4; d++, rix += TS * TS) rix[0][f] = CLIP((rix[i][f] + rix[-i][f] + 2 * rix[0][1] - rix[i][1] - rix[-i][1]) / 2); } /* Fill in red and blue for 2x2 blocks of green: */ for (row = top + 2; row < mrow - 2; row++) if ((row - sgrow) % 3) for (col = left + 2; col < mcol - 2; col++) if ((col - sgcol) % 3) { rix = &rgb[0][row - top][col - left]; hex = allhex[row % 3][col % 3][1]; for (d = 0; d < ndir; d += 2, rix += TS * TS) if (hex[d] + hex[d + 1]) { g = 3 * rix[0][1] - 2 * rix[hex[d]][1] - rix[hex[d + 1]][1]; for (c = 0; c < 4; c += 2) rix[0][c] = CLIP((g + 2 * rix[hex[d]][c] + rix[hex[d + 1]][c]) / 3); } else { g = 2 * rix[0][1] - rix[hex[d]][1] - rix[hex[d + 1]][1]; for (c = 0; c < 4; c += 2) rix[0][c] = CLIP((g + rix[hex[d]][c] + rix[hex[d + 1]][c]) / 2); } } } rgb = (ushort(*)[TS][TS][3]) buffer; mrow -= top; mcol -= left; /* Convert to CIELab and differentiate in all directions: */ for (d = 0; d < ndir; d++) { for (row = 2; row < mrow - 2; row++) for (col = 2; col < mcol - 2; col++) cielab_INDI(rgb[d][row][col], lab[row][col], colors, rgb_cam); for (f = dir[d & 3], row = 3; row < mrow - 3; row++) for (col = 3; col < mcol - 3; col++) { lix = &lab[row][col]; g = 2 * lix[0][0] - lix[f][0] - lix[-f][0]; drv[d][row][col] = SQR(g) + SQR((2 * lix[0][1] - lix[f][1] - lix[-f][1] + g * 500 / 232)) + SQR((2 * lix[0][2] - lix[f][2] - lix[-f][2] - g * 500 / 580)); } } /* Build homogeneity maps from the derivatives: */ memset(homo, 0, ndir * TS * TS); for (row = 4; row < mrow - 4; row++) for (col = 4; col < mcol - 4; col++) { for (tr = FLT_MAX, d = 0; d < ndir; d++) if (tr > drv[d][row][col]) tr = drv[d][row][col]; tr *= 8; for (d = 0; d < ndir; d++) for (v = -1; v <= 1; v++) for (h = -1; h <= 1; h++) if (drv[d][row + v][col + h] <= tr) homo[d][row][col]++; } /* Average the most homogenous pixels for the final result: */ if (height - top < TS + 4) mrow = height - top + 2; if (width - left < TS + 4) mcol = width - left + 2; for (row = MIN(top, 8); row < mrow - 8; row++) for (col = MIN(left, 8); col < mcol - 8; col++) { for (d = 0; d < ndir; d++) for (hm[d] = 0, v = -2; v <= 2; v++) for (h = -2; h <= 2; h++) hm[d] += homo[d][row + v][col + h]; for (d = 0; d < ndir - 4; d++) if (hm[d] < hm[d + 4]) hm[d ] = 0; else if (hm[d] > hm[d + 4]) hm[d + 4] = 0; for (max = hm[0], d = 1; d < ndir; d++) if (max < hm[d]) max = hm[d]; max -= max >> 3; memset(avg, 0, sizeof avg); for (d = 0; d < ndir; d++) if (hm[d] >= max) { FORC3 avg[c] += rgb[d][row][col][c]; avg[3]++; } FORC3 image[(row + top)*width + col + left][c] = avg[c] / avg[3]; } } } free(buffer); } /* _OPENMP */ } /* Adaptive Homogeneity-Directed interpolation is based on the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. */ 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, dcraw_data *h) { int i, j, top, left, row, col, tr, tc, c, d, val, hm[2]; static const int dir[4] = { -1, 1, -TS, TS }; unsigned ldiff[2][4], abdiff[2][4], leps, abeps; ushort(*rgb)[TS][TS][3], (*rix)[3], (*pix)[4]; 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, val, d, tc, tr, i, j, ldiff, abdiff, leps, abeps, hm, buffer, rgb, lab, homo) #endif { cielab_INDI(0, 0, colors, rgb_cam); border_interpolate_INDI(height, width, image, filters, colors, 5, h); buffer = (char *) malloc(26 * TS * TS); 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]; cielab_INDI(rix[0], lix[0], colors, rgb_cam); } /* 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; gint64 *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 = (gint64 *) 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.20/po/0000775000175000017500000000000012410700171010171 500000000000000ufraw-0.20/po/ko.po0000644000175000017500000013167712410677406011115 00000000000000# Korean translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF 버퍼 길이 %d이(가) 매우 길어 무시됩니다." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "출력 프로파일 '%s'을(를) 이미지에 내장 실패." #, 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 "재널 증폭:" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilinear 보간법" #, fuzzy msgid "X-Trans interpolation" msgstr "보간법 없음" msgid "VNG interpolation" msgstr "VNG 보간법" msgid "VNG four color interpolation" msgstr "VNG four color 보간법" msgid "AHD interpolation" msgstr "AHD 보간법" msgid "PPG interpolation" msgstr "PPG 보간법" msgid "Bilinear interpolation" msgstr "Bilinear 보간법" msgid "No interpolation" msgstr "보간법 없음" #, fuzzy msgid "No color filter array" 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.20/po/ja.po0000644000175000017500000013115612410677406011066 00000000000000# Japanese translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIFバッファ長 %d, が長すぎるので無視します" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "出力プロファイル'%s'を画像に埋め込むのに失敗しました。" #, 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 "チャンネル乗数:" #, fuzzy msgid "Color filter array interpolation" msgstr "バイリニア補間" #, fuzzy msgid "X-Trans interpolation" msgstr "補間無し" msgid "VNG interpolation" msgstr "VNG補間" msgid "VNG four color interpolation" msgstr "VNG4色補間" msgid "AHD interpolation" msgstr "AHD補間" msgid "PPG interpolation" msgstr "PPG補間" msgid "Bilinear interpolation" msgstr "バイリニア補間" msgid "No interpolation" msgstr "補間無し" #, fuzzy msgid "No color filter array" msgstr "カラープロファイルの読込" 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.20/po/sv.po0000644000175000017500000007644012410677406011130 00000000000000# Swedish translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "" #, c-format msgid "Failed to embed output profile '%s' in image." 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 "" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilinjär interpolering" #, fuzzy msgid "X-Trans interpolation" msgstr "VNG-interpolering" msgid "VNG interpolation" msgstr "VNG-interpolering" msgid "VNG four color interpolation" msgstr "" msgid "AHD interpolation" msgstr "AHD-interpolering" msgid "PPG interpolation" msgstr "PPG-interpolering" msgid "Bilinear interpolation" msgstr "Bilinjär interpolering" #, fuzzy msgid "No interpolation" msgstr "VNG-interpolering" #, fuzzy msgid "No color filter array" msgstr "Läs in färgprofil" 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.20/po/it.po0000644000175000017500000013113612410677406011106 00000000000000# Italian translation of Ufraw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "Conversionedi.ufrawrcdaUFRaw-0.6oprecedente" #, 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 "EXIF buffer length %d, too long, ignored." msgstr "Il buffer EXIF troppo lungo (%d) e sar ignorato." #, 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 "" "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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Interpolazione Bilineare" #, fuzzy msgid "X-Trans interpolation" msgstr "Nessuna interpolazione" msgid "VNG interpolation" msgstr "Interpolazione VNG" msgid "VNG four color interpolation" msgstr "Interpolazione VNG a quattro colori" msgid "AHD interpolation" msgstr "Interpolazione AHD" msgid "PPG interpolation" msgstr "Interpolazione PPG" msgid "Bilinear interpolation" msgstr "Interpolazione Bilineare" msgid "No interpolation" msgstr "Nessuna interpolazione" #, fuzzy msgid "No color filter array" msgstr "Carica profilo colore" 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.20/po/nl.po0000644000175000017500000012741612410677406011111 00000000000000# Translation of UFRaw to Nederlands. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF buffer lengte %d, te lang, genegeerd." #, 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 "" "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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilineaire interpolatie" #, fuzzy msgid "X-Trans interpolation" msgstr "Geen interpolatie" msgid "VNG interpolation" msgstr "VNG interpolatie" msgid "VNG four color interpolation" msgstr "VNG vier kleuren interpolatie" msgid "AHD interpolation" msgstr "AHD interpolatie" msgid "PPG interpolation" msgstr "PPG interpolatie" msgid "Bilinear interpolation" msgstr "Bilineaire interpolatie" msgid "No interpolation" msgstr "Geen interpolatie" #, fuzzy msgid "No color filter array" msgstr "Inlezen kleurprofiel" 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.20/po/pl.po0000644000175000017500000012760712410677406011115 00000000000000# Polish translation for UFRaw # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\n" "PO-Revision-Date: 2014-09-15 21:08+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" "X-Generator: Poedit 1.5.5\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'?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "Opcja --silent działa tylko z 'ufraw-batch'" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "Opcja --silent działa tylko z 'ufraw-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" #, c-format msgid "Error reading from file '%s'." msgstr "Błąd odczytu 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" 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. Opcja działa tylko z '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|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 "--auto-crop Automatycznie wykadruj zdjęcie wynikowe.\n" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "--aspect-ratio X:Y Ustaw stosunek boków kadru.\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 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" 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" " Ta opcja działa tylko z '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 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." 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 "EXIF buffer length %d, too long, ignored." msgstr "Długość bufora EXIF %d za duża, zignorowano." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Błąd osadzenia profilu wyjściowego '%s' w pliku." #, 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" msgid "UFRaw Message" msgstr "Komunikat 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 "Color filter array interpolation" msgstr "" msgid "X-Trans interpolation" msgstr "" msgid "VNG interpolation" msgstr "Interpolacja VNG" msgid "VNG four color interpolation" msgstr "Interpolacja VNG (czterokolorowa)" msgid "AHD interpolation" msgstr "Interpolacja AHD" msgid "PPG interpolation" msgstr "Interpolacja PPG" msgid "Bilinear interpolation" msgstr "Interpolacja dwuliniowa" msgid "No interpolation" msgstr "Bez interpolacji" msgid "No color filter array" msgstr "" 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" 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.20/po/es.po0000644000175000017500000013204512410677406011101 00000000000000# Spanish translation of ufraw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 vlida en modo por lotes" #, fuzzy msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "la opcion --silent solo es vlida en modo por lotes" msgid "Raw images" msgstr "Imgenes 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 cmara" #. 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 versin 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 iluminacin 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 estndar" msgid "UFRaw " msgstr "UFRaw " msgid " - Unidentified Flying Raw converter for digital camera images.\n" msgstr "" " - Unidentified Flying Raw conversor para imgenes de cmara 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 previsualizacin para cada imagen RAW\n" "permitiendo al usuario ajustar los parmetros de la imagen antes de " "guardar.\n" "Si no se pasan imgenes RAW en la lnea de comando, UFRaw mostrar\n" "un dilogo de seleccion de archivos.\n" "Para procesar las imgenes sin preguntas (y sin previsualizacin) 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 imgenes RAW como\n" "archivos ID de ufraw. Los archivos ID contienen el nombre de archivo\n" "de una imagen RAW y los parmetros para manejar la imagen.\n" "Se puede utilizar tambin un archivo ID con la opcin:\n" msgid "" "--conf=ID-file Apply the parameters in ID-file to other raw images.\n" msgstr "" "--conf=archivo-ID Aplicar los parmetros del archivo ID a otras\n" " imgenes RAW\n" msgid "The rest of the options are separated into two groups.\n" msgstr "El resto de opciones estn separadas en dos grupos.\n" msgid "The options which are related to the image manipulation are:\n" msgstr "Las opciones relacionadas con la manipulacin 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 Normalizacin 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 cmara, 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 opcin --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 opcin --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 pelcula.\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 saturacin (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 reduccin 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 pxeles " "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" " Exposicin automtica o correccin de la exposicin 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 automtico 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 interpolacin 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 conversin 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 conversin 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 segn FACTOR (por defecto 1).\n" msgid "--size=SIZE Downsize max(height,width) to SIZE.\n" msgstr "--size=TAMAO Reduce el tamao max(alto, ancho) a TAMAO.\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|tambin|solo (por defecto: no).\n" msgid "--compression=VALUE JPEG compression (0-100, default 85).\n" msgstr "--compression=VALOR compresin 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] compresin 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 previsualizacin 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 segn el ajuste de la cmara, ANGLE " "grados\n" " en sentido horario, o no rotar la imagen (por defecto " "usar ajuste de cmara).\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 rotacin, 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 estndar.\n" msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "" "--darkframe=ARCHIVO Utilizar ARCHIVO para substraccin 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 ningn 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 configuracin $HOME/." "ufrawrc.\n" "Despus, si se ha especificado un archivo ID, se leen sus ajustes. " "Seguidamente,\n" "se utilizan los ajustes de la opcin --conf, ignorando loa archivos de\n" "entrada/salida del archivo ID.\n" "Finalmente se utilizan las opciones de la lnea de comandos. En modo por " "lotes,\n" "el segundo grupo de opciones NO se lee del archivo de configuracin.\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 nmero de versin y las opciones de\n" "compilacin 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 vlido para la opcin --%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 cdigo 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 vlido 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 vlido para una curva." #, c-format msgid "'%s' is not a valid interpolation option." msgstr "'%s' no es una opcin vlida de interpolacin." #, c-format msgid "'%s' is not a valid grayscale option." msgstr "'%s' no es una opcin vlida para escala de grises" #, fuzzy, c-format msgid "'%s' is not a valid grayscale-mixer option." msgstr "'%s' no es una opcin vlida para escala de grises" #, c-format msgid "'%s' is not a valid restore option." msgstr "'%s' no es una opcin vlida de restauracin." #, c-format msgid "'%s' is not a valid clip option." msgstr "'%s' no es una opcin vlida 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 vlida." #, 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 vlido." #, c-format msgid "'%s' is not a valid output type for embedded image." msgstr "'%s' no es un tipo de salida vlido 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 vlida para la imagen incrustada." #, c-format msgid "'%s' is not a valid rotate option." msgstr "'%s' no es una opcin vlida para rotar." #, c-format msgid "'%s' is not a valid create-id option." msgstr "'%s' no es una opcin vlida para 'create-id'." #, c-format msgid "'%s' is not a valid path." msgstr "'%s' no es una ruta vlida." msgid "cannot output more than one file to the same output" msgstr "no se puede sacar ms 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 tamao original (%d) es ms pequeo que el solicitado (%d)" #, c-format msgid "ppm thumb mismatch, height %d, width %d, while buffer %d." msgstr "" "desajuste en tamao 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 "EXIF buffer length %d, too long, ignored." msgstr "longitud del buffer EXIF %d, demasiado grande, ignorado." #, 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 "" "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 "Nmero 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 matemtico de aberraciones cromticas" msgid "Parameters" msgstr "Parmetros" msgid "Optical vignetting mathematical model" msgstr "Modelo matemtico de vieteo ptico" msgid "Lens distortion mathematical model" msgstr "Modelo matemtico de distorsin de lente" #. Lens geometry combobox msgid "Lens geometry:" msgstr "Geometra de lente:" msgid "The geometry of the lens used to make the shot" msgstr "La geometra 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 geometra destino para la imagen de salida" msgid "Camera" msgstr "Cmara" msgid "" "Search for camera using a pattern\n" "Format: [Maker, ][Model]" msgstr "" "Buscar una cmara usando un patrn\n" "Formato: [Fabricante, ][Modelo]" msgid "Choose camera from complete list" msgstr "Elegir cmara 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 patrn\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 "Aberracin cromtica lateral" msgid "Optical vignetting" msgstr "Vieteo ptico" msgid "Lens distortion" msgstr "Distorsion de lente" msgid "Lens geometry" msgstr "Geometra 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 ms 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 ms 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 "tamao %dx%d, zoom %2.f%%" #, c-format msgid "size %dx%d, scale 1/%d" msgstr "tamao %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 previsualizacin" 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 ms 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 pelcula 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" "Tambin crear archivo ID" msgid "" "\n" "Create only ID file" msgstr "" "\n" "Slo 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/Subexposicin" msgid "Configuration" msgstr "Configuracin" msgid "Save configuration" msgstr "Guardar configuracin" 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 cmaras digitales.\n" "UFRaw se apoya en Digital Camera Raw (DCRaw)\n" "para el codificado de las imgenes RAW.\n" "\n" "Autor: Udi Fuchs\n" "Pgina 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 "Logartmica" msgid "Hot pixels: " msgstr "Pxeles calientes: " msgid "mark" msgstr "marca" msgid "Hot pixel sensitivity" msgstr "Sensibilidad a pxeles calientes" msgid "Reset hot pixel sensitivity" msgstr "Reiniciar sensibilidad a pxeles 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 (mximo)" msgid "Saturation histogram" msgstr "Histograma de saturacin" msgid "Average:" msgstr "Media:" msgid "Std. deviation:" msgstr "Desv. estndar:" 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 " "cmara.\n" "Comprueba la pgina web de UFRaw para ms informacin sobre cmo conseguir " "que tu cmara 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 previsualizacin para aplicar balance de blancos " "puntual" msgid "Chan. multipliers:" msgstr "Multiplic. de canal:" #, fuzzy msgid "Color filter array interpolation" msgstr "Interpolacin bilineal" #, fuzzy msgid "X-Trans interpolation" msgstr "Sin interpolacin" msgid "VNG interpolation" msgstr "Interpolacin VNG" msgid "VNG four color interpolation" msgstr "Interpolacin VNG de cuatro colores" msgid "AHD interpolation" msgstr "Interpolacin AHD" msgid "PPG interpolation" msgstr "Interpolacin PPG" msgid "Bilinear interpolation" msgstr "Interpolacin bilineal" msgid "No interpolation" msgstr "Sin interpolacin" #, fuzzy msgid "No color filter array" msgstr "Cargar perfil de color" msgid "Apply color smoothing" msgstr "Aplicar suavizado de color" msgid "Denoise" msgstr "Reduccin de ruido" msgid "Threshold for wavelet denoising" msgstr "Umbral para reduccin de ruido" msgid "Reset denoise threshold to default" msgstr "Reiniciar umbral de reduccin 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 previsualizacin 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 "Correccin 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 correccin 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 "Colorimtrico relativo" msgid "Saturation" msgstr "Saturacin" msgid "Absolute colorimetric" msgstr "Colorimtrico 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 saturacin 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 regin de recorte" msgid "Aspect ratio:" msgstr "Razn 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 "" "Razn de aspecto de area de recorte.\n" "Se puede introducir en notacin decimal (1.273)\n" "o como razn de aspecto de dos nmeros (14:11)" msgid "Shrink factor" msgstr "Factor de encogido" msgid "Width" msgstr "Ancho" msgid "Height" msgstr "Alto" msgid "Orientation:" msgstr "Orientacin:" msgid "Rotation" msgstr "Rotacin" 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 compresin JPEG" msgid "JPEG progressive encoding" msgstr "Codificado progresivo JPEG" msgid "TIFF lossless Compress" msgstr "TIFF comprimido sin prdida" 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 "Tambin" msgid "Only" msgstr "Solo" msgid "Save image defaults " msgstr "Guardar valores por defecto para imgenes" 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 parmetros de salida en esta ventana son siempre guardados." msgid "Never again" msgstr "Nunca ms" msgid "Always" msgstr "Siempre" msgid "Just this once" msgstr "Slo 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 cmara" msgid "Camera model" msgstr "Modelo de la cmara" msgid "Timestamp" msgstr "Marca de tiempo" msgid "Shutter time" msgstr "Tiempo de exposicin" 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 "Atencin: Los datos EXIF no se enviarn a la salida" #, c-format msgid "%s - UFRaw" msgstr "%s - UFRaw " msgid "Spot values:" msgstr "Valores de punto:" msgid "Exposure compensation in EV" msgstr "Compensacin de la exposicin en EV" msgid "Auto adjust exposure" msgstr "Auto ajustar exposicin" msgid "Reset exposure to default" msgstr "Restaurar exposicin al valor por defecto" msgid "Grayscale" msgstr "Escala de grises" #. Lens correction page msgid "Lens correction" msgstr "Correccin de lente" msgid "Base curve" msgstr "Curva base" msgid "Color management" msgstr "Gestin de color" msgid "Correct luminosity, saturation" msgstr "Corregir luminosidad, saturacin" 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 codificacin C" #, c-format msgid "Curve version is not supported" msgstr "Versin de la curva no soportada" #, c-format msgid "Invalid Nikon curve file '%s'" msgstr "Archivo de curva Nikon '%s' no vlido" #, 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 cmara, usando balance de blancos " "automtico\n" #, c-format msgid "--temperature and --green options override the --wb=%s option." msgstr "las opciones --temperature y --green anulan la opcin --wb=%s." #, c-format msgid "'%s' is not a valid white balance setting." msgstr "'%s' no es un valor vlido para el balance de blancos." msgid "Remote URI is not supported" msgstr "URI remotos no estn 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 tamao 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 da" #. 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 clido" #. 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 fro" msgid "Warm white fluorescent" msgstr "Fluorescente blanco clido" msgid "Daylight fluorescent" msgstr "Fluorescente de luz de da" 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 automtico)" 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 cmara" msgid "Auto WB" msgstr "Balance automtico" ufraw-0.20/po/Makefile.in.in0000644000175000017500000001767712123521566012615 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.20/po/ufraw.pot0000644000175000017500000006530212410677406012003 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "" #, c-format msgid "Failed to embed output profile '%s' in image." 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 "Color filter array interpolation" msgstr "" msgid "X-Trans interpolation" msgstr "" msgid "VNG interpolation" msgstr "" msgid "VNG four color interpolation" msgstr "" msgid "AHD interpolation" msgstr "" msgid "PPG interpolation" msgstr "" msgid "Bilinear interpolation" msgstr "" msgid "No interpolation" msgstr "" msgid "No color filter array" 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.20/po/zh_CN.po0000644000175000017500000012053212410677406011471 00000000000000# Translation of ufraw.pot to Simplified Chinese. # Copyright (C) 2009-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF缓冲区长度 %d, 太长,忽略。" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "无法在图像中嵌入输出配置文件 '%s' " #, 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 "通道倍增数:" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilinear 插值" #, fuzzy msgid "X-Trans interpolation" msgstr "不插值" msgid "VNG interpolation" msgstr "VNG 插值" msgid "VNG four color interpolation" msgstr "VNG 四色插值" msgid "AHD interpolation" msgstr "AHD 插值" msgid "PPG interpolation" msgstr "PPG 插值" msgid "Bilinear interpolation" msgstr "Bilinear 插值" msgid "No interpolation" msgstr "不插值" #, fuzzy msgid "No color filter array" 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 "黑色帧(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.20/po/pt.po0000644000175000017500000012663312410677406011123 00000000000000# Portuguese (Brazil) translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "Largura de buffer EXIF %d muito longo, ignorado." #, 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 "" "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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Interpolação bilinear" #, fuzzy msgid "X-Trans interpolation" msgstr "Sem interpolação" msgid "VNG interpolation" msgstr "Interpolação VNG" msgid "VNG four color interpolation" msgstr "Interpolação VNG de quatro cores" msgid "AHD interpolation" msgstr "Interpolação AHD" msgid "PPG interpolation" msgstr "Interpolação PPG" msgid "Bilinear interpolation" msgstr "Interpolação bilinear" msgid "No interpolation" msgstr "Sem interpolação" #, fuzzy msgid "No color filter array" msgstr "Carregar perfis de cor" 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.20/po/de.po0000644000175000017500000013434712410677406011071 00000000000000# German translation of UFRaw. # Copyright (C) 2006-2014 Udi Fuchs, Matthias Urlichs and Chris Leick. # This file is distributed under the same license as the ufraw package. # Chris Leick , 2009-2014. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.20\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-20 06:00+0200\n" "PO-Revision-Date: 2014-09-15 19:41+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?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "Die Option --silent ist nur mit »ufraw-batch« gültig" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "Die Option --silent ist nur mit »ufraw-batch« 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 Auswerten 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 Standardausgabe 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 wendet 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 Normalisierung 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 enthalten\n" " ist, wird benutzt. Setzt die Option --base-curve " "außer\n" " 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 kann\n" " jede Kurve sein, die vorher in das GUI geladen wurde.\n" " (Standard: linear)\n" msgid "" "--curve-file=file Use luminosity curve included in specified file.\n" " Overrides --curve option.\n" msgstr "" "--curve-file=Datei benutzt die Lichtstärkekurve, die in der angegebenen\n" " Datei enthalten ist, setzt die Option --curve außer\n" " 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" " stellt Details für negativen EV wieder her.\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\n" " 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" " Interpolationsalgorithmus, der benutzt werden soll\n" " (Standard: ahd)\n" msgid "--color-smoothing Apply color smoothing.\n" msgstr "--color-smoothing übernimmt Farbglättung.\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" " Grausstufen-Umwandlungsalgorithmus, der benutzt " "werden\n" " soll (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" " Graustufenmixerwerte, die benutzt werden sollen\n" " (Standard 1,1,1).\n" msgid "The options which are related to the final output are:\n" msgstr "Die Optionen, die zur endgültigen Ausgabe gehören, sind:\n" msgid "--shrink=FACTOR Shrink the image by FACTOR (default 1).\n" msgstr "--shrink=FAKTOR schrumpft das Bild um FAKTOR (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" " erstellt keine, eine zusätzliche oder nur die ID-" "Datei\n" " (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 bettet EXIF in Ausgabe ein (Standard: EXIF " "einbetten).\n" msgid "" "--[no]zip Enable [disable] TIFF zip compression (default " "nozip).\n" msgstr "" "--[no]zip schaltet [Ausschalten] der TIFF-ZIP-Komprimierung " "ein.\n" " (Standard: 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 entpackt das in der Raw-Datei eingebettete\n" " Vorschaubild, anstatt das Raw-Bild zu konvertieren.\n" " Diese Option ist nur mit »ufraw-batch« gültig.\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" " dreht das Bild auf die Einstellung der Kamera, um\n" " WINKEL Grad im Uhrzeigersinn oder nicht\n" " (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" " kürzt die Ausgabe auf den gegebenen Punktebereich\n" " relativ zum Raw-Bild nach der Drehung aber vor\n" " jeglicher Skalierung.\n" msgid "--auto-crop Crop the output automatically.\n" msgstr "--auto-crop kürzt die Ausgabe automatisch.\n" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "" "--aspect-ratio X:Y setzt das Seitenverhältnis des Kürzungsbereichs.\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 wendet keine Linsenkorrektur an oder versucht eine\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" " der Standardausgabe.\n" # http://astrofotografie.hohmann-edv.de/aufnahmetechniken/ # toucam.dunkelbildabzug.php msgid "--darkframe=FILE Use FILE for raw darkframe subtraction.\n" msgstr "--darkframe=DATEI benutzt DATEI für Dunkelbildabzug\n" msgid "" "--overwrite Overwrite existing files without asking (default no).\n" msgstr "" "--overwrite überschreibt existierende Dateien ohne Nachfrage\n" " (Standard: Nein).\n" msgid "--maximize-window Force window to be maximized.\n" msgstr "--maximize-window erzwingt Maximierung des Fensters\n" msgid "" "--silent Do not display any messages during conversion. This\n" " option is only valid with 'ufraw-batch'.\n" msgstr "" "--silent zeigt während der Stapelkonvertierung keine " "Nachrichten\n" " an. Diese Option ist nur zusammen mit »ufraw-batch«\n" " gültig.\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 beendet sich.\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." msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch ist missbilligt. Benutzen Sie stattdessen »ufraw-batch«." #, c-format msgid "getopt returned character code 0%o ??" msgstr "Getopt gab den Zeichenkode 0%o zurück?" #, c-format msgid "failed to load curve from %s, too many configured base curves" msgstr "" "Laden der Kurve von %s fehlgeschlagen, zu viele konfigurierte Basiskurven" #, c-format msgid "failed to load curve from %s" msgstr "Laden der Kurve von %s 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 "Laden der Kurve von %s 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 gebaut." msgid "ufraw was build without JPEG support." msgstr "UFRaw wurde ohne JPEG-Unterstützung gebaut." msgid "ufraw was build without PNG support." msgstr "ufraw wurde ohne PNG-Unterstützung gebaut." #, 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 gleichen 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)" # http://de.wikipedia.org/wiki/Portable_Pixmap #, 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 zugewiesen werden" #. Create the "background" layer to hold the image... msgid "Background" msgstr "Hintergrund" #, c-format msgid "EXIF buffer length %d, too long, ignored." msgstr "EXIF-Pufferlänge %d zu lang, ignoriert" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Einbetten von Ausgabeprofil »%s« in Bild fehlgeschlagen" #, 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" msgid "UFRaw Message" msgstr "UFRaw-Nachricht" 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" "ID-Datei zusätzlich 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 "Color filter array interpolation" msgstr "Farbfilterfeld-Interpolation" msgid "X-Trans interpolation" msgstr "X-Trans-Interpolation" msgid "VNG interpolation" msgstr "VNG-Interpolation" msgid "VNG four color interpolation" msgstr "VNG-Vierfarbinterpolation" msgid "AHD interpolation" msgstr "AHD-Interpolation" msgid "PPG interpolation" msgstr "PPG-Interpolation" msgid "Bilinear interpolation" msgstr "Bilineare Interpolation" msgid "No interpolation" msgstr "Keine Interpolation" msgid "No color filter array" msgstr "Kein Farbfilterfeld" 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 zur Farbtonauswahl einen Punkt auf dem Vorschaubild." 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 und 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" 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 Schnittbereich 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 "" "Die Optionen --temperature- und --green ü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.20/po/zh_TW.po0000644000175000017500000012435312410677406011530 00000000000000# Traditional Chinese translation of UFRaw. # Copyright (C) 2010-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF 緩衝區長度 %d 太長,已忽略。" #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "無法在影像中嵌入輸出設定檔 '%s'。" #, 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 "顏色頻道增幅數:" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilinear 插值" #, fuzzy msgid "X-Trans interpolation" msgstr "不插值" msgid "VNG interpolation" msgstr "VNG 插值" msgid "VNG four color interpolation" msgstr "VNG 四色插值" msgid "AHD interpolation" msgstr "AHD 插值" msgid "PPG interpolation" msgstr "PPG 插值" msgid "Bilinear interpolation" msgstr "Bilinear 插值" msgid "No interpolation" msgstr "不插值" #, fuzzy msgid "No color filter array" 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 "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.20/po/ca.po0000644000175000017500000013425512410677406011062 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-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "La longitud %d, del buffer EXIF és massa gran, s'ignorarà." #, 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 "" "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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Interpolació bilineal" #, fuzzy msgid "X-Trans interpolation" msgstr "Sense interpolació" msgid "VNG interpolation" msgstr "Interpolació VNG" msgid "VNG four color interpolation" msgstr "Interpolació VNG de quatre colors" msgid "AHD interpolation" msgstr "Interpolació AHD" msgid "PPG interpolation" msgstr "Interpolació PPG" msgid "Bilinear interpolation" msgstr "Interpolació bilineal" msgid "No interpolation" msgstr "Sense interpolació" #, fuzzy msgid "No color filter array" msgstr "Carrega el perfil de color" 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.20/po/ru.po0000644000175000017500000016300512410677406011120 00000000000000# Russian translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "Буфер EXIF длиной %d слишком велик, проигнорирован." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Невозможно встроить профиль вывода '%s' в изображение." #, 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 "Множ. каналов:" #, fuzzy msgid "Color filter array interpolation" msgstr "Билинейная интерполяция" #, fuzzy msgid "X-Trans interpolation" msgstr "Без интерполяции" msgid "VNG interpolation" msgstr "Интерполяция VNG" msgid "VNG four color interpolation" msgstr "Интерполяция VNG для 4-х цветов" msgid "AHD interpolation" msgstr "Интерполяция AHD" msgid "PPG interpolation" msgstr "Интерполяция PPG" msgid "Bilinear interpolation" msgstr "Билинейная интерполяция" msgid "No interpolation" msgstr "Без интерполяции" #, fuzzy msgid "No color filter array" 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.20/po/sr@latin.po0000644000175000017500000013157012410677406012250 00000000000000# Serbian translation of UFRaw # Copyright (C) 2008-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF bafera je prevelik (%d). Ignorišem." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Nije uspelo umetanje izlaznog profila „%s“ u sliku." #, 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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Dvolinearna interpolacija" #, fuzzy msgid "X-Trans interpolation" msgstr "Bez interpolacije" msgid "VNG interpolation" msgstr "VNG interpolacija" msgid "VNG four color interpolation" msgstr "VNG četvorobojna interpolacija" msgid "AHD interpolation" msgstr "AHD interpolacija" msgid "PPG interpolation" msgstr "PPG interpolacija" msgid "Bilinear interpolation" msgstr "Dvolinearna interpolacija" msgid "No interpolation" msgstr "Bez interpolacije" #, fuzzy msgid "No color filter array" msgstr "Učitaj profil boja" 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.20/po/fr.po0000644000175000017500000013404712410677406011105 00000000000000# French translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\n" "PO-Revision-Date: 2014-09-16 23:33+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" "X-Generator: Poedit 1.5.4\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 "EXIF buffer length %d, too long, ignored." msgstr "Longueur du tampon EXIF %d, trop longue, ignorée." #, 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 "" "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 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 "Color filter array interpolation" msgstr "Matrice d'interpolation des couleurs" msgid "X-Trans interpolation" msgstr "Interpolation X-Trans" msgid "VNG interpolation" msgstr "Interpolation VNG" msgid "VNG four color interpolation" msgstr "Interpolation VNG 4 couleurs" msgid "AHD interpolation" msgstr "Interpolation AHD" msgid "PPG interpolation" msgstr "Interpolation PPG" msgid "Bilinear interpolation" msgstr "Interpolation bilinéaire" msgid "No interpolation" msgstr "Pas d'interpolation" msgid "No color filter array" msgstr "Pas de matrice d'interpolation des couleurs" 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.20/po/sr.po0000644000175000017500000015702312410677406011121 00000000000000# Serbian translation of UFRaw # Copyright (C) 2008-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF бафера је превелик (%d). Игноришем." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Није успело уметање излазног профила „%s“ у слику." #, 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 "Множиоци канала:" #, fuzzy msgid "Color filter array interpolation" msgstr "Дволинеарна интерполација" #, fuzzy msgid "X-Trans interpolation" msgstr "Без интерполације" msgid "VNG interpolation" msgstr "VNG интерполација" msgid "VNG four color interpolation" msgstr "VNG четворобојна интерполација" msgid "AHD interpolation" msgstr "AHD интерполација" msgid "PPG interpolation" msgstr "PPG интерполација" msgid "Bilinear interpolation" msgstr "Дволинеарна интерполација" msgid "No interpolation" msgstr "Без интерполације" #, fuzzy msgid "No color filter array" 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.20/po/POTFILES.in0000664000175000017500000000055611341111271011673 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.20/po/cs.po0000644000175000017500000013156312410677406011103 00000000000000# Czech translation for UFRaw package. # Copyright (C) 2006-2014 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # # Milan Knizek , 2007-2011, 2014. msgid "" msgstr "" "Project-Id-Version: UFRaw 0.19\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-20 06:00+0200\n" "PO-Revision-Date: 2014-09-18 15:27+0200\n" "Last-Translator: Milan Knizek \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" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\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'?" msgid "The --silent option is only valid with 'ufraw-batch'" msgstr "Volba --silent je platná pouze při použití 'ufraw-batch'" msgid "The --embedded-image option is only valid with 'ufraw-batch'" msgstr "Volba --embedded-image je platná pouze při použití 'ufraw-batch'" 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" #, c-format msgid "Error reading from file '%s'." msgstr "Chyba při čtení ze 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" 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. Tato volba\n" " je platná pouze při použití '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|Ú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 "--auto-crop Automaticky oříznout výstup.\n" msgid "--aspect-ratio X:Y Set crop area aspect ratio.\n" msgstr "--aspect-ratio X:Y Nastavit poměr stran pro oblast ořezu.\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 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" 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 konverze. Tato\n" " volba je platná pouze při použití '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 "" "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." msgid "--batch is obsolete. Use 'ufraw-batch' instead." msgstr "--batch je zastaralá volba. Použijte namísto toho '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 "EXIF buffer length %d, too long, ignored." msgstr "Délka %d bufferu EXIF příliš dlouhá, ignorováno." #, 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 "" "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ů" msgid "UFRaw Message" msgstr "UFRaw zpráva" 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 "Color filter array interpolation" msgstr "Interpolace barev (CFA)" msgid "X-Trans interpolation" msgstr "Interpolace X-Trans" msgid "VNG interpolation" msgstr "VNG interpolace" msgid "VNG four color interpolation" msgstr "VNG Interpolace čtyř barev" msgid "AHD interpolation" msgstr "AHD interpolace" msgid "PPG interpolation" msgstr "PPG interpolace" msgid "Bilinear interpolation" msgstr "Bilineární interpolace" msgid "No interpolation" msgstr "Žádná interpolace" msgid "No color filter array" msgstr "Chybí CFA" 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." msgid "Reset the crop area" msgstr "Obnovit oblast ořezu" 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.20/po/da.po0000644000175000017500000012762112410677406011062 00000000000000# Danish translation for UFRaw. # Copyright (C) 2006-2014 Udi Fuchs. # This file is distributed under the same license as the UFRaw package. # Niels Kristian Bech Jensen , 2006-2014. # msgid "" msgstr "" "Project-Id-Version: UFRaw 0.20\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-20 06:00+0200\n" "PO-Revision-Date: 2014-08-25 17:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF-buffer længde %d, for lang, ignoreret." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Fejl ved indlejring af uddataprofil '%s' i billede." #, 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 "Color filter array interpolation" msgstr "Farvefilterinterpolation" msgid "X-Trans interpolation" msgstr "X-Trans-interpolation" msgid "VNG interpolation" msgstr "VNG-interpolation" msgid "VNG four color interpolation" msgstr "VNG firfarveinterpolation" msgid "AHD interpolation" msgstr "AHD-interpolation" msgid "PPG interpolation" msgstr "PPG-interpolation" msgid "Bilinear interpolation" msgstr "Bilineær interpolation" msgid "No interpolation" msgstr "Ingen interpolation" msgid "No color filter array" msgstr "Intet farvefilter" 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.20/po/nb.po0000644000175000017500000013040112410677406011063 00000000000000# Norwegian Bokmål translation for UFRaw. # Copyright (C) 2006-2014 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: 2014-09-20 06:00+0200\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 "EXIF buffer length %d, too long, ignored." msgstr "EXIF-buffer med lengde %d er for lang, ignorert." #, c-format msgid "Failed to embed output profile '%s' in image." msgstr "Feil ved inkludering av utdataprofilen «%s» i bildet." #, 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:" #, fuzzy msgid "Color filter array interpolation" msgstr "Bilineær interpolasjon" #, fuzzy msgid "X-Trans interpolation" msgstr "Ingen interpolasjon" msgid "VNG interpolation" msgstr "VNG-interpolasjon" msgid "VNG four color interpolation" msgstr "VNG firefargers interpolasjon" msgid "AHD interpolation" msgstr "AHD-interpolasjon" msgid "PPG interpolation" msgstr "PPG-interpolasjon" msgid "Bilinear interpolation" msgstr "Bilineær interpolasjon" msgid "No interpolation" msgstr "Ingen interpolasjon" #, fuzzy msgid "No color filter array" msgstr "Les inn fargeprofil" 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.20/ufraw.pod0000644000175000017500000002526612401246236011343 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 color filter array 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.20/iccjpeg.h0000644000175000017500000000547712112232012011254 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.20/uf_glib.h0000644000175000017500000000264212303017427011263 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_glib.h - glib compatibility header * Copyright 2004-2014 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.20/nikon_curve.c0000644000175000017500000023222712401246236012176 00000000000000/*************************************************** nikon_curve.c - read Nikon NTC/NCV files Copyright 2004-2014 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.20/missing0000755000175000017500000002415212057543462011113 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.20/config.sub0000755000175000017500000010532712057543462011503 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.20/ufraw_writer.c0000644000175000017500000010417712401246236012376 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_writer.c - functions to output image files in different formats. * Copyright 2004-2014 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 #ifdef HAVE_LCMS2 #include #else #include typedef DWORD cmsUInt32Number; static LCMSBOOL cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number *BytesNeeded) { size_t _BytesNeeded; LCMSBOOL retval; retval = _cmsSaveProfileToMem(hProfile, MemPtr, &_BytesNeeded); if (BytesNeeded) *(BytesNeeded) = (cmsUInt32Number) _BytesNeeded; return retval; } #endif #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 volatile grayscaleMode = uf->conf->grayscaleMode != grayscale_none || uf->colors == 1; 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_ADOBE_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(); cmsUInt32Number 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(); cmsUInt32Number 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(); cmsUInt32Number 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.20/ufraw_ui.h0000644000175000017500000001651712303017427011503 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_ui.h - Common definitions for UFRaw's GUI. * Copyright 2004-2014 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.20/dcraw.cc0000644000175000017500000117072212401246236011121 00000000000000/* dcraw.cc - Dave Coffin's raw photo decoder - C++ adaptation Copyright 1997-2014 by Dave Coffin, dcoffin a cybercom o net Copyright 2004-2014 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.467 $ $Date: 2014/07/03 21:19:24 $ */ #ifdef HAVE_CONFIG_H /*For UFRaw config system - NKBJ*/ #include "config.h" #endif extern "C" { #include "uf_progress.h" } #define DCRAW_VERSION "9.22" #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__ #pragma comment(lib, "ws2_32.lib") #endif #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 #ifdef HAVE_LCMS2 #include /* Support color profiles */ #else #include #endif #endif #ifndef DCRAW_NOMAIN #ifdef LOCALEDIR #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 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 }; 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, tag_21a; int black, split_col, black_col, split_row, black_row; 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 } }; if (filters == 1) return filter[(row+top_margin)&15][(col+left_margin)&15]; if (filters == 9) return xtrans[(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 HAVE_STRCASESTR char *strcasestr (char *haystack, const char *needle) { char *c; for (c = haystack; *c; c++) if (!strncasecmp(c, needle, strlen(needle))) 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)) #if defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR < 4 swab ((char *) pixel, (char *) pixel, count*2); #else swab ((const char *) pixel, (char *) pixel, count*2); #endif } void CLASS cubic_spline (const int *x_, const int *y_, const int len) { float **A, *b, *c, *d, *x, *y; int i, j; A = (float **) calloc (((2*len + 4)*sizeof **A + sizeof *A), 2*len); if (!A) return; A[0] = (float *) (A + 2*len); for (i = 1; i < 2*len; i++) A[i] = A[0] + 2*len*i; y = len + (x = i + (d = i + (c = i + (b = A[0] + i*i)))); for (i = 0; i < len; i++) { x[i] = x_[i] / 65535.0; y[i] = y_[i] / 65535.0; } for (i = len-1; i > 0; i--) { b[i] = (y[i] - y[i-1]) / (x[i] - x[i-1]); d[i-1] = x[i] - x[i-1]; } for (i = 1; i < len-1; i++) { A[i][i] = 2 * (d[i-1] + d[i]); if (i > 1) { A[i][i-1] = d[i-1]; A[i-1][i] = d[i-1]; } A[i][len-1] = 6 * (b[i+1] - b[i]); } for(i = 1; i < len-2; i++) { float v = A[i+1][i] / A[i][i]; for(j = 1; j <= len-1; j++) A[i+1][j] -= v * A[i][j]; } for(i = len-2; i > 0; i--) { float acc = 0; for(j = i; j <= len-2; j++) acc += A[i][j]*c[j]; c[i] = (A[i][len-1] - acc) / A[i][i]; } for (i = 0; i < 0x10000; i++) { float x_out = (float)(i / 65535.0); float y_out = 0; for (j = 0; j < len-1; j++) { if (x[j] <= x_out && x_out <= x[j+1]) { float v = x_out - x[j]; y_out = y[j] + ((y[j+1] - y[j]) / d[j] - (2 * d[j] * c[j] + c[j+1] * d[j])/6) * v + (c[j] * 0.5) * v*v + ((c[j+1] - c[j]) / (6 * d[j])) * v*v*v; } } curve[i] = y_out < 0.0 ? 0 : (y_out >= 1.0 ? 65535 : (ushort)(y_out * 65535.0 + 0.5)); } free (A); } 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 } }; unsigned 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; } 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; unsigned c; if (nbits > 25) return 0; if (nbits < 0) return bitbuf = vbits = reset = 0; if (nbits == 0 || vbits < 0) return 0; while (!reset && vbits < nbits && (c = fgetc(ifp)) != (unsigned) 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]; unsigned ret=1, i; fseek (ifp, 0, SEEK_SET); fread (test, 1, sizeof test, ifp); for (i=540; i < 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; if (jh->clrs > 6 || !jh->huff[0]) return 0; 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; if (!huff) longjmp(failure, 2); 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; if (jh.wide < 1 || jh.high < 1 || jh.clrs < 1 || jh.bits < 1) longjmp (failure, 2); 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 > raw_height) longjmp (failure, 3); if ((unsigned) row < raw_height) 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) || jh.clrs < 4) 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; jrow < (unsigned) 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() { unsigned i; int bits; 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 < sizeof table / 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() { unsigned i, nz; char tail[424]; fseek (ifp, -sizeof tail, SEEK_END); fread (tail, 1, sizeof tail, ifp); for (nz=i=0; i < 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, 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]; int wide, high, y, x, c, rend, cend, row, col; float *mrow, num, mult[4]; read_shorts (head, 8); if (head[2] * head[3] * head[4] * head[5] == 0) return; wide = head[2] / head[4] + (head[2] % head[4] != 0); high = head[3] / head[5] + (head[3] % head[5] != 0); mrow = (float *) calloc (nc*wide, sizeof *mrow); merror (mrow, "phase_one_flat_field()"); for (y=0; y < high; 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 < head[1]+head[3]-head[5]; 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 < head[0]+head[2]-head[4]; 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]; int qmult_applied = 0, qlin_applied = 0; 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 || type == 137) /* 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; } } else if (tag == 0x41f && !qlin_applied) { /* Quadrant linearization */ ushort lc[2][2][16], ref[16]; int qr, qc; for (qr = 0; qr < 2; qr++) for (qc = 0; qc < 2; qc++) for (i = 0; i < 16; i++) lc[qr][qc][i] = (ushort)get4(); for (i = 0; i < 16; i++) { int v = 0; for (qr = 0; qr < 2; qr++) for (qc = 0; qc < 2; qc++) v += lc[qr][qc][i]; ref[i] = (v + 2) >> 2; } for (qr = 0; qr < 2; qr++) { for (qc = 0; qc < 2; qc++) { int cx[18], cf[18]; for (i = 0; i < 16; i++) { cx[1+i] = lc[qr][qc][i]; cf[1+i] = ref[i]; } cx[0] = cf[0] = 0; cx[17] = cf[17] = ((unsigned int)ref[15] * 65535) / lc[qr][qc][15]; cubic_spline(cx, cf, 18); for (row = (qr ? ph1.split_row : 0); (int) row < (qr ? raw_height : ph1.split_row); row++) for (col = (qc ? ph1.split_col : 0); (int) col < (qc ? raw_width : ph1.split_col); col++) RAW(row,col) = curve[RAW(row,col)]; } } qlin_applied = 1; } else if (tag == 0x41e && !qmult_applied) { /* Quadrant multipliers */ float qmult[2][2] = { { 1, 1 }, { 1, 1 } }; get4(); get4(); get4(); get4(); qmult[0][0] = 1.0 + getreal(11); get4(); get4(); get4(); get4(); get4(); qmult[0][1] = 1.0 + getreal(11); get4(); get4(); get4(); qmult[1][0] = 1.0 + getreal(11); get4(); get4(); get4(); qmult[1][1] = 1.0 + getreal(11); for (row=0; row < raw_height; row++) for (col=0; col < raw_width; col++) { i = qmult[(int) row >= ph1.split_row][(int) col >= ph1.split_col] * RAW(row,col); RAW(row,col) = LIM(i,0,65535); } qmult_applied = 1; } else if (tag == 0x431 && !qmult_applied) { /* Quadrant combined */ ushort lc[2][2][7], ref[7]; int qr, qc; for (i = 0; i < 7; i++) ref[i] = (ushort)get4(); for (qr = 0; qr < 2; qr++) for (qc = 0; qc < 2; qc++) for (i = 0; i < 7; i++) lc[qr][qc][i] = (ushort)get4(); for (qr = 0; qr < 2; qr++) { for (qc = 0; qc < 2; qc++) { int cx[9], cf[9]; for (i = 0; i < 7; i++) { cx[1+i] = ref[i]; cf[1+i] = ((unsigned int)ref[i] * lc[qr][qc][i]) / 10000; } cx[0] = cf[0] = 0; cx[8] = cf[8] = 65535; cubic_spline(cx, cf, 9); for (row = (qr ? ph1.split_row : 0); (int) row < (qr ? raw_height : ph1.split_row); row++) for (col = (qc ? ph1.split_col : 0); (int) col < (qc ? raw_width : ph1.split_col); col++) RAW(row,col) = curve[RAW(row,col)]; } } qmult_applied = 1; qlin_applied = 1; } 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 (*cblack)[2], (*rblack)[2]; pixel = (ushort *) calloc (raw_width*3 + 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(); cblack = (short (*)[2]) (offset + raw_height); fseek (ifp, ph1.black_col, SEEK_SET); if (ph1.black_col) read_shorts ((ushort *) cblack[0], raw_height*2); rblack = cblack + raw_height; fseek (ifp, ph1.black_row, SEEK_SET); if (ph1.black_row) read_shorts ((ushort *) rblack[0], raw_width*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 + cblack[row][col >= ph1.split_col] + rblack[col][row >= ph1.split_row]; 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 ((unsigned) 1 << ++bits < 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; if (!image) return; 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, rbits, bite, half, irow, row, col, val, i; UINT64 bitbuf=0; bwide = raw_width * tiff_bps / 8; bwide += bwide & load_flags >> 7; rbits = bwide * 8 - raw_width * 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 < raw_width; 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 & 1)) = 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 + 1) / 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; } void CLASS canon_rmf_load_raw() { int row, col, bits, orow, ocol, c; for (row=0; row < raw_height; row++) for (col=0; col < raw_width-2; col+=3) { bits = get4(); FORC3 { orow = row; if ((ocol = col+c-4) < 0) { ocol += raw_width; if ((orow -= 2) < 0) orow += raw_height; } RAW(orow,ocol) = curve[bits >> (10*c+2) & 0x3ff]; } } maximum = curve[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 < 3; i++) for (j=0; j < 386; j++) buf[c][i][j] = (buf[c][i][j] * 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); #if defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR < 4 swab ((char *) jpeg_buffer, (char *) jpeg_buffer, nbytes); #else swab ((const char *) jpeg_buffer, (char *) jpeg_buffer, nbytes); #endif 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 gamma_curve (double pwr, double ts, int mode, int imax); 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 cur[3][256]; double coeff[9], tot; if (meta_offset) { 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); cur[c][i] = tot*0xffff; } } order = sorder; } else { gamma_curve (1/2.4, 12.92, 1, 255); FORC3 memcpy (cur[c], curve, sizeof cur[0]); } 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] = cur[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; if (!image) return; 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]; 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-- && p++) *data++ ^= pad[(p-1) & 127] = pad[p & 127] ^ pad[(p+64) & 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[32770]; 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, sum=0; huff[0] = 15; 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; if ((sum += ljpeg_diff(huff)) >> 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+1); 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); } void CLASS samsung_load_raw() { int row, col, c, i, dir, op[4], len[4]; order = 0x4949; for (row=0; row < raw_height; row++) { fseek (ifp, strip_offset+row*4, SEEK_SET); fseek (ifp, data_offset+get4(), SEEK_SET); ph1_bits(-1); FORC4 len[c] = row < 2 ? 7:4; for (col=0; col < raw_width; col+=16) { dir = ph1_bits(1); FORC4 op[c] = ph1_bits(2); FORC4 switch (op[c]) { case 3: len[c] = ph1_bits(4); break; case 2: len[c]--; break; case 1: len[c]++; } for (c=0; c < 16; c+=2) { i = len[((c & 1) << 1) | (c >> 3)]; RAW(row,col+c) = ((signed) ph1_bits(i) << (32-i) >> (32-i)) + (dir ? RAW(row+(~c | -2),col+c) : col ? RAW(row,col+(c | -2)) : 128); if (c == 14) c = -1; } } } for (row=0; row < raw_height-1; row+=2) for (col=0; col < raw_width-1; col+=2) SWAP (RAW(row,col+1), RAW(row+1,col)); } void CLASS samsung2_load_raw() { static const ushort tab[14] = { 0x304,0x307,0x206,0x205,0x403,0x600,0x709, 0x80a,0x90b,0xa0c,0xa0d,0x501,0x408,0x402 }; ushort huff[1026], vpred[2][2] = {{0,0},{0,0}}, hpred[2]; int i, c, n, row, col, diff; huff[0] = 10; for (n=i=0; i < 14; i++) FORC(1024 >> (tab[i] >> 8)) huff[++n] = tab[i]; 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(); } } #define HOLE(row) ((holes >> (((row) - raw_height) & 7)) & 1) #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7)) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Warray-bounds" #endif /* 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 } }; unsigned pix; 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; 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 (ftell(ifp) + 12 >= (int) seg[1][1]) diff = 0; raw_image[pix] = pred[pix & 1] += diff; if (!(pix & 1) && HOLE(pix / raw_width)) pix += 2; } maximum = 0xff; } #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7)) #pragma GCC diagnostic pop #endif 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 (int size, unsigned code) { // TODO: The following static variable is not thread-safe static unsigned huff[1024]; struct decode *cur; int 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() { unsigned bwide, 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[512], 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_MINOR__ == 7) #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_MINOR__ == 7) #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 ((height/4), (width/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] > 0) 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=MAX(mask[m][0],0); row < MIN(mask[m][2],raw_height); row++) for (col=MAX(mask[m][1],0); col < MIN(mask[m][3],raw_width); 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]; cblack[4] = cblack[5] = cblack[6] = 0; } } 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 (float rgb_cam[3][4], double cam_xyz[4][3]) { double cam_rgb[4][3], inverse[4][3], num; unsigned 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 (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], balance[4], num; int c, i, j, k, sq, row, col, pass, 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] += BAYER2(row,col); BAYER2(row,col) = black + (BAYER2(row,col)-black)/2; 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 (pass=0; pass < 2; pass++) { for (raw_color = 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 (rgb_cam, cam_xyz); FORCC balance[c] = pre_mul[c] * gmb_cam[20][c]; for (sq=0; sq < NSQ; sq++) FORCC gmb_cam[sq][c] *= balance[c]; } 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, i, x, y, c, sum[8]; int val, dark, sat, ur, uc; 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[1] == 0) pre_mul[1] = 1; 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"); if (filters > 1000 && (cblack[4]+1)/2 == 1 && (cblack[5]+1)/2 == 1) { FORC4 cblack[FC(c/2,c%2)] += cblack[6 + c/2 % cblack[4] * cblack[5] + c%2 % cblack[5]]; cblack[4] = cblack[5] = 0; } size = iheight*iwidth; for (i=0; i < size*4; i++) { if (!(val = image[0][i])) continue; if (cblack[4] && cblack[5]) val -= cblack[6 + i/4 / iwidth % cblack[4] * cblack[5] + i/4 % iwidth % cblack[5]]; 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 > iheight-2) continue; fr -= ur; for (col=0; col < iwidth; col++) { uc = fc = (col - iwidth*0.5) * aber[c] + iwidth*0.5; if (uc > 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; if (filters == 9) { for (row=0; row < 3; row++) for (col=1; col < 4; col++) if (!(image[row*width+col][0] | image[row*width+col][2])) goto break2; break2: for ( ; row < height; row+=3) for (col=(col-1)%3+1; col < width-1; col+=3) { img = image + row*width+col; for (c=0; c < 3; c+=2) img[0][c] = (img[-1][c] + img[1][c]) >> 1; } } } 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) { mix_green = four_color_rgb ^ half_size; if (four_color_rgb | half_size) colors++; 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 (unsigned border) { unsigned 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 < height && 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]; unsigned c; int f, i, x, y, row, col, shift, color; ushort *pix; dcraw_message (DCRAW_VERBOSE,_("Bilinear interpolation...\n")); if (filters == 9) 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 ((int) 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; unsigned c; 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; lin_interpolate(); dcraw_message (DCRAW_VERBOSE,_("VNG interpolation...\n")); if (filters == 1) prow = pcol = 16; if (filters == 9) 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 ((int) 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 ((int) 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] = { 0, 0 }, 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); } } void CLASS cielab (ushort rgb[3], short lab[3]) { unsigned c, i, j, k; float r, xyz[3]; static float cbrt[0x10000], xyz_cam[3][4]; if (!rgb) { 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]; return; } xyz[0] = xyz[1] = xyz[2] = 0.5; FORCC { xyz[0] += xyz_cam[0][c] * rgb[c]; xyz[1] += xyz_cam[1][c] * rgb[c]; xyz[2] += xyz_cam[2][c] * rgb[c]; } xyz[0] = cbrt[CLIP((int) xyz[0])]; xyz[1] = cbrt[CLIP((int) xyz[1])]; xyz[2] = cbrt[CLIP((int) xyz[2])]; lab[0] = 64 * (116 * xyz[1] - 16); lab[1] = 64 * 500 * (xyz[0] - xyz[1]); lab[2] = 64 * 200 * (xyz[1] - xyz[2]); } #define TS 512 /* Tile Size */ #define fcol(row,col) xtrans[(row+6) % 6][(col+6) % 6] /* Frank Markesteijn's algorithm for Fuji X-Trans sensors */ void CLASS xtrans_interpolate (int passes) { int c, d, f, g, h, i, v, ng, row, col, top, left, mrow, mcol; int val, ndir, pass, hm[8], avg[4], color[3][8]; static const short orth[12] = { 1,0,0,1,-1,0,0,-1,1,0,0,1 }, patt[2][16] = { { 0,1,0,-1,2,0,-1,0,1,1,1,-1,0,0,0,0 }, { 0,1,0,-2,1,0,-2,0,1,1,-2,-2,1,-1,-1,1 } }, dir[4] = { 1,TS,TS+1,TS-1 }; short allhex[3][3][2][8], *hex; ushort min, max, sgrow = 0, sgcol = 0; ushort (*rgb)[TS][TS][3], (*rix)[3], (*pix)[4]; short (*lab) [TS][3], (*lix)[3]; float (*drv)[TS][TS], diff[6], tr; char (*homo)[TS][TS], *buffer; dcraw_message (DCRAW_VERBOSE,_("%d-pass X-Trans interpolation...\n"), passes); cielab (0,0); border_interpolate(6); ndir = 4 << (passes > 1); buffer = (char *) malloc (TS*TS*(ndir*11+6)); merror (buffer, "xtrans_interpolate()"); rgb = (ushort(*)[TS][TS][3]) buffer; lab = (short (*) [TS][3])(buffer + TS*TS*(ndir*6)); drv = (float (*)[TS][TS]) (buffer + TS*TS*(ndir*6+6)); homo = (char (*)[TS][TS]) (buffer + TS*TS*(ndir*10+6)); /* Map a green hexagon around each non-green pixel and vice versa: */ for (row=0; row < 3; row++) for (col=0; col < 3; col++) for (ng=d=0; d < 10; d+=2) { g = fcol(row,col) == 1; if (fcol(row+orth[d],col+orth[d+2]) == 1) ng=0; else ng++; if (ng == 4) { sgrow = row; sgcol = col; } if (ng == g+1) FORC(8) { v = orth[d ]*patt[g][c*2] + orth[d+1]*patt[g][c*2+1]; h = orth[d+2]*patt[g][c*2] + orth[d+3]*patt[g][c*2+1]; allhex[row][col][0][c^(g*2 & d)] = h + v*width; allhex[row][col][1][c^(g*2 & d)] = h + v*TS; } } /* Set green1 and green3 to the minimum and maximum allowed values: */ for (row=2; row < height-2; row++) for (min=~(max=0), col=2; col < width-2; col++) { if (fcol(row,col) == 1 && (min=~(max=0))) continue; pix = image + row*width + col; hex = allhex[row % 3][col % 3][0]; if (!max) FORC(6) { val = pix[hex[c]][1]; if (min > val) min = val; if (max < val) max = val; } pix[0][1] = min; pix[0][3] = max; switch ((row-sgrow) % 3) { case 1: if (row < height-3) { row++; col--; } break; case 2: if ((min=~(max=0)) && (col+=2) < width-3 && row > 2) row--; } } for (top=3; top < height-19; top += TS-16) for (left=3; left < width-19; left += TS-16) { mrow = MIN (top+TS, height-3); mcol = MIN (left+TS, width-3); for (row=top; row < mrow; row++) for (col=left; col < mcol; col++) memcpy (rgb[0][row-top][col-left], image[row*width+col], 6); FORC3 memcpy (rgb[c+1], rgb[0], sizeof *rgb); /* Interpolate green horizontally, vertically, and along both diagonals: */ for (row=top; row < mrow; row++) for (col=left; col < mcol; col++) { if ((f = fcol(row,col)) == 1) continue; pix = image + row*width + col; hex = allhex[row % 3][col % 3][0]; color[1][0] = 174 * (pix[ hex[1]][1] + pix[ hex[0]][1]) - 46 * (pix[2*hex[1]][1] + pix[2*hex[0]][1]); color[1][1] = 223 * pix[ hex[3]][1] + pix[ hex[2]][1] * 33 + 92 * (pix[ 0 ][f] - pix[ -hex[2]][f]); FORC(2) color[1][2+c] = 164 * pix[hex[4+c]][1] + 92 * pix[-2*hex[4+c]][1] + 33 * (2*pix[0][f] - pix[3*hex[4+c]][f] - pix[-3*hex[4+c]][f]); FORC4 rgb[c^!((row-sgrow) % 3)][row-top][col-left][1] = LIM(color[1][c] >> 8,pix[0][1],pix[0][3]); } for (pass=0; pass < passes; pass++) { if (pass == 1) memcpy (rgb+=4, buffer, 4*sizeof *rgb); /* Recalculate green from interpolated values of closer pixels: */ if (pass) { for (row=top+2; row < mrow-2; row++) for (col=left+2; col < mcol-2; col++) { if ((f = fcol(row,col)) == 1) continue; pix = image + row*width + col; hex = allhex[row % 3][col % 3][1]; for (d=3; d < 6; d++) { rix = &rgb[(d-2)^!((row-sgrow) % 3)][row-top][col-left]; val = rix[-2*hex[d]][1] + 2*rix[hex[d]][1] - rix[-2*hex[d]][f] - 2*rix[hex[d]][f] + 3*rix[0][f]; rix[0][1] = LIM(val/3,pix[0][1],pix[0][3]); } } } /* Interpolate red and blue values for solitary green pixels: */ for (row=(top-sgrow+4)/3*3+sgrow; row < mrow-2; row+=3) for (col=(left-sgcol+4)/3*3+sgcol; col < mcol-2; col+=3) { rix = &rgb[0][row-top][col-left]; h = fcol(row,col+1); memset (diff, 0, sizeof diff); for (i=1, d=0; d < 6; d++, i^=TS^1, h^=2) { for (c=0; c < 2; c++, h^=2) { g = 2*rix[0][1] - rix[i< 1) diff[d] += SQR (rix[i< 1 && (d & 1)) if (diff[d-1] < diff[d]) FORC(2) color[c*2][d] = color[c*2][d-1]; if (d < 2 || (d & 1)) { FORC(2) rix[0][c*2] = CLIP(color[c*2][d]/2); rix += TS*TS; } } } /* Interpolate red for blue pixels and vice versa: */ for (row=top+1; row < mrow-1; row++) for (col=left+1; col < mcol-1; col++) { if ((f = 2-fcol(row,col)) == 1) continue; rix = &rgb[0][row-top][col-left]; i = (row-sgrow) % 3 ? TS:1; for (d=0; d < 4; d++, rix += TS*TS) rix[0][f] = CLIP((rix[i][f] + rix[-i][f] + 2*rix[0][1] - rix[i][1] - rix[-i][1])/2); } /* Fill in red and blue for 2x2 blocks of green: */ for (row=top+2; row < mrow-2; row++) if ((row-sgrow) % 3) for (col=left+2; col < mcol-2; col++) if ((col-sgcol) % 3) { rix = &rgb[0][row-top][col-left]; hex = allhex[row % 3][col % 3][1]; for (d=0; d < ndir; d+=2, rix += TS*TS) if (hex[d] + hex[d+1]) { g = 3*rix[0][1] - 2*rix[hex[d]][1] - rix[hex[d+1]][1]; for (c=0; c < 4; c+=2) rix[0][c] = CLIP((g + 2*rix[hex[d]][c] + rix[hex[d+1]][c])/3); } else { g = 2*rix[0][1] - rix[hex[d]][1] - rix[hex[d+1]][1]; for (c=0; c < 4; c+=2) rix[0][c] = CLIP((g + rix[hex[d]][c] + rix[hex[d+1]][c])/2); } } } rgb = (ushort(*)[TS][TS][3]) buffer; mrow -= top; mcol -= left; /* Convert to CIELab and differentiate in all directions: */ for (d=0; d < ndir; d++) { for (row=2; row < mrow-2; row++) for (col=2; col < mcol-2; col++) cielab (rgb[d][row][col], lab[row][col]); for (f=dir[d & 3],row=3; row < mrow-3; row++) for (col=3; col < mcol-3; col++) { lix = &lab[row][col]; g = 2*lix[0][0] - lix[f][0] - lix[-f][0]; drv[d][row][col] = SQR(g) + SQR((2*lix[0][1] - lix[f][1] - lix[-f][1] + g*500/232)) + SQR((2*lix[0][2] - lix[f][2] - lix[-f][2] - g*500/580)); } } /* Build homogeneity maps from the derivatives: */ memset(homo, 0, ndir*TS*TS); for (row=4; row < mrow-4; row++) for (col=4; col < mcol-4; col++) { for (tr=FLT_MAX, d=0; d < ndir; d++) if (tr > drv[d][row][col]) tr = drv[d][row][col]; tr *= 8; for (d=0; d < ndir; d++) for (v=-1; v <= 1; v++) for (h=-1; h <= 1; h++) if (drv[d][row+v][col+h] <= tr) homo[d][row][col]++; } /* Average the most homogenous pixels for the final result: */ if (height-top < TS+4) mrow = height-top+2; if (width-left < TS+4) mcol = width-left+2; for (row = MIN(top,8); row < mrow-8; row++) for (col = MIN(left,8); col < mcol-8; col++) { for (d=0; d < ndir; d++) for (hm[d]=0, v=-2; v <= 2; v++) for (h=-2; h <= 2; h++) hm[d] += homo[d][row+v][col+h]; for (d=0; d < ndir-4; d++) if (hm[d] < hm[d+4]) hm[d ] = 0; else if (hm[d] > hm[d+4]) hm[d+4] = 0; for (max=hm[0],d=1; d < ndir; d++) if (max < hm[d]) max = hm[d]; max -= max >> 3; memset (avg, 0, sizeof avg); for (d=0; d < ndir; d++) if (hm[d] >= max) { FORC3 avg[c] += rgb[d][row][col][c]; avg[3]++; } FORC3 image[(row+top)*width+col+left][c] = avg[c]/avg[3]; } } free(buffer); } #undef fcol /* Adaptive Homogeneity-Directed interpolation is based on the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. */ void CLASS ahd_interpolate() { int i, j, top, left, row, col, tr, tc, c, d, val, hm[2]; static const int dir[4] = { -1, 1, -TS, TS }; unsigned ldiff[2][4], abdiff[2][4], leps, abeps; ushort (*rgb)[TS][TS][3], (*rix)[3], (*pix)[4]; short (*lab)[TS][TS][3], (*lix)[3]; char (*homo)[TS][TS], *buffer; dcraw_message (DCRAW_VERBOSE,_("AHD interpolation...\n")); cielab (0,0); border_interpolate(5); buffer = (char *) malloc (26*TS*TS); 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]; cielab (rix[0],lix[0]); } /* 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]; unsigned c, i, j, k; int pass, 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 < 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() { unsigned c, j; int clip=INT_MAX, row, col, i; 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; unsigned high, wide, mrow, mcol, row, col, kc, c, 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 * ("11124811248484"[*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 } }; unsigned offset=0, entries, tag, type, len, save, c; unsigned ver97=0, serial=0, i, 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)) < (unsigned) 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") || !strcmp (buf,"PENTAX ")) { base = ftell(ifp)-10; fseek (ifp, -2, SEEK_CUR); order = get2(); if (buf[0] == 'O') 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) FORC3 cam_mul[(c << 1 | c >> 1) & 3] = getreal(type); if (tag == 0xd && type == 7 && get2() == 0xaaaa) { for (c=i=2; (ushort) c != 0xbbbb && i < len; i++) c = c << 8 | fgetc(ifp); while ((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 != (unsigned) 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 || type == 13)) fseek (ifp, get4()+base, SEEK_SET); 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", "Aptus-II 7","","","Aptus-II 6","","","Aptus-II 10","Aptus-II 5", "","","","","Aptus-II 10R","Aptus-II 8","","Aptus-II 12","","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, i, j, c; int ifd, use_cm=0, cfa, ima_len=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 }; unsigned 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 >= sizeof tiff_ifd / 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: if ((i = get2())) filters = i; 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 28: case 29: case 30: cblack[tag-28] = get2(); cblack[3] = cblack[1]; break; case 36: case 37: case 38: cam_mul[tag-36] = 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 */ fseek (ifp, get4()+base, SEEK_SET); 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; if (tiff_ifd[ifd].bps > 12) break; load_raw = &CLASS packed_load_raw; load_flags = get4() ? 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 == 1) tiff_ifd[ifd].tile_width = tiff_ifd[ifd].tile_length = 0; 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; } if(len > 1000) len = 1000; /* 1000 SubIFDs are enough */ 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 33421: /* CFARepeatPatternDim */ if (get2() == 6 && get2() == 6) filters = 9; break; case 33422: /* CFAPattern */ if (filters == 9) { for (i=0; i < 6; i++) FORC(6) xtrans[i][c] = fgetc(ifp) & 3; break; } case 64777: /* Kodak P-series */ if ((plen=len) > 16) plen = 16; fread (cfa_pat, 1, plen, ifp); for (colors=cfa=i=0; i < plen && colors < 4; 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 40976: strip_offset = get4(); switch (tiff_ifd[ifd].comp) { case 32770: load_raw = &CLASS samsung_load_raw; break; case 32772: load_raw = &CLASS samsung2_load_raw; } 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 (filters == 9) break; 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]]; filters -= !filters; 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 */ cblack[4] = get2(); cblack[5] = get2(); if ((unsigned)(cblack[4] * cblack[5]) > sizeof cblack / sizeof *cblack - 6) cblack[4] = cblack[5] = 1; break; case 61450: cblack[4] = cblack[5] = MIN(sqrt(len),64); if (filters == UINT_MAX) filters = 0x94949494; case 50714: /* BlackLevel */ FORC ((unsigned)(cblack[4] * cblack[5])) cblack[6+c] = getreal(type); black = 0; break; case 50715: /* BlackLevelDeltaH */ case 50716: /* BlackLevelDeltaV */ for (num=i=0; i < len && i < 65536; 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 < 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 (cmatrix, 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() { unsigned i; int max_samp=0, raw=-1, thm=-1; struct jhead jh; thumb_misc = 16; if (thumb_offset) { fseek (ifp, thumb_offset, SEEK_SET); if (ljpeg_start (&jh, 1)) { if ((unsigned)jh.bits < 17 && (unsigned)jh.wide < 0x10000 && (unsigned)jh.high < 0x10000) { thumb_misc = jh.bits; thumb_width = jh.wide; thumb_height = jh.high; } } } for (i=0; i < 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 && (unsigned)tiff_ifd[i].bps < 33 && (unsigned)tiff_ifd[i].samples < 13 && 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 (!strncmp(make,"OLYMPUS",7) && tiff_ifd[raw].bytes*2 == raw_width*raw_height*3) load_flags = 24; 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; if (!strncmp(make,"OLYMPUS",7) && tiff_ifd[raw].bytes*7 > raw_width*raw_height) load_raw = &CLASS olympus_load_raw; } 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*3 == tiff_ifd[raw].bytes*2) { load_raw = &CLASS packed_load_raw; } 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 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: case 34892: break; default: is_raw = 0; } if (!dng_version) if ( (tiff_samples == 3 && tiff_ifd[raw].bytes && tiff_bps != 14 && (tiff_compress & -16) != 32768) || (tiff_bps == 8 && !strcasestr(make,"Kodak") && !strstr(model2,"DEBUG RAW"))) is_raw = 0; for (i=0; i < tiff_nifds; i++) if ((int) i != raw && tiff_ifd[i].samples == max_samp && tiff_ifd[i].bps > 0 && tiff_ifd[i].bps < 33 && ((unsigned)(tiff_ifd[i].width | tiff_ifd[i].height)) < 0x10000 && 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 depth) { 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 | depth) > 127) 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, depth+1); /* 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) { width = get4(); height = get4(); pixel_aspect = int_to_float(get4()); 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_col = data+base; break; case 0x224: ph1.split_row = data; break; case 0x225: ph1.black_row = 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, i, 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 == 0x131) { filters = 9; for (i=0; i < 6; i++) FORC(6) xtrans_abs[5-i][5-c] = fgetc(ifp) & 3; } else if (tag == 0x2ff0) { FORC4 cam_mul[c ^ 1] = get2(); } else if (tag == 0xc000) { c = order; order = 0x4949; if ((tag = get4()) > 10000) tag = get4(); width = tag; 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, 0); 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() { unsigned i, len, 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()) != (unsigned) 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() { unsigned len; int entries, img=0, off, 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; is_foveon = 1; } fseek (ifp, off+28, SEEK_SET); if (fgetc(ifp) == 0xff && fgetc(ifp) == 0xd8 && thumb_length < 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); } } /* 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; int 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 70D", 0, 0x3bc7, { 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } }, { "Canon EOS 100D", 0, 0x350f, { 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } }, { "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 700D", 0, 0x3c00, { 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 1200D", 0, 0x37c2, { 6461,-907,-882,-4300,12184,2378,-819,1944,5931 } }, { "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 C", 0, 0x3c4e, { 6847,-614,-1014,-4669,12737,2139,-1197,2488,6846 } }, { "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 C500", 853, 0, /* DJC */ { 17851,-10604,922,-7425,16662,763,-3660,3636,22278 } }, { "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 G16", 0, 0, { 8020,-2687,-682,-3704,11879,2052,-965,1921,5556 } }, { "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 S120", 0, 0, { 6961,-1685,-695,-4625,12945,1836,-1114,2152,5518 } }, { "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 A3300", 0, 0, /* DJC */ { 10826,-3654,-1023,-3215,11310,1906,0,999,4960 } }, { "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 S20Pro", 0, 0, { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } }, { "Fujifilm S20", 512, 0x3fff, { 11401,-4498,-1312,-5088,12751,2613,-838,1568,5941 } }, { "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 SL1000", 0, 0, { 11705,-4262,-1107,-2282,10791,1709,-555,1713,4945 } }, { "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 HS2", 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 HS50EXR", 0, 0, { 12085,-4727,-953,-3257,11489,2002,-511,2046,4592 } }, { "Fujifilm F900EXR", 0, 0, { 12085,-4727,-953,-3257,11489,2002,-511,2046,4592 } }, { "Fujifilm X100S", 0, 0, { 10592,-4262,-1008,-3514,11355,2465,-870,2025,6386 } }, { "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 X20", 0, 0, { 11768,-4971,-1133,-4904,12927,2183,-480,1723,4605 } }, { "Fujifilm X-Pro1", 0, 0, { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } }, { "Fujifilm X-A1", 0, 0, { 11086,-4555,-839,-3512,11310,2517,-815,1341,5940 } }, { "Fujifilm X-E1", 0, 0, { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } }, { "Fujifilm X-E2", 0, 0, { 8458,-2451,-855,-4597,12447,2407,-1475,2482,6526 } }, { "Fujifilm X-M1", 0, 0, { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } }, { "Fujifilm X-S1", 0, 0, { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } }, { "Fujifilm X-T1", 0, 0, { 8458,-2451,-855,-4597,12447,2407,-1475,2482,6526 } }, { "Fujifilm XF1", 0, 0, { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } }, { "Fujifilm XQ1", 0, 0, { 9252,-2704,-1064,-5893,14265,1717,-1101,2341,4349 } }, { "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 D3300", 150, 0, { 6988,-1384,-714,-5631,13410,2447,-1485,2204,7318 } }, { "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 D4S", 768, 0, { 8598,-2848,-857,-5618,13606,2195,-1002,1773,7137 } }, { "Nikon D4", 0, 0, { 8598,-2848,-857,-5618,13606,2195,-1002,1773,7137 } }, { "Nikon Df", 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, 0, { 8322,-3112,-1047,-6367,14342,2179,-988,1638,6394 } }, { "Nikon D5300", 600, 0, { 6988,-1384,-714,-5631,13410,2447,-1485,2204,7318 } }, { "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 D610", 0, 0, { 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, 0, { 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 D810", 596, 0, /* DJC */ { 6502,-2328,154,-4249,9943,4307,-1303,2538,8108 } }, { "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 E700", 0, 0x3dd, /* DJC */ { -3746,10611,1665,9621,-1734,2114,-2389,7082,3064,3406,6116,-244 } }, { "Nikon E800", 0, 0x3dd, /* DJC */ { -3746,10611,1665,9621,-1734,2114,-2389,7082,3064,3406,6116,-244 } }, { "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 A", 0, 0, { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } }, { "Nikon COOLPIX P330", 0, 0, { 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } }, { "Nikon COOLPIX P340", 200, 0, { 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } }, { "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 COOLPIX P7800", 200, 0, { 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } }, { "Nikon 1 V3", 200, 0, { 5958,-1559,-571,-4021,11453,2939,-634,1548,5087 } }, { "Nikon 1 J4", 200, 0, { 5958,-1559,-571,-4021,11453,2939,-634,1548,5087 } }, { "Nikon 1 S2", 200, 0, { 6612,-1342,-618,-3338,11055,2623,-174,1792,5075 } }, { "Nikon 1 V2", 0, 0, { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } }, { "Nikon 1 J3", 0, 0, { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } }, { "Nikon 1 AW1", 0, 0, { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } }, { "Nikon 1 ", 0, 0, /* J1, J2, S1, V1 */ { 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-P5", 0, 0, { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, { "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, 0xcf3, { 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-PL6", 0, 0, { 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-M10", 0, 0, { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, { "Olympus E-M1", 0, 0, { 7687,-1984,-606,-4327,11928,2721,-1381,2339,6452 } }, { "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 STYLUS1", 0, 0, { 8360,-2420,-880,-3928,12353,1739,-1381,2416,5173 } }, { "Olympus XZ-10", 0, 0, { 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } }, { "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 } }, { "OmniVision ov5647", 0, 0, /* DJC */ { 12782,-4059,-379,-478,9066,1413,1340,1513,5176 } }, { "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-3", 0, 0, { 7415,-2052,-721,-5186,12788,2682,-1446,2157,6773 } }, { "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", 15, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, { "Panasonic DMC-FZ4", 15, 0, { 13639,-5535,-1371,-1698,9633,2430,316,1152,4108 } }, { "Panasonic DMC-FZ50", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, { "Panasonic DMC-FZ7", 15, 0, { 11532,-4324,-1066,-2375,10847,1749,-564,1699,4351 } }, { "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-LF1", 15, 0, { 9379,-3267,-816,-3227,11560,1881,-926,1928,5340 } }, { "Leica C (Typ 112)", 15, 0, { 9379,-3267,-816,-3227,11560,1881,-926,1928,5340 } }, { "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", 15, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, { "Leica D-LUX 5", 15, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, { "Panasonic DMC-LX7", 15, 0, { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } }, { "Leica D-LUX 6", 15, 0, { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } }, { "Panasonic DMC-FZ1000", 15, 0, /* DJC */ { 5686,-2219,-68,-4143,9912,4232,-1244,2246,5917 } }, { "Panasonic DMC-FZ100", 15, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, { "Leica V-LUX 2", 15, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, { "Panasonic DMC-FZ150", 15, 0xfff, { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } }, { "Leica V-LUX 3", 15, 0xfff, { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } }, { "Panasonic DMC-FZ200", 15, 0xfff, { 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } }, { "Leica V-LUX 4", 15, 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", 15, 0xfff, { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } }, { "Panasonic DMC-G5", 15, 0xfff, { 7798,-2562,-740,-3879,11584,2613,-1055,2248,5434 } }, { "Panasonic DMC-G6", 15, 0xfff, { 8294,-2891,-651,-3869,11590,2595,-1183,2267,5352 } }, { "Panasonic DMC-GF1", 15, 0xf92, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, { "Panasonic DMC-GF2", 15, 0xfff, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, { "Panasonic DMC-GF3", 15, 0xfff, { 9051,-2468,-1204,-5212,13276,2121,-1197,2510,6890 } }, { "Panasonic DMC-GF5", 15, 0xfff, { 8228,-2945,-660,-3938,11792,2430,-1094,2278,5793 } }, { "Panasonic DMC-GF6", 15, 0, { 8130,-2801,-946,-3520,11289,2552,-1314,2511,5791 } }, { "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", 15, 0, { 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } }, { "Panasonic DMC-GH4", 15, 0, { 7122,-2108,-512,-3155,11201,2231,-541,1423,5045 } }, { "Panasonic DMC-GM1", 15, 0, { 6770,-1895,-744,-5232,13145,2303,-1664,2691,5703 } }, { "Panasonic DMC-GX1", 15, 0, { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } }, { "Panasonic DMC-GX7", 15, 0, { 7610,-2780,-576,-4614,12195,2733,-1375,2393,6490 } }, { "Panasonic DMC-TZ6", 15, 0, { 8607,-2822,-808,-3755,11930,2049,-820,2060,5224 } }, { "Panasonic DMC-ZS4", 15, 0, { 8607,-2822,-808,-3755,11930,2049,-820,2060,5224 } }, { "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, 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 EK-GN120", 0, 0, { 7557,-2522,-739,-4679,12949,1894,-840,1777,5311 } }, { "Samsung NX mini", 0, 0, { 5222,-1196,-550,-6540,14649,2009,-1666,2819,5657 } }, { "Samsung NX30", 0, 0, /* NX30, NX300 */ { 7557,-2522,-739,-4679,12949,1894,-840,1777,5311 } }, { "Samsung NX2000", 0, 0, { 7557,-2522,-739,-4679,12949,1894,-840,1777,5311 } }, { "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 NX1100", 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 GX20", 0, 0, /* copied from Pentax K20D */ { 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } }, { "Samsung S85", 0, 0, /* 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-RX100M2", 200, 0, { 6596,-2079,-562,-4782,13016,1933,-970,1581,5181 } }, { "Sony DSC-RX100", 200, 0, { 8651,-2754,-1057,-3464,12207,1373,-568,1398,4434 } }, { "Sony DSC-RX10", 200, 0, { 6679,-1825,-745,-5047,13256,1953,-1580,2422,5183 } }, { "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-A500", 128, 0xfeb, { 6046,-1127,-278,-5574,13076,2786,-691,1419,7625 } }, { "Sony DSLR-A5", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { "Sony DSLR-A700", 128, 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 ILCA-77M2", 128, 0, { 5991,-1732,-443,-4100,11989,2381,-704,1467,5992 } }, { "Sony ILCE-7S", 128, 0, { 5838,-1430,-246,-3497,11477,2297,-748,1885,5778 } }, { "Sony ILCE-7R", 128, 0, { 4913,-541,-202,-6130,13513,2906,-1564,2151,7183 } }, { "Sony ILCE-7", 128, 0, { 5271,-712,-347,-6153,13653,2763,-1601,2366,7242 } }, { "Sony ILCE", 128, 0, /* 3000, 5000, and 6000 */ { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } }, { "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-5T", 128, 0, { 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } }, { "Sony NEX-3N", 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-A58", 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]; unsigned i, j, k; sprintf (name, "%s %s", make, model); for (i=0; i < sizeof table / 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 (rgb_cam, 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 } }; unsigned 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() { static const 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 ushort canon[][11] = { { 1944, 1416, 0, 0, 48, 0 }, { 2144, 1560, 4, 8, 52, 2, 0, 0, 0, 25 }, { 2224, 1456, 48, 6, 0, 2 }, { 2376, 1728, 12, 6, 52, 2 }, { 2672, 1968, 12, 6, 44, 2 }, { 3152, 2068, 64, 12, 0, 0, 16 }, { 3160, 2344, 44, 12, 4, 4 }, { 3344, 2484, 4, 6, 52, 6 }, { 3516, 2328, 42, 14, 0, 0 }, { 3596, 2360, 74, 12, 0, 0 }, { 3744, 2784, 52, 12, 8, 12 }, { 3944, 2622, 30, 18, 6, 2 }, { 3948, 2622, 42, 18, 0, 2 }, { 3984, 2622, 76, 20, 0, 2, 14 }, { 4104, 3048, 48, 12, 24, 12 }, { 4116, 2178, 4, 2, 0, 0 }, { 4152, 2772, 192, 12, 0, 0 }, { 4160, 3124, 104, 11, 8, 65 }, { 4176, 3062, 96, 17, 8, 0, 0, 16, 0, 7, 0x49 }, { 4192, 3062, 96, 17, 24, 0, 0, 16, 0, 0, 0x49 }, { 4312, 2876, 22, 18, 0, 2 }, { 4352, 2874, 62, 18, 0, 0 }, { 4476, 2954, 90, 34, 0, 0 }, { 4480, 3348, 12, 10, 36, 12, 0, 0, 0, 18, 0x49 }, { 4480, 3366, 80, 50, 0, 0 }, { 4496, 3366, 80, 50, 12, 0 }, { 4832, 3204, 62, 26, 0, 0 }, { 4832, 3228, 62, 51, 0, 0 }, { 5108, 3349, 98, 13, 0, 0 }, { 5120, 3318, 142, 45, 62, 0 }, { 5280, 3528, 72, 52, 0, 0 }, { 5344, 3516, 142, 51, 0, 0 }, { 5344, 3584, 126,100, 0, 2 }, { 5360, 3516, 158, 51, 0, 0 }, { 5568, 3708, 72, 38, 0, 0 }, { 5712, 3774, 62, 20, 10, 2 }, { 5792, 3804, 158, 51, 0, 0 }, { 5920, 3950, 122, 80, 2, 0 }, }; static const struct { ushort id; char model[20]; } unique[] = { { 0x168, "EOS 10D" }, { 0x001, "EOS-1D" }, { 0x175, "EOS 20D" }, { 0x174, "EOS-1D Mark II" }, { 0x234, "EOS 30D" }, { 0x232, "EOS-1D Mark II N" }, { 0x190, "EOS 40D" }, { 0x169, "EOS-1D Mark III" }, { 0x261, "EOS 50D" }, { 0x281, "EOS-1D Mark IV" }, { 0x287, "EOS 60D" }, { 0x167, "EOS-1DS" }, { 0x325, "EOS 70D" }, { 0x170, "EOS 300D" }, { 0x188, "EOS-1Ds Mark II" }, { 0x176, "EOS 450D" }, { 0x215, "EOS-1Ds Mark III" }, { 0x189, "EOS 350D" }, { 0x324, "EOS-1D C" }, { 0x236, "EOS 400D" }, { 0x269, "EOS-1D X" }, { 0x252, "EOS 500D" }, { 0x213, "EOS 5D" }, { 0x270, "EOS 550D" }, { 0x218, "EOS 5D Mark II" }, { 0x286, "EOS 600D" }, { 0x285, "EOS 5D Mark III" }, { 0x301, "EOS 650D" }, { 0x302, "EOS 6D" }, { 0x326, "EOS 700D" }, { 0x250, "EOS 7D" }, { 0x254, "EOS 1000D" }, { 0x288, "EOS 1100D" }, { 0x327, "EOS 1200D" }, { 0x346, "EOS 100D" }, }; static const struct { unsigned fsize; ushort rw, rh; uchar lm, tm, rm, bm, lf, cf, max, flags; char make[10], model[20]; ushort offset; } table[] = { { 786432,1024, 768, 0, 0, 0, 0, 0,0x94,0,0,"AVT","F-080C",0 }, { 1447680,1392,1040, 0, 0, 0, 0, 0,0x94,0,0,"AVT","F-145C",0 }, { 1920000,1600,1200, 0, 0, 0, 0, 0,0x94,0,0,"AVT","F-201C",0 }, { 5067304,2588,1958, 0, 0, 0, 0, 0,0x94,0,0,"AVT","F-510C",0 }, { 5067316,2588,1958, 0, 0, 0, 0, 0,0x94,0,0,"AVT","F-510C",12 }, { 10134608,2588,1958, 0, 0, 0, 0, 9,0x94,0,0,"AVT","F-510C",0 }, { 10134620,2588,1958, 0, 0, 0, 0, 9,0x94,0,0,"AVT","F-510C",12 }, { 16157136,3272,2469, 0, 0, 0, 0, 9,0x94,0,0,"AVT","F-810C",0 }, { 15980544,3264,2448, 0, 0, 0, 0, 8,0x61,0,1,"AgfaPhoto","DC-833m",0 }, { 9631728,2532,1902, 0, 0, 0, 0,96,0x61,0,0,"Alcatel","5035D",0 }, { 2868726,1384,1036, 0, 0, 0, 0,64,0x49,0,8,"Baumer","TXG14",1078 }, { 5298000,2400,1766,12,12,44, 2,40,0x94,0,2,"Canon","PowerShot SD300",0 }, { 6553440,2664,1968, 4, 4,44, 4,40,0x94,0,2,"Canon","PowerShot A460",0 }, { 6573120,2672,1968,12, 8,44, 0,40,0x94,0,2,"Canon","PowerShot A610",0 }, { 6653280,2672,1992,10, 6,42, 2,40,0x94,0,2,"Canon","PowerShot A530",0 }, { 7710960,2888,2136,44, 8, 4, 0,40,0x94,0,2,"Canon","PowerShot S3 IS",0 }, { 9219600,3152,2340,36,12, 4, 0,40,0x94,0,2,"Canon","PowerShot A620",0 }, { 9243240,3152,2346,12, 7,44,13,40,0x49,0,2,"Canon","PowerShot A470",0 }, { 10341600,3336,2480, 6, 5,32, 3,40,0x94,0,2,"Canon","PowerShot A720 IS",0 }, { 10383120,3344,2484,12, 6,44, 6,40,0x94,0,2,"Canon","PowerShot A630",0 }, { 12945240,3736,2772,12, 6,52, 6,40,0x94,0,2,"Canon","PowerShot A640",0 }, { 15636240,4104,3048,48,12,24,12,40,0x94,0,2,"Canon","PowerShot A650",0 }, { 15467760,3720,2772, 6,12,30, 0,40,0x94,0,2,"Canon","PowerShot SX110 IS",0 }, { 15534576,3728,2778,12, 9,44, 9,40,0x94,0,2,"Canon","PowerShot SX120 IS",0 }, { 18653760,4080,3048,24,12,24,12,40,0x94,0,2,"Canon","PowerShot SX20 IS",0 }, { 19131120,4168,3060,92,16, 4, 1,40,0x94,0,2,"Canon","PowerShot SX220 HS",0 }, { 21936096,4464,3276,25,10,73,12,40,0x16,0,2,"Canon","PowerShot SX30 IS",0 }, { 24724224,4704,3504, 8,16,56, 8,40,0x94,0,2,"Canon","PowerShot A3300 IS",0 }, { 1976352,1632,1211, 0, 2, 0, 1, 0,0x94,0,1,"Casio","QV-2000UX",0 }, { 3217760,2080,1547, 0, 0,10, 1, 0,0x94,0,1,"Casio","QV-3*00EX",0 }, { 6218368,2585,1924, 0, 0, 9, 0, 0,0x94,0,1,"Casio","QV-5700",0 }, { 7816704,2867,2181, 0, 0,34,36, 0,0x16,0,1,"Casio","EX-Z60",0 }, { 2937856,1621,1208, 0, 0, 1, 0, 0,0x94,7,13,"Casio","EX-S20",0 }, { 4948608,2090,1578, 0, 0,32,34, 0,0x94,7,1,"Casio","EX-S100",0 }, { 6054400,2346,1720, 2, 0,32, 0, 0,0x94,7,1,"Casio","QV-R41",0 }, { 7426656,2568,1928, 0, 0, 0, 0, 0,0x94,0,1,"Casio","EX-P505",0 }, { 7530816,2602,1929, 0, 0,22, 0, 0,0x94,7,1,"Casio","QV-R51",0 }, { 7542528,2602,1932, 0, 0,32, 0, 0,0x94,7,1,"Casio","EX-Z50",0 }, { 7562048,2602,1937, 0, 0,25, 0, 0,0x16,7,1,"Casio","EX-Z500",0 }, { 7753344,2602,1986, 0, 0,32,26, 0,0x94,7,1,"Casio","EX-Z55",0 }, { 9313536,2858,2172, 0, 0,14,30, 0,0x94,7,1,"Casio","EX-P600",0 }, { 10834368,3114,2319, 0, 0,27, 0, 0,0x94,0,1,"Casio","EX-Z750",0 }, { 10843712,3114,2321, 0, 0,25, 0, 0,0x94,0,1,"Casio","EX-Z75",0 }, { 10979200,3114,2350, 0, 0,32,32, 0,0x94,7,1,"Casio","EX-P700",0 }, { 12310144,3285,2498, 0, 0, 6,30, 0,0x94,0,1,"Casio","EX-Z850",0 }, { 12489984,3328,2502, 0, 0,47,35, 0,0x94,0,1,"Casio","EX-Z8",0 }, { 15499264,3754,2752, 0, 0,82, 0, 0,0x94,0,1,"Casio","EX-Z1050",0 }, { 18702336,4096,3044, 0, 0,24, 0,80,0x94,7,1,"Casio","EX-ZR100",0 }, { 7684000,2260,1700, 0, 0, 0, 0,13,0x94,0,1,"Casio","QV-4000",0 }, { 787456,1024, 769, 0, 1, 0, 0, 0,0x49,0,0,"Creative","PC-CAM 600",0 }, { 28829184,4384,3288, 0, 0, 0, 0,36,0x61,0,0,"DJI","",0 }, { 15151104,4608,3288, 0, 0, 0, 0, 0,0x94,0,0,"Matrix","",0 }, { 3840000,1600,1200, 0, 0, 0, 0,65,0x49,0,0,"Foculus","531C",0 }, { 307200, 640, 480, 0, 0, 0, 0, 0,0x94,0,0,"Generic","",0 }, { 62464, 256, 244, 1, 1, 6, 1, 0,0x8d,0,0,"Kodak","DC20",0 }, { 124928, 512, 244, 1, 1,10, 1, 0,0x8d,0,0,"Kodak","DC20",0 }, { 1652736,1536,1076, 0,52, 0, 0, 0,0x61,0,0,"Kodak","DCS200",0 }, { 4159302,2338,1779, 1,33, 1, 2, 0,0x94,0,0,"Kodak","C330",0 }, { 4162462,2338,1779, 1,33, 1, 2, 0,0x94,0,0,"Kodak","C330",3160 }, { 6163328,2864,2152, 0, 0, 0, 0, 0,0x94,0,0,"Kodak","C603",0 }, { 6166488,2864,2152, 0, 0, 0, 0, 0,0x94,0,0,"Kodak","C603",3160 }, { 460800, 640, 480, 0, 0, 0, 0, 0,0x00,0,0,"Kodak","C603",0 }, { 9116448,2848,2134, 0, 0, 0, 0, 0,0x00,0,0,"Kodak","C603",0 }, { 12241200,4040,3030, 2, 0, 0,13, 0,0x49,0,0,"Kodak","12MP",0 }, { 12272756,4040,3030, 2, 0, 0,13, 0,0x49,0,0,"Kodak","12MP",31556 }, { 18000000,4000,3000, 0, 0, 0, 0, 0,0x00,0,0,"Kodak","12MP",0 }, { 614400, 640, 480, 0, 3, 0, 0,64,0x94,0,0,"Kodak","KAI-0340",0 }, { 3884928,1608,1207, 0, 0, 0, 0,96,0x16,0,0,"Micron","2010",3212 }, { 1138688,1534, 986, 0, 0, 0, 0, 0,0x61,0,0,"Minolta","RD175",513 }, { 1581060,1305, 969, 0, 0,18, 6, 6,0x1e,4,1,"Nikon","E900",0 }, { 2465792,1638,1204, 0, 0,22, 1, 6,0x4b,5,1,"Nikon","E950",0 }, { 2940928,1616,1213, 0, 0, 0, 7,30,0x94,0,1,"Nikon","E2100",0 }, { 4771840,2064,1541, 0, 0, 0, 1, 6,0xe1,0,1,"Nikon","E990",0 }, { 4775936,2064,1542, 0, 0, 0, 0,30,0x94,0,1,"Nikon","E3700",0 }, { 5865472,2288,1709, 0, 0, 0, 1, 6,0xb4,0,1,"Nikon","E4500",0 }, { 5869568,2288,1710, 0, 0, 0, 0, 6,0x16,0,1,"Nikon","E4300",0 }, { 7438336,2576,1925, 0, 0, 0, 1, 6,0xb4,0,1,"Nikon","E5000",0 }, { 8998912,2832,2118, 0, 0, 0, 0,30,0x94,7,1,"Nikon","COOLPIX S6",0 }, { 5939200,2304,1718, 0, 0, 0, 0,30,0x16,0,0,"Olympus","C770UZ",0 }, { 3178560,2064,1540, 0, 0, 0, 0, 0,0x94,0,1,"Pentax","Optio S",0 }, { 4841984,2090,1544, 0, 0,22, 0, 0,0x94,7,1,"Pentax","Optio S",0 }, { 6114240,2346,1737, 0, 0,22, 0, 0,0x94,7,1,"Pentax","Optio S4",0 }, { 10702848,3072,2322, 0, 0, 0,21,30,0x94,0,1,"Pentax","Optio 750Z",0 }, { 13248000,2208,3000, 0, 0, 0, 0,13,0x61,0,0,"Pixelink","A782",0 }, { 6291456,2048,1536, 0, 0, 0, 0,96,0x61,0,0,"RoverShot","3320AF",0 }, { 311696, 644, 484, 0, 0, 0, 0, 0,0x16,0,8,"ST Micro","STV680 VGA",0 }, { 16098048,3288,2448, 0, 0,24, 0, 9,0x94,0,1,"Samsung","S85",0 }, { 16215552,3312,2448, 0, 0,48, 0, 9,0x94,0,1,"Samsung","S85",0 }, { 20487168,3648,2808, 0, 0, 0, 0,13,0x94,5,1,"Samsung","WB550",0 }, { 24000000,4000,3000, 0, 0, 0, 0,13,0x94,5,1,"Samsung","WB550",0 }, { 12582980,3072,2048, 0, 0, 0, 0,33,0x61,0,0,"Sinar","",68 }, { 33292868,4080,4080, 0, 0, 0, 0,33,0x61,0,0,"Sinar","",68 }, { 44390468,4080,5440, 0, 0, 0, 0,33,0x61,0,0,"Sinar","",68 }, { 1409024,1376,1024, 0, 0, 1, 0, 0,0x49,0,0,"Sony","XCD-SX910CR",0 }, { 2818048,1376,1024, 0, 0, 1, 0,97,0x49,0,0,"Sony","XCD-SX910CR",0 }, }; static const char *corp[] = { "AgfaPhoto", "Canon", "Casio", "Epson", "Fujifilm", "Mamiya", "Minolta", "Motorola", "Kodak", "Konica", "Leica", "Nikon", "Nokia", "Olympus", "Pentax", "Phase One", "Ricoh", "Samsung", "Sigma", "Sinar", "Sony" }; char head[32], *cp; unsigned fsize, i, c; int hlen, flen, zero_fsize=1; struct jhead jh; tiff_flip = flip = filters = UINT_MAX; /* 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_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, 0); load_raw = &CLASS canon_load_raw; } 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"); order = 0x4949; fseek (ifp, 300, SEEK_SET); data_offset = get4(); i = get4(); width = get2(); height = get2(); switch (tiff_bps = i*8 / (width * height)) { case 8: load_raw = &CLASS eight_bit_load_raw; break; case 10: load_raw = &CLASS nokia_load_raw; } raw_height = height + (top_margin = i / (width * tiff_bps/8) - height); mask[0][3] = 1; 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,"XPDS",4)) { order = 0x4949; fseek (ifp, 0x800, SEEK_SET); fread (make, 1, 41, ifp); raw_height = get2(); raw_width = get2(); fseek (ifp, 56, SEEK_CUR); fread (model, 1, 30, ifp); data_offset = 0x10000; load_raw = &CLASS canon_rmf_load_raw; gamma_curve (0, 12.25, 1, 1023); } 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 < sizeof table / sizeof *table; i++) if (fsize == table[i].fsize) { strcpy (make, table[i].make ); strcpy (model, table[i].model); flip = table[i].flags >> 2; zero_is_bad = table[i].flags & 2; if (table[i].flags & 1) parse_external_jpeg(); data_offset = table[i].offset; raw_width = table[i].rw; raw_height = table[i].rh; left_margin = table[i].lm; top_margin = table[i].tm; width = raw_width - left_margin - table[i].rm; height = raw_height - top_margin - table[i].bm; filters = 0x1010101 * table[i].cf; colors = 4 - !((filters & filters >> 1) & 0x5555); load_flags = table[i].lf; switch (tiff_bps = (fsize-data_offset)*8 / (raw_width*raw_height)) { case 6: load_raw = &CLASS minolta_rd175_load_raw; break; case 8: load_raw = &CLASS eight_bit_load_raw; break; case 10: case 12: load_flags |= 128; load_raw = &CLASS packed_load_raw; break; case 16: order = 0x4949 | 0x404 * (load_flags & 1); tiff_bps -= load_flags >> 4; tiff_bps -= load_flags = load_flags >> 1 & 7; load_raw = &CLASS unpacked_load_raw; } maximum = (1 << tiff_bps) - (1 << table[i].max); } if (zero_fsize) fsize = 0; if (make[0] == 0) parse_smal (0, flen); if (make[0] == 0) { parse_jpeg(0); if (!strncmp(model,"ov",2) && !fseek (ifp, -6404096, SEEK_END) && fread (head, 1, 32, ifp) && !strcmp(head,"BRCMn")) { strcpy (make, "OmniVision"); data_offset = ftell(ifp) + 0x8000-32; width = raw_width; raw_width = 2611; load_raw = &CLASS nokia_load_raw; filters = 0x16161616; } else is_raw = 0; } for (i=0; i < sizeof corp / sizeof *corp; i++) if (strcasestr (make, corp[i])) /* Simplify company names */ strcpy (make, corp[i]); if ((!strcmp(make,"Kodak") || !strcmp(make,"Leica")) && ((cp = strcasestr(model," DIGITAL CAMERA")) || (cp = strstr(model,"FILE VERSION")))) *cp = 0; if (!strncasecmp(model,"PENTAX",6)) strcpy (make, "Pentax"); 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 == 6080 && !strcmp(model,"K-3")) { left_margin = 4; width = 6040; } 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; switch (tiff_compress) { case 1: load_raw = &CLASS packed_dng_load_raw; break; case 7: load_raw = &CLASS lossless_dng_load_raw; break; case 34892: load_raw = &CLASS lossy_dng_load_raw; break; default: load_raw = 0; } goto dng_skip; } if (!strcmp(make,"Canon") && !fsize && tiff_bps != 15) { if (!load_raw) load_raw = &CLASS lossless_jpeg_load_raw; for (i=0; i < sizeof canon / sizeof *canon; i++) if (raw_width == canon[i][0] && raw_height == canon[i][1]) { width = raw_width - (left_margin = canon[i][2]); height = raw_height - (top_margin = canon[i][3]); width -= canon[i][4]; height -= canon[i][5]; mask[0][1] = canon[i][6]; mask[0][3] = -canon[i][7]; mask[1][1] = canon[i][8]; mask[1][3] = -canon[i][9]; if (canon[i][10]) filters = canon[i][10] * 0x01010101; } if ((unique_id | 0x20000) == 0x2720000) { left_margin = 8; top_margin = 16; } } for (i=0; i < sizeof unique / sizeof *unique; i++) if (unique_id == 0x80000000 + unique[i].id) adobe_coeff ("Canon", unique[i].model); if (!strcmp(make,"Nikon")) { if (!load_raw) load_raw = &CLASS packed_load_raw; if (model[0] == 'E') load_flags |= !data_offset << 2 | 2; } /* Set parameters based on camera name (for non-DNG files). */ if (!strcmp(model,"KAI-0340") && find_green (16, 16, 3840, 5120) < 25) { height = 480; top_margin = filters = 0; strcpy (model,"C603"); } if (is_foveon) { if (height*2 < width) pixel_aspect = 0.5; if (height > width) pixel_aspect = 2; filters = 0; simple_coeff(0); } else if (!strcmp(make,"Canon") && tiff_bps == 15) { switch (width) { case 3344: width -= 66; case 3872: width -= 6; } if (height > width) SWAP(height,width); filters = 0; tiff_samples = colors = 3; load_raw = &CLASS canon_sraw_load_raw; } else if (!strcmp(model,"PowerShot 600")) { height = 613; width = 854; raw_width = 896; 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; filters = 0x1e4e1e4e; goto canon_a5; } else if (!strcmp(model,"PowerShot A50")) { height = 968; width = 1290; raw_width = 1320; filters = 0x1b4e4b1e; goto canon_a5; } else if (!strcmp(model,"PowerShot Pro70")) { height = 1024; width = 1552; filters = 0x1e4b4e1b; canon_a5: colors = 4; tiff_bps = 10; load_raw = &CLASS packed_load_raw; load_flags = 40; } else if (!strcmp(model,"PowerShot Pro90 IS") || !strcmp(model,"PowerShot G1")) { colors = 4; filters = 0xb4b4b4b4; } else if (!strcmp(model,"PowerShot A610")) { if (canon_s2is()) strcpy (model+10, "S2 IS"); } else if (!strcmp(model,"PowerShot SX220 HS")) { mask[1][3] = -4; } else if (!strcmp(model,"EOS D2000C")) { filters = 0x61616161; black = curve[200]; } 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") || !strcmp(model,"COOLPIX A")) { width -= 44; } else if (!strcmp(model,"D3200") || !strcmp(model,"D600") || !strncmp(model,"D800",4)) { width -= 46; } else if (!strcmp(model,"D4") || !strcmp(model,"Df")) { 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) { simple_coeff(3); pre_mul[0] = 1.2085; pre_mul[1] = 1.0943; pre_mul[3] = 1.1103; } else if (fsize == 3178560) { cam_mul[0] *= 4; cam_mul[2] *= 4; } else if (fsize == 4771840) { 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 (fsize == 2940928) { if (!timestamp && !nikon_e2100()) strcpy (model,"E2500"); if (!strcmp(model,"E2500")) { height -= 2; load_flags = 6; colors = 4; filters = 0x4b4b4b4b; } } else if (fsize == 4775936) { 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 ((int) i < 0) filters = 0x61616161; } } else if (fsize == 5869568) { if (!timestamp && minolta_z2()) { strcpy (make, "Minolta"); strcpy (model,"DiMAGE Z2"); } load_flags = 6 + 24*(make[0] == 'M'); } else if (fsize == 6291456) { 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,"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 || width == 3664) filters = 0x16161616; if (width == 4032 || width == 4952) left_margin = 0; if (width == 3328 && (width -= 66)) left_margin = 34; if (width == 4936) left_margin = 4; if (!strcmp(model,"HS50EXR") || !strcmp(model,"F900EXR")) { width += 2; left_margin = 0; filters = 0x16161616; } if (fuji_layout) raw_width *= is_raw; if (filters == 9) for (i=0; i < 6; i++) FORC(6) xtrans[i][c] = xtrans_abs[(i+top_margin) % 6][(c+left_margin) % 6]; } 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")) { if (!load_raw && (maximum = 0xfff)) load_raw = &CLASS unpacked_load_raw; 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(make,"Samsung") && raw_width == 4704) { height -= top_margin = 8; width -= 2 * (left_margin = 8); load_flags = 32; } else if (!strcmp(make,"Samsung") && raw_height == 3714) { height -= 18; width = 5536; filters = 0x61616161; colors = 3; } 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(make,"Samsung") && raw_width == 5664) { height -= top_margin = 17; left_margin = 96; width = 5544; filters = 0x49494949; } 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 (strstr(model,"WB550")) { strcpy (model, "WB550"); } 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")) { black = 16; } else if (!strcmp(model,"N95")) { height = raw_height - (top_margin = 2); } else if (!strcmp(model,"640x480")) { gamma_curve (0.45, 4.5, 1, 255); } 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 (!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 < sizeof pana / 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; if (exif_cfa) 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,"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 == 4288) { width -= 32; } else if (!strcmp(make,"Sony") && raw_width == 4928) { if (height < 3280) width -= 8; } else if (!strcmp(make,"Sony") && raw_width == 5504) { width -= height > 3664 ? 8 : 32; } else if (!strcmp(make,"Sony") && raw_width == 6048) { width -= 24; if (strstr(model,"RX1") || strstr(model,"A99")) width -= 6; } else if (!strcmp(make,"Sony") && raw_width == 7392) { width -= 30; } else if (!strcmp(model,"DSLR-A100")) { if (width == 3880) { height--; width = ++raw_width; } else { height -= 4; width -= 4; 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,"C603") || !strcmp(model,"C330") || !strcmp(model,"12MP")) { order = 0x4949; if (filters && data_offset) { fseek (ifp, data_offset < 4096 ? 168 : 5252, SEEK_SET); read_shorts (curve, 256); } else gamma_curve (0, 3.875, 1, 255); load_raw = filters ? &CLASS eight_bit_load_raw : &CLASS kodak_yrgb_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 = 2 + (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); } top_margin = left_margin = 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; 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; } if (!model[0]) sprintf (model, "%dx%d", width, height); if (filters == UINT_MAX) filters = 0x94949494; 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 ((use_camera_matrix & (use_camera_wb || dng_version)) && cmatrix[0][0] > 0.125) { memcpy (rgb_cam, cmatrix, sizeof cmatrix); raw_color = 0; } if (raw_color) adobe_coeff (make, model); if (load_raw == &CLASS kodak_radc_load_raw) if (raw_color) adobe_coeff ("Apple","Quicktake"); 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 || width < 22 || tiff_bps > 16 || tiff_samples > 4 || colors > 4) 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 > 999 && colors == 3) filters |= ((filters >> 2 & 0x22222222) | (filters << 2 & 0x88888888)) & filters << 1; notraw: if (flip == UINT_MAX) flip = tiff_flip; if (flip == UINT_MAX) flip = 0; } #ifndef NO_LCMS #ifdef DCRAW_NOMAIN extern "C" { char *ufraw_message(int code, const char *format, ...); } #define UFRAW_ERROR 100 #endif #ifdef HAVE_LCMS2 static void dcraw_lcms_message (cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText) { (void) ContextID; #else static int dcraw_lcms_message (int ErrorCode, const char *ErrorText) { #endif /* Possible ErrorCode: * see cmsERROR_* in or LCMS_ERRC_* in . */ (void) ErrorCode; #ifdef DCRAW_NOMAIN ufraw_message (UFRAW_ERROR, "%s", ErrorText); #else fprintf (stderr, "%s", ErrorText); #endif #ifdef HAVE_LCMS1 return 1; /* Tell lcms that we handled the error */ #endif } void CLASS apply_profile (const char *input, const char *output) { char *prof; cmsHPROFILE hInProfile=0, hOutProfile=0; cmsHTRANSFORM hTransform; FILE *fp; unsigned size; #ifdef HAVE_LCMS2 cmsSetLogErrorHandler (dcraw_lcms_message); #else cmsSetErrorHandler (dcraw_lcms_message); #endif 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() { unsigned c, j; int row, col, i, 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 int phead[] = { 1024, 0, 0x2100000, 0x6d6e7472, 0x52474220, 0x58595a20, 0, 0, 0, 0x61637370, 0, 0, 0x6e6f6e65, 0, 0, 0, 0, 0xf6d6, 0x10000, 0xd32d }; int 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 < 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 < 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() { unsigned i; int 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 (high, wide*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; unsigned c; int row, col; 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; unsigned c; int 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) #if defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR < 4 swab ((char *) ppm2, (char *) ppm2, width*colors*2); #else swab ((const char *) ppm2, (char *) ppm2, width*colors*2); #endif 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 unsigned c; static int arg, status=0, quality, i; 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 = 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; break; 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 = 3 * (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 (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; colors = 3; } 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; 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 (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; 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 > cblack[c]) i = cblack[c]; FORC4 cblack[c] -= i; black += i; i = cblack[6]; FORC ((unsigned)(cblack[4] * cblack[5])) if (i > cblack[6+c]) i = cblack[6+c]; FORC ((unsigned)(cblack[4] * cblack[5])) cblack[6+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) vng_interpolate(); else if (quality == 2 && filters > 1000) ppg_interpolate(); else if (filters == 9) xtrans_interpolate (quality*2-3); 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.20/uf_progress.h0000644000175000017500000000246112303017427012211 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_progress.h - progress bar header * Copyright 2009-2014 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.20/ac_openmp.m40000664000175000017500000000671711120421252011706 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.20/ufraw.h0000644000175000017500000004763212401246236011011 00000000000000 /* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw.h - Common definitions for UFRaw. * Copyright 2004-2014 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" #ifndef HAVE_STRCASECMP #define strcasecmp stricmp #endif /* 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 #ifdef __cplusplus extern "C" { #endif // __cplusplus /* 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; 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, xtrans_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 }; /* ufraw_standalone : Normal stand-alone * ufraw_gimp_plugin : Gimp plug-in * ufraw_standalone_output : Stand-alone with --output option */ enum { ufraw_standalone, ufraw_gimp_plugin, ufraw_standalone_output }; 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; gboolean IsXTrans; 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.20/uf_gtk.cc0000644000175000017500000005202512303017427011271 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_gtk.cc - gtk compatibility layer * Copyright 2004-2014 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) { guint64 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.20/ufobject.cc0000644000175000017500000010025512401246236011613 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufobject.cc - UFObject C++ implementation and C interface. * Copyright 2004-2014 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.20/config.guess0000755000175000017500000012743212057543462012041 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.20/curveeditor_widget.h0000644000175000017500000000161112303017426013544 00000000000000/*************************************************** * curveeditor_widget.h - a curve editor widget for GTK+ * Copyright 2004-2014 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.20/iccjpeg.c0000644000175000017500000002216612112232012011241 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.20/ufraw-setup.jpg0000664000175000017500000015433511075552725012512 00000000000000JFIFHHvExifMM* @ (2 i8ĥ8irExif_JPEG_PICTURE DSC_Maker DSC HH2008:10:10 03:23:39(C) by DSC User PrintIM0250d  ' ''''^''''"'0221ƒΒ ֒ ޒ  |dVhL01009iT d2008:09:06 18:51:302008:09:06 18:51:30d d3 Dnote Rdcp x0 Rev0516 @   Q0d|> [Maker Camera Info]"?8@  6 6 F P+@N @l]- R802007:12:04 2007:07:31 @lttll ww<<w ]]]]]]FFFFFF                  @! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Hë(HRb@cPqQ䩳4;Z}J]iA.}}'ʔ.0Dd_dri~B.gH&_,زg%-ѥei<.B=>W|D&Z> E8;, 2N9AKќQTr2r\g'#'F/|5?5{/LuMX 2D:¼SԦ[A~*oԏn6蛤cG8F5$th?B#sksC")@#/*rEDW{a~^Treݩ lbl Ѓ i(WMy|[/|ekL}hÈg> >]SK 0CXZ8˷;$~^JZ;rTӾY1 Ϳw=ソY,0& z䏙|m HBCX #̩ ;lwp?bƍ{dǡg שY?E޻A (#>+s,iI)z{&Rz3 6 0Hw:-A#O,REaN݇^ ]"Rw#B4qɹ:d*FK*7 wlI4}?zeQ ^^x8bZJe5H 19ke^Jrt1S%q+גH,z ?L[C1FLdcC$w DPI,F:uwcY*mFN;h5Ik~<͜ڰ6qo0BT8~;p}h | cie@jfwpC}*ŒT \JU?\юzge̜z<#jݻ76~L&) /|}A:_#NGX4l,҈CӶQ_Җkx[[fё3q #\zfS&Ap8GPFq{yū1SCxd%X^F.Kp( #eB@;z@zW|Gмs.jQYtRDRy݋6+_4`|Xa oeAj^N;}9_4rZ֍mӽ\ǻYxZL:~gh:&Hu=:63Kh&Y&!9Oel:׏Y)ucD ˺& +{xjRמ* pcɴp@#vNN(Kg<ƌ2ੑϹ?0åQ UP8 ޅQA|35qxC~ O}̙gtJxgۧrkJ1EWhxRQdM9Oe$8C35X,6v1:8RprWZM~D~aߵfU_ hĨA\{'a%$FJvْTr˒9P|ט#8UAHܖBw);~`}0q`vy$P_Q 8:dҵc|f-Lgqz1ԏqSf@Oi yx #q~V3#>c[~{RCu6:~IT :چկSOV;]+חRV^:[[x.v<9o,@=kFԉ,eyO, ?(n~ {3Ώ-0nQw{g:Acnd?~cf:+Z%xd=JyNÆB*h>[q/⿄mʝNGaƽZxRI-5{Np¬Z=s ־7/ݯ_>w7ּqX[>,-u[*WB;s5gvqGz]"`p%Ӎ'Z,@ݼ,w9wd$1sA<;Q^d3+Wf#0JHxzW^v=[^Ѽ)#-Ath@d͌P, 9*e0ws"gcAҽ~ߡŁBi4V[[';wC;zu kyrw:nQ0nFsҼ~GS駽BҺ3`]sB' `k^O ȁqS?/='Zo@JiVB_zQڳ5CyIrT^+ `\i\r#\pcU0*LJ2Xukii$2O"{dn$)\׳ˇoɜ5zyLA,D pvC7zO[WGΔ7,cNynI#Ͼ+?xk2~]F#ҫH9[yG)d/ fryvH?O_^!#BG9,X@ +*įAncžq8x?  D0KDD֏$ۜlWFZx$d\FA8>>L@ `9ڽF ci)q܄= @&ogW藳7PQ}P-=dV)I+4P68hpRcA`:WWoTzWhVz'mK*ѳԌq#ufZ= 8>v킏5Iq>(l}KkEl% o$18㜑R:߉B}^P-w&!+(ؘaG<״%/㺎6k)l&8cՆOO뚆h6-]G W+l8q~qo̻1p?_J->)hFcQ}+ Kazq&\,:1fhO-ͬqT?FO~ c Wk5i}#;?Mjjk"GpFMw? >+xfGo0ӵ(Y{#2 d ~C!<1]/C+^޳-Vm]JLɾ+[']Hp`B6w]Z"V-Bev]7d*a?!`I9r?\⦕,J_ L@e9n>#{.-46x&,~F;Z}; #nrڦJ[B㓏vWx5ˀ ô@ʑ9p=U^gV vO\y3 ۤR r>^zi%K\ke}%MgB#FbS/%׳ZdzԘHByDL9G<}^M3-<}Y8r>0ǰSQQ't"lp2~_gtӢNmgv @14-?ԡ4D[y!#Lza2 #+ @̛%,I889ֱZs&a?PN8 xcO⿎I5_C)F8/R?'luPBĎ=*קcoڡg56yu# 6{D}x+#oc,[r>~:qqJ^P!rfL ̀x%KgAZ5/Ck?l@[i#q*$+U=e%EF/;KdY춹O񿋵}k[k8KZڎ-clى`c g 1,~p2}+hAF3ƭ+%"7 #ul wkL wΆB-Cn4r.0{09R4DT02T~v p g'bGsz~U֧U6idBgF7} ==+|{Y2y a=%y g/CJI{ ۨ$n;'Bs\|54(đE(-+|gxy& o Z[imF%wc_<+YZ qaMeJ=W*S:0Wfoش5ʫycnL{xF΋^I*C03 =8\Ԩ{+vG rKS?Ʒ:kHtu`ZUXF>} ?^izhk Wa.s-8$0=v6 Y'}93ޛ̉LT$Ñ8>oHP"Ю?'RZ?S*kUt1FXHL{9 $6m@q!9=N9-OQ>rڳ?9qLUY+&I,6sj[,+bzKۉp+9?A5?lw] ''2ķzlKzkYAպe ӧJmԌ֪qϖ}Iz+{i#o|U)Zel W?`qnB֚&2g6``K|t~N}9 xPd8oNQ2:g%J}Onxrfcyۏz~%t3Dx(IQUAsi2w4rp8׿p&m{]+!,rE #$]6=x\Ҷ],Dh r 4SiԺE6m"v,}X῕hª"uV#גE7H^T6A;<01ׯ4b|Qu?F[RgAo#KdW[[$*#8%'愧yv7R`˅_t{{'C#@Ry9' #f$L(:/+Br\ދQ׮贴'#\ n"Z=)̠p#W,GDGwό{k;64:d3Zeřts9=kj;otNˮY cNxr>vS9Kv)<'I@̞{9 bvPx!thd$#;108'u mK`E&Zk1$j~O.&-x!ʰbGX[sxjy6w7 UE&dAKگ׀GRN=7\q|J(_ر1K,yM;N !<޹m3[}?Sm6Mpr6yP[al6|CiB LJY=shDI:]ax\9;SRAo}zI)yq[6X<*@e.P$G=He2{$۽D~\%ƭ'q?r;±p9#jО{{ۨavXKf?wwLͨo =֞DDy#>Sެ$zΞW4yue׷g4 W#YյvRmԓݳ$agldcȮ2l^$UId`嵅XF8]8,ˌZogi&'Y V$LNKD(|lBw{z,V$ ddGJA'o8lL3Xi9P@>ʋLgN cVVER8|PZUA6nU0AirF8k;/WIn\)]I/Z.dCbbnl y%×_g_wl0F~rK1wn3ֹ'B%oQ-la̖w%4(v⮋B:n?k*3zeaӭ+墪uu|Cs֧T$1Hᴷ)$r},c42Iz"V?0\2Nt*825,zFa4iY@.Gt 'K&!x?a%vkDHdSQQӠ>?^P-sQ_oP&p7ڬXT4ջ3\ԑAW0n$S^Y}%Iw <#q\\Io" |)=80Mu^:y[w\[I`]pca~gq_ΡpUp$0aΡ;rFA`1̪֔;G I?#Cn3~\gĽy;~@;aZޟ)R 钠݁v* Yh_T*~2Sжh[)pNkBA9mvxQVq 8+Bo}vwMw|y2 ni|rw$V0=]듃ij \^ɫ_qoH,v[쎡0P.GbV%+όd$q]\*LHBgAq^C^譾⤒)bG2[p 1YPB|BBzbOf`j׌ѼvB~1ӭs763׌}x"Oh< >;easFe2Gm 8& Ty~WlwG+Z3%C\ͥP@h@Fx SD[9R}CZEab d2OV$dZtJ·qgi4Km|``{x TtۦC[yv%(FqH !W#n ֿ#L-ex.4]:.Hev[XW+3<0 ݊Mգ٣hWKgZU֟p{ycBX`kүĘ-Eq :`$QUx[kMmD'8H:=룛^?'$`1#*}˹p@;Kc4os-!#QĹ;6{1n.jGqUȔmGlOsR-( xw?\ +ONG8!r.=:{ʄXʗ%voNTUIT=ztv`:cmOJ+Aw(lN~K-cfodÜP==Z9H8;=Y>O=Lӣ*Xa= n7L$ӣۧV!*2GJmmLQN#3zgVW ji걉7C>xiBZ-wnc[~Frb&9qCUM[RQjs)T{ڝ٬mi[HxPBc?5qQ+8B} bGj,c^LF0eI+ל0 BA0"<(~׭#9Ƹ*îG̽A=z«Il3o{'w*>\'ar?=B?KimTgyI(ڣ'M@}޸UCb<9G#o)[c*t"i Cۿ^nm{32s`}1w*,Y09ϯdb)?In*9Z2c$3 -?jjUZ(7' ~?]HrY@D:?5ttA~i7Vn.[wpp9SmP\{}ڞ#W0@;囿R>_t[Qܜ}[i'-CfDJp*܎l{wLc3ѻ)9Lg9\Wo/'xP}{d{v܊O;Ϲ_@w8sȠ(Cy`u9eQخg[Sd`f=\ܩ)S6p5?bM7vcI=~P[ y6F~{ f%.yگ% 4̥dn3g~ _cn>g#zzUOҞy`J| POj^ǹV^.y8c8sտ9k~yjAXIwsR-$B+VrqpR: $V74O՛M4 Vr $oU cNeD;ْgpI<jj>RҤ:mr.rL*Agh͜1.s?Ì'kR"SH7A8'U?#GRCfne#KդNr91SϪ42ymcr Ȧ6#3vreIzִyR7z6`w~TMhHwcpʡW`$} VNpVU s8=_=$1?9V'8k6q4'=:^Sft(]O b:~|ki8t8?Zk?yMnuuL`3LGjYG+\~@9A(rV,ǎ9TUU?Ђs)kO1 =xġT_!q~s ~#C_q_e $y@#M@7sz}ǑBA9˟YQ+!k;H\'ߐIm3CM92( OMZ7Ӹ+ۦ1Si,CɐMϞ<=$rj㘋:Ÿ<~lŨ h=\E,V9#L =~M&Mr5X'nR0nddzvKmIPl+ttr~-duڰMќv#JF CO2ᐴrqAZEȔn5bL^S4ܳ;nHJ͉ U#5 [vHPK.=1Um!靄u;2Է Vŭe&uu_c0t9׬Jl m'3.bDxmK&xvjk+ CF 8kz=t*N$zӠ8JFDHrllڿ3Ы^eQ1+&_.`0 |V64Y7F'$4A`v=`ƐDU?£f'aç*|!,P /l`0ۨṮd]~ll[|m drB~ߥ.3QPmelxӃ5xvNGOEXc ϸV?Ά)\z^͘|3j2u^2z?UfYXU㶂98U_'cD,w׆${S[6Es'Q/Ԩ0mǖuBѰ<8sU_Yڊ`$:tp;ejW:Ēnyrapv(taTfis'#Wr]CQPsUFF+9s?B[-vJ}=F8JKٰI?7 =( OP؞y`x{vWEQ';ι ?4zǡ@|?󦳍vXҀ;9Z8 ?BxSو%\+6=ojK%c䠗z=u5Z;(m,;`ɓJZ=KuQǮ )?Ze2?A?B:Uy d'cBTBh:coO4:VD11> m%F Ïӑ5e򭵏^3ǯ愵bn 来|YGg&Q}=5Ȧ:| <.@8!Hu}j3D)dƯBxrF9['OW[$7+;E䍩9ϮF83  M7ߨ93IBG/=Ib9P)9"\|ANړrb>a|H  }Gӵ7?B44Ñ@$S$0}J#ka?,P%ndBFd^X'zDlaI80?Y1t >HfGd#̏\vđ{y<ԧH'HqT^^9z|B:"oq*oĒ#n]: s3@;qW'=>bVzJR9C߂?_P #f@Fϒ: ,Q`~bWh*9M30~cpT+3؀*Np@?Ɠ40pX?ƢSg#9S@)Uv׮@^ߍ>6S ,TOF V9NqJڠ.AEnۻC ?VccҬ=O F}=ٛ?Zw8DZ^ ^.V }+7DXF87!`41-[s <(n ~M GP:ge>Gq*_zQR#"Aж*9I,1jEZM>DIW AA~pQIe_B_Q6zmՓwlqaI9%T ?қR}߽q*MƚwW_P'8;f368€R=mQQ.}0WӭWQ˷99$}yi:?ҀKsڣ<:MA/=HseYY?QG_9#1;M9.?L+mDiq|Oz H6G62IUǡ{$ޥ[.}+E$nne2>m͹qӞRhѩ\y28 Ovljcq%KR4Dp K _Se98#/P4mm\[yUs~NEIǓ=xVI?N32k2n)?,d H?S4rYMK=ҾBOPi8+R 2s׎T_Q4F|#JN<~TŽTB*ˌ)~cghrBj,זz)~''n=h`X}sJia|w$c=A~4~=HDRKdGNǯO5gEH.L1HxA'ހY٭ lnF$6z)^=qzZaٖ8nHw$`tK9,O$N8\k[lׅ ~Q.8^P-~ \+cCg=z <|/縏*U`  Iq^Uݝh^%2l@5+@b~m񹿦:`F1Pxvf#?#i@zD0 g;zTMZ.Xx?Bp5Kr;pq~~Z?@>:N(Lj-=͑iSD0)UuVMmS Pݐ Nzg99/uOFOSX.-$[ԃ]K%z yKh9SDkxJdq0+notIjXLeUnO˨u0jfY-!&c~Sr1:blަ50@BIp~nv?\ 4)2;e"?EhL Gߙ T}1khj78~{'4q_ (&R<5*H$0ʾ|nNL h~&:k^Ǩ}E4~a%׬D 0yJT%R)l'+7; Κ01I9A|MypY"h=&$ ԂOn4#}l)ؔ,Tmi|z3p(}FVPf=S}vSmwvn5Q"\H\9RzW9q AͽFv qS䦯/mc^I??XX}'_ǭT*ہد[ +|*r9jړ9ۑף|ή;R{@lm9𽽪"z^3\5b;="PԼ!?(ݨ"+->icBX"pd7z2LΪ>hgQu9y.LFi%bcT9R1Y#3Y n8#?PIx1@rݎ.)y:)_ÐO9 _b0뻃6C$?&+ӝB}Q?Իp?\7?ퟨ⎣ۯ4.|~@ };wF?$@Cc1-9KG Mŏӧ@=ڌ~v'?+ﱻiv1IqD p8U{&xS?N+4ra$x+?N~`#V'RH R>A2F )I(g >)PΟ9ng`MtUuw#oy{ayh'휷rK{[`6J%j ?t_1-x\z?..ޣKΘ͟ĭ9 yg\ :Ac,;AJ*c0if9ڐ7_ƌϿ d; >`<.{}x'4&/w+`{v ]L"s ,m;X uܲaHo$`)5, ˏ3à)?30^71ls!;l'WD cЈ&s L)3@]HՉa؃4IlJg،΅`VpwGs@pG w5}چBO֟N>܃롂$#թCcpOiʀ==G೏O#f$b{|?ʎKq!}X^?-c.;q>D{~W-pzN' V@IFrGXNaYv=@89E п)$HS1 "8̑(#i9f?;A5W?0G 1 fC,P$WRوEߘQr~g(O_[Qx('~+ZYM1s;==1RClG\%/->vc.A0`sϽ.I.ŀdPgU̙O$A?0z6,t) qXȦ&4|2:CI9rJ@v?Pq4@ Gހ\?1K:L ~U?v 䁸wⅰ sÏ0rO'w哚FrTo?/2uC<>OX}>CT* ~4v80 k lNywH9A ~Doa!9,?< dn'~ RFh@8 P#ZhlR?Pb?=BCs\݁23Ld*{?1Og, *F ]Tsާ!;JI~~)I1'̌ psJ^3܎iʂG*Ou7R{?R=$UHTXUh@ǣn? R ?ƛQUscoXdx8N)|ʣש3H Y ? *;?]1mʥ@@Œ#<6ņS@ܜqLc RHMEJm~_.! `0~4ӵ$b=)=coޕFx#Nb:\RHFHi:~?j: eO?*OL?]  G?zwXwHsԽ$b}F0ƕ??BZ`8p?ҜXH;io}~[jOp;'PA;9wGoP[]>/QcVI冐`csp WfzH'hmE(˃ۡpWLzA_qx>$qK=r'! ?‡:NSo_u>V='R\,'n*?}6o-r`ԴQ-9&IVnxeϹ9!IVlHOFTJ=! 18qoĐAJ')Y3Ƕ?R0>ga |@P?(o~CAr|/qA)8qIl%\t.}T0>ar) nu?Cڪڇ@#7I66N4Fcf Gx;uM |uܣsԸ?Ap@PPlch> 8c#J wJGM'mOEƐN?t#Fn:q;?(:W;SBC>; TOϩ ҄0cgspd>cD+)!A\| ;\T}@& (%OL|fhm u* Bz7wU=qO&1猃iqI ǭ&R lu,?4 28??48bvCM#^y ڏSՉ?\c' ?J1Ѕ'N?;ݖ<ˏsRrpOvadc'9rNM=mJ[$?$*\#rs?R@25r:`Z0K!w~ iu^~ҁ}M qt+/ T일(?*.=8;T1—$!ma!?aB.0C9 q-<=Y1}ˊQ@;E_=`9 OhH'oD~#CPHm~bFe*?ןI-WbON #7!n3HneT'5gq'Ԍ~ghcIӶ =T?zlW,Q+]bs$16FO>);ܑOC_#_͖F0ASCII R980100PrintIM0250d  ' ''''^''''gtg|ASCII R980100ii(i HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222U" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?$T@8Ġ4'nsrEsn1Sp8BFr ˗Y۹ZK5R0H|[08鞕ɌQS&'xHCVO85N{#j/x6{r7]IDNV52JC7֝hZi&hn\ ϭ܃#ZSqz{IyF=ԑ)h5;08$ xWyT 3$ؘ2PUWE{0vOZ@̤;Zg_owɦM-8FaP\Q8+m[QXeFDf!F(z-ڴ@y>UǧsR 6Hg Oa+# j˷e+Rw=6չ&@Dhjl@GaYiO3 9$sF{QX$gCHW}9vc¢ّ$u8 ԲC5wV$*ʪ-588Z%jSE^ ֶ%qnerAہe8_-P_[G =Kk vunAo1Ytǥvz[GI켉Cko4fBDVH١ek &)53hGuqE80<\悪 nycJlC(\;G>2~;m51ޕKh<1q|mx}2qX}Y|;7Zml.k{k:nb:gҵ "{~fY-(@XwW_il2jF%Soʊp@;EcuSNHfw8Vu*b$UMDS16[:xrD#[^+L$ysW4#[X85^}[ֵ1o*[%arM;ZcyMF `ޔI 3,zVӤgP,95fU2+3"8˱Il,}MY1J$m9Ix;>nPŻҊD>^w!%rI/l9$J5dʠ@0%dg'h?UK]1Wa2Oc< ;6@Xp+MK}6iFŀ 1Ѯޢ3*ͰnY96UZkNiy5BM-R` .m"0IFڏ r/\p+ G@b{]Ԏ26F#'ےDyCt6-He^xTQCذsvH$U}%J"* jy*QE8''`T !G~QKQEQHC          C    9! M !1A"Qa2q#B Rbr$35st4Cu6DS>!aq"1Q#2Ar3Rb$BsC ?ZR,qXv TJ^u4Thc^ݼX Z8ZZj` B$ okx VG5]\*ޭ!n k{e? dRKMDV)Rƌӹ,dF*4@,#c!^~x/[s "C[3<|eE:g24 /lMuzH3r* ͥ[*Ds(yt* /~ckC#&h=x7!XT~&wCXF{qbnZbPRǗ+1%iC#-Z\%Zi8`kac=M=p6WhPJ^1&ց.wY_LFeuqd6b1-> 7ŚoC{0qK Hw|D|.S kQ͸I ف%b'klQOnp"6f5|Kuy?tslJ,\vThЏZH޶sl乚ET vc`1w T5L)I'!@oL),u2V`r~+[FmVȞ'9S#F]s(#/5|q ث9!ٔU9"C;6[<ұl;JCsh+hI9*E,Ԝf%6*[ Hf'oE o ۮ(Y*XCSG+ ]]5J?}uR3gv\nP[-O*/q'-|imy&ayu?=e*ʲT3mQw>d*TrJZ [y^D8|Ycf:$:Nsror-w?9cJ!Oxdt6 .حH%:vISPbǯK{o}$8Rz,7z,67|Px-+ݙAF{(M!PH.c?7qN 8 ^-dj<ƍXič@Xv6 ,%R$r¹, _̛1.l t !2w =IV%_b+0'~S?5Ag{Wl-9[Ti{}0:*[ :<BMi%Խ3*^-[v A*P?&DLvcӧCAeZs]UWfSD]G [#T#oC˿l7k/(Q"Ȝr }pẺifpTkuADa:|:gb^p%%E,%`-|Wayՠhٙc:Ev9?Yg$֫(rTl/OB$m7bTj=5xcYFF~Pf `6㒭rzJ*+|^UII=t=$#J SANƑāhScZ쒴M))( OV _vYz^l7RKC.d1=,Rg%@kzؒ%c4fv RTC-ͣBknHk:BEh\krB9pm =z%"^YDopCNG@DTFmy{tZA{ 2zFyu6P/r-mNsVHTCn%~x6'dO5c$j$KGX'(/%mUS,򶩪fisLv4hrBx.b3ɧ:{\ftSrK¬-s}q*4c%J8 c0Zv6$QUNٌA;6cƹPT,rD=J-c# E*Y]$w-rj&u#@W=NǹoALVzlo9e9~% X=tk )& #7jSr]֭tYZ _?(M9ISW*TL)uk'O'aqi%zZ)\1zXu>07îmh~F\xtp(!sS.g= ak~ˑkXBA$ [~^3a/)ya9Bʂ`Kq鷖3Q?@%[Ok2"Cd20Q]G$aI5^ ybJ7W4_iacaz >so% y ئ/jkQeq-MhFv`^(!,4c(b୿h&M9 V%?B[/KL6R3DB2%`jI7?maKQCY>e:ӯ@2FŚ۠ù0e:lԖmxpI,.ΦPARBwz"v1y\D=M3zԢ84pV?fxY  mmF/&zߦ̍Q w!Mk^E'm05ZMST\3P؁ܛ1`lU0Ydɨ)!0dȲ _}+ƬPorvsi#WH杨RI, 0/FP,@vJ6cszI:k8& H`m Ϟə&dHkeMNͧ Ѣ;DbOҞit,L} XJ](T_}1"bH-MwEj]c|fKZfj' CG,s=EoB9\iPM5EE44I4U~ib;u9Y $qԻΰ漢|(2/apI?yYf B wH=lG kB fd!܍(?A}P̠ocs_8Q̑i vIfQ$l@@uKf;.2l7cA%ԑˮ f Q["Y ȥUK.Ԑo25$bX\U0p Jz6em[Zqp4l몣{IF1ꌽyƗ`S;I5=xq.+C'J:[hS=l*.9hK 鎜 ,w ?7 ){ |"?M}iܤ6_ճ\\JI+kTc_@v8piUI9ZQy]?C1 /[,FKNee+F7w7lf3[Bzf*sH9R::Y%rl{al4Z=/&YI$+-忺64bZ[Eȩ* v?+"+{݇ i[_`gI=?;$,-@:X/v*kޘOb02S` M/C>ȣL$ƎCCDE,f7ϖS4QG]$ HNx)$?,DXaw%&HVqVa؆}[cj"*7F,1c7\[yvH @Q?] eY|bĚRie ̀7:m2`=z{sa2iJT31䑍{ a';_XeM7p;AgPMCċ=ko1%̯&O_0 jt7\M9Ta>[V.wgTFᐘ$) oLt >hi"v-M5ϓ`ww,<5iUQ ^ `I1!⟫8Z+7ay&>ixjQҒrvb+No}7c3ҡ􉡃Ǥj?xx~Ms~ҺwLt@&Ȁ)6:̶j9" "4ܛ7,% bBqsh1F !0lfuE imr‘(>d9qAR+ Da 2w; m}BQ8"5=K*$2S`El&xkX޶)܋2/SIRJbm>"{_vЎ\;)9iHuebFnτYcU95/3Rj&1X$F"#Gگ184NE %"JU~癨[Uآ  3rU,=2U09B⾞?H [8]abIFɓfD*XxWeA Pʤy IEJX\a_#.c*j-s˽ 763 :PO|Ϫ<"WL瞯0z$0&oCuYs^&0A,K`p'?;\J $IİU7?Bl:W-yRHTmbߞ- [=\ZXcfvIJY2ѱT jl{ xҡ#:بWe|Ke,$*P 6N#:vٮ5L-U"'EqIB0ÒrhELhDb*Tqf/~dg :tf;|oos%у'((Qm|fX_*j#*6 sMvqHh)obw}h dJcŖtZ=)oK=W#d(j]\@',4?>~;!9a'IEݠGMNc- r~ɪZCm@RU-t╆eq_:/܆ Wan[ +h&% [.mn^qIh*4($ْC '`w}{e1/+TUF#ȌiQƁ,C?o$rKU2iH?ts w\N"P y=oLZz'ݨ` eTLH,:G DZMʺcNJE٘*׹7" *_kqB<]eWUԂ'S{fð{wśfՑ$i8ɷ)"<c <ɨ]FVve#SH$#~(JFhŤj~nG{ bb>z3.-3־_xDO3s؍POlL@Ի*Gc7Ҵpo{ty̗ѷiOIk×f?W _ 㲾?/ DHKQ1,G펊ٲ%Vm(I8 ciVfwA2\ٜ)kW.|&A 0 Xp]>3esE9o cqldC lvP [$4b3~h'xR9<59L,f=m{l|lK;3 %X[hl?´xj~lFч7 ]nw٭mMBKC=t^a0g%--Òu^]C;.H6>eE޻S$ M+쬪ؖvV_r&d6X@ArNM°ÒIJdZT1zBnIw˾aW4:m؄im|dXi*ʕťΞw=S 0f4k@Q(c bZHeqW$5OQYPf40Zj#_ŋI%%j)hSZ7rp*|)"^EtW#n.4(c` jET p?#ڎ]\$,H%YLeٛc(r!^DQ䜎?ʧ̠k FbvUХ6>{9[g,lOÕ3]FG1cGԟ6|I-Juf` (m,ukǧ]N ֤iu'Rᇪ[*[,=/‘NbZ%B#d$w.٬_92.pmmUFݢ>q^̙_CʮeNqfv75r¨fI ESF("%LI@!/&{ Z-L[Drjy.$kp!"ʸ5W(Ao:c:T4Eu$(7>ǘ#Vr/|7dčYܞZ)'ȃ%ev~9"Ωt=5Ϩ⪑Dm8Yi *8q!:Z穱Q _ԫ́ #BXd2OvWۍ80Ge2oLVr>XJơ;{`A&c #柀} ˢ=eSe*Sdv06KNrWnPrhԳAix;ocd 1ZcK~Xi:5}KvVFIeԴEn\f<`Dv%Kp2T 6aIV#tzaU 3L) ja!.УXoD=0`KJZcEKK r>4mD \?VZ$[*(66k?I lJOmy`qC]P vƕ.C#m2@Q C#D ҲO,1 nG$?A{ Ly1ȏ$ӻKorߩ0}L=g&RΆ} UY7%l|n jh!{l Lċ0IFhޚ(^p@3TA-` vј2|!;_$W]+ mJ?߆r72NE4R6c$ Z\' ܮ,)/bE%`ǙbcP9FJ2v YMvo~+j(4]ěpcy[Y/Q1kMJP菱XrM HWNlYب/kI%gS!6s%iG:D? 9WsƼ/<1 9'#]-3Ză(T,}1ߵ?_>[y`dLGZGSu$6ũ w(: VeB3/4V39E9o{m{[?<ViD {[a܋\m0m3 a7v]&Qkꆩ*&e6*>c5O6V2"}K4JYbҼ;loMp0hcM70i`Z`mkmg'|0*_#$0|W̲A9t$Էe1OGui%IB/} ;_lHՋ`ݒN|QUʎ i[6ˑfm˖6y$QcZbAuKu9!fCRdRl#m~=K)fxv4{ 0hA?WRsRM̠]dLu+I*Ho Bv}Cq_eVZeH^;k5:!3 6ڱMq :lDu h\C{2OJu={i$,[7dž6xȭ'̟bʚ$%5 8ڣlH,y%djUHM}J{-^P^:y2:. fLo .QDB1|.IcbLTDAhBojrW-XƌM݇-ĬgvDP7SӅBʨ a7vc%Mcw+*T[L0Ԥ.Dk}[[U []DV= W/ @?o% ֜9'dJYl S>Lc<$)}Env%F N3xrcffcbn/>WU$s52Jur)nHE{^)jLji)ZDt?%e" GYokɴDЩ+r5Ĉnn ?Żڭ y')WٔtZzJT+Qߦ>{+G*mJ 3,g[A{0uMk(or}J/~`OAKF908.iAgx~!Qdy_o \:؃忒:!)Yf,<$E(ƭːm~{cM0)H/r+WDmWӵ(?T-PZ* o7YIG|3'DM0SN\.[[/#xԶ]axɩ|}:74p<3 3G$ݦǵlf.[jEfP-F󄘂v:%va KZtIREXխ[ҤI)hLY* :n{aͣGH/ pHlqLQi䅪xe%JM \{iqZ(x'b ~Xܞuj<Кdӏ9T,|VU=7"ᚚ^M23Ҭ~"nvPl:NZg#%`f#:)aGM$d4ߒn}0P.I=%[j(fmƒms+c3/3s k2Y}"I[,z);lI8#[JD3;+j.qT]?'~s%>Tv8ҁIьAept^?炉gX!P4u h778_VRi_2-ZtٮC5B2:h:h+rXl/HRbɽqL2(hcZ# 9pN!A{=BGR,q6c!3Ȳ:Z8*I$%#{i\M$2X wu-jcoqYZmrw 0]TlEwS씫2g2C0*"[v%i[hI@Z{I<"ߘSq M,j i!|Ö 0䧲8HBH>rmȷaIlBpxMQUكA!Qbw!|y6FA쯇*34Ne;#¬I];9'$@m pN}s: )kt=DBJ²Io&qk_%N]UHfCSRZAt~-nǧcE/$ [(>Xh`5hd:iuPr *U!%esfPF}pQvfԍ"mm <$ee捍Xm~YRI,z\a ԗGrY5\I7ؒ̾IUkTH=/ob08oy>u y]-5ul\naͪ o,{v[R>UUa5U\m7k8?\_\َoZ*{*<)'\Nz9Ze%S*=D1;lcL UX~d6̓yWo,eww8ҮMnMWn0a#;$HxF~p੷R_OcSԼ6!gbP.@ ϖ2),mܓ0X{Jw,]$m$yECJPwsaO{ 9i,@1kN(6܌0LʮjhB U9R@#K88cz} ,˩'j ՝_skັ j\]] 0Lut1Vx.~ [IW+HBQU Kj 6g;s'9G%UlHaWeOxCxF^wET\rRe7 #b>*\zJ:6R;]"_%^SzVm=@A~-o1`2Vl#4h?l9`rC/XgKĕ9O 2<8s~6ͥss0M^UU Ld_XFKFzZYp/mTgWwR1bBZUrH7"X .HՂ~}qA@DaopJ7AGc)gFտ%Ocar$z]ŏ%-U#KJ X-b=":M#Xߒ*בEG|1rgov>g|.Ÿ2~"Ak/?;\u HL$ff-{m*Oya=i` '7ɤ";j\%_h_-ܗm*vdQaYcXǙ/OŢ}Wh;KeyTՒ D7sN1t^_mvő<nCtJu#Ԛ@ u fZM8˨%Um$*4C EbR,nה^qNu 2̥g2 HJ!]qM͑6y+LMOiv9hThmo;ߩ bcRFCOaiS ,hD#dyun7qh{>IY_"qg1TkjIcEnabwY.*g$J%,0":ICF6߮$ auFJ]e5<)3iU)gdKn]6(3Fg2Dǭ F{y :&ۇ *+N<.ԝzpm?lzO̓e|LnuH~l-&Tf {[W.}< /kS;ƿpeW^yH1V`@]XX^6!IdYLE*{^o.$2HXMbw”sw$!LvH˅hW0Z܀ZDm',,$FÒ9mLc=e!|ƉMB23\:a 4R "ɩ:2et:|(jj *%xK^e[y_u8*+\"Y^8cP\; X1YHV0_{U]=HuvToltUk<7R' ˯ƿb2n2 7-,hG1NʢI%Vq- pM5ad1"dK+"'nTu3EA6 y 6 7SFJBT*@i#Zʈ󿉾v]ת%,U6ܰ$o0 rfzmJehWXI?nj[ZtFUJ+‚F~rC)̤ͣ0g!@*iYO[I[Ƈe^Y]H(Fi)Ē.< r[v+n$ʧa"2.z[GrXW*㏸#tkMvztt N{U8djr_/HhQb#é3^6x4n_$e W}74mW$kHˎZjnԶSms2p/v؎$y\N%@/:Tpce[+Gb/oT_|1OTp=6;?|LS69+;F\wI2*NzbE-a2j*WPQn,.ؐ:uĄfvI$KJZH'EBX!Qv{~,Ei ;[ *,vz-QשIJ Rzy5dSD9r+rJ|He ϦMܫXt7oRlsdjѪI #!PzX1 3ka;Am@h$_ ZelPv1䖪͠<\(Lzdwlf3TJ̥_tIt́ Gppݰsin"VpfIJW* }X̹?(l' >xkٖEiR=^aJTqTO  ?]_,WxJጕNZ`JRzI2X=v͕3 %ٵ3B;|o"Ă<;:؟ܒQ&aERO˷cWkͿaui(_:ؼ:Ia[{O4`(=̿|cnD!9Urtˉ H~g|\-S00bXco1E XٸbO?ÙVb&-:"<.Z|Zc׊i 0tbFYIb<<[]9]5#))`'+)TakV k_dw֧eNok#l.o0q Hdٓ#'i2WȐ=YuBd**i-C! #a؍LQWg0)jADۗ/ސAyIq1Aj!i.':Y@:OKY1d)]Zju Y [lfRJ0Yw{̡jw PzQm 6{slJeSEY ,nUe=wmZ#gL7g|y+ y >nVS{"ծé_6߾V J"N$fT* dKzۨ}q5-+8q!s%k鞶-mzXxJ)}:ch!22B4oجQS Pk $ } "ȩ,xqrD7e\'$]h5h-{5FؕJYH[i#HSt ̲V rٽj4ƎI-E|7j *NYL1vHK^:#Y(%jP<*GqUC>{ D%Trx@X0q1{)kjm%K‘:,D\IR< k\*FMNWTrAAǘ->x-3XڭU)4ZP۽Ż`K#Jz_&&HFìpo$Zn**2bfdP]}[cF^(8r'Z5:fB7>}/|S~yQeTc`Ze}sm D(hL Ig)iePXLBCoz VQVK|#.Ð1IL]=`47'suu.ѩߔV dz\WSʎI]fQEtQ`6nW/PeXPW[{$P:ajb/!!Xɡ@&m:JЪUTjDX@mFO#e(fpLs1KzK{;Xs덪ʟt*rcmG _sp sܓ8U #i&A`*@e.{AHA,J ڢPsd m@:@qlx ?HTı/޸$ X4hL| m ǪH`ɥg;5IU4܍@ ?X[mXCXdlu\wnt$ B>gd Ymp`w3B$eU$ok;n߮g H:DN&ƏES~{V쐀֧:on65waerg]Kkm R_"v#vHچ!Reu:ro;Xn"+Q N*!#jacX c1?8$*E@ IQ wܛ!bP~xUy4A wqQfuձXmX_A75|INWR VCOPr$4oPH$r2V! 0F`ok[k[hl -оyfIX&jaUEM*LN'cm+USgQI̲R,#тGbuuŜ"8~8(>dft٘(əMU{\ pRi eSZSo%E]s [oIZJ/B>@nmKHEO%s̫{ZuMk <薓x`Gʐhxde/{zۧLfZG"0Q3ڥ`AeR[/TMB!^F۸a؀C-RCw'B] p8+5V=5e#psyւY xX}-}`n N6>a;ۦ,̢ xdFSp\8ȎqL=d%5L8P7F=/|#U2r) ` _s%h+DRekOgjB6 *6Vkn#ʡ%"*Tz 8NǂAY:Jd(Hݝn.qNanXc~A8B9%8?7ljU-TtDH7z0/𨵼h 5FrUF"Ui~]> I[%qM9J+&6 l㧐3 V\E_-dCq 1ۂ S ۀId VrU#V7@Lm ocަ ,HI$0H:xo[ 1f+T&RLU w,FK&72O)a]wOr|K>(9*7_U? 7rQXv[{o U)yA[ʱrEr 9xHPcA]&`To 0+-**?ު->Yrb<JcWF[H~ß FJ]ش&]|_E;?<pE?w~-$Aj,7̿5W' {[/d0+|#ufraw-0.20/ufraw_delete.c0000644000175000017500000001107212303017427012312 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_delete.c - The GUI for choosing what files to delete. * Copyright 2004-2014 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.20/nikon_curve.h0000644000175000017500000001455712303017427012206 00000000000000/*************************************************** nikon_curve.h - read Nikon NTC/NCV files Copyright 2004-2014 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.20/ufraw_conf.c0000644000175000017500000031014512401246236012001 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_conf.c - handle configuration issues * Copyright 2004-2014 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", "xtrans", "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 *xdgconf; 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) { confFilename = g_build_filename(uf_get_home_dir(), ".ufrawrc", NULL); if (!g_file_test(confFilename, G_FILE_TEST_IS_REGULAR)) if ((xdgconf = g_get_user_config_dir())) confFilename = g_build_filename(xdgconf, "ufrawrc", NULL); in = g_fopen(confFilename, "r"); /* We don't mind if confFilename 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; const char *xdgconf; FILE *out; if (IDFilename == NULL) { confFilename = g_build_filename(uf_get_home_dir(), ".ufrawrc", NULL); if (!g_file_test(confFilename, G_FILE_TEST_IS_REGULAR)) if ((xdgconf = g_get_user_config_dir())) confFilename = g_build_filename(xdgconf, "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" "LCMS " #ifdef HAVE_LCMS2 "2.x\n" #else "1.x\n" #endif "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; char *locale = uf_set_locale_C(); if (sscanf(grayscaleMixer, "%lf,%lf,%lf", &red, &green, &blue) != 3) { ufraw_message(UFRAW_ERROR, _("'%s' is not a valid grayscale-mixer option."), grayscaleMixer); uf_reset_locale(locale); return -1; } cmd->grayscaleMixerDefined = 1; cmd->grayscaleMixer[0] = red; cmd->grayscaleMixer[1] = green; cmd->grayscaleMixer[2] = blue; uf_reset_locale(locale); } } } 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.20/ufobject.h0000644000175000017500000005521312401246236011460 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufobject.h - UFObject definitions. * Copyright 2004-2014 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.20/dcraw_api.cc0000644000175000017500000010172112401246236011742 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_api.cc - API for DCRaw * Copyright 2004-2014 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, const int top_margin, const int left_margin, /*const*/ char xtrans[6][6]); 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, dcraw_data *h); 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, dcraw_data *h); void xtrans_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, dcraw_data *hh, const int passes); 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, dcraw_data *h); 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, dcraw_data *h); 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(); /* 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; h->top_margin = d->top_margin; h->left_margin = d->left_margin; 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; i = d->cblack[6]; FORC(d->cblack[4] * d->cblack[5]) if (i > d->cblack[6 + c]) i = d->cblack[6 + c]; FORC(d->cblack[4] * d->cblack[5]) d->cblack[6 + c] -= i; d->black += i; h->black = d->black; h->shrink = d->shrink = (h->filters == 1 || h->filters > 1000); 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; memcpy(h->xtrans, d->xtrans, sizeof d->xtrans); 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; h->raw.colors = d->colors; h->fourColorFilters = d->filters; if (d->filters || d->colors == 1) { if (d->colors == 1 || d->filters == 1 || d->filters > 1000) d->raw_image = (ushort *) g_malloc((d->raw_height + 7) * d->raw_width * 2); else d->raw_image = (ushort *) g_malloc(sizeof(dcraw_image_type) * (d->raw_height + 7) * d->raw_width); } 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->filters > 1 && d->filters <= 1000) lin_interpolate_INDI(d->image, d->filters, d->width, d->height, d->colors, d, h); } 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; i = d->cblack[6]; FORC(d->cblack[4] * d->cblack[5]) if (i > d->cblack[6 + c]) i = d->cblack[6 + c]; FORC(d->cblack[4] * d->cblack[5]) d->cblack[6 + 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, int top_margin, int left_margin, char xtrans[6][6]) { unsigned sequence = 0; int c; for (c = 15; c >= 0; --c) sequence = (sequence << 2) | fcol_INDI(filters, row, c, top_margin, left_margin, xtrans); 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 == 1 || hh->filters > 1000) && 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, hh->top_margin, hh->left_margin, hh->xtrans); 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 == 1 || hh->filters > 1000) 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 (h->filters == 9 && interpolation != dcraw_bilinear_interpolation) interpolation = dcraw_xtrans_interpolation; if (interpolation == dcraw_ahd_interpolation && h->colors > 3) interpolation = dcraw_vng_interpolation; if (interpolation == dcraw_ppg_interpolation && h->colors > 3) interpolation = dcraw_vng_interpolation; f4 = h->fourColorFilters; if (h->filters == 1 || h->filters > 1000) { for (r = 0; r < h->height; r++) for (c = 0; c < h->width; c++) { int cc = fcol_INDI(f4, r, c, h->top_margin, h->left_margin, h->xtrans); f->image[r * f->width + c][fcol_INDI(ff, r, c, h->top_margin, h->left_margin, h->xtrans)] = h->raw.image[r / 2 * h->raw.width + c / 2][cc]; } } else memcpy(f->image, h->raw.image, h->height * h->width * sizeof(dcraw_image_type)); int smoothPasses = 1; if (interpolation == dcraw_bilinear_interpolation && (h->filters == 1 || h->filters > 1000)) lin_interpolate_INDI(f->image, ff, f->width, f->height, cl, d, h); #ifdef ENABLE_INTERP_NONE else if (interpolation == dcraw_none_interpolation) smoothing = 0; #endif else if (interpolation == dcraw_vng_interpolation || h->colors > 3) vng_interpolate_INDI(f->image, ff, f->width, f->height, cl, 0xFFFF, d, h); else if (interpolation == dcraw_ppg_interpolation && h->filters > 1000) ppg_interpolate_INDI(f->image, ff, f->width, f->height, cl, d, h); else if (interpolation == dcraw_xtrans_interpolation) { xtrans_interpolate_INDI(f->image, h->filters, f->width, f->height, h->colors, h->rgb_cam, d, h, 3); smoothPasses = 3; } else if (interpolation == dcraw_ahd_interpolation) { ahd_interpolate_INDI(f->image, ff, f->width, f->height, cl, h->rgb_cam, d, h); smoothPasses = 3; } 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.20/generate_schemas.sh0000755000175000017500000000445212112232012013323 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.20/compile0000755000175000017500000001624512401246461011066 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # 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.20/ufraw_developer.c0000644000175000017500000011534712401246236013050 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_developer.c - functions for developing images or more exactly pixels. * Copyright 2004-2014 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 #ifdef HAVE_LCMS2 #include #include #else #include #define cmsCreateLab2Profile(x) cmsCreateLabProfile(x) typedef GAMMATABLE cmsToneCurve; typedef WORD cmsUInt16Number; #endif #ifdef HAVE_LCMS2 static void lcms_message(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText) { (void) ContextID; #else static int lcms_message(int ErrorCode, const char *ErrorText) { #endif /* Possible ErrorCode: * see cmsERROR_* in or LCMS_ERRC_* in . */ (void) ErrorCode; ufraw_message(UFRAW_ERROR, "%s", ErrorText); #ifdef HAVE_LCMS1 return 1; /* Tell lcms that we handled the error */ #endif } 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; cmsToneCurve **TransferFunction = (cmsToneCurve **)d->TransferFunction; #ifdef HAVE_LCMS2 TransferFunction[0] = cmsBuildGamma(NULL, 1.0); TransferFunction[1] = TransferFunction[2] = cmsBuildGamma(NULL, 1.0); #else TransferFunction[0] = cmsAllocGamma(0x100); TransferFunction[1] = TransferFunction[2] = cmsBuildGamma(0x100, 1.0); #endif 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; } #ifdef HAVE_LCMS2 cmsSetLogErrorHandler(lcms_message); #else cmsSetErrorHandler(lcms_message); #endif 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); #ifdef HAVE_LCMS2 cmsFreeToneCurve(d->TransferFunction[0]); cmsFreeToneCurve(d->TransferFunction[1]); #else cmsFreeGamma(d->TransferFunction[0]); cmsFreeGamma(d->TransferFunction[1]); #endif 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"; #ifdef HAVE_LCMS2 /* * Emulates cmsTakeProductName() from lcms 1.x. * * This is tailored for use with statically allocated strings and not * thread-safe. */ const char *cmsTakeProductName(cmsHPROFILE profile) { static char name[max_name * 2 + 4]; char manufacturer[max_name], model[max_name]; name[0] = manufacturer[0] = model[0] = '\0'; cmsGetProfileInfoASCII(profile, cmsInfoManufacturer, "en", "US", manufacturer, max_name); cmsGetProfileInfoASCII(profile, cmsInfoModel, "en", "US", model, max_name); if (!manufacturer[0] && !model[0]) { cmsGetProfileInfoASCII(profile, cmsInfoDescription, "en", "US", name, max_name * 2 + 4); } else { if (!manufacturer[0] || (strncmp(model, manufacturer, 8) == 0) || strlen(model) > 30) strcpy(name, model); else sprintf(name, "%s - %s", model, manufacturer); } return name; } #endif /* 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) */ #ifdef HAVE_LCMS2 static cmsInt32Number contrast_saturation_sampler(const cmsUInt16Number In[], cmsUInt16Number Out[], void *Cargo) #else static int contrast_saturation_sampler(cmsUInt16Number In[], cmsUInt16Number Out[], void *Cargo) #endif { 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; struct contrast_saturation cs = { contrast, saturation }; #ifdef HAVE_LCMS2 cmsPipeline* Pipeline = NULL; cmsStage* CLUT = NULL; hICC = cmsCreateProfilePlaceholder(NULL); if (hICC == NULL) return NULL; // can't allocate cmsSetDeviceClass(hICC, cmsSigAbstractClass); cmsSetColorSpace(hICC, cmsSigLabData); cmsSetPCS(hICC, cmsSigLabData); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a pipeline with 3D grid only Pipeline = cmsPipelineAlloc(NULL, 3, 3); if (!Pipeline) goto error_out; if (!(CLUT = cmsStageAllocCLut16bit(NULL, 11, 3, 3, NULL))) goto error_out; if (!cmsStageSampleCLut16bit(CLUT, contrast_saturation_sampler, &cs, 0)) goto error_out; #if LCMS_VERSION >= 2050 if (!cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT)) goto error_out; #else cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT); #endif // Create tags cmsWriteTag(hICC, cmsSigMediaWhitePointTag, cmsD50_XYZ()); cmsWriteTag(hICC, cmsSigAToB0Tag, Pipeline); // Pipeline is already on virtual profile cmsPipelineFree(Pipeline); return hICC; error_out: if (CLUT) cmsStageFree(CLUT); if (Pipeline) cmsPipelineFree(Pipeline); if (hICC) cmsCloseProfile(hICC); return NULL; #else /* HAVE_LCMS1 */ 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, 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, (void *) cmsD50_XYZ()); cmsAddTag(hICC, icSigAToB0Tag, (void *) Lut); // LUT is already on virtual profile cmsFreeLUT(Lut); return hICC; #endif /* HAVE_LCMS1 */ } #ifdef HAVE_LCMS2 static cmsInt32Number luminance_adjustment_sampler(const cmsUInt16Number In[], cmsUInt16Number Out[], void *Cargo) #else static int luminance_adjustment_sampler(cmsUInt16Number In[], cmsUInt16Number Out[], void *Cargo) #endif { 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; #ifdef HAVE_LCMS2 cmsPipeline* Pipeline = NULL; cmsStage* CLUT = NULL; hICC = cmsCreateProfilePlaceholder(NULL); if (hICC == NULL) return NULL; // can't allocate cmsSetDeviceClass(hICC, cmsSigAbstractClass); cmsSetColorSpace(hICC, cmsSigLabData); cmsSetPCS(hICC, cmsSigLabData); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a pipeline with 3D grid only Pipeline = cmsPipelineAlloc(NULL, 3, 3); if (!Pipeline) goto error_out; if (!(CLUT = cmsStageAllocCLut16bit(NULL, 11, 3, 3, NULL))) goto error_out; if (!cmsStageSampleCLut16bit(CLUT, luminance_adjustment_sampler, (void*)d, 0)) goto error_out; #if LCMS_VERSION >= 2050 if (!cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT)) goto error_out; #else cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT); #endif // Create tags cmsWriteTag(hICC, cmsSigMediaWhitePointTag, cmsD50_XYZ()); cmsWriteTag(hICC, cmsSigAToB0Tag, Pipeline); // Pipeline is already on virtual profile cmsPipelineFree(Pipeline); return hICC; error_out: if (CLUT) cmsStageFree(CLUT); if (Pipeline) cmsPipelineFree(Pipeline); if (hICC) cmsCloseProfile(hICC); return NULL; #else /* HAVE_LCMS1 */ 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, (void *) cmsD50_XYZ()); cmsAddTag(hICC, icSigAToB0Tag, (void *) Lut); // LUT is already on virtual profile cmsFreeLUT(Lut); return hICC; #endif /* HAVE_LCMS1 */ } /* 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 = cmsCreateLab2Profile(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 color filter * array interpolation. It is normalized to guarantee 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) { if (d->colors == 1) for (i = 0; i < 3; i++) d->colorMatrix[i][0] = rgb_cam[0][0] * 0x10000; else 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 { #ifdef HAVE_LCMS2 cmsToneCurve **TransferFunction = (cmsToneCurve **)d->TransferFunction; cmsFloat32Number values[0x100]; cmsFreeToneCurve(TransferFunction[0]); for (i = 0; i < 0x100; i++) values[i] = (cmsFloat32Number) cs->m_Samples[i] / 0x10000; TransferFunction[0] = cmsBuildTabulatedToneCurveFloat(NULL, 0x100, values); d->luminosityProfile = cmsCreateLinearizationDeviceLink( cmsSigLabData, TransferFunction); cmsSetDeviceClass(d->luminosityProfile, cmsSigAbstractClass); #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); #endif } 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 (d->colors == 1) tmppix[1] = tmppix[2] = tmppix[0]; 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.20/mkinstalldirs0000755000175000017500000000672212112232012012277 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.20/Makefile.am0000644000175000017500000000750112410677406011546 00000000000000# $Id: Makefile.am,v 1.63 2014/09/23 01:00:25 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 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 appdata_DATA = ufraw.appdata.xml appdatadir = $(datadir)/appdata # 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.appdata.xml 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_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/liblcms2-2.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 $< $@ ufraw-0.20/ufraw-setup.iss.in0000644000175000017500000002666112303023427013116 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: "RW2Association"; Description: "RW2 - Panasonic Raw"; GroupDescription: "Associate the following file types with UFRaw:" Name: "RWLAssociation"; Description: "RWL - Leica Raw"; 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\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\libjpeg-9.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "@DOSPREFIX@\bin\liblcms2-2.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\libtiff-5.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: ".rw2"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: RW2Association Root: HKCR; Subkey: ".rwl"; ValueType: string; ValueName: ""; ValueData: "UFRaw"; Flags: uninsdeletevalue; Tasks: RWLAssociation 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.20/TODO0000644000175000017500000000415312227404162010173 00000000000000$Id: TODO,v 1.34 2013/10/05 17:30:21 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. * 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.20/ufraw_exiv2.cc0000644000175000017500000003525012303017427012254 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-2014 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.20/ufraw-batch.c0000644000175000017500000001250012303017427012044 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw-batch.c - The standalone interface to UFRaw in batch mode. * Copyright 2004-2014 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.20/Makefile.in0000664000175000017500000016557512410677421011576 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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.63 2014/09/23 01:00:25 nkbj Exp $ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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) subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in mkinstalldirs \ $(srcdir)/ufraw-setup.iss.in depcomp COPYING ChangeLog README \ TODO compile config.guess config.sub install-sh missing 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_AR_1 = 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)$(gimpbindir)" \ "$(DESTDIR)$(gtkdir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(appdir)" "$(DESTDIR)$(appdatadir)" \ "$(DESTDIR)$(schemasdir)" PROGRAMS = $(bin_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) am__ufraw_SOURCES_DIST = ufraw.c @MAKE_GTK_TRUE@am_ufraw_OBJECTS = ufraw-ufraw.$(OBJEXT) ufraw_OBJECTS = $(am_ufraw_OBJECTS) @UFRAW_WIN32_TRUE@am__DEPENDENCIES_2 = ufraw_icon.opc am__DEPENDENCIES_3 = libufraw.a $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) @MAKE_GTK_TRUE@ufraw_DEPENDENCIES = $(am__DEPENDENCIES_3) \ @MAKE_GTK_TRUE@ $(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_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) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_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 am__v_lt_1 = 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 " $@; am__v_CC_1 = 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 " $@; am__v_CCLD_1 = 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 " $@; am__v_CXX_1 = 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_CXXLD_1 = SOURCES = $(libufraw_a_SOURCES) $(dcraw_SOURCES) \ $(nikon_curve_SOURCES) $(ufraw_SOURCES) $(ufraw_batch_SOURCES) \ $(ufraw_gimp_SOURCES) DIST_SOURCES = $(am__libufraw_a_SOURCES_DIST) \ $(am__dcraw_SOURCES_DIST) $(am__nikon_curve_SOURCES_DIST) \ $(am__ufraw_SOURCES_DIST) $(ufraw_batch_SOURCES) \ $(am__ufraw_gimp_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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) $(appdata_DATA) $(schemas_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope 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__post_remove_distdir = $(am__remove_distdir) 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 DIST_TARGETS = dist-gzip 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@ 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@ LCMS1_CFLAGS = @LCMS1_CFLAGS@ LCMS1_LIBS = @LCMS1_LIBS@ LCMS2_CFLAGS = @LCMS2_CFLAGS@ LCMS2_LIBS = @LCMS2_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 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 @INSTALL_MIME_TRUE@appdata_DATA = ufraw.appdata.xml @INSTALL_MIME_TRUE@appdatadir = $(datadir)/appdata # 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.appdata.xml 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@ @MAKE_GTK_TRUE@ufraw_SOURCES = ufraw.c @MAKE_GTK_TRUE@ufraw_CPPFLAGS = $(UFRAW_CPPFLAGS) @MAKE_GTK_TRUE@ufraw_LDADD = $(LDADD) $(GTK_LIBS) 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_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 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 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-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-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-ufraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufraw_chooser.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 -o $@ $< .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 -o $@ `$(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-ufraw.o: ufraw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw-ufraw.o -MD -MP -MF $(DEPDIR)/ufraw-ufraw.Tpo -c -o ufraw-ufraw.o `test -f 'ufraw.c' || echo '$(srcdir)/'`ufraw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw-ufraw.Tpo $(DEPDIR)/ufraw-ufraw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw.c' object='ufraw-ufraw.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_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw-ufraw.o `test -f 'ufraw.c' || echo '$(srcdir)/'`ufraw.c ufraw-ufraw.obj: ufraw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufraw_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ufraw-ufraw.obj -MD -MP -MF $(DEPDIR)/ufraw-ufraw.Tpo -c -o ufraw-ufraw.obj `if test -f 'ufraw.c'; then $(CYGPATH_W) 'ufraw.c'; else $(CYGPATH_W) '$(srcdir)/ufraw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ufraw-ufraw.Tpo $(DEPDIR)/ufraw-ufraw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ufraw.c' object='ufraw-ufraw.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_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ufraw-ufraw.obj `if test -f 'ufraw.c'; then $(CYGPATH_W) 'ufraw.c'; else $(CYGPATH_W) '$(srcdir)/ufraw.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-appdataDATA: $(appdata_DATA) @$(NORMAL_INSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || 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)$(appdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ done uninstall-appdataDATA: @$(NORMAL_UNINSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appdatadir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(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__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_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.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 $(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 \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=.. --prefix="$$dc_install_base" \ && $(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__post_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)$(gimpbindir)" "$(DESTDIR)$(gtkdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdir)" "$(DESTDIR)$(appdatadir)" "$(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-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-appdataDATA \ 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-appdataDATA \ uninstall-binPROGRAMS uninstall-gimpbinPROGRAMS \ uninstall-gtkPROGRAMS uninstall-man uninstall-schemasDATA uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-binPROGRAMS \ clean-cscope clean-generic clean-gimpbinPROGRAMS \ clean-gtkPROGRAMS clean-noinstLIBRARIES cscope cscopelist-am \ ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ 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-appdataDATA install-binPROGRAMS \ 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-am uninstall uninstall-am uninstall-appDATA \ uninstall-appdataDATA uninstall-binPROGRAMS \ uninstall-gimpbinPROGRAMS uninstall-gtkPROGRAMS uninstall-man \ uninstall-man1 uninstall-schemasDATA #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/liblcms2-2.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.20/ufraw_message.c0000644000175000017500000001255612303017427012504 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_message.c - Error message handling functions * Copyright 2004-2014 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.20/ufraw.c0000644000175000017500000001071312303017427010771 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw.c - The standalone interface to UFRaw. * Copyright 2004-2014 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 #ifndef _WIN32 gdk_threads_init(); gdk_threads_enter(); #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); 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) { #ifndef _WIN32 gdk_threads_leave(); #endif exit(1); } if (optInd == 0) { #ifndef _WIN32 gdk_threads_leave(); #endif 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); #ifndef _WIN32 gdk_threads_leave(); #endif 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); #ifndef _WIN32 gdk_threads_leave(); #endif 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); #ifndef _WIN32 gdk_threads_leave(); #endif 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); #ifndef _WIN32 gdk_threads_leave(); #endif exit(exitCode); } ufraw-0.20/ufraw_embedded.c0000644000175000017500000003552412401246236012612 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_embedded.c - functions to output embedded preview image. * Copyright 2004-2014 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.20/ufraw_ufraw.c0000644000175000017500000025166712405470002012207 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_ufraw.c - program interface to all the components * Copyright 2004-2014 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; uf->IsXTrans = raw->filters == 9; #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 (strcasecmp(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 && !uf->IsXTrans) { 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 */ if (!uf->IsXTrans) 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 threshold is scaled for compatibility */ if (uf->IsXTrans) dcraw_wavelet_denoise_shrinked(&final, uf->conf->threshold * sqrt(uf->raw_multiplier)); // 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)floor(srcX + 0.5); int yy = (int)floor(srcY + 0.5); // 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)) { double chanMulArray[4] = {1, 1, 1, 1 }; 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 */ if (uf->colors > 1) for (c = 0; c < 3; c++) chanMulArray[c] = raw->pre_mul[c] / rgbWB[c]; ufnumber_array_set(chanMul, chanMulArray); } else { 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 (strcasecmp(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) && !strcasecmp(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.20/ufraw.10000664000175000017500000004221012401246517010711 00000000000000.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" 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" '' . ds C` . ds C' '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. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" 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 "2014-09-01" "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 color filter array 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, PNG\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.20/Doxyfile0000664000175000017500000017363111341670660011227 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.20/MANIFEST0000664000175000017500000000725310402130413010626 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.20/ufraw-gimp.c0000644000175000017500000004171512303017427011731 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw-gimp.c - The GIMP plug-in. * Copyright 2004-2014 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" #if HAVE_GIMP_2_9 #include #endif #include #include #include #include #include void query(); void run(const gchar *name, gint nparams, 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 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 const GimpParamDef load_return_vals[] = { { GIMP_PDB_IMAGE, "image", "Output image" }, }; static const GimpParamDef thumb_args[] = { { GIMP_PDB_STRING, "filename", "The name of the file to load" }, { GIMP_PDB_INT32, "thumb_size", "Preferred thumbnail size" } }; static 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" } }; 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-2014 by Udi Fuchs", "ufraw-" VERSION, "raw image", NULL, GIMP_PLUGIN, G_N_ELEMENTS(load_args), G_N_ELEMENTS(load_return_vals), load_args, load_return_vals); gimp_register_magic_load_handler("file_ufraw_load", (char *)raw_ext, "", "0,string,II*\\0," "0,string,MM\\0*," "0,string, 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); #ifndef _WIN32 gdk_threads_leave(); #endif 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); */ } #ifndef _WIN32 gdk_threads_leave(); #endif return; } else { /* Don't issue a message on thumbnail failure, since ufraw-gimp * will be called again with "file_ufraw_load" */ if (loadThumbnail) { #ifndef _WIN32 gdk_threads_leave(); #endif 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); #ifndef _WIN32 gdk_threads_leave(); #endif return; } } /* Load $HOME/.ufrawrc */ conf_load(&rc, NULL); ufraw_config(uf, &rc, NULL, NULL); sendToGimpMode = (uf->conf->createID == send_id); #if !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, ufraw_gimp_plugin, 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; #ifndef _WIN32 gdk_threads_leave(); #endif 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; #ifndef _WIN32 gdk_threads_leave(); #endif 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; } #ifndef _WIN32 gdk_threads_leave(); #endif 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 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, GIMP_RGB, depth == 3 ? GIMP_PRECISION_U8_GAMMA : GIMP_PRECISION_U16_GAMMA); #else uf->gimpImage = gimp_image_new(Crop.width, Crop.height, GIMP_RGB); #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, GIMP_RGB_IMAGE, 100.0, GIMP_NORMAL_MODE); #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 /* 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; 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); #if defined(GIMP_CHECK_VERSION) && GIMP_CHECK_VERSION(2,8,0) gimp_image_attach_parasite(uf->gimpImage, exif_parasite); #else gimp_image_parasite_attach(uf->gimpImage, exif_parasite); #endif gimp_parasite_free(exif_parasite); #if defined(GIMP_CHECK_VERSION) && GIMP_CHECK_VERSION(2,8,0) { GimpParam *return_vals; gint nreturn_vals; return_vals = gimp_run_procedure("plug-in-metadata-decode-exif", &nreturn_vals, GIMP_PDB_IMAGE, uf->gimpImage, GIMP_PDB_INT32, 7, GIMP_PDB_INT8ARRAY, "unused", GIMP_PDB_END); if (return_vals[0].data.d_status != GIMP_PDB_SUCCESS) { g_warning("UFRaw Exif -> XMP Merge failed"); } } #endif } } /* 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); #if defined(GIMP_CHECK_VERSION) && GIMP_CHECK_VERSION(2,8,0) gimp_image_attach_parasite(uf->gimpImage, icc_parasite); #else gimp_image_parasite_attach(uf->gimpImage, icc_parasite); #endif 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]); } } return UFRAW_SUCCESS; } ufraw-0.20/ufraw.appdata.xml0000664000175000017500000000161412410144632012760 00000000000000 ufraw.desktop CC0-1.0

Import and edit raw images from digital cameras

The Unidentified Flying Raw (UFRaw) is an application that decodes raw images from digital cameras and allows you to manipulate them, changing parameters such as the exposure and white balance of the image. UFRaw uses code from the DCRaw raw image decoder, and supports over 600 camera models, including many Sony, Nikon, Canon and Fuji cameras.

http://ufraw.sourceforge.net http://ufraw.sourceforge.net/Guide/UFRaw-screenshot.jpg ufraw-0.20/uf_gtk.h0000644000175000017500000000434512401246236011136 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_gtk.h - gtk compatibility header * Copyright 2004-2014 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.20/autogen.sh0000755000175000017500000000050312227404162011477 00000000000000#!/bin/sh # $Id: autogen.sh,v 1.8 2013/10/06 05:00:15 nkbj Exp $ # Generate all autoconf/automake files, to prepare for running # configure from only the contents of CVS. # We silently assume that Automake 1.5 (released 2001-08-23) or higher is used. aclocal autoconf autoheader automake --foreign --add-missing --copy ufraw-0.20/icons/0000775000175000017500000000000012410700171010666 500000000000000ufraw-0.20/icons/vignetting-24.png0000664000175000017500000000141211015633760013724 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHrDOR'qI f!xVtl) Y55 He8qlYjrTVm>ժr>UV~ma0L*&o_[oܪU*Uzzl[ vۿxcEwgL_ac,0 5_V'|MNP+Lbـ9y!iJj,AI2G5FMStP0QjXΩC EMIDcQ3[S.qTIv='d ӋtQh8 F $ B&0pE[4P$gAH5g!fR8ٌ=x~pHwA8@}Z#WR=4PP5>RM8RȪ {v?+/S:jڈ߆.ٞm]UZ:7QS U}!!Jq{eVɝNBވe@wOS$US/>\pحY_'>Ҍ'Ɉ1-^y=71KXmoԶA7*{4f\E*b$YwX%C~{7N)!w'~Q%&ut;0nP8VIENDB`ufraw-0.20/icons/channel-grey-24.png0000664000175000017500000000103012376774127014134 00000000000000PNG  IHDRJ~sIDATxOhA?1iL FC/TO""((TXIipv!T<@@a^(}7k image/svg+xml ufraw-0.20/icons/curve-24.png0000664000175000017500000000133010576355740012703 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<UIDATHAHTQ3 *3 10&$\Dw3`@ "0k3R$fjY(٢0Nooo}ቪLH6Ģˡ@N"Tu?Ɯφ@șNnu@DV-$o%yT`7 ;"6w;=>@g8SJngpN>`\D^}Ƭ=82POZ vಈƞvE"Չ؋T>W蠷kk=?p3{xyݛk o\mknN*M*N;T^:ﷶ܊ǿLD ?,Yk„vjMo~'$Pj} "`xkp|=R$"{ =(k5r>}GA>Prρe6ioo:ў ?) U>l8N hh4F&s"H,E, t ?v++0s_D5a@ <."%U].UJl)fL⯺?cIENDB`ufraw-0.20/icons/flip-horiz-24.png0000664000175000017500000000111510614212371013624 00000000000000PNG  IHDRw=bKGD pHYs  ~tIME*yIDATxjALΠb>;]pY >BF.q'J BB, !˨8z2&t]նC9pTݮ*a ț'uU}Lŝoi^lt;z1MS1nCzn ;#@tQ?Ygni4{A͘WTE(E%$qR A;@PEY}M|qE "TMUph~R8JÈcD˲p\p\ _;ZgG`h`g7ijG\; 5FFVޮl `*kЭ Tѹr:7Iqrq`K56p7iC!\ќKWg,&2aVj(Bs85N06-gN?ȏ?;`8IENDB`ufraw-0.20/icons/tca.svg0000664000175000017500000001742511015633760012120 00000000000000 image/svg+xml A A A ufraw-0.20/icons/ufraw.png0000664000175000017500000000356310525736262012466 00000000000000PNG  IHDR00WbKGD pHYs  tIME vsIDATh[l\Gƿn=ĩ;b{ZSLHhlBT N# Vm*^TPAR HijҸ4$M4q.]'>יaw]JTihh79@5jԨQF[u_+ё>RD{޽p ƃ^1CtCzg,OHHH.OLi?Ϻwn^:Cn穙{X RJln!DC: 4D dx>0z⺷όT*!$2 N>,V4݆}0 ~󙹫6o\|#}w/7݁Wnz&wQPV+)c:%DiFc~T;ulg=1 yPJFcLNNa9<k}'qAqo`BCs09M@)t?9!8۶a6<ǑJ{hlXOsCs<@"yj/V/M!WʹQ@o6J"rYve7o9'Oj:4ܠ" k`k## aY]b("8b4MaTEW !DŽ(PJ#/wвjsT36q?4F@)^(ǷZbRF@PG"@"@*D&A:F:ꔫ`RRqZٍ>T@G{խ;8CJ׆`ò,0J`;y]dvJH ()AECC h^ٌUVh8/G)N!N}o}/m+Wsp\ׅa!!8N*(KN RPRǤ, M7fM Z[[޾` J+j61=3˗@ ӄ8.Tt]G8 i@u0J +@)- a@)%|σyhZфlw7zzB25t}_xC_d$ylXWHEJ%29/,d0octts݆{Ǭuc Rb@A4DcQD#CXbt]/C!<σpò,#y.\T[o냛{jk? r;~ #xg0<:>lE.7 '0L#2a&TBB !@ȥ3'iK:y3 vz>v{IЯ65fv_̆ -SS8p/udaY(|;B3(JԾ!D))Br,}c"o:tмpbxd&w#R 0ee.xɧ~TB5jԨ W(ҙ|FF5n /YIENDB`ufraw-0.20/icons/film.svg0000664000175000017500000001554110525736261012302 00000000000000 image/svg+xml UFRaw Film Udi Fuchs UFRaw ufraw-0.20/icons/unlock.svg0000664000175000017500000003300011334726612012632 00000000000000 image/svg+xml ufraw-0.20/icons/tca-24.png0000664000175000017500000000206011015633760012315 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATH[lTUezI/A5 b0tB$0TRj#ML|1!!o/(Bjņ\XHKKLZi migÙtBWZ{kf$1xH+"E/uVT11n YqsMM 7@ivR/1.}jh."=Ҝ.!ޟ {8BYTöލ/ӎK 5S5@ l?q=0ʥO?Xl۩ /1OfTltGw5刺6y@}!8UUn`hmvp*{T~IJcKd$sM꺢q*Y@p7s!FfZ+pڵtկ-!/WgS읠E+Lԙk}»T`xSul %#)!q򪰌(vF3n1VV[ ʥH={%8d,=1T-sI ]&vJ# uQmR=x>;zS-/2N؟2e_U49E*q&`1g`EL:@- @jP0!^W uotIENDB`ufraw-0.20/icons/geometry-24.png0000664000175000017500000000337211015633760013410 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<wIDATHuklwfiw k\chHHc$Uj1J[H[nFJ**)/MR()Q("N"ч(Iɂ0Ԁën6ٙݙ]'itts?{R Ƶ!f T6&&,j&cV nu=qmk3pX@h@0!|JI/(YtabLr*^ 7@w}h\۪Zq=;|mo/jb渒'_pI ғxEBΈP%~?sK/6`v[/>J[=(ϓXTŀHIb9>cI 1j$)G^-厶J#*ñ k[Wz?ӿn_)/\`23y"| _Z~l-Î-`^Q9gJ:v/z0P}=mVr]wUDt+2کΎ9͊=G2\LF˒}6k ֳG`4kbrIWWcccdYN>M$ABj= 0P]ݲehF(Nz`&\Zqu)Ai%e=<M3^U %cffzd,qRyB{=\!(H5$4P>#PNq1uƗH_|3wrPRŢE4T1V-ғwe6%G4{K\dVRӣ5Chb:kq#i )}GS`3.f? /̬ozϿ?Q/ 'Dմ'+e~ѹVu ߒ7Nж//W'>w{tWm+9ZokmƌdrO,F}lVt-(啲Z-7'L|gNdƵW@Ths~ytVh-+睪XǮ,}VyS('+iI! "R+_1Vh\\>m]ܢB p fwc"$`/@ӇD8z JV_;^vw'' Ot{a'[QЮIENDB`ufraw-0.20/icons/rectify-24.png0000664000175000017500000000132510657656414013232 00000000000000PNG  IHDRw=sBIT|d pHYsi")tEXtSoftwarewww.inkscape.org<RIDATHkAƿf%lbjL ҢA,[/!T(B)ѣ<[^)A^x[⩕$A<݄JZ o̼73$"8Ƨ~8_\'ZJ%`6`^S gtқN)U^rubP͢j?FTDZ FB4vb6ZVjG|+@#8̙CD,p׊"r, 3?`\dsefq]Wqܝ?33w666 q&|}R J)032L[~<==]=>8\.wT*i=*c`1Q<} `ȱhUԭQ}h"2ځ߷$I^*="J""$",---'lyy^u]ѐh$z=GtEĐҪ;??_Z\mGDO Ю1v/fZ6S UQ R)-E0iȐ٧p$W'IENDB`ufraw-0.20/icons/hueadjust-24.png0000664000175000017500000000033011143734441013540 00000000000000PNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<UIDATH!0)v ~o8$bIӺo3x`yڷ $h,#Xcok l @|r ك image/svg+xml UFRaw Unclip LCH Udi Fuchs ufraw-0.20/icons/film-24.png0000664000175000017500000000221610525736261012505 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org< IDATHOhw?ݙYwluCc) 6h"H=œ(z-I{,P(RO^* V#-H4jy=Df7-eo>7JD?C_RH1[RWN2Rԅx<]a0Txb"\j[U4,vTj@S:r}}om444$E4ML&3#wL&󇈠6mڤAPAJ"o}SٹeYg2O"5 b1Dm۶ÇFlݺ 2v*t LL6m\6 TZؼڭeYLOOM:frr۶Z[K-ACCgmo]4\nYpl6mc$ DǏ@l-k55:5ٳsAD"xGi.^\BBϲo[ZZO&Z5yFFv-XYXhoE04duwfU(Kx^ۅc]o=]}&iP*0DTӬH }"˽:B, X^^9."k)T$8>{+00mw6}o; ԪEν*?.-o7oV8{"U4@Ӵr˗aq:<<{)Wp A]#8ty_Vlip.(<{eqj O22{ O` +c1-IKi5|߯y"?8tLMA"$45U\.0Q>:z#GaN"o wB;;=|f@]rP|O_B-jʿ Tةl6 :x x"?/Ti/IENDB`ufraw-0.20/icons/icc-profile-display-24.png0000664000175000017500000000170310576355740015422 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<@IDATH]hUG6LhSbW,NRkcevoE "ǭC)zFy!:*XC*/öIhSKɚp8u$ p]|1'Gj$ni ,QGNh= ['. &:ː` XٌII~;Q-F5C |vR F~8.]@XsuA*dB###OMM}6Q;%QdY<[xWy^3MR,fBxXk}qc )bZ" cAOA`" Kc㭀KPXZEHZkN"3BGs~^6e\TXs֞Dڒfqю1R85ݢ2gՇ  I8p#| R(, [T}Jgr(4ôϾ7q˖{\C>f 0&Z~hRIb*4Am,M$/eI/LZkۺvL~RxV[ݻw"%?i{8_m@h["6ܢaǻ?^wJ}-'_΄Xa\r9 0Wsӗ~g~KJ:[6~JGHG_Hڔnm@&7Z{5*=Aڑ5 5]%tg0ѫ7sl$Wk7<ԷTC6m% ;:IENDB`ufraw-0.20/icons/grayscale-24.png0000664000175000017500000000041411002375410013510 00000000000000PNG  IHDRw=sBIT|d pHYs䔥;tEXtSoftwarewww.inkscape.org<IDATH !П(EAmĺ,RGn Ar]rfs\#GJ%ZcAD0"Bk)Z{9kO)>w_@5ZuIe~̌9ҿ̼Do#^q`~IENDB`ufraw-0.20/icons/exposure.svg0000664000175000017500000000613710525736261013226 00000000000000 image/svg+xml ufraw-0.20/icons/curve.svg0000664000175000017500000001545210576355740012505 00000000000000 image/svg+xml ufraw-0.20/icons/manual-24.png0000664000175000017500000000230011334726612013023 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<=IDATHTiH\W=7qQh6[DDDRhHjF5h,%]*X`0B,%4ԈԢ6qqk639}K #&!*.k5 ÀuQ<5&ĉ֤;~!x{<%MCK`` 속}][tvv pƋsߔ'7 Ξxc` }-.wO1=e󡸼w2)Q^+Gs.T^r%DA'W?`jriv":S'.{pBDjۍ}[9}HvĬtFz6D69%!{C۱.3;?X__~nzI"xn9B>˞Yrv?WYkkk]GRV}ٶ6ܬ22`"L 4{^Gt:5sKns'q%%%f;/3@`XUWVY^ 0u@Ad'6#d~E++v $ h-Hر%bE݌ PF<$c1٧?GwFicpAyr*+//?pAmX@Vl:6ဠ+}y/%JCC1v&g[!'rͧjjjDvxKvh9Pv~'VOI[IENDB`ufraw-0.20/icons/white-balance-24.png0000664000175000017500000000211610576355740014265 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATH[h\e[znnd75 `*kC}IAP,}ȣ"P"XC`B m"Vږvs${s7{Ƈ&(3g?󟙏o*"<"5r'X%BF/IR'ho``Ӛ!s$ {VS՟=A>aQ ! Ikĸ2".@8I B-BdXu#B\_m"!vyvЎ] ꊾ`)U5.+z[#Qn݀zPd- ٧Ux(켻qj8i&.ZI8k|UB~ [6\y^ MSr$7Tu6o/Q?O•0,:;;wHKр}  /FΈÃhVn \"P՛:9|HreМjso'e ; H#7){Ej.q` 8Z`q Åa2cEO]6"^Dps`ŏѰޠuuu%"NACx3VB5iWjlVO֓ wj.lt!҇%+nZi=IӘ5-7&K,P42:b_NgI"R.]7[12@S_v7  9??w&|!) PM *swttxsSӹ c&CD:LDz02G=yZ}CVlb[Y`jZ>2331MSsB^7MUՖ|>]ZZNܞD"tN̽IOj8_j IENDB`ufraw-0.20/icons/channel-blue-24.png0000664000175000017500000000176511004147213014105 00000000000000PNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<IDATHՕMh\U?dҤIMjIAQ7YX)FR2 EHt!F""JHJ~lSIcC:?3s\42qfJ]ws;H)/[lm㦮QMW%Q]+塔wT]?WPQJdkܹV|A<;c24^p?zD GH RJVUUU04miSz۽bTyx(-aŐ. KDͱJFctFe˴RY̫d\C8^~ EJLCn%S$N1"%&g]>e6*/1tnqfs9Ne5kVR\{@w}noX$m*zS_.Y`dl4-Gd@Lt]t/U@>677~51>=c {P83UwW m0 BJI4+Ա|paIkk +0LdȤӬ6K̈́*,,b%8<`dl2ht:Oyxt +L$XZ#hhَDk4 u |}i<=d]{M!*9b-Bx \`0:.&cypHӴm۵͇`s_rI7adA,_~a}O3 \nǦ[UWWǍׅ؀ ?S]UUD"E$sn뺮Ps NfcM3su-`/An:IENDB`ufraw-0.20/icons/icc-profile-output.svg0000664000175000017500000001200710576355740015104 00000000000000 image/svg+xml ufraw-0.20/icons/automatic-24.png0000664000175000017500000000161011334726612013537 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHKHQgdSR=&LP{hHDPPPQD {*EURDAlY Ҩ(2|13ߜwtFs"%/\9{+T.۔z " cvM`T" ɻ_]\&YJ) k/8=!UEđ@C!B)!}TND^[qjx4WW~z ֻ`s!"*,oC_5:Βj!gA\H'dyQycXrD.Ë3ʜѼVj *F;~YD{< 2I`^w-r ?A=\[% n t]`<:07U$_"!nD!-2} `=IS9 -bpX{c+Xl/A@${Yd3]a[w2 (4H8J}=# q=Π @5 Mp@G>wDTPU@@:ՖNg`WR`o+^s 1Sl>)f)\ 2d!{,RZ${ "va#nf8k&z Ly]X m#hJ@mj CHUc6@UT){T*k'z!r >ԫ}n^^|X\&5{6fضoIENDB`ufraw-0.20/icons/color-management-24.png0000664000175000017500000000207010576355740015011 00000000000000PNG  IHDRw= pHYsutIME ;3|@IDATHǽ]L[e=e-jX61 D/bco011i?/yㅆ9W W`,,lҒ JiBE e7s.~y xJ&:Zdt|)PiYlYN i 14<4O'w% Nr*^TިcbՂ0lJe'ɳ}ɸ v51ps=t Ҩ7@ Gg͎-$`dSQ4!{Gm6Vn7Sjb#f -.( j`rP^Ɓ`XikNEܴN5yz*P2 R3A5#r426$$"\f)WLSaspo_`DIIQUuFW\k!_n{+Ǟ<Lg [PAu7d-J6CC.} Tr g ЄPPZF e!dY̧ @\ 0~#wk+-;*@g_?Oyr@VXr`J) h9 [aaY`r.zU{ &S$2  2 f?Q=WE&{sjVSIIF K@B!`Z(U6Lgc>A/ӝMQG F[@5RbG~ C)[ftS=? @KC<Иs!}hgW0MiЦcϧ+·[ܿ$&"?+"K!9@rc4h؝{lyLp&k_z}3XjCPNIENDB`ufraw-0.20/icons/color-corrections.svg0000664000175000017500000002001210576355740015013 00000000000000 image/svg+xml ufraw-0.20/icons/exposure-24.png0000664000175000017500000000100110525736261013417 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<~IDATHn0E[ `؁!l | S,H޺027TV !n•<~9JD'4Rk79rrRZ/"ƒKFXkǥ9#"*h4X,JVF$gNUp&0 <v `0Z |>Ϲ)" yو @}Xי(Hށ֚v @Ak~gp8)/r^g7_spӐK)?WXnW% -KVEZcLiq3QeΈn%Bȍ190ư\. 7M (\DuRؠnrZOF$[RO3W^E]$7IENDB`ufraw-0.20/icons/channel-green-24.png0000664000175000017500000000174611004147213014255 00000000000000PNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<xIDATHՕ]h[e=_i~iLlqeME,^BCD UX7\B!~̋C/bZF2VjIzIrzde yjJ)K6c ()yP 8FZ vtth -pqJłu):~rÀÇ5 W> Z& B@_58nRm*G=tHɾ<whBlD}C<|VH=3tN~sx"y( = _ʟX,y04rFg8hKc[s=Og^|%~(pE)0 ?HVr*_>]_DwBom`0Nc66ED%52@Ie!Oa&xϞJke >3y6pk`lL}ǡPXuʔJ%vlG}ضҢ1-?LQ(J?LΞb6c~ 7J#$f&j!uJB4N{klƁ B̮R"}Z#k\.q]d0>1֪-iF RSSǪIo4MVVV4P(mL]I'jimۣbH\ްZuuu1=TR}<qmmttt" o'}i9;ka{ 4F0^ΌZ@1s;:I`t}yTE_@btIENDB`ufraw-0.20/icons/ufraw_icons.h0000664000175000017500000054121212401246475013317 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 (channel_grey_24) #endif #ifdef __GNUC__ static const guint8 channel_grey_24[] __attribute__ ((__aligned__ (4))) = #else static const guint8 channel_grey_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\4FFF)FFF|JJJ\266JJJ\341\202GGG\371\4JJJ\343JJJ\272" "EEE\202FFF)\215\377\377\377\0\5GGG\207JJJ\374lll\377{{{\377\210\210\210" "\377\202\225\225\225\377\5\210\210\210\377{{{\377lll\377JJJ\375GGG\222" "\213\377\377\377\0\6eee\2JJJ\375\216\216\216\377\234\234\234\377\233" "\233\233\377\232\232\232\377\202\231\231\231\377\6\232\232\232\377\234" "\234\234\377\237\237\237\377\226\226\226\377NNN\376ddd\4\213\377\377" "\377\0\5ppp\375\331\331\331\377\254\254\254\377\236\236\236\377\232\232" "\232\377\202\231\231\231\377\6\233\233\233\377\240\240\240\377\260\260" "\260\377\346\346\346\377uuu\375III\20\213\377\377\377\0\5FFF\373\203" "\203\203\377\337\337\337\377\336\336\336\377\343\343\343\377\202\365" "\365\365\377\6\336\336\336\377\310\310\310\377\260\260\260\377vvv\377" "FFF\370III\20\213\377\377\377\0\15FFF\373qqq\377\363\363\363\377\364" "\364\364\377\335\335\335\377\205\205\205\377}}}\377vvv\377nnn\377ggg" "\377___\377FFF\370III\20\213\377\377\377\0\15FFF\373qqq\377\344\344\344" "\377\347\347\347\377\323\323\323\377\205\205\205\377}}}\377vvv\377nn" "n\377ggg\377___\377FFF\370III\20\213\377\377\377\0\15FFF\373qqq\377\325" "\325\325\377\332\332\332\377\307\307\307\377\205\205\205\377}}}\377v" "vv\377nnn\377ggg\377___\377FFF\370III\20\211\377\377\377\0\17\214\214" "\214{\211\211\211\377GGG\377qqq\377\306\306\306\377\315\315\315\377\275" "\275\275\377\205\205\205\377}}}\377vvv\377nnn\377ggg\377___\377HHH\377" "\205\205\205\377\204\211\211\211\377\1\217\217\217\243\203\377\377\377" "\0\20\211\211\211\5\214\214\214\360\361\361\361\377III\377qqq\377\270" "\270\270\377\300\300\300\377\263\263\263\377\205\205\205\377}}}\377v" "vv\377nnn\377ggg\377___\377LLL\377\364\364\364\377\203\377\377\377\377" "\2\323\323\323\372\212\212\212t\203\377\377\377\0\25\211\211\211V\243" "\243\243\363\374\374\374\377PPP\377iii\377\225\225\225\377\251\251\251" "\377\247\247\247\377\205\205\205\377}}}\377vvv\377nnn\377ggg\377[[[\377" "KKK\377\310\310\310\377\340\340\340\377\345\345\345\377\373\373\373\377" "\225\225\225\370\211\211\211\21\203\377\377\377\0\24\217\217\217\315" "\342\342\342\377\364\364\364\377\243\243\243\377LLL\377]]]\377ooo\377" "yyy\377\177\177\177\377yyy\377jjj\377]]]\377SSS\377JJJ\377\215\215\215" "\377\321\321\321\377\340\340\340\377\354\354\354\377\344\344\344\376" "\215\215\215\250\203\377\377\377\0\25\211\211\211*\217\217\217\366\374" "\374\374\377\357\357\357\377\352\352\352\377\321\321\321\377\231\231" "\231\377{{{\377___\377LLL\377KKK\377ZZZ\377rrr\377\217\217\217\377\277" "\277\277\377\332\332\332\377\335\335\335\377\333\333\333\377\371\371" "\371\377\247\247\247\366\211\211\2115\203\377\377\377\0\3\215\215\215" "\232\317\317\317\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\215\215\215\331\203" "\377\377\377\0\25\211\211\211\13\214\214\214\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\277\367\211" "\211\211c\203\377\377\377\0\25\211\211\211f\265\265\265\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\215\215\215" "\365\211\211\211\12\203\377\377\377\0\15\216\216\216\334\353\353\353" "\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\324\375\213\213\213\227\203\377\377\377\0\3\211" "\211\2118\231\231\231\365\375\375\375\377\217\377\377\377\377\3\376\376" "\376\377\227\227\227\367\211\211\211'\203\377\377\377\0\10\215\215\215" "\253\266\266\266\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\265\377\215\215\215\312\204\377\377\377\0\1\214\214\214\324" "\221\211\211\211\377\2\211\211\211\375\211\211\211J\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.20/icons/Makefile.am0000644000175000017500000000601112401246236012645 00000000000000# $Id: Makefile.am,v 1.17 2014/08/26 03:00:39 nkbj 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 \ channel-grey-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 \ channel_grey_24 $(srcdir)/channel-grey-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.20/icons/flip-vert-24.png0000664000175000017500000000113010614212371013446 00000000000000PNG  IHDRw=bKGD pHYs  ~tIME6ÑIDATx=kA;{^pD%,-46E7A|C@ `gI.+:Kv63{;*Xgo^73@ gBĬ5Vq=WL2X%vJCFQFAtJAlVE砃:i J#! P+n^5"D4.@kM܋s }4@;dG+=sR"# ,p]H@F-ȱJILS' IU9U@*~?d8ʨ׸J0)ք퐝:O?QF 튂o m+v6Z6 rcvEfǡ^6[ͣL6s\.1F) 0$ċ_ IENDB`ufraw-0.20/icons/lens.svg0000664000175000017500000004107511015633760012310 00000000000000 image/svg+xml Photo Camera Jakub Steiner http://jimmac.musichall.cz photo camera snap picture ufraw-0.20/icons/crop.svg0000664000175000017500000002554210657656414012327 00000000000000 image/svg+xml ufraw-0.20/icons/distortion-24.png0000664000175000017500000000205311015633760013746 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATH]H[g1llθcqlIg"Z B$(* V1$02,cƏʺdm7c 3J6. KEx✌>W<=yxUrqTwlZ4{WVInaQEV $)kwr6WLH| z&]D7؉mdX֜ǤkG=y: & @gE9yq 9@E7/I7SbCI(x؇jp_~>c[heY!]^(>Cٖ*rR@/;Y mլY[{"2ڣUb ĢTj (̇p99 ;x|sqg3!(|Q@A3<^!0wsYE>~zO8T+¥A'Jvt#%2vt[T}tA}y4BhzPI8%MEQp3É% MG‡ଗ*8Զz]`5`H{ac[iP5ʑ0X*T.1osÑ~?d5;s9 H D>MF*z'î[OGvml2mnk+K,^͖+`_v(8U_2-MFktV(OԸF{3nZn+n8g/vdĪ6éډA7fƝ/xڗxڿ-p&FIENDB`ufraw-0.20/icons/digital.svg0000664000175000017500000002304010525736261012761 00000000000000 image/svg+xml UFRaw Digital Udi Fuchs ufraw-0.20/icons/vignetting.svg0000664000175000017500000001533711015633760013527 00000000000000 image/svg+xml ufraw-0.20/icons/grayscale.svg0000664000175000017500000001021511073606345013314 00000000000000 image/svg+xml ufraw-0.20/icons/digital-24.png0000664000175000017500000000254310525736261013176 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHYLW3 ðl+ TUDcڴZb$tIz &H6*RmLM#Eq 0,03z1̰޴?;ߓ{~!db9ˢVfGbo =p3:-=ZCϾ^Jt*n WFd aQH2-fhu䭊FTwٜ{Q"\2q2k Xm6)}r~(#zIёe `ٰ.xKއ~i$1?(:O ׯpp+Dx0[V1 anV>~p@UqXnD ^p;FY@Ru@TJN?e 0y!P v^&wFu!z>MV^87AEuZePS#wbmP;UA+5 h n8|O&6#"&>#MUU€12~Kٕ8Ȼ \ɇڱu-a{&*X(K,2! |w[FnļB'A4@,m S UPycv4@gMnqOL k/y2n*8]lՎR p#??!r*.0 V_ UFnfNϗL'`R/VutzE]HnYhhr?ڏkTESnKu4RrBh8-mÖ'N{X 94L|Yd:'o3>aCRN;#4vJ)z@Ф mج-mio~mGwKQqz\H${1P?"$h^֤x A:tzQѬ(شԴB^)> -]r/7ౖ;S4N\m,zNaV!Dd-|vMU 3*UiiF8ӀͶޏ8 R~?nׁ~ 0u4^wo[{*'*sK@ : L3ն]E?6&a{t$c=IENDB`ufraw-0.20/icons/manual.svg0000664000175000017500000003311611334726612012624 00000000000000 image/svg+xml ufraw-0.20/icons/Makefile.in0000664000175000017500000004741512401246461012675 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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.17 2014/08/26 03:00:39 nkbj Exp $ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(noinst_HEADERS) 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_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : 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_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` 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@ 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@ LCMS1_CFLAGS = @LCMS1_CFLAGS@ LCMS1_LIBS = @LCMS1_LIBS@ LCMS2_CFLAGS = @LCMS2_CFLAGS@ LCMS2_LIBS = @LCMS2_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 \ channel-grey-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: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 TAGS all all-am check check-am clean clean-generic \ cscopelist-am ctags ctags-am 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 \ tags-am 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 \ channel_grey_24 $(srcdir)/channel-grey-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.20/icons/lock-24.png0000664000175000017500000000165110660440403012476 00000000000000PNG  IHDRw=sBIT|d pHYs6GtEXtSoftwarewww.inkscape.org<&IDATHKHTQg5i^4FsLmTP$D+jUqJ[nڵiU -#(LB""oӠI^|4:&x.ν>#"#Ԑ1YPPp8EyFDt_l6YcccQCCCF0}-))>DWkiimnnٹ}R4LX[[[ǗWm__>44+++7ꑢ({=;;pp:::.+Ma~gj-|@ @555l,&ɫHSmll|bHKKIz^>9s.ӽUv!;vqaAiK;}fB[;?X{W>?7{zt31@B \\5pA1-.Kf)vs,93XlABB pN @T~͟ش f'1<3`@ #cH#XYO)dRA6TAkI)+ @M0~*E\y"q0|X@b S׈:?A`&u Tɠ}졃b_WBacq/۠c061 N*[hsC579{pf*I*{~\;RZO}Vf;9Ni](K)ouK9[W{ƏttMMQB(TL2ݻo;>r0^%Rʺi26:*gs9}HJwR`{;s:kBW\! RA#*U{ur!%F}=LjEؘSΧbkkTbx47M4M;Ff%ɀߏ矶4Us=(E/F:e[Į ${xo M)R+H17=7{Նju5, byYq<`jf$OcBJJWȲ,5֨kn&B ĵ,++/-Ndx=_+Ҳ"`x$fFkSS\.nN&y6>|u.xZ,3g8v,/=8C8XŽ&kvKByPL%!p]!۶ yKEHZU'T˲Jlyeb-u {I~?lAį.;umt(.# $:"ƺ(BMMMq||'w5MӮ>t8077W%67< ujzR|wHC{e祒/ 7[%dIENDB`ufraw-0.20/icons/rotate-270-24.png0000664000175000017500000000157210614212371013354 00000000000000PNG  IHDRw=bKGD pHYs AetIME:01OIDATxkTW=QZB!JWA\H;7](T[ťFAZ(@QPGdL&9uqܡ.y}ưUe Kp+"] 7j4S~}MJ$da<ڀ| l#*",ObL1f,,$QUUiͷE5w|!|/篟0lUoTADwXks3$F((7daf*1JLjW^90 Ï0 c&kx>>U#{[ToM_8XW蒝ΈȖ~$F4^1b4И>?ݺN:3AoP?c ;"f0쐯 A=u4 mFVח^^UgMw ts]/CrikuUB;V$Z A`n9OTz :P!a燻JԦ[rlq1{πIHuƘϝs#&F'̒de f+o9r\[RQ5ݽ4MF^r¨( ;ks1ۗf6Q5s˄]QWc="k!^D6Z]HSUk,+%oD%[1~WIENDB`ufraw-0.20/icons/interpolation.svg0000664000175000017500000000732210570363776014247 00000000000000 image/svg+xml ufraw-0.20/icons/rectify.svg0000664000175000017500000002324710657656414013031 00000000000000 image/svg+xml ufraw-0.20/icons/crop-24.png0000664000175000017500000000315210657656414012530 00000000000000PNG  IHDRJLsBIT|d pHYstEXtSoftwarewww.inkscape.org<IDATHklT>tLJm/-ehNV%h{p\K k[ɽ$5Z5ԂBMőR Z㫠L<`ڙs朳Ak|9kg%[YR0WZ˸G^QGv-Aוw ^0#XYfː_R3P_;&SueՍZZZvZ҃Vʋ YI N\" .Rfh4Z~݋(USSSf pK.]*wȒx2Q|^)nvD)!+srr/TY ?7 'OÙc+kVu1!킪7744H'D!Bcqq;wv8YN~aby&IהVzDQxi>HQ2it||d.))yy׮] ,2mʲƧ,ˢj4~}ٌݻwJ߿ ˲ݓ>;#9`4+oE{A E~n'TVw7S& !])'vImOr#GɬpxkMBnn%cBb7X}<|5E"+-%;Ӧ.++{nif"~ gPq/[dE*"]j$CVAjW_珘M!1AQ),Y,T>Łtd l&D z?,JЙ9;8NonnD]/XI!9 ]QD,dh(CB!ו37JP 0iJ~>pۅi UƱ Ztd(eM''9 ` UUO[V+5ᱱRoQ !kٹR @[O¤JBH t[^w츿!Hv{r0%3-V69t"1==I5aSVO½qIENDB`ufraw-0.20/icons/restore-hsv-24.png0000664000175000017500000000163010525736261014036 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHݕkTW?7I3$gD01Vt,BHQ) bɦʘMM? HB0Ђ+MiCh MI4 F潯̛5w}=^#W+e-;gTbR PZ8Cܸp\-/Ut:kko'S60 V\wsqD"'eyߩO$}*ȡC|80s+, Ǐkij޽Gٹx۬rdeE85gr&ylΞ]2rp&p[}@ АJq0Ƅ߷,+ mt:O7d p/k aolD~ B)c !ꂣGjVh@";Bdhojjmƶm?RfgUIK.]8{x|AқBՋEf>;u_< 6=;7: 0M^JOy:nxIENDB`ufraw-0.20/icons/icc-profile-display.svg0000664000175000017500000002537610576355740015226 00000000000000 image/svg+xml ufraw-0.20/icons/restore-lch-24.png0000664000175000017500000000164010525736261014005 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATH_hSgI,%ThGPHZj]Ā TobH -fŜ06F s]14;ف~>sU|~E$%"?MqvP&m^tGQ۶bT?\ +m}NuQU,ˢ\.g?DhNxUFf6M0~Ƃ Dd<\0 à^A_~ I'kP*ϞQD`xZ˗Rw2ؿ_ss$탵L¹s.4K#])k3ϣ J8oKg{̙~t4yйVr|+lK"A:y;-wvZ]@DlOvBJ%.m$ߊ%1>Η}=|U(lC׮p_a> -,? :&T-={6UEMA۪׵LS)LOgx @ ;|M$Cj^ib/15f N&3A@,۪5۱m*NbYρ֑_*u= ?fTj#"@( 0K++x"?mnY33k6PJUj1уjo6VC6`FG<~{݊9㭮Lf01A6a4;s9<-/w_kkܾ{oT5V'N4E"d6 ~ qC$RIENDB`ufraw-0.20/icons/interpolation-24.png0000664000175000017500000000066510570363776014462 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<2IDATHݖ1n@DDQ"L*AX 7Pq`Rd-0EnC6 l 0"RRt[,J1,5ū(JQ%/_t3īH0 N`xEa!* '8THi8v\ifd``hI"ZkQtǙv*@2 :Y7MC*eX]B|DZ]lqs䫽,ғ yޡ5JX5\[< ĮQQk!G#eMPRA܀`W֞0 h#}Xl.(ǸXua7} image/svg+xml ufraw-0.20/icons/hueadjust.svg0000664000175000017500000000623611143734441013343 00000000000000 image/svg+xml ufraw-0.20/icons/unlock-24.png0000664000175000017500000000167311334726612013055 00000000000000PNG  IHDRw=sBIT|d pHYs6GtEXtSoftwarewww.inkscape.org<8IDATHOHwǿ*5Q6h&*šlT/ڂ[%\@ KrXrJARaSஙU⮘]^1FFf`737O03>䥞4[ZZkjj.ft]O-,,4m,3Ēir,c]9 ;44tmYo<űhr6t\@ =7s+~9 mmm(oߑH[Q@ 00;;YmMxtt===h4: g2|>s )^5biiIK$RxI,C{{{:+@nHI\q8Ĥ꨹0Ζߕsm33 0~b0Qyńՙ3L|`ӝ&`H~ZGdIi@Z&:4`IЀe,;[_ԩjm6 d bH image/svg+xml ufraw-0.20/icons/icc-profile-output-24.png0000664000175000017500000000154210576355740015316 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATH]lKq=h*GTòb2nH6bHdI%.2 EvAg$$+]t!VuvS2ś999'yy-",+V /KPBMOmO~rI&zzz$s^ rAӲJ.]Skjj566&u]|U__r$j]UK[Mgynd DSs4!_< TIENDB`ufraw-0.20/icons/white-balance.svg0000664000175000017500000001150610576355740014060 00000000000000 image/svg+xml ufraw-0.20/icons/color-corrections-24.png0000664000175000017500000000142210576355740015227 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHOHA] H u"L RХ[TK"J #,N楓AZ “ I֝v#ey=3l?[MK D&=8DE Qph0 QgѴt-}}HI+;K6\P6%mQ/,RTe@/.U]a"zF}Pv,X|QFiuiOeKW BBw4joW<([ʷjW氱p*\Zd^WrQDl簭L/Af.߂QgTC'&St [,2>MMu+tvQ!2A5..c]==pR:3KYV ŵkg Ө.U?u*Ǫɢt6  B}ȈwX啲@`M ے\T(ᨲ&FDzDeNyd2j29;\zU)K|Qy,^ٯ<l+Z`R/i[&fn \)ʔd5HYW:_oѩ lKg_w2SHI0IENDB`ufraw-0.20/icons/restore-hsv.svg0000664000175000017500000002033310525736261013627 00000000000000 image/svg+xml UFRaw Unclip HSV Udi Fuchs ufraw-0.20/icons/lens-24.png0000664000175000017500000000250611015633760012514 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHkSY?%iצP:&&*Ŧvq 20b a`(t9+"օ XP-BG$͏lnrgѾGk+s;G( !ځ~Ԗo-^mKgERh~$rko^Z}@'Or (zifffH&d2hV)5Co;@6 [nqjR^VRݻG\f+RcBp;wQ8rL&!ɠi0 _!JB4l=\ H))JLNNL&,bCww՝;wR6Wf=zD[[T d``X,ׯ_Ǐtttpi:lLQJB| ܼyOXdbb\.(;vFijjŋ @XE*RP*&0;;^N !V9lYfUU,r!,B)P(0 GЀٵG޾}i|> ~pU<P@ Re{4@$! B q%4M# Q* Dz,arj!H)?~h4JWWPrL{{;ǹ‚ xցJE3 ؈"b&b}qΞ=i?J*jL&C^gjjD"=GR*- ꢥ`0͛7x^<+++\.>||mm )%qR.D;Ў|/,,L.#G ikkcqq)%bNBN._w . ]4 )%JY+ <|9R%87ݸbخ nDObYR:_~@ ฝ2 }tϑO cl,;_ 6RjaoTTtQIENDB`ufraw-0.20/icons/exif.svg0000664000175000017500000001657710657656414012327 00000000000000 image/svg+xml EXIF ufraw-0.20/icons/automatic.svg0000664000175000017500000003337311334726612013342 00000000000000 image/svg+xml ufraw-0.20/icons/icc-profile-camera-24.png0000664000175000017500000000253110576355740015205 00000000000000PNG  IHDRw=bKGD pHYsutIMEڱ2IDATHǽmhrNNrҜslTEW2qQpc"96)е~߬ A](̗[[h''&'&$99}_Wl;gv7 G=$o^W?eN9vVC/$~捇P;϶S 1!RjǞp Bz!@(j(αY]OoLy^eYT*|ODIJ,Kq!ek d@8kZfƏQ*I2I*s#3X)? r a0]b=lڭ6M<5> 蛂2dWneez5&wzZkE~AC%2{[ImFs.>/j{U- ׾u/O=S/f-IENDB`ufraw-0.20/icons/exif-24.png0000664000175000017500000000072710657656414012525 00000000000000PNG  IHDRw=sBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<TIDATH1kAH | !  m !MDlk-R HQAF8BA%6 oox ;3;˰8eX .5 ^c/i`g k`N~ۀ &9$OuZ%n%WUf+l[=oxdv[f j,>q 0.Ik$-[%_IENDB`ufraw-0.20/icons/gimp-24.png0000664000175000017500000000222310661711704012504 00000000000000PNG  IHDRשPLTElVB*VVVvZ>r\UNBն^.*"qjYȾfVB:::tfN2znjjjr`ZJRN>yjOvV>:4JF:vn]n^RBjbVǂξRF:~vbRRRhbQjJޖHHHxyvl111lldbN2FB6Ԇ~i_I.zfMZVFijV7~~~]ZPxrbfff\`_XZRDf^NDA;z}YNNBrP972zbBڎr~pNI;z~ixxx SPJp^Eɳ»nfVqbIpX:b^Nکdrn^}vjIF>4΀yjzvbƲnvW62*vrk!_R= vNNH&&&j```eEnfRmPcj^Jz~\rZJ6~nVF2ºzzZPZVOޔNJFywr¾62.rncJE6bJ2jBBBuR666&"qZ>bV>rZ***iV>NJBzn^J¾rrrzΎv^NNNnYF+ZZZw^?VRB֥arnZ¶gZD>>>viR6~qnnnvb^JʖzVB>2JJ>yr^q^VFjfWʆTJ8zfVVPjfRnM StRNS@fbKGDH pHYs+tIME 6j  IDAT(c`E:`e6N$ z oJHG}&H9P*^"íF֣$WhȨ D/.rHﴅI02Z*x*e Ϙd@IWoJBnNwA]ԟ/T=;馥>7$[8j翴}NpéW/I6y`{MYnMvi 7X/zOMpҾ"XxIfffiڈ'[]nNqIENDB`ufraw-0.20/curveeditor_widget.c0000644000175000017500000005272112303017426013547 00000000000000/*************************************************** * curveeditor_widget.c - a curve editor widget for GTK+ * Copyright 2004-2014 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.20/config.h.in0000644000175000017500000000745512401246474011542 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 /* have the lcms 1.x library */ #undef HAVE_LCMS1 /* have the lcms 2.x library */ #undef HAVE_LCMS2 /* 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 `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcasestr' function. */ #undef HAVE_STRCASESTR /* 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 /* 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.20/ufraw_icon.rc0000664000175000017500000000003610252664224012166 00000000000000AppIcon ICON "ufraw_icon.ico" ufraw-0.20/COPYING0000664000175000017500000004311010252664074010542 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.20/ufraw_saver.c0000644000175000017500000001336612303017427012200 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_saver.c - The GUI file saver. * Copyright 2004-2014 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.20/ChangeLog0000664000175000017500000104113012123762147011261 000000000000002013-03-24 23:24 udifuchs * ufraw-setup.iss.in: In the win32 instaler, move gimp plugin from plug-in folder to bin folder. 2013-03-24 02:30 nkbj * ufraw_preview.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Beautify coding style. Update translation files. 2013-03-24 02:00 udifuchs * po/Makefile.in.in: Do not distribute gmo files in the source tarball. 2013-03-24 01:18 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2013-03-24 01:10 udifuchs * ufraw_preview.c: Only update histograms if they are expanded, fixing ufraw bug #299. 2013-03-23 09:15 nkbj * README, configure.ac: Update list of build requirements. 2013-03-23 08:45 nkbj * configure.ac: Remove unnecessary check. Update comments. 2013-03-23 04:45 nkbj * ufraw-setup.iss.in: Add Sigma Foveon X3F files to association list. 2013-03-23 03:00 nkbj * configure.ac, ufraw_conf.c: Use 'gimp' rather than 'gimp-remote' as remote command for GIMP 2.4.0 and newer. Fix for Debian bug #504260. 2013-03-19 13:00 nkbj * ufraw_writer.c: Add localtime_r() for _WIN32 (used by cfitsio write code). 2013-03-18 10:45 nkbj * configure.ac: Reorder configure.ac to make latest version of MXE (with GCC 4.7.2) work for cross-compiling. Make the -mno-cygwin flag configurable since it is not valid in GCC 4.6+. 2013-03-17 23:45 nkbj * configure.ac: Restore old WINDRES search behaviour. Find and use libtiff-4.x if present. 2013-03-17 22:45 nkbj * configure.ac: Make configure work with the M cross environment (http://mxe.cc). 2013-03-17 22:30 nkbj * dcraw.cc: Fix a build error and various compiler warnings when cross-compiling for MS Windows with the M cross environment (http://mxe.cc). 2013-03-17 13:30 nkbj * dcraw.cc: Fix some fseeko()/fseek() and ftello()/ftell() problems. 2013-03-16 13:15 nkbj * dcraw.cc: Add preliminary color matrices for the NIKON D7100 and the NIKON 1 J3. Stolen from Darktable. 2013-03-16 08:00 nkbj * ufraw_writer.c: Beautify coding style. 2013-03-16 08:00 nkbj * dcraw.cc: Add missing header file for building with LOCALEDIR defined. 2013-03-16 07:15 nkbj * configure.ac: Make configure work with Debian's dh-autoreconf. 2013-03-16 07:15 nkbj * ufraw_writer.c: Simplify conditional compilation expressions. 2013-03-16 05:20 nkbj * dcraw.cc: Suppress GCC 4.7+ compiler warnings. 2013-03-16 00:15 nkbj * configure.ac, dcraw.cc, dcraw.h, uf_glib.h, ufraw.c, ufraw_conf.c, ufraw_lens_ui.c, ufraw_routines.c, ufraw_saver.c: Use reserved macro _WIN32 instead of WIN32. _WIN32 is set by both 32-bit and 64-bit compilers. 2013-03-15 22:45 nkbj * dcraw_api.cc: Better fix for Foveon *.X3F crash. Make sure d->image is initialized before we use it. 2013-03-14 04:00 nkbj * Makefile.am: Some versions of FreeBSD and OpenBSD need to have nikon-curve linked with libstdc++ to avoid unresolved symbols. 2013-03-14 03:30 nkbj * Makefile.am, po/Makefile.in.in: Cosmestic changes. 2013-03-14 02:20 nkbj * dcraw.cc: More sensible fix for Solaris build issue. 2013-03-14 00:40 nkbj * dcraw_indi.c: Better fix for Solaris GCC build issue. 2013-03-13 22:15 nkbj * dcraw.cc, dcraw_indi.c: Fix Solaris 10 build issues. 2013-03-13 08:30 nkbj * TODO: Update TODO list. Mainly cosmetic changes. 2013-03-12 02:15 nkbj * ufraw_writer.c: Beautify coding style. 2013-03-12 00:00 nkbj * dcraw_api.cc: Fix crash with Foveon *.X3F files. 2013-03-11 23:42 udifuchs * ufraw_ufraw.c: Fix memory leak in 4 color cameras like the Canon G1. 2013-03-11 22:41 udifuchs * ufraw_embedded.c: Undo last mistaken commit. 2013-03-11 22:27 udifuchs * ufraw_embedded.c: Remove unused code. 2013-03-11 22:21 udifuchs * ufraw_writer.c: Move pixbuf from stack to heap, since win32 stack is too small. 2013-03-10 13:45 nkbj * ufraw_preview.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Add title to UFRaw message windows. 2013-03-10 12:15 nkbj * ufraw-gimp.c: Make ufraw-gimp failover to GIMP file loader for non-raw *.jpeg and *.tiff files. 2013-03-10 04:30 nkbj * ufraw_writer.c: Beautify coding style. 2013-03-10 04:00 nkbj * configure.ac, ufraw_writer.c: Warning fix should be for libpng-1.5.1 and newer. Limit libpng to version 1.2 and newer. Bump UFRaw version to 0.19.2. 2013-03-09 00:45 nkbj * ufraw_writer.c: Fix compiler warnings with libpng-1.6.x. 2013-03-07 21:38 udifuchs * Makefile.am, ufraw-setup.iss.in: Updates to stand-alone win32 installer. 2013-03-06 01:30 nkbj * README: Default optimization is -O3. 2013-03-05 23:03 udifuchs * configure.ac: Restore '-O3' since it does not seem to cause crashes. 2013-03-05 22:34 udifuchs * ufraw-setup.iss.in: Install GTK in win32, making UFRaw stand-alone. 2013-03-02 22:50 nkbj * wb_presets.c: Add WB presets for the NIKON D3200. Thanks to Maarten Vanraes for the data. 2013-03-02 07:45 nkbj * README, configure.ac: Use lower optimization to work around bug in GCC 4.7. Bump version to UFRaw 0.19.1. 2013-02-26 22:31 udifuchs * README, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Final textual changes before ufraw 0.19 release. 2013-02-26 22:18 udifuchs * ufraw-mime.xml: Fix typo. 2013-02-26 13:23 udifuchs * ufobject.cc, ufraw_ufraw.c: Add floor() before converting to int to fix compiler rounding issues. 2013-02-24 00:00 nkbj * wb_presets.c: Add more Kelvin presets for the Panasonic DMC-G5. 2013-02-22 01:00 nkbj * wb_presets.c: Add WB presets for the SONY SLT-A77V. Stolen from Darktable. 2013-02-20 23:00 nkbj * configure.ac, ufraw-gimp.c: Add experimental 16-bit support for GIMP 2.9+. Based on patch by Nils Philippsen. 2013-02-20 21:15 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-G5. Stolen from Darktable. 2013-02-18 21:50 nkbj * wb_presets.c: Add WB presets for the PENTAX K-5 II (s). Stolen from Darktable. 2013-02-12 21:15 nkbj * wb_presets.c: Update WB presets for the NIKON D800(E). Stolen from Darktable. 2013-02-05 21:00 nkbj * wb_presets.c: Add WB presets for the SONY DSLR-A230, and update WB presets for the SONY DSLR-A700. Stolen from Darktable. 2013-02-03 12:01 nkbj * ufraw.c, ufraw.pod, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Correct some language mistakes. Update documentation to current code. 2013-02-03 11:00 nkbj * Makefile.am: Fix typo. 2013-02-03 10:30 nkbj * po/: ca.po, cs.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, zh_CN.po, zh_TW.po: Delete obsolete strings. 2013-02-03 10:30 nkbj * dcraw_indi.c: Mark code used to support the FUJIFILM 'X-Trans' sensor. 2013-02-03 06:00 nkbj * ufraw.c, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Update a couple of strings from old ufraw --batch mode to ufraw-batch. 2013-02-03 05:30 nkbj * ufraw-batch.c, ufraw.h: Only overwrite ID files created with createID=only_id if asked to do so by a command line switch. Fix bug #3039432. 2013-02-02 23:15 nkbj * ufraw_conf.c: No need to display EXIV2 version in versionText[]. No version-dependent features are used now. 2013-02-02 22:45 nkbj * ufraw_conf.c: Update versionText[]. 2013-02-02 12:00 nkbj * dcraw_api.cc: Update to DCRaw 9.17 API. 2013-02-02 11:00 nkbj * configure.ac, dcraw_api.cc: Disable support for the FUJIFILM 'X-Trans' sensor. It needs more work. Support can be enabled using the --enable-x-trans configure switch. 2013-01-29 09:00 nkbj * wb_presets.c: Add WB presets and fine-tuning for the Canon EOS 650D family. Use correct model name for the Canon EOS M. 2013-01-24 21:15 nkbj * dcraw.cc: Add color matrix for the NIKON D5200. Patch by Pascal de Bruijn. 2013-01-23 21:15 nkbj * wb_presets.c: Remove FinePix from camera model names to follow the changes made in DCRaw 9.15. Thanks to Artis Rozentals for the bug report. 2013-01-22 21:45 nkbj * wb_presets.c: Fix naming of the Canon EOS REBEL T2i. Thanks to Pascal de Bruijn for information about this bug. 2013-01-20 00:00 nkbj * configure.ac: Require exiv2 >= 0.20 for easy access functions. 2013-01-19 23:30 nkbj * ufraw_exiv2.cc: Use Exiv2 easy access functions when available. 2013-01-17 20:30 nkbj * configure.ac: Stop using obsolete macro AM_CONFIG_HEADER. 2013-01-11 21:15 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-GH3. Stolen from Darktable. 2013-01-09 22:00 nkbj * wb_presets.c: Update WB presets for the Canon EOS 550D family. Patch by Roman Lebedev (via Darktable). 2013-01-09 10:30 nkbj * wb_extract.pl: Update for better output from *.CR2 files. Patch by pini-pini. 2013-01-08 21:00 nkbj * mkinstalldirs: Update to mkinstalldirs from Automake 1.13.1. 2013-01-08 20:45 nkbj * wb_presets.c: Add WB presets for the SONY SLT-A57. Stolen from Darktable. 2013-01-08 11:00 nkbj * autogen.sh: Add support for Automake 1.13. 2013-01-08 10:45 nkbj * generate_schemas.sh, ufraw-mime.xml, ufraw-setup.iss.in: Update file extensions. 2013-01-07 21:15 nkbj * wb_presets.c: Update WB presets for the Canon EOS 5D Mark III, and add WB presets for the SONY NEX-5N. Patches from Pascal de Bruijn. 2013-01-07 06:00 nkbj * wb_presets.c: Add WB presets for the SONY NEX-C3. Stolen from Darktable. 2012-12-31 22:30 nkbj * iccjpeg.c, iccjpeg.h: Copy iccjpeg.[ch] from lcms-2.4. 2012-12-31 22:00 nkbj * curveeditor_widget.c, curveeditor_widget.h, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, iccjpeg.c, iccjpeg.h, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, wb_presets.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Update copyright information. 2012-12-23 20:15 nkbj * dcraw.cc: dcraw modified 9.17 (1.454). Changelog: Copied color matrices from DNG Converter 7.3. 2012-12-23 20:05 nkbj * dcraw.cc: dcraw original 9.17 (1.454). 2012-12-23 02:30 nkbj * wb_presets.c: Update WB presets and add fine tuning for the OLYMPUS XZ-1. 2012-12-23 01:15 nkbj * dcraw.cc, dcraw.h: dcraw modified 9.17 (1.453). Changelog: Support the Canon EOS 6D, 1DX, SX50, Casio EX-ZR100, Fuji X-E1 & XF1, Pentax K-5 II (s), and Samsung EX2F. 2012-12-23 01:00 nkbj * dcraw.cc: dcraw original 9.17 (1.453). 2012-12-07 21:45 nkbj * wb_presets.c: Add WB presets for the Canon EOS 6D. Stolen from Darktable. 2012-11-10 06:30 nkbj * dcraw.cc, wb_presets.c: Add color matrix and WB presets for the Canon EOS M. Stolen from Darktable. 2012-11-08 20:00 nkbj * wb_presets.c: Update WB presets for the Canon EOS 7D. Patch by Vladimir Nadvornik. 2012-11-06 21:45 nkbj * wb_presets.c: Copy WB presets from NIKON 1 V1 to NIKON 1 J1. Idea stolen from Darktable. 2012-11-03 22:15 nkbj * wb_presets.c: Update WB presets for the SONY NEX-7 and add WB presets for the SONY DSC-RX100. Patches by Kevin Buettner. 2012-10-29 06:00 nkbj * wb_presets.c: Add WB presets for the NIKON 1 V1. Stolen from Darktable. 2012-10-21 01:00 nkbj * dcraw.cc: Add temporary color matrix for the Panasonic DMC-G5. Submitted by doctordruidphd. 2012-10-21 00:30 nkbj * wb_presets.c: Update WB presets for the Canon EOS 600D family to firmware version 1.0.2. Stolen from Darktable. 2012-10-20 10:00 nkbj * autogen.sh: Add support for Automake 1.12. 2012-10-12 20:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2012-10-05 09:30 nkbj * wb_presets.c: Add WB presets for the NIKON D600. Stolen from Darktable. 2012-10-04 23:00 nkbj * ufraw-batch.c: Do not ask to overwrite existing files (and do not overwrite them) if --silent is used and --overwrite is not used in ufraw-batch. Patch by Corey Seliger. 2012-09-11 01:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2012-09-10 23:45 nkbj * ufraw_exiv2.cc, wb_presets.c: Fix trimming of EXIF data (patch by Nils Philippsen). Remove incorrect WB fine tuning presets for the OLYMPUS E-P3. 2012-08-01 04:30 nkbj * wb_presets.c: Add WB presets for the SAMSUNG EX1. 2012-07-31 22:30 nkbj * dcraw.cc: dcraw modified 9.16 (1.452). Changelog: Measured saturation level on the Canon EOS-1D X. 2012-07-31 22:15 nkbj * dcraw.cc: dcraw original 9.16 (1.452). 2012-07-08 19:45 nkbj * uf_gtk.cc: Fix building UFRaw on MacOSX with Quartz. 2012-07-06 04:15 nkbj * ufraw_routines.c: Update list of supported raw file extensions after data from Dave Coffin. 2012-07-05 07:00 nkbj * dcraw.cc: dcraw modified 9.16 (1.451). Changelog: Support the Samsung NX1000 and Sony RX100. 2012-07-05 06:54 nkbj * dcraw.cc: dcraw original 9.16 (1.451). 2012-07-01 05:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2012-07-01 01:45 nkbj * dcraw_api.cc: Fix problem with red color channel in latest API changes. 2012-07-01 01:15 nkbj * dcraw_api.cc, dcraw_indi.c: Update API for DCRaw 9.16. 2012-06-30 23:45 nkbj * dcraw.cc: dcraw modified 9.16 (1.450). Changelog: Support the Canon EOS 650D, Samsung NX20, and Sigma SD1. 2012-06-30 23:35 nkbj * dcraw.cc: dcraw original 9.16 (1.450). 2012-06-28 11:00 nkbj * dcraw.cc: Fix compiler warnings with GCC 4.4.x. 2012-06-28 06:00 nkbj * wb_presets.c: Update WB presets and add fine tuning for the Canon EOS 350D DIGITAL family. 2012-06-26 12:00 nkbj * wb_presets.c: Add WB fine tuning for the NIKON COOLPIX P7100. 2012-06-26 11:45 nkbj * dcraw_api.cc, dcraw_indi.c: API changes for DCRaw 9.15. 2012-06-26 11:15 nkbj * dcraw.cc: dcraw modified 9.15 (1.449). Changelog: Fixed gravity sensor for Canon 5D Mark III with Firmware Version 1.1.x. 2012-06-26 11:05 nkbj * dcraw.cc: dcraw original 9.15 (1.449). 2012-06-18 23:00 nkbj * dcraw.cc, dcraw.h: dcraw modified 9.15 (1.448). 2012-06-18 22:11 nkbj * dcraw.cc: dcraw original 9.15 (1.448). 2012-06-18 11:00 nkbj * wb_presets.c: Add WB presets for the NIKON COOLPIX P7100. 2012-06-18 09:00 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-GF3. Stolen from Darktable. 2012-06-09 00:30 nkbj * ufraw_conf.c, ufraw_saver.c: Use gimp-2.8.exe as default remote command under Windows with gimp-2.6.exe as fallback. 2012-05-24 21:30 nkbj * dcraw_api.cc: Remove experimental support for the FUJIFILM X-Pro1 because it made four-color interpolation unstable. 2012-05-24 21:15 nkbj * wb_presets.c: Update presets for the Canon EOS 7D and the SAMSUNG NX100. Stolen from Darktable. 2012-05-24 05:30 nkbj * wb_presets.c: Add finetuning for the OLYMPUS E-M5 and more reasonable finetuning values for the OLYMPUS E-PL1 and E-PL3 using only the amber-blue axis (like Nikon does). 2012-05-23 08:45 nkbj * dcraw.cc, dcraw_api.cc, dcraw_indi.c: Add experimental support for the FUJIFILM X-Pro1. Beware that this code still needs some testing and work. 2012-05-23 03:45 nkbj * wb_presets.c: Add WB, fine-tuning, and Kelvin presets for the OLYMPUS E-PL3. 2012-05-16 23:45 nkbj * wb_presets.c: Add WB presets for the SAMSUNG NX200. Stolen from Darktable. 2012-05-16 11:45 nkbj * dcraw.cc: Add preliminary support for the Canon PowerShot G1 X and the FUJIFILM X-S1. 2012-05-14 23:00 nkbj * dcraw.cc: Add preliminary support for the Canon EOS 5D Mark III. 2012-05-14 22:30 nkbj * wb_presets.c: Add WB presets for the Canon EOS 5D Mark III. Stolen from Darktable. 2012-05-14 22:15 nkbj * ufraw-gimp.c: Fix build error with GIMP 2.7.2. 2012-05-05 00:00 nkbj * dcraw.cc: Add preliminary support for the NIKON D3200. 2012-04-28 21:45 nkbj * wb_presets.c: Add WB presets for the OLYMPUS E-M5. 2012-04-27 11:30 nkbj * wb_presets.c: Add WB presets for the NIKON D800 \(stolen from Darktable\) and WB and Kelvin presets for the NIKON D4. 2012-04-23 13:00 nkbj * wb_presets.c: Fix model name for the Canon EOS REBEL T3. 2012-04-23 12:00 nkbj * wb_presets.c: Update WB presets and add Kelvin presets for the OLYMPUS E-5. 2012-04-01 23:00 nkbj * curveeditor_widget.c, dcraw_api.cc, dcraw_indi.c, iccjpeg.c, nikon_curve.c, ufraw_conf.c, ufraw_developer.c, ufraw_embedded.c, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Update coding style with astyle version 2.01. 2012-03-25 22:45 nkbj * wb_presets.c: Add WB presets for the SONY NEX-7. Stolen from Darktable. 2012-03-16 08:30 nkbj * dcraw.cc: Add support for the NIKON D4. 2012-03-14 22:30 nkbj * dcraw.cc: Add support for the NIKON D800. 2012-03-12 22:00 nkbj * wb_presets.c: Add WB presets for the SONY SLT-A65V. Stolen from Darktable. 2012-03-06 09:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2012-02-28 21:30 nkbj * wb_presets.c: Add WB presets for the Leica M9. Stolen from Darktable. 2012-02-19 05:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2012-01-22 21:45 nkbj * wb_presets.c: Add WB presets and some Kelvin presets for the Panasonic DMC-GX1. Stolen from Darktable. 2012-01-21 21:45 nkbj * ufraw_chooser.c: Allow jpeg and tiff as raw file extensions. 2012-01-21 21:30 nkbj * ufraw_routines.c: Update list of raw file formats. 2012-01-16 07:15 nkbj * wb_presets.c: Add WB presets for the PENTAX K-r. 2012-01-14 04:15 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot S100 stolen from Darktable. 2012-01-03 05:30 nkbj * wb_presets.c: Update truncated channel multiplier and remove incorrect kelvin preset for the OLYMPUS E-3. Update comments. 2012-01-02 22:15 nkbj * wb_presets.c: Update kelvin presets for the OLYMPUS E-PL1. 2012-01-02 22:15 nkbj * ufraw_settings.cc: Make sure that channel multipliers larger than 10 are not truncated. 2012-01-02 09:30 nkbj * dcraw_indi.c: Fix compiler warning. 2012-01-02 09:00 nkbj * wb_presets.c: Update WB presets for the OLYMPUS E-3. 2012-01-02 08:30 nkbj * ufraw-batch.c, ufraw-gimp.c, ufraw.c: g_thread_init() is deprecated (and not necessary) in glib 2.31 and newer. 2012-01-01 23:30 nkbj * wb_presets.c: Add WB fine tuning for the OLYMPUS E-PL1. 2012-01-01 09:30 nkbj * curveeditor_widget.c, curveeditor_widget.h, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, wb_presets.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Update copyright information. 2011-12-30 20:00 nkbj * wb_presets.c: Add WB presets for the OLYMPUS XZ-1. 2011-12-26 21:30 nkbj * dcraw.cc: dcraw modified 9.12 (1.447). Changelog: Support the Casio EX-Z500. 2011-12-26 21:20 nkbj * dcraw.cc: dcraw original 9.12 (1.447). 2011-12-25 23:00 nkbj * wb_presets.c: Add WB presets and finetuning for the OLYMPUS E-P3. 2011-12-20 21:30 nkbj * dcraw.cc: dcraw modified 9.12 (1.446). Changelog: Support the Canon S100, Nikon 1 J1 and V1, Panasonic GX1, Fuji X10, and Samsung NX200 with color matrices from DNG Converter 6.6. 2011-12-20 21:24 nkbj * dcraw.cc: dcraw original 9.12 (1.446). 2011-12-02 23:30 nkbj * ufraw-gimp.c: Update code for GIMP 2.8 (tested with GIMP 2.7.3). 2011-11-22 09:15 nkbj * wb_presets.c: Add WB presets and finetuning for the SONY DSLR-A390. 2011-11-18 23:30 nkbj * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Fix various lensfun scale and crop problems. Add --auto-crop and --aspect-ratio command line options. Patches by Vladimir Nadvornik 2011-11-18 21:45 nkbj * ufraw_exiv2.cc: Delete the DNGVersion tag to make sure that DCRaw does not handle saved TIFF files as raw. 2011-11-14 10:45 nkbj * wb_presets.c: Add WB presets for the FUJIFILM FinePix HS20EXR. 2011-11-12 23:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2011-11-05 22:30 nkbj * ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_preview.c, ufraw_ufraw.c: Fix segfault while loading darkframe. 2011-11-02 23:15 nkbj * wb_presets.c: Add WB presets and fine tuning for the SONY DSLR-A330. 2011-10-07 22:15 nkbj * dcraw.h: Update copyright information. 2011-10-07 08:55 nkbj * dcraw.cc: Readd support for the SONY NEX-5N after the upgrade to DCRaw v9.11. 2011-10-07 07:00 nkbj * dcraw.cc: dcraw modified 9.11 (1.445). Changelog: Copied new color matrices from DNG Converter 6.5. 2011-10-07 06:52 nkbj * dcraw.cc: dcraw original 9.11 (1.445). 2011-09-27 21:45 nkbj * wb_presets.c: Code style clean-up. 2011-09-26 22:28 udifuchs * wb_presets.c: Added wb presets for the Canon EOS-1DS. Some style fixes. 2011-09-21 22:15 nkbj * dcraw.cc: Add preliminary support for the NIKON 1 J1 and V1 plus the SONY SLT-A65 and NEX-7. 2011-09-13 23:00 nkbj * wb_presets.c: Add WB presets and finetuning for the SAMSUNG NX100. Stolen from Darktable. 2011-09-12 10:15 nkbj * wb_presets.c: Change DaylightFluorescent to FluorescentHigh for the Canon PowerShot G12. FluorescentHigh is the correct setting according to specifications. 2011-09-12 09:55 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot G12. Stolen from Darktable. 2011-09-07 09:30 nkbj * po/de.po: Clean up latest commit. 2011-09-07 09:00 nkbj * po/de.po: Updated German translation by Chris Leick. 2011-09-05 22:45 nkbj * dcraw_api.cc, dcraw_indi.c: Consistency update for scale_colors_INDI(). 2011-09-05 10:30 nkbj * dcraw_indi.c: Remove code with no effect. 2011-09-04 05:45 nkbj * ufraw-setup.iss.in: Add traditional Chinese translation. 2011-09-03 22:14 nkbj * ufraw_conf.c, ufraw_routines.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Add some error messages. Update translation files. 2011-09-03 04:30 nkbj * ufraw_conf.c, ufraw_routines.c: Oops. Here is the correct version of the GCC 4.6 compiler warning fixes. 2011-09-03 03:05 nkbj * dcraw.cc, ufraw_conf.c, ufraw_routines.c: Fix some GCC 4.6 compiler warnings. 2011-08-31 01:30 nkbj * wb_presets.c: Various clean-ups. 2011-08-30 07:10 nkbj * wb_presets.c: Add WB presets for the SONY DSLR-A450. 2011-08-28 06:45 nkbj * dcraw.cc: Add preliminary support for the SONY NEX-5N. 2011-08-28 00:05 nkbj * ufraw.pod, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Remove (arbitrary) boundaries for temperature settings from documentation. 2011-08-27 22:30 nkbj * dcraw.cc: Add preliminary support for the SONY SLT-A77V. 2011-08-27 04:05 nkbj * dcraw.cc, ufraw_writer.c: Fix a couple of compiler warnings on FreeBSD 8.2-RELEASE. 2011-08-22 12:05 nkbj * ufraw_routines.c, ufraw_settings.cc: Really fix temperature scale overflow for the OLYMPUS E-PL2 14000K WB preset. 2011-08-22 11:30 nkbj * ufraw_routines.c, ufraw_settings.cc: Make sure the 14000K WB presets on the OLYMPUS E-PL1 and E-PL2 can be used without temperature scale overflow. 2011-08-22 10:47 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2011-08-22 10:30 nkbj * uf_gtk.cc, ufraw_lensfun.cc: Update coding style. 2011-08-21 22:45 udifuchs * ufraw_preview.c: Fix a crash when lcms profile file is not found. 2011-08-21 22:20 udifuchs * ufraw_ufraw.c: Apply auto-crop in ufraw-batch. 2011-08-21 11:58 udifuchs * wb_presets.c: Added WB presets for the Olympus E-PL2. 2011-08-19 07:15 nkbj * wb_presets.c: Update WB presets for the NIKON D5100. 2011-08-18 00:05 udifuchs * ufraw_ufraw.c: Fix valgrind warnings with 4-color cameras. 2011-08-17 22:05 udifuchs * ufraw_lensfun.cc: Make sure lensfun correction is applied when loading configuration file. 2011-08-17 20:49 udifuchs * ufraw_settings.cc: Recalculate WB if we are not loading an ID file. 2011-08-14 02:00 nkbj * ufraw_writer.c: Allow UFRaw to create FITS files with special characters in path or filename. 2011-08-13 03:50 nkbj * uf_glib.h: Fix CentOS 5.6 build error. 2011-08-12 22:41 udifuchs * po/nl.po: Updated Nederlands translation by Simon Oosthoek. 2011-08-11 23:35 udifuchs * po/cs.po: Updated Czech translation by Milan Kníž. 2011-08-11 23:24 udifuchs * ufraw_lensfun.cc, ufraw_ufraw.c: Fix some valgrind "uninitialized variable" warnings. 2011-08-11 22:15 udifuchs * ufraw_preview.c: Reset crop data between image loading (in RC). 2011-08-10 21:39 udifuchs * uf_gtk.cc, ufobject.cc, ufobject.h: Keep auto lensfun setting on startup. Make UFGroupList public. 2011-08-09 00:03 udifuchs * ufraw_lensfun.cc: Set the lens geometry according to the lens model. 2011-08-06 23:30 nkbj * dcraw.cc, ufraw_ufraw.c: Update a couple of comments. 2011-08-06 11:10 nkbj * configure.ac, dcraw.cc, ufraw_routines.c: Add support for ARRIRAW and Redcode R3D video file formats. 2011-08-06 06:01 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2011-08-06 05:47 nkbj * ufraw_lensfun.cc, ufraw_ufraw.c: Fix coding style. 2011-08-06 05:30 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-LX5. 2011-08-04 23:09 udifuchs * ufraw_settings.cc: Undo a hack fix to support Fujifilm HS20. 2011-08-04 21:35 udifuchs * configure.ac: Bump UFRaw version to 0.19. 2011-08-04 04:30 nkbj * dcraw.cc: Fix a couple of GCC 4.4 warnings. 2011-08-03 22:57 udifuchs * uf_gtk.cc, ufobject.cc, ufraw_lensfun.cc: Various bug fixes when changing LensModel or FocalLength. 2011-07-29 00:49 udifuchs * ufraw_lensfun.cc: Update the lens crop factor, fixing bug #3161607. Add a "Generic, Crop factor %f" lens model to get consistent behaviour. 2011-07-27 08:50 udifuchs * ufobject.cc, ufobject.h, ufraw.h, ufraw_conf.c, ufraw_lensfun.cc, ufraw_settings.cc, ufraw_ufraw.c: Read LensFun settings from --conf file. 2011-07-25 00:59 nkbj * ufraw_settings.cc: Beautify coding style. 2011-07-25 00:57 nkbj * dcraw.cc: Clean up latest commit to get closer to original code. 2011-07-24 09:59 nkbj * dcraw.cc, dcraw.h: dcraw modified 9.10 (1.444). Changelog: Support the Leica D-LUX 5 and V-LUX 2, Panasonic G3 and GF3, Olympus E-P3, Sony NEX-C3 and SLT-A35, and Canon SX30. Updated support for Nikon encrypted WB and Canon sRAW/mRAW. 2011-07-24 09:31 nkbj * dcraw.cc: dcraw original 9.10 (1.444). 2011-07-23 22:11 udifuchs * ufraw.pod: Fix syntax (Debian bug #632444). 2011-07-20 21:00 nkbj * wb_presets.c: Add basic WB presets for the Canon EOS 1100D. 2011-07-16 09:45 nkbj * ufraw.pod: Update documentation. 2011-07-16 07:30 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-G3 and SONY NEX-3. 2011-07-16 07:25 nkbj * dcraw.cc: Add preliminary support for the Panasonic DMC-G3. 2011-07-16 06:40 nkbj * dcraw_indi.c: Fix scaling of channel multipliers. 2011-07-10 23:14 udifuchs * dcraw.cc, dcraw_api.cc, dcraw_indi.c: Fix some gcc 4.6 warnings and ignore some others. 2011-07-10 22:42 udifuchs * ufraw_settings.cc: Fix wb reading for the Fujifilm HS20. 2011-06-26 02:02 nkbj * beautify_style.sh: Also beautify wb_presets.c. 2011-06-23 21:58 udifuchs * wb_presets.c: Added WB presets for the Canon PowerShot S95. 2011-06-17 10:45 nkbj * wb_presets.c: Add basic WB presets for the NIKON D5100. Stolen from Darktable. 2011-05-25 10:20 nkbj * wb_presets.c: Add WB presets for Canon EOS 600D/REBEL T3i/Kiss Digital X5, FUJIFILM FinePix X100 and OLYMPUS E-5. 2011-05-25 10:15 nkbj * dcraw.cc: dcraw modified 9.08 (1.443). Changelog: Support the Fuji HS20EXR/F550EXR, Kodak Z990, Leaf AFi-II 12, Nikon D5100, and Samsung NX11 and NX100. 2011-05-25 10:10 nkbj * dcraw.cc: dcraw original 9.08 (1.443). 2011-04-17 06:00 nkbj * dcraw_indi.c, ufraw_ufraw.c: Beautify code. 2011-04-13 06:45 nkbj * dcraw_indi.c: Really fix OpenMP build problem with Sun Studio (bug #3205673). 2011-04-13 06:30 nkbj * dcraw_indi.c: Fix OpenMP build problem with Sun Studio (bug #3205673). 2011-04-01 23:15 nkbj * dcraw.cc: dcraw modified 9.07 (1.442). Changelog: Support the Hasselblad 9044x6732 back, Leaf 1068x1464 back, Fuji X100, and Canon 600D and 1100D. 2011-04-01 23:05 nkbj * dcraw.cc: dcraw original 9.07 (1.442). 2011-03-21 20:45 nkbj * ufraw_ufraw.c: Initialize dark->conf->ufobject before first use. 2011-02-28 23:27 udifuchs * ufraw_ufraw.c: Fix the failover to dcraw EXIF tags when exiv2 fails. 2011-02-28 21:38 udifuchs * dcraw.cc, dcraw.h: Limit the number of dcraw IO errors to 10, fixing bug #3024370. 2011-02-27 00:34 udifuchs * ufraw_ufraw.c: Fix spurious warning message about image size too small. 2011-02-26 20:48 udifuchs * dcraw_api.cc, dcraw_indi.c: Use the correct color variable, fixing a valgrind warning. 2011-02-20 20:36 udifuchs * README: Final textual changes before 0.18 release. 2011-02-20 19:43 udifuchs * dcraw_indi.c: White-spaces fixes. 2011-02-20 00:15 nkbj * beautify_style.sh, curveeditor_widget.c, curveeditor_widget.h, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, iccjpeg.c, nikon_curve.c, nikon_curve.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Use a slightly different code style. 2011-02-20 00:00 nkbj * dcraw.cc: dcraw modified 9.06 (1.441). Changelog: Support high-ISO images from the Samsung WB2000. 2011-02-19 00:22 udifuchs * ufraw_settings.cc: Fix crash with --wb=camera. Thanks to patch by Mikhail Teterin. 2011-02-16 21:15 nkbj * ufraw_writer.c: Libpng 1.5.x needs the zlib.h header file. 2011-02-15 23:00 nkbj * dcraw.h: Beautify code. 2011-02-15 23:00 nkbj * beautify_style.sh: Add script to beautify code (from Darktable). 2011-02-15 22:45 nkbj * ufraw_conf.c, ufraw_ufraw.c: Fix latest commit. 2011-02-15 22:30 nkbj * curveeditor_widget.c, curveeditor_widget.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, iccjpeg.c, iccjpeg.h, nikon_curve.c, nikon_curve.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c: Beautify code using astyle. 2011-02-11 18:15 nkbj * wb_presets.c: Whitespace cleanups. 2011-02-10 22:15 nkbj * wb_presets.c: Add WB presets + fine tuning for the NIKON D7000. 2011-02-10 21:45 nkbj * dcraw.cc: dcraw modified 9.06 (1.440). Changelog: Read correct camera WB from Nikon NRW and Samsung SRW files. Copied color matrices from Adobe DNG Converter 6.3. 2011-02-10 21:41 nkbj * dcraw.cc: dcraw original 9.06 (1.440). 2011-02-10 21:40 nkbj * dcraw.cc: Fix build error on MacOSX. 2011-01-20 06:00 nkbj * curveeditor_widget.c, curveeditor_widget.h, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, wb_presets.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po, po/zh_TW.po: Update copyright information. 2011-01-15 23:30 nkbj * wb_presets.c: Add WB presets and fine-tuning for the SONY SLT-A55V. 2011-01-05 01:10 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-G2. 2010-12-08 22:30 nkbj * wb_presets.c: Remove unnecessary quotes. 2010-12-08 10:30 nkbj * wb_presets.c: Add WB presets for the Canon EOS 60D and the Panasonic DMC-GF1. 2010-12-08 09:30 nkbj * dcraw.cc: Add preliminary support for the Canon PowerShot S95. 2010-12-03 10:15 nkbj * wb_presets.c: Add OLYMPUS E-P2 WB presets and fine tuning (from Darktable). 2010-11-25 21:30 nkbj * wb_presets.c: Add WB presets and fine-tuning for the SONY NEX-5. 2010-11-25 16:38 udifuchs * wb_presets.c: Added WB presets+fine tuning for the Sony A850. 2010-11-15 08:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po, zh_TW.po: Update translation files. 2010-11-14 19:04 udifuchs * configure.ac, ufraw.desktop, po/zh_TW.po: Added Traditional Chinses (zh_TW) translation by Tetralet. 2010-11-12 22:00 nkbj * wb_presets.c: Add WB presets for the PENTAX K-5 and K-x. 2010-11-11 08:30 nkbj * dcraw.cc: dcraw modified 9.05 (1.439). 2010-11-11 08:30 nkbj * dcraw.cc: dcraw original 9.05 (1.439). 2010-11-10 21:15 nkbj * dcraw.cc: dcraw modified 9.05 (1.439). 2010-11-10 21:05 nkbj * dcraw.cc: dcraw original 9.05 (1.439). 2010-11-10 12:15 nkbj * dcraw.cc: Clean up latest commit. 2010-11-10 12:00 nkbj * wb_presets.c: Add WB presets for Canon EOS-1Ds Mark II and EOS-1D Mark IV. Update WB presets for Canon EOS 5D Mark II. 2010-11-10 12:00 nkbj * dcraw.cc: dcraw modified 9.05 (1.439). Changelog: Support the Nikon D3100 & D7000 & P7000, Panasonic FZ40 & FZ100 & LX5, Samsung WB2000, Nokia X2, Canon SX120 & PowerShot G12, Hasselblad H4D, Pentax 645D & K-5 & K-r, Sony SLT-A33 & SLT-A55V. 2010-11-10 11:40 nkbj * dcraw.cc: dcraw original 9.05 (1.439). 2010-10-27 23:00 nkbj * dcraw.cc: Add preliminary support for the NIKON D3100. 2010-10-27 19:30 nkbj * wb_presets.c: Add WB presets for the NIKON D3100. 2010-09-18 23:45 nkbj * dcraw.cc: Fix DNG files from the PENTAX K-x. 2010-09-06 23:15 nkbj * dcraw.cc: Revert compiler warning fixes not needed with newer versions of GCC. Get closer to the original DCRaw code. 2010-07-31 01:15 nkbj * dcraw.cc, dcraw.h: dcraw modified 9.04 (1.438). Changelog: Fixed rotation for Kodak EasyShare and some Canon EOS photos. 2010-07-31 01:10 nkbj * dcraw.cc: dcraw original 9.04 (1.438). 2010-07-22 12:30 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot A720 IS. 2010-07-22 12:30 nkbj * dcraw.cc: Use the correct camera model name for the Canon PowerShot A720 IS. 2010-07-20 14:00 nkbj * wb_presets.c: Add WB and Kelvin presets for the OLYMPUS E-PL1. 2010-07-13 23:00 nkbj * dcraw.cc: Revert latest change. 2010-07-08 23:00 nkbj * dcraw.cc: Avoid warnings while loading interpolation meta data for the Polaroid x530. 2010-07-03 06:45 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot G11. 2010-06-26 23:45 nkbj * dcraw.cc: dcraw modified 9.03 (1.437). Changelog: Support the Canon SX20 IS. Get Fuji HS10 black level from the metadata. 2010-06-26 23:35 nkbj * dcraw.cc: dcraw original 9.03 (1.437). 2010-06-14 22:45 nkbj * dcraw.cc: dcraw modified 9.02 (1.436). Changelog: Support the Samsung EX1. 2010-06-14 22:35 nkbj * dcraw.cc: dcraw original 9.02 (1.436). 2010-06-11 08:15 nkbj * dcraw.cc: dcraw modified 9.02 (1.435). Changelog: Support the Sony A450, Kodak Z981, Olympus E-P2, and Panasonic G2 & GF1. 2010-06-11 08:08 nkbj * dcraw.cc: dcraw original 9.02 (1.435). 2010-05-31 09:30 nkbj * dcraw.cc: dcraw modified 9.01 (1.434). Changelog: Built color matrices for the Sony NEX-3 and NEX-5. 2010-05-31 09:20 nkbj * dcraw.cc: dcraw original 9.01 (1.434). 2010-05-29 21:15 nkbj * dcraw.h: Update copyright information. 2010-05-29 21:00 nkbj * dcraw.cc: dcraw modified 9.00 (1.433). Changelog: Update copyright information. 2010-05-29 20:35 nkbj * dcraw.cc: dcraw original 9.00 (1.433). 2010-05-29 00:00 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc: dcraw modified 9.00 (1.433). Changelog: Support the Samsung WB550 and NX10, Casio EX-Z1050, and Fuji HS10. Support the Canon EOS 550D / Digital Rebel T2i / Kiss Digital X4. Support A100 images modified by Sony software. Split the darkness level into four separate color channels. 2010-05-28 23:11 nkbj * dcraw.cc: dcraw original 9.00 (1.433). 2010-05-24 23:45 nkbj * ufraw_conf.c: Save grayscale mixer values in ID files. 2010-05-10 23:00 nkbj * dcraw.cc: Add support for the FUJIFILM FinePix HS10 HS11. Patch by Ben Deering. 2010-05-02 01:30 nkbj * dcraw.cc, dcraw_api.cc, ufobject.cc, ufraw_lensfun.cc: Port UFRaw to OpenSolaris. Patch by James Lee. 2010-04-25 01:30 nkbj * wb_presets.c: Add WB presets and fine tuning for the OLYMPUS E-600. 2010-04-11 08:45 nkbj * wb_presets.c: Update Canon EOS 50D WB presets. 2010-04-06 15:25 udifuchs * ufraw_exiv2.cc: Sort TIFF tags to prevent warnings in other softwares. 2010-04-06 10:50 nkbj * dcraw.cc: Add temporary color matrix for the Canon EOS 550D. 2010-04-06 00:10 udifuchs * ufraw_preview.c: Fix crash when UFRaw starts maximized. 2010-04-05 10:15 nkbj * po/.cvsignore: Ignore the messages.mo file generated by 'msgfmt --statistics'. 2010-04-05 10:00 nkbj * ufraw.h, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Add command line option to set grayscale mixer values. 2010-04-05 09:30 nkbj * configure.ac, dcraw.h, dcraw_api.h, dcraw_indi.c, uf_glib.h, uf_gtk.cc, uf_gtk.h, ufobject.h, ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_exiv2.cc, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_preview.c, ufraw_ufraw.c: Update version to 0.18. Update version requirements of various libraries. Clean up code. 2010-04-01 01:10 udifuchs * README: Final textual changes for the 0.17 release. 2010-04-01 00:00 nkbj * ufraw_lens_ui.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Align camera and lens model tooltips. 2010-03-31 18:32 udifuchs * po/nb.po: Updated Norwegian translation. 2010-03-31 15:39 udifuchs * ufraw_lens_ui.c: Fix a crash in win32. 2010-03-31 12:15 nkbj * ufraw_lensfun.cc: Only choose lens automatically if the camera model is known. Fix problem with bogus lens choice for some compact cameras not included in the lensfun database. 2010-03-30 18:12 udifuchs * ufraw_lensfun.cc: Fix loading of vignetting corrections from lensfun DB. 2010-03-30 17:51 udifuchs * ufraw_ufraw.c: Fix auto-wb for 4-colors cameras. 2010-03-29 23:49 udifuchs * configure.ac, ufraw.h, ufraw_conf.c, ufraw_lensfun.cc, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Fix some 4-colors issues. 2010-03-29 21:45 nkbj * configure.ac, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Disable despeckle until the interface has been fixed for 4-color cameras. It can be enabled by the --enable-despeckle configuration option. 2010-03-29 21:15 nkbj * ufraw_lensfun.cc: Disable auto lens search for 4-color cameras until lensfun can handle such images. 2010-03-28 12:45 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc: Revert new Canon black point code since it breaks development of some Olympus .ORF files. 2010-03-27 08:15 nkbj * ufraw_lensfun.cc: Fix code to destroy lensdb. 2010-03-26 13:45 nkbj * configure.ac: Require lensfun 0.2.5 to avoid problems with older versions. 2010-03-25 22:56 udifuchs * ufraw_lensfun.cc: Try using the "standard" lens of compact cameras. 2010-03-21 23:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2010-03-21 20:48 udifuchs * po/nb.po: Updated Norwegian translation. 2010-03-21 18:41 udifuchs * po/ru.po: Updated Russian translation. 2010-03-21 17:19 udifuchs * po/es.po: Updated Spanish translation. 2010-03-18 09:45 nkbj * po/ko.po: Update Korean translation. 2010-03-18 08:50 nkbj * po/ko.po: Update Korean translation. 2010-03-17 20:54 udifuchs * dcraw_api.cc: Fix dcraw's black. 2010-03-16 16:36 udifuchs * ufraw_preview.c: Move the preview rendering out of the openmp loop. 2010-03-16 09:50 nkbj * po/: sr.po, sr@latin.po: Update Serbian translations. 2010-03-16 02:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2010-03-15 23:55 nkbj * ufraw_lensfun.cc: Fix bug in lens search code. The old code worked only because of a bug in the lensfun library. Patch by Andrew Zabolotny. 2010-03-15 11:05 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc: Recommit fixed version of new Canon black point code. 2010-03-15 10:00 nkbj * dcraw.cc, dcraw.h: Revert part of Yesterdays commit which broke black point on some Canon raw files. 2010-03-14 13:00 nkbj * dcraw.cc, dcraw.h, ufraw_routines.c: Add support for Canon EOS 550D and Samsung NX10. 2010-03-13 03:30 nkbj * dcraw.cc: Handle raw files from the SIGMA DPx series as unsupported to avoid lockups. 2010-03-11 09:15 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot S90. 2010-03-10 21:30 udifuchs * wb_presets.c: Added Sony Alpha 550 WB presets. 2010-03-10 09:40 nkbj * po/: fr.po, it.po: Various cleanups. 2010-03-09 22:01 udifuchs * po/it.po: Updated Italian translation. 2010-03-09 21:43 udifuchs * po/fr.po: Updated French translation. 2010-03-08 22:50 nkbj * wb_presets.c: Add WB presets for the Canon EOS 550D family. 2010-03-06 23:00 nkbj * ufraw.desktop: Add Catalan translation. Update Danish translation. 2010-03-04 21:00 nkbj * ufraw-setup.iss.in: Remove duplicate line. 2010-03-04 20:45 nkbj * po/: ca.po, cs.po, pl.po: Updated Catalan, Czech, and Polish translations. 2010-03-04 10:45 nkbj * po/nl.po: Update Dutch translation. 2010-03-04 10:30 nkbj * po/nl.po: Updated Dutch translation by Simon Oosthoek. 2010-03-04 07:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2010-03-03 23:08 udifuchs * configure.ac, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Disable the contrast adjustment by default. 2010-03-03 22:52 udifuchs * uf_gtk.cc, uf_gtk.h, ufobject.cc, ufobject.h, ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_settings.cc, ufraw_ufraw.c: Add ufCameraModel, ufLensModel, ufLenfunAuto. Add global reset and auto buttons to the lensfun page. 2010-03-02 15:09 udifuchs * ufraw_preview.c: Fix gdk thread locks in preview. 2010-03-02 14:06 udifuchs * ufobject.cc, ufobject.h, ufraw_lensfun.cc: Set lensfun defaults correctly when load ID files. 2010-03-01 17:34 udifuchs * ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_ufraw.c: Some refactoring of the lensfun code. 2010-03-01 15:42 udifuchs * ufraw_lensfun.cc: Add 2 digits of accuracy in XML to lensfun's parameters. 2010-02-28 19:50 lexort * README-processing.txt: point to more archived posts about the gamma/shadow-fog/poor-perceptual-spacing-LUT issue. 2010-02-28 02:48 udifuchs * ufraw_settings.cc: Add another significant digit to ChannelMultipliers in ID files. This guaranties identical output to the last bit. 2010-02-27 21:52 udifuchs * wb_presets.c: Added WB presets and fine-tuning for the Nikon D300S. 2010-02-27 08:30 nkbj * ufraw_lensfun.cc: Fix precision. 2010-02-27 05:10 nkbj * ufraw_routines.c: Simplify profile_default_gamma(). 2010-02-27 04:50 nkbj * ufraw_conf.c: uf_reset_locale() was called twice in a row. 2010-02-27 04:45 nkbj * ufraw_routines.c: uf_reset_locale() was called twice in a row. 2010-02-27 04:35 nkbj * ufraw_conf.c: Read numbers on the command line i C locale. Fix for bug #2917703. 2010-02-27 00:36 udifuchs * ufraw.h, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_ufraw.c, ufraw_ui.h: Add ufLensGeometry and ufTargetLensGeometry UFObjects. 2010-02-26 17:41 udifuchs * ufraw.desktop: Fix all 'desktop-file-validate' warnings. 2010-02-26 17:20 udifuchs * wb_presets.c: Updated Canon 7D WB presets and added fine-tuning in the Amber-Blue axis. 2010-02-26 09:05 nkbj * wb_presets.c: Update Nikon D300 WB presets. 2010-02-26 01:45 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2010-02-26 01:01 udifuchs * Doxyfile, uf_gtk.cc, uf_gtk.h, ufobject.cc, ufobject.h, ufraw.h, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_preview.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h: Add ufFocalLength, ufAperture, ufDistance UFObjects. 2010-02-26 00:00 nkbj * dcraw.cc: Get closer to the original dcraw.c code. 2010-02-25 21:30 nkbj * configure.ac, ufraw_developer.c, ufraw_exiv2.cc: Various code clean-ups. 2010-02-25 19:40 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-G1. 2010-02-24 18:45 nkbj * po/pl.po: Update Polish translation. 2010-02-24 16:45 udifuchs * po/pl.po: Updated Polish translation by Tomasz Golinski. Encoding changed from iso-8859-2 to UTF-8. 2010-02-24 12:00 udifuchs * ufraw_preview.c: Fix last commit. 2010-02-24 11:44 udifuchs * configure.ac, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw_preview.c, ufraw_ufraw.c: Add glib and gdk thread support. 2010-02-23 20:45 nkbj * po/: POTFILES.in, POTFILES.skip: Update POTFILES.in and POTFILES.skip. 2010-02-23 20:45 nkbj * po/da.po: Update Danish translation. 2010-02-23 18:24 udifuchs * ufobject.cc, ufraw-batch.c, ufraw.c, ufraw_conf.c, ufraw_lensfun.cc: Add an option to destroy lensdb and use it to find and fix some valgrind errors. 2010-02-23 16:46 udifuchs * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2010-02-23 13:36 udifuchs * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw_conf.c, ufraw_preview.c, ufraw_settings.cc, ufraw_ufraw.c: Remove annoying messages for unsupported camera-wb. Remove redundant messages of ChannelMultipliers: value too small. Do not show "Camera WB" combo option for cameras that don't support it. Show a warning icon instead. 2010-02-23 00:20 udifuchs * ufraw_preview.c: Remove redundant calls to gtk_progress_bar_set_fraction(). 2010-02-22 19:29 udifuchs * ufraw_ufraw.c: Remove some reduntant calls to uf_set_wb(). 2010-02-22 17:27 udifuchs * uf_gtk.cc, ufobject.cc, ufobject.h, ufraw.h, ufraw_preview.c, ufraw_settings.cc, ufraw_ufraw.c: Make ufWB a UFArray instead of a UFString. Replace ufstring_combo_box implementation with ufarray_combo_box. Remove TokenList from UFString, making UfString a simple string object. 2010-02-21 19:07 udifuchs * ufraw_lens_ui.c: Add comment. 2010-02-21 09:30 nkbj * ufraw_settings.cc: Fix compiler warning. 2010-02-21 05:45 nkbj * ufraw_lens_ui.c: Fix precision to display the correct focal length for e.g. a 10.5mm fisheye. 2010-02-21 04:03 udifuchs * Makefile.am, uf_gtk.cc, uf_gtk.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_lensfun.cc, ufraw_preview.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h: Initial implimentation if lensfun with UFObjects. Lensfun model parameters are being saved to ID files, but not to .ufrawrc. These parameters will be also read from ID files, unless the ID file is used for --conf. UFRaw now applies lensfun automatically. Use --lensfun=none to disable. 2010-02-19 23:00 nkbj * ufraw_lens_ui.c: Fix precision to display the correct focal length for e.g. a 10.5mm fisheye. 2010-02-17 17:45 nkbj * wb_presets.c: Add WB presets for the OLYMPUS E-P1. 2010-02-17 09:20 nkbj * ufraw_lens_ui.c: Make it possible to choose tca model. 2010-02-16 21:45 nkbj * wb_presets.c: Update WB presets for the PENTAX K-7. 2010-02-16 09:15 nkbj * wb_presets.c: Add WB and Kelvin presets for NIKON D3S. 2010-02-15 23:15 nkbj * po/POTFILES.skip: Update list of skipped files. 2010-02-15 21:30 nkbj * wb_presets.c: Add missing WB preset for the NIKON D50. 2010-02-15 09:50 nkbj * wb_presets.c: Add WB finetuning for the CANON EOS 400D family. Patch by Pascal de Bruijn. 2010-02-15 04:15 nkbj * ufraw_preview.c: Better fix for latest commit. 2010-02-15 01:50 nkbj * ufraw_preview.c: Fix segfault when minimizing raw histogram on netbook displays. 2010-02-14 20:39 udifuchs * ufraw_settings.cc: Reenable support for WB Kelvin presets. 2010-02-14 01:26 udifuchs * ufraw_lens_ui.c: Trivial style changes, mostly whitespaces. 2010-02-13 03:45 nkbj * po/: POTFILES.in, ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2010-02-13 01:22 udifuchs * ufraw_ufraw.c: Fix auto-crop calculation. 2010-02-13 00:00 nkbj * wb_presets.c: Update NIKON D70 WB presets and fine tuning. Various cosmetic changes to the code. 2010-02-12 18:15 nkbj * ufraw_ufraw.c: Fix compiler warning. 2010-02-12 08:45 nkbj * wb_presets.c: Update WB presets and fine tuning for the NIKON D70s. 2010-02-12 01:50 udifuchs * ufraw-batch.c, ufraw.h, ufraw_lens_ui.c, ufraw_ufraw.c: Simplify lensfun initialization, fixing some crop bugs in the process. 2010-02-11 14:51 udifuchs * ufraw_settings.cc, ufraw_ufraw.c: Use channel multipliers from configuration when make and model match. Fix bug where make and model in uf->conf were not from current raw file. 2010-02-11 01:11 udifuchs * ufraw_icons.c, ufraw_preview.c, icons/Makefile.am, icons/automatic-24.png, icons/automatic.svg, icons/manual-24.png, icons/manual.svg, icons/unlock-24.png, icons/unlock.svg: Give different icons to the auto buttons two states. Give different icons to the crop-lock button two states. 2010-02-10 21:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2010-02-10 17:37 udifuchs * ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_ufraw.c, ufraw_ui.h: Automatically calculate lensfun scaling to preserve image area. Remove manual scaling option. 2010-02-09 18:27 udifuchs * ufraw_preview.c: Disable auto-crop if crop range is manually changed. 2010-02-08 21:47 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2010-02-08 21:38 udifuchs * wb_presets.c: WB presets + fine tuning + Kelvin for the Nikon D3X. Patch by Steffan Kaminski. 2010-02-07 22:45 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2010-02-07 22:30 nkbj * ufraw_lens_ui.c: Remove workarounds for lensfun 0.2.3. 2010-02-07 16:37 udifuchs * configure.ac: Require lensfun >= 0.2.4 2010-02-07 16:26 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Add auto-crop button. 2010-02-05 17:22 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c: Resize canvas to fit to lensfun transformations. 2010-02-03 23:59 udifuchs * ufraw_preview.c: Fix fit-to-screen when WindowMaximized. 2010-02-02 22:00 nkbj * ufraw.pod: Fix typo. 2010-02-01 21:15 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2010-02-01 16:42 udifuchs * ufraw_preview.c: Fix crash after "Saving configuration". 2010-02-01 16:21 udifuchs * ufraw_preview.c: Add state-dependent tooltips to the lock-aspect button. Put height/width labels in canonical order. 2010-01-31 08:15 nkbj * ufraw_preview.c: Fix rotation. 2010-01-31 02:23 udifuchs * ufraw_preview.c, ufraw_ui.h: Fix rotation-reset button to reset flipped images correctly. 2010-01-30 18:02 udifuchs * ufobject.cc: Fix new/delete/free mismatch. 2010-01-29 21:15 nkbj * po/da.po: Update Danish translation. 2010-01-29 18:48 udifuchs * ufraw.h, ufraw_ufraw.c: Use bi-linear interpolation instead of Lanczos interpolation. Lanczos gives nice sharp results, but there is no control over the sharpening. 2010-01-28 19:43 udifuchs * ufraw_ufraw.c: Move TCA to the end of the raw phase, where it belongs. 2010-01-27 22:15 nkbj * po/da.po: Update Danish translation. 2010-01-27 15:23 udifuchs * Doxyfile, Makefile.am, uf_gtk.cc, uf_gtk.h, ufobject.cc, ufobject.h, ufraw-batch.c, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_settings.cc, ufraw_ufraw.c, ufraw_ui.h, wb_presets.c, po/POTFILES.in, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Intoduce UFObjects, to centeralize the implementation of configuration settings. Implement the WB settings with UFObjects. Start using doxygen for API documentation. Currently on ufobject.h is documented. Documentation can be found online at: http://ufraw.sourceforge.net/API/ 2010-01-25 18:48 udifuchs * ufraw_ufraw.c: Fix a rounding issue in --size. 2010-01-22 23:00 nkbj * curveeditor_widget.c, curveeditor_widget.h, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, uf_gtk.h, uf_progress.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, wb_presets.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Update copyright information. 2010-01-22 22:30 nkbj * ufraw_preview.c: Calculate size of histograms based on screen height. 2010-01-20 16:18 udifuchs * ufraw_preview.c: Fix a crash in the spot selection tool. 2010-01-12 08:00 nkbj * dcraw.cc: Revert code not needed by newer versions of valgrind. 2010-01-06 21:22 udifuchs * wb_presets.c: WB presets for the Pentax K-m. 2009-12-30 22:00 nkbj * wb_presets.c: Use consistent naming for fluorescent and incandescent presets on OLYMPUS DSLR cameras. 2009-12-30 21:30 nkbj * wb_presets.c: Add WB presets and fine tuning for OLYMPUS E-620. 2009-12-25 18:55 nkbj * dcraw.cc: dcraw modified 8.99 (1.432). Changelog: Support the Canon EOS-1D Mark IV and PowerShots G11 and S90. Support the Casio EX-Z750, Pentax K-x, Fuji SX200EXR, Sony A550. 2009-12-25 18:35 nkbj * dcraw.cc: dcraw original 8.99 (1.432). 2009-12-13 11:20 nkbj * ufraw_ufraw.c: Add #include . 2009-12-12 18:21 udifuchs * ufraw_preview.c: Fix the --size option in interactive mode. 2009-12-12 00:00 nkbj * uf_gtk.cc, ufraw_chooser.c, ufraw_delete.c, ufraw_embedded.c, ufraw_message.c, ufraw_saver.c: Update copyright information. 2009-12-11 17:54 udifuchs * nikon_curve.c, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, wb_presets.c: Reorganize #include directives. 2009-12-10 00:10 udifuchs * ufraw_preview.c: Prevent some crashes for invalid raw files. 2009-12-08 21:15 udifuchs * wb_presets.c: WB presets for the Nikon D3000. 2009-12-08 21:07 udifuchs * dcraw_api.cc: Fix artifacts in shadows of Canon 40D files. 2009-12-08 00:17 udifuchs * ufraw.h, ufraw_lens_ui.c, ufraw_ufraw.c: Apply TCA before Bayer interpolation. 2009-12-04 20:40 udifuchs * dcraw_api.cc: Simplify and optimise dcraw_finalize_raw(). 2009-12-04 20:38 udifuchs * ufraw_ufraw.c: Check for overflows in ufraw_scale_raw(). Apparently the assumptions that there will be no overflow was wrong, at least for Foveon raw files. 2009-12-04 00:46 udifuchs * dcraw_api.cc: Fix the color of Canon sRAW images (which don't have filters). 2009-12-01 20:57 udifuchs * nikon_curve.c, nikon_curve.h, ufraw_routines.c: Have only interface definitions in nikon_curve.h header file. 2009-12-01 20:30 udifuchs * dcraw_api.h, ufraw_preview.c: Make sure that there are no scroll-bars on the initial preview. 2009-11-30 23:40 udifuchs * ufraw_ufraw.c: Clean up some valgrind warnings. 2009-11-30 21:30 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Reorginize and simplify the API, making ufraw_convert_prepare_buffers() an internal function. This also fixes some segfaults. 2009-11-29 23:58 udifuchs * ufraw_exiv2.cc: Use the new easyaccess functions introduced in Exiv2-18.1 to get isoSpeed and lensName. 2009-11-29 07:40 nkbj * uf_progress.h, ufraw_preview.c: Drop progress bar reset code. 2009-11-29 06:15 nkbj * dcraw.cc: Add support for the CASIO EX-Z750. 2009-11-27 23:56 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw_preview.c, ufraw_ufraw.c: Make sure that FreezeDialog is set while the non-tiled part of the image is being rendered. This requires making all ufraw_*_image functions returning images, not do any rendering. 2009-11-27 21:56 udifuchs * po/it.po: Updated Italian translation by Eugenio Baldi. 2009-11-27 21:52 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2009-11-27 09:00 nkbj * ufraw_preview.c: Make progress bars work in the GIMP plugin. 2009-11-27 06:30 nkbj * ufraw_preview.c: Tweak progress bars. 2009-11-27 01:18 udifuchs * uf_gtk.cc, ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Reduced the number of calls to ufraw_developer_prepare() from ufraw_preview to 1. 2009-11-26 22:15 nkbj * ufraw_preview.c: Restore old calls to ufraw_developer_prepare(). 2009-11-26 21:40 nkbj * ufraw-gimp.c: Update rotation code. 2009-11-25 19:07 udifuchs * ufraw_preview.c: Fix rendering of crop area. 2009-11-25 18:30 nkbj * Makefile.am: Add uf_progress.h to libufraw_a_SOURCES. 2009-11-25 10:15 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, uf_progress.h, ufraw-batch.c, ufraw.h, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Replace the old progress bar. Patch by Frank van Maarseveen. 2009-11-23 10:30 nkbj * ufraw_preview.c: Fix over/under blinking. Patch by Bruce Guenter. 2009-11-21 22:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Remove deprecated string from translation files. 2009-11-21 16:41 udifuchs * ufraw_preview.c: Do not render junk on screen during rotation. 2009-11-21 00:21 udifuchs * configure.ac: Undo a change that didn't belong to the last commit. 2009-11-21 00:17 udifuchs * configure.ac, ufraw_ufraw.c: Fix rendering issue and build without lensfun for last commit. 2009-11-20 23:51 udifuchs * ufraw.h, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Apply rotation together with lensfun. lensfun_phase was renamed to transfrom_phase accordingly. 2009-11-19 22:40 udifuchs * configure.ac: Update the GTK_DISABLE_DEPRECATED to GTK 2.18. 2009-11-18 23:44 udifuchs * ufraw_ufraw.c: Fix final output when applying vignetting and no geometry corrections. 2009-11-18 23:24 udifuchs * ufraw_ufraw.c: Return the correct rgb_image. 2009-11-16 23:05 nkbj * ufraw_lens_ui.c: Reorder lensfun GUI. Patch by Martin Ling. 2009-11-14 12:15 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-11-13 10:25 nkbj * README, configure.ac, ufraw_conf.c: Bump version number. Clean up configuration and update README. Add PNG enabled/disabled to --version output. 2009-11-10 20:20 udifuchs * ufraw_preview.c: Fix a small rounding issue in zoom-in/out. Patch by Frank van Maarseveen. 2009-11-10 20:09 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Move despeckle's channel-select logic to ufraw_preview. Clear channel-select when changing page. Patch by Frank Van Maarseveen. 2009-11-10 00:22 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Make rendering of small sizes a bit faster. Small cleanups. 2009-11-09 22:39 udifuchs * ufraw_preview.c: Fix for a logic flaw which prevented zooming in from <100 to >100 to work (it stopped at 100%). Based on patch by Frank van Maarseveen. 2009-11-09 21:44 udifuchs * ufraw_preview.c: Keep the viewport center during zooming. Patch by Frank van Maarseveen. 2009-11-09 21:36 udifuchs * ufraw_ufraw.c: re-enable raw phase caching. 2009-11-09 21:33 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: 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. 2009-11-07 20:22 udifuchs * ufraw.h, ufraw_ufraw.c: Fix some redundant warnings that showed up. Suppress some other warnings that are still relevant, but will be fixed later. 2009-11-07 19:27 udifuchs * ufraw_preview.c: Fix buid without lensfun. 2009-11-06 23:15 udifuchs * ufraw_lens_ui.c: Fine-tune (increase) step and page size for adjustment scales in lensfun. page should make a small but noticable change. step = page/10 is about the smallest significant change. accuracy = step/10 allow for full precision control. 2009-11-06 08:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2009-11-06 00:47 udifuchs * ufraw_preview.c: Change all rint(x) to floor(x+0.5) since it turns out that rint(x) rounds half-integer number to the nearest even integer! Fixes bug ID 2886414. 2009-11-06 00:42 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Code refactoring. CFG->size, CFG->shrink are always kept at the setting required to generate the preview, only switching to final value when generating final image. 2009-11-05 09:30 nkbj * configure.ac: Search for the lensfun library as default. 2009-11-05 00:02 udifuchs * ufraw.h, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Apply vignetting at the end of ufraw_first_phase. Apply ufraw_lensfun_phase before ufraw_develop_phase. Use Lanczos resampling also for preview. 2009-11-04 22:05 udifuchs * ufraw_preview.c: Add some checks for crop coordinate rescaling to prevent rounding errors. 2009-11-03 23:35 nkbj * ufraw_ufraw.c: Fix compiler warning in latest commit. 2009-11-03 20:48 udifuchs * ufraw.h, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Some code refactoring. 2009-11-03 01:30 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-11-03 01:10 nkbj * ufraw_conf.c: Make white-space use consistent with other help strings. 2009-11-03 01:00 nkbj * ufraw_conf.c: Fix compiler warning from latest commit. 2009-11-03 00:49 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c: A small #include simplification. 2009-11-03 00:41 udifuchs * ufraw-batch.c, ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_ufraw.c: Added a --lensfun=auto|none option. Based on patch by Konrad. The default is --lensfun=none also in interactive mode which used to behave like --lensfun=auto. Fixed a small bug in the --grayscale option. 2009-10-31 00:18 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Save image defaults for image-chooser (bug ID: 2889697). Clean pixbuf before first display. free uf->conf in ufraw_close(), hopefully not breaking anything. 2009-10-30 20:59 udifuchs * ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Calculate live histogram from working color-space instead of display color-space. Calculate live histogram from cropped area only. Based on patches by Konrad. 2009-10-30 01:30 nkbj * dcraw.cc: Add support for the NIKON D3S. 2009-10-29 09:40 nkbj * wb_presets.c: Use the correct model name for the Canon EOS REBEL T1i. 2009-10-29 00:14 udifuchs * dcraw_api.cc, ufraw_ufraw.c: Simplify OpenMP use. Patch by Frank van Maarseveen. 2009-10-28 22:30 nkbj * ufraw_ufraw.c: Scale wavelet denoising threshold. 2009-10-27 23:55 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Small changes to last commit. 2009-10-27 23:44 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw.h, ufraw_developer.c, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Code refactoring. Groundwork for tiling all phases, WB fixes, optimizations, denoise scaling. Patch by Frank van Maarseveen. 2009-10-24 22:50 nkbj * configure.ac: Simplify search for the exiv2 library. 2009-10-24 22:00 nkbj * wb_presets.c: Add WB presets and fine tuning for the OLYMPUS E-30. 2009-10-24 02:05 nkbj * dcraw.cc, dcraw_api.cc: Update error handling to current dcraw.c code. 2009-10-23 08:50 nkbj * nikon_curve.c: Fix warnings while reading some Nikon curve files. 2009-10-22 22:30 nkbj * nikon_curve.c: Make warning message more consistent. 2009-10-22 10:15 nkbj * po/zh_CN.po: Delete obsolete lines in latest commit. 2009-10-21 23:28 udifuchs * po/zh_CN.po: Updated Chinese translation by Xu Yuanfei. 2009-10-21 22:25 nkbj * dcraw.cc: Revert latest commit. It had no effect. 2009-10-21 16:53 udifuchs * po/it.po: Updated Italian translation by Eugenio Baldi. 2009-10-21 09:00 nkbj * configure.ac, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Enable contrast setting and hot pixel elimination by default. 2009-10-20 22:45 nkbj * dcraw.cc: Use PENTAX K20D color matrix for SAMSUNG GX20. 2009-10-20 20:34 udifuchs * ufraw_preview.c, ufraw_ui.h: Allow upto 400% zoom. 2009-10-20 09:45 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-10-19 23:05 udifuchs * configure.ac, ufraw_preview.c: Remove unused pre-GtkImageView code. Require GtkImageView >= 1.6 for gtk_image_view_damage_pixels(). 2009-10-19 22:42 udifuchs * ufraw-gimp.c, ufraw_preview.c: Some post-release textual changes. 2009-10-19 21:57 udifuchs * ufraw_preview.c, ufraw_ui.h: The function g_idle_remove_by_data() removes just one idle function. We fix some bad interactions and duplicate function calls when controls are adjusted too fast. 2009-10-19 08:00 nkbj * ufraw_ufraw.c: Fix a couple of denoising issues. 2009-10-18 11:00 nkbj * dcraw.cc, dcraw_api.cc, dcraw_indi.c: Make code closer to original dcraw.c code. These type casts are not necessary for avoiding compiler warnings with newer versions of GCC. 2009-10-18 00:40 nkbj * ufraw_ufraw.c: Fix hot pixel elimination code. 2009-10-15 22:52 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2009-10-15 21:25 nkbj * Makefile.am: Add 'mkinstalldirs' to distributed files. 2009-10-15 20:50 udifuchs * Makefile.am: Add ac_openmp.m4 to the distributed files. 2009-10-15 14:00 nkbj * Makefile.am, icons/Makefile.am, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Make sure that 'make distclean' removes only files not included in distribution tar-ball. Use 'make maintainer-clean' to remove other generated files. 2009-10-15 13:45 nkbj * Makefile.am: ufraw.1 should only be removed by 'make distclean' 2009-10-15 11:45 nkbj * icons/Makefile.am: Add missing icon to UFRAW_ICONS. 2009-10-15 06:30 nkbj * ufraw_ufraw.c: Use OpenMP reduction construct for hot pixel count. Patch by Frank van Maarseveen. 2009-10-15 02:50 nkbj * README: Fix typo and make language more consistent. 2009-10-15 00:27 udifuchs * README: Updated README history for the release of ufraw-0.16. 2009-10-14 23:30 nkbj * ufraw_writer.c: Flip image before saving in FITS format to avoid output being saved upside down. 2009-10-14 22:20 udifuchs * po/it.po: Updated Italian translation by Eugenio Baldi. 2009-10-14 01:30 nkbj * po/es.po: White space fixes. 2009-10-13 21:45 nkbj * po/: cs.po, es.po, pl.po: Update version. 2009-10-13 18:09 udifuchs * po/ru.po: Updated Russian translation by Alexandre Prokoudine. 2009-10-13 15:09 udifuchs * po/nb.po: Updated Norwegian translation by Alvin Brattli. 2009-10-13 14:47 udifuchs * po/es.po: Updated Spanish translation by Enrique Jorreto. 2009-10-13 00:00 nkbj * po/da.po: Update Danish translation. 2009-10-12 22:15 udifuchs * ufraw_preview.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Mark forgotten string for translation. Being part of the hotpixel shaving interface, it is irrelevant to the coming release. 2009-10-12 21:47 udifuchs * po/nb.po: Updated Norwegian translation by Alvin Brattli. 2009-10-12 19:17 udifuchs * dcraw.cc: Support Sony A500 and A550. Patch from Dave Coffin. 2009-10-12 13:30 nkbj * dcraw_api.h, po/ca.po, po/cs.po, po/es.po, po/fr.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/ru.po, po/sv.po: Update copyright information. 2009-10-12 02:06 nkbj * dcraw.cc: Make stand-alone dcraw behave more like the original dcraw. 2009-10-11 22:15 nkbj * po/ja.po: Remove deprecated lines. 2009-10-11 21:16 udifuchs * ufraw_ufraw.c: Added OpenMP support for hotpixel detection, patch by Frank van Maarseveen. 2009-10-09 23:13 udifuchs * po/ja.po: Updated Japanese translation by Yota Kunioka. 2009-10-09 23:01 udifuchs * po/ru.po: Updated Russian translation by Alexander Rabtsevich. 2009-10-08 20:55 udifuchs * wb_presets.c: WB presets fpr the Canon 7D. 2009-10-08 20:48 udifuchs * ufraw_preview.c: Keep image fully uncropped while rotating, if aspect ratio is not locked. Try avoiding possible infinite loop by using double instead of float and warn if infinite loops still happen. 2009-10-07 18:14 udifuchs * po/pt.po: Updated Portuguese (Brazil) translation by Bruno Buys. 2009-10-06 21:22 udifuchs * dcraw_api.cc: Enable the code for pulling greens together after denoising. 2009-10-06 20:22 udifuchs * ufraw_conf.c: Finish last commit. 2009-10-06 19:28 udifuchs * dcraw_api.cc, ufraw.h, ufraw_preview.c: Calculate shrink from zoom when needed and get rid of conf->Shrink. Try using shrink instead of resize when reasonable, because it is faster. 2009-10-06 06:50 nkbj * po/: cs.po, ko.po, sr.po, sr@latin.po: Update translation files. 2009-10-06 00:20 udifuchs * po/ko.po: Fixed last commit. 2009-10-06 00:18 udifuchs * po/ko.po: Update Korean translation by Homin Lee. 2009-10-05 22:30 nkbj * dcraw.cc, dcraw_indi.c: Suppress more valgrind errors. The compiler warning fix in dcraw_indi.c caused an error in valgrind. 2009-10-05 21:30 nkbj * ufraw-batch.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Add missing white-spaces to strings. Update translation files accordingly. 2009-10-05 17:07 udifuchs * ufraw_preview.c: Fix crash when changing JPEG compression. 2009-10-05 00:00 udifuchs * po/cs.po: Updated Czech translation by Milan Knizek. 2009-10-04 09:30 nkbj * ufraw_writer.c: Fix writing of black'n'white PPM files. 2009-10-04 04:00 nkbj * dcraw.cc, ufraw.h, ufraw_developer.c: Suppress a couple of valgrind errors. 2009-10-03 15:21 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Force triggering of rotation event even if angle did not change during reset. Add comment explaining the angle sign change in ufraw_flip_image(). 2009-10-03 07:15 nkbj * ufraw-gimp.c: Fix sending grayscale images to GIMP. 2009-10-03 03:30 nkbj * configure.ac: Warn but do not crash when --with-lensfun is used on systems where lensfun is not installed. 2009-10-03 01:55 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Fixed again flip & rotate logic, hopefully once and for all. Rotation reset button, resets to camera orientation. 2009-10-02 09:30 nkbj * ufraw_preview.c, ufraw_ui.h: Use a more obvious variable name for latest change. 2009-10-02 06:15 nkbj * ufraw_lens_ui.c, ufraw_preview.c, ufraw_ui.h: Fix broken rotation/flip logic. Based on patch by Frank van Maarseveen. 2009-10-01 13:56 udifuchs * po/pl.po: Updated Polish translation. 2009-10-01 00:03 udifuchs * ufraw_preview.c: Move Alignment line count adjustment to rotation page. 2009-09-30 22:59 udifuchs * ufraw_preview.c: Fix rotation angle calculation when flipping. 2009-09-30 17:37 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2009-09-30 16:57 udifuchs * po/ca.po: Updated Catalan translation by Paco Rivière. 2009-09-30 16:51 udifuchs * ufraw_exiv2.cc: Read Exif.Canon.FocalLength tag. Patch by Artis Rozentāl. 2009-09-30 11:24 udifuchs * po/: sr.po, sr@latin.po: Updated Serbian translation by Miloš Popović. 2009-09-30 11:18 udifuchs * po/pl.po: Updated Polish translation by Tomasz Golinski. 2009-09-30 09:45 nkbj * po/nl.po: Update Dutch translation. 2009-09-30 09:30 nkbj * po/da.po: Update Danish translation. 2009-09-30 09:00 nkbj * po/: da.po, nl.po: Update Dutch and Danish translations. 2009-09-29 16:30 udifuchs * ufraw_ufraw.c: Fix some corner cases for 100% zoom. 2009-09-29 11:45 nkbj * configure.ac, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Add support for hot pixel elimination. It is enabled by the configuration switch --enable-hotpixels. Based on patch by Frank van Maarseveen. 2009-09-28 22:52 udifuchs * ufraw_ufraw.c: Simplify (and improve) calculation of ConvertShrink. 2009-09-28 22:51 udifuchs * dcraw_api.cc: Fix one pixel wide line artifact on image edge. 2009-09-28 20:03 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_ufraw.c, ufraw_writer.c: Get rid of image_type and simplify the code a bit. 2009-09-28 17:42 udifuchs * ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot, po/zh_CN.po: Grammer correction (Debian bug #530589). 2009-09-27 17:39 udifuchs * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Update 100% zoom preview when denoise threshold is changed. Based on patch by Frank van Maarseveen. 100% preview is now enabled. 2009-09-27 09:05 nkbj * dcraw.cc: Disable latest commit to avoid segfault with PENTAX *ist D files. 2009-09-25 20:31 udifuchs * ufraw_preview.c: Update interpolatin method and color-smoothing for 100% zoom (if enabled). 2009-09-25 20:23 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Small code simplification. 2009-09-25 13:55 udifuchs * ufraw_writer.c: Fix buffer overflow when rotating. 2009-09-23 08:30 nkbj * ufraw_ufraw.c: Fix mistake in latest commit. 2009-09-23 08:15 nkbj * ufraw_preview.c, ufraw_ufraw.c: Clean up use of Developer macro. 2009-09-23 00:45 nkbj * ufraw_preview.c: Fix spelling of temporarily in comments. White space fix. 2009-09-22 22:40 nkbj * dcraw.cc: dcraw modified 8.98 (1.431). Changelog: Ignore the first data error in a Pentax *ist D file. 2009-09-22 22:36 nkbj * dcraw.cc: dcraw original 8.98 (1.431). 2009-09-22 11:30 nkbj * ufraw_ufraw.c: Fix bug where --rotate=no flips images horizontally. 2009-09-22 04:55 nkbj * ufraw_lens_ui.c: Work around lensfun bug revealed by GCC 4.4.x. 2009-09-21 22:32 udifuchs * ufraw_preview.c: Whitespace cleanup. 2009-09-21 01:39 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Treat create_base_image() as another rendering phase and trigger full rendering when WB changes during 100% zoom. Based on patch by Frank van Maarseveen. 100% zoom is still not enabled. 2009-09-19 00:55 uid198679 * dcraw.cc: dcraw modified 8.98 (1.430). Changelog: Support the Sony DSLR-A850. 2009-09-19 00:50 nkbj * dcraw.cc: dcraw original 8.98 (1.430). 2009-09-18 18:13 udifuchs * ufraw_ufraw.c: Fix --size when size is between 50% and 100% of original size. 2009-09-18 14:17 udifuchs * ufraw_preview.c: Fix last commit. 2009-09-18 13:39 udifuchs * ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Initial changes toward possible future implementation of 100% zoom in preview. Patch by Frank van Maarseveen. 2009-09-17 08:20 nkbj * dcraw.cc: dcraw modified 8.98 (1.429). Changelog: Support the Canon EOS 7D and the Casio EX-Z850. 2009-09-17 08:15 nkbj * dcraw.cc: dcraw original 8.98 (1.429). 2009-09-13 20:04 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2009-09-12 21:01 udifuchs * ufraw-batch.c: Support --create-id=only in ufraw-batch. 2009-09-10 18:07 udifuchs * ufraw_preview.c: Update alignment line drawing in preview. 2009-09-07 11:00 nkbj * dcraw_indi.c: Fix compiler warning with GCC 4.4.x. Now without segfault. 2009-09-06 22:30 nkbj * ufraw_exiv2.cc: Add comment to latest commit. 2009-09-05 04:00 nkbj * dcraw_indi.c: Revert latest commit to avoid segfaults. 2009-09-03 12:30 nkbj * ufraw_developer.c: Make apply_matrix() safe against overwriting its data. 2009-09-01 23:00 nkbj * dcraw_indi.c: Fix compiler warning with GCC 4.4.x. 2009-09-01 21:23 udifuchs * ufraw_exiv2.cc: Do not write the DNGPrivateData tag to output EXIF. 2009-09-01 14:13 udifuchs * configure.ac: Added automake 1.11 silent rules. 2009-09-01 10:08 udifuchs * ufraw_preview.c, ufraw_writer.c: Fixed rotation and crop issue from last commit. 2009-09-01 03:30 nkbj * configure.ac: Check for the cfitsio library both using pkg-config and header files. 2009-09-01 00:24 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Fix slowdown when sending images to Gimp. 2009-08-31 11:45 nkbj * dcraw.cc: dcraw modified 8.97 (1.428). Changelog: Correctly crop Nikon D300S photos. 2009-08-31 11:40 nkbj * dcraw.cc: dcraw original 8.97 (1.428). 2009-08-31 11:35 nkbj * configure.ac: Use pkgconfig til test for the cfitsio library. 2009-08-31 07:00 nkbj * dcraw.cc: Add preliminary support for the NIKON D300S. 2009-08-31 01:30 nkbj * ufraw-gimp.c: Update copyright information. 2009-08-30 11:45 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2009-08-30 10:55 nkbj * dcraw.cc, dcraw.h: Fix typo in latest commit. Clean up dcraw.h namespace. 2009-08-30 10:50 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.97 (1.427). Changelog: Support the Canon A470, G11, Nikon D3000, and Panasonic FZ35/FZ38. Support camera WB for the Kodak EasyShare Z980 and Z1015. 2009-08-30 10:41 nkbj * dcraw.cc: dcraw original 8.97 (1.427). 2009-08-28 17:41 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_writer.c: Change ufraw-gimp to use the same image writing code as all other image formats. This fixes the rotation issue in the plugin. 2009-08-27 18:45 nkbj * ufraw_preview.c: Increase range of channel multipliers in preview. 2009-08-20 11:40 nkbj * dcraw.cc, wb_presets.c: Add camera WB support and WB presets for the KODAK EASYSHARE Z1015 IS. 2009-08-19 09:15 nkbj * dcraw.cc: Add color matrix for the Nikon D3000. Patch by Dave Coffin. 2009-08-16 22:20 nkbj * ufraw_preview.c: Fix OpenMP support for preview. 2009-08-15 14:30 nkbj * dcraw.cc: Add preliminary support for the Nikon D3000. 2009-08-14 12:15 nkbj * dcraw_indi.c: Fix indentations in latest commit. 2009-08-14 09:45 nkbj * dcraw.cc: dcraw modified 8.96 (1.426). Changelog: Update packed_load_raw(). 2009-08-14 09:32 nkbj * dcraw.cc: dcraw original 8.96 (1.426). 2009-08-13 23:30 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.96 (1.426). Changelog: Decode all packed 10-bit and 12-bit formats in one function. Support the Casio Z60, Casio Z75, Kodak Z980, and Pentax K-7. Support the Olympus X200,D560Z,C350Z with or without JPEG files. Copied color matrices from Adobe DNG Converter 5.4. 2009-08-13 23:07 nkbj * dcraw.cc: dcraw original 8.96 (1.426). 2009-08-13 11:05 nkbj * configure.ac: Only include ac_openmp.m4 if AC_OPENMP is not defined. 2009-08-13 07:00 nkbj * ufraw-batch.c: Fix segfault in ufraw-batch with unsupported raw file formats. 2009-08-11 21:30 nkbj * wb_presets.c: Add WB presets and fine tuning for the SONY DSLR-A380. 2009-08-11 21:15 nkbj * ufraw_lens_ui.c: Update preview image properly when lens distortion model 'None' is selected. 2009-08-11 10:15 nkbj * ufraw.c: Update copyright information. 2009-08-10 22:45 nkbj * dcraw_indi.c: OpenMP support for VNG interpolation. Patch by Bruce Guenter. 2009-08-10 14:35 nkbj * ufraw_preview.c, ufraw_ufraw.c: OpenMP support for preview redrawing. Patch by Bruce Guenter. 2009-08-10 08:10 nkbj * ufraw_preview.c: Don't write alignment lines at the image borders. 2009-08-09 01:20 nkbj * ufraw_preview.c: Increase linearity precision. Patch by Omari Stephens. 2009-08-07 12:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-08-07 11:51 udifuchs * ufraw_preview.c: Double the gridlines to make them more prominent. 2009-08-07 11:15 nkbj * ufraw_preview.c, ufraw_ui.h: Add reset button to the rotation dialog. 2009-08-07 00:15 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-08-07 00:00 nkbj * ufraw.h, ufraw_conf.c, ufraw_preview.c: Add configurable alignment lines overlay. Patch by Bruce Guenter. 2009-08-06 09:30 uid198679 * dcraw.cc: Add preliminary support for the PENTAX K-7. 2009-08-05 23:50 nkbj * ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Add std. deviation to hue calculations. Refactor spot size calculations. Patch by Bruce Guenter. 2009-08-05 07:45 nkbj * ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Improve hue calculation for lightness adjustment. Patch by Bruce Guenter. 2009-08-04 22:55 nkbj * po/fr.po: Remove obsolete entry from latest commit. 2009-08-04 17:05 udifuchs * ufraw.desktop, po/fr.po: Update French translation by Gaëtan Perrier. 2009-08-03 04:45 nkbj * ufraw-batch.c, ufraw.h, ufraw_ufraw.c: Make createID==only_id behave in logically. Based on patch by Frank van Maarseveen. 2009-08-02 01:30 nkbj * ufraw_preview.c, ufraw_ufraw.c: Fix rotation in preview. Fix white-space damage. 2009-08-02 01:10 nkbj * wb_presets.c: Add WB presets for the PENTAX K-7. 2009-07-31 22:45 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. Update Danish translation. 2009-07-31 00:29 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2009-07-28 23:56 udifuchs * ufraw.c, ufraw.h, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Added rotation control to the transformations page of the GUI. Patch by Frank van Maarseveen. 2009-07-24 21:03 udifuchs * ufraw_conf.c, ufraw_preview.c, ufraw_ui.h: Rewrote the lightness adjustment UI to create new controls. Based on patch by Bruce Guenter. 2009-07-24 00:05 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Add a hue "width" parameter to the lightness adjustments. Patch by Bruce Guenter. 2009-07-24 00:02 udifuchs * ufraw_lens_ui.c, ufraw_preview.c, ufraw_ui.h: Refactors more button creation by adding two common subroutines for making buttons with stock images in them. Code size is reduced by 77 lines in total. Patch by Bruce Guenter. 2009-07-15 19:00 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2009-07-11 13:15 nkbj * ufraw_ufraw.c: Cosmetic changes. 2009-07-10 11:00 nkbj * ufraw-batch.c: Output \'Saved...\' message even when warnings occur. 2009-07-10 08:25 nkbj * ufraw.h, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Fix preview and writing of rotated images. Patch by Frank van Maarseveen. 2009-07-10 08:15 nkbj * ufraw_ufraw.c: Fix for flipping images when using lensfun. Patch by Frank van Maarseveen. 2009-07-10 01:45 nkbj * ufraw_preview.c: Raise contrast and saturation limits to 8. 2009-07-09 23:16 nkbj * po/: ca.po, cs.po, da.po, de.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2009-07-08 20:57 udifuchs * configure.ac, ufraw-setup.iss.in, ufraw.desktop, po/de.po: Added German translation by Matthias Urlichs and Chris Leick. 2009-07-08 10:30 nkbj * dcraw.cc, nikon_curve.c: Fix compiler warnings from GCC 4.4. 2009-07-08 00:46 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Updated hue-lightness adjustmens. Patch by Bruce Guenter. 1. Introduces a new struct lightness_adjustment. 2. Changes the text saved in the conf files to have one record for each adjustment, containing both the adjustment and the hue. 3. Eliminates the hue slider from the UI. 4. Rename adjustment_steps to max_adjustments, in line with the other #defines. 2009-07-08 00:45 nkbj * ufraw.desktop: Add Simplified Chinese translation. 2009-07-08 00:00 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot, zh_CN.po: Update translation files. 2009-07-07 23:55 nkbj * configure.ac, ufraw-setup.iss.in, po/zh_CN.po: Add Simplified Chinese translation. 2009-07-07 22:35 nkbj * autogen.sh: Update to support automake-1.11. Patch by Marco Hyman. 2009-07-07 22:30 nkbj * ufraw_lens_ui.c, ufraw_preview.c, ufraw_ui.h: Refactor the creation of reset buttons. Based on patch by Bruce Guenter. 2009-07-07 09:20 nkbj * ufraw_preview.c: Make UFRaw usable on 1024x600 pixels netbook screens. 2009-07-07 08:05 nkbj * dcraw.cc: Fix build error when using GCC 4.4. 2009-07-06 23:40 nkbj * ufraw_ufraw.c: Fix for rotation by a negative rotation angle. 2009-07-06 00:30 nkbj * po/da.po: Bump version number. 2009-07-06 00:15 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2009-07-06 00:15 nkbj * configure.ac: Bump version number. 2009-07-04 23:15 nkbj * wb_presets.c: Add WB presets for the NIKON D5000. 2009-06-30 11:00 nkbj * nikon_curve.c: Fix nc_fwrite(). Patch by James Vega. 2009-06-19 22:00 nkbj * dcraw.cc: dcraw modified 8.95 (1.425). Changelog: Support the Phase One P45+. 2009-06-19 21:50 nkbj * dcraw.cc: dcraw original 8.95 (1.425). 2009-06-19 09:15 nkbj * dcraw.h: Clean up DCRaw class namespace. 2009-06-18 06:50 nkbj * dcraw.cc: Remove lines of code which had been included twice. 2009-06-09 02:15 nkbj * dcraw.cc: dcraw modified 8.95 (1.424). Changelog: Decode one-byte Huffman tokens by lookup table instead of crawling a tree. Support the Casio EX-S20, the Samsung S850, and the Agfa DC-833m. Removed pre_mul[] settings so users will send me color chart photos. 2009-06-09 02:05 nkbj * dcraw.cc: dcraw original 8.95 (1.424). 2009-06-09 00:00 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.95 (1.424). Changelog: Decode one-byte Huffman tokens by lookup table instead of crawling a tree. Support the Casio EX-S20, the Samsung S850, and the Agfa DC-833m. Removed pre_mul[] settings so users will send me color chart photos. 2009-06-08 23:09 nkbj * dcraw.cc: dcraw original 8.95 (1.424). 2009-06-01 23:16 udifuchs * nikon_curve.c: Patch from Debian downstream by Pascal de Bruijn. 2009-05-24 03:15 nkbj * ufraw_routines.c: Add support for the Leica D-LUX4 .RWL file format. 2009-05-20 22:10 nkbj * wb_presets.c: Add WB presets for Canon EOS 500D/DIGITAL REBEL T1i/Kiss Digital X3 and Canon Powershot SX1 IS. 2009-05-15 12:20 nkbj * dcraw.cc: dcraw modified 8.94 (1.423). Changelog: Various fixes. 2009-05-15 12:17 nkbj * dcraw.cc: dcraw original 8.94 (1.423). 2009-05-15 11:45 nkbj * wb_presets.c: Add WB presets for the Panasonic DMC-FZ28. 2009-05-15 04:00 nkbj * dcraw.cc: Fix segfault with Kodak DC50 image files. 2009-05-15 01:50 nkbj * dcraw.cc: Fix mistake in latest commit. Temporary fix for segfault with Kodak DC50 images. 2009-05-15 00:15 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.94 (1.423). Changelog: When sampling dark pixels, don't get too close to the light pixels. Support the Panasonic DMC-GH1. 2009-05-15 00:05 nkbj * dcraw.cc: dcraw original 8.94 (1.423). 2009-05-14 22:45 nkbj * dcraw.cc: Clean up latest commit. 2009-05-14 22:30 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2009-05-14 22:20 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.94 (1.422). Changelog: Use a logarithmic curve when -g has zero power and nonzero toe slope. Linearize the Apple Quicktake, Kodak DC40/DC50, and Logitech Fotoman Pixtura. Support the Canon SX1, SX110, and EOS 500D/Rebel T1i/Kiss X3. Support the Motorola PIXL, Kodak Z1015, and Olympus E-30. 2009-05-14 21:50 nkbj * dcraw.cc: dcraw original 8.94 (1.422). 2009-05-06 00:25 nkbj * ufraw_ufraw.c: Make lensfun work again. 2009-05-05 23:40 udifuchs * po/cs.po: Updated Czech translation by Milan Knížek. 2009-04-22 07:45 nkbj * wb_presets.c: Add WB presets + fine tuning for SONY DSLR-A900. 2009-04-12 07:17 lexort * README-processing.txt: some notes about highlight processing, with a pointer to Robert's infamous sunset picture. 2009-04-12 06:49 lexort * README-processing.txt: Add section on nikon tone curves, from an email by Udi long ago. Simplify discusssion on gamma in light of recent mail. Mention the mostly-consensus to move to standard sRGB gamma if/when the fogginess issue is resolved. 2009-04-11 20:38 lexort * README-processing.txt: add pointer to argyll note about reasonable spacing in perceptual spaces for ArgyllCMS. 2009-04-11 20:36 lexort * README-processing.txt: link to thread pointed out by Martin, and note the quantization noise hypothesis (which I find highly believable, but trying not to jump to conclusions since obviously this is hard). 2009-04-08 17:21 lexort * README-processing.txt: Add pointer to dlraw's description of processing. 2009-04-07 18:34 lexort * TODO: Put a linear profile with sRGB primaries on the wishlist. 2009-04-06 20:02 lexort * README-processing.txt: add http://www.21stcenturyshoebox.com/essays/color_reproduction.html 2009-04-06 07:32 lexort * TODO: Add item about gamma/linearity mystery. 2009-04-05 22:55 nkbj * ufraw_conf.c: Fix loading lightness adjustment settings from ID files. Based on patch by Simon Kirby. 2009-03-25 11:55 nkbj * ufraw_preview.c: Fix auto black point setting. Patch by Martin Ling. 2009-03-16 23:21 udifuchs * wb_presets.c: WB presets for the Fuji S100FS. 2009-03-12 23:26 nkbj * dcraw_api.cc: Fix typo in last commit. 2009-03-12 15:55 nkbj * dcraw_api.cc: Fix error handling for corrupt data. 2009-03-12 00:51 udifuchs * configure.ac, Makefile.am: Add --with-gtk configuration option to make GTK optional. When GTK is used GtkImageView library is mandatory. 2009-03-09 22:45 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.93 (1.421). Changelog: Pentax K2000/K-m Huffman tree must be read from the MakerNote. The Kodak 620x and 720x use the filter pattern YMCY, not GRBG. 2009-03-09 22:39 nkbj * dcraw.cc: dcraw original 8.93 (1.421). 2009-03-05 09:50 nkbj * dcraw.cc: Fix compiler warning. 2009-03-03 22:45 nkbj * dcraw.h: Update copyright information. 2009-03-03 21:51 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.92 (1.420). Changelog: Added -g option for custom gamma curves. Support the Pentax K2000/K-m. Support Firmware 1.0.7 in the Canon EOS 5D Mark II. 2009-03-03 21:41 nkbj * dcraw.cc: dcraw original 8.92 (1.420). 2009-02-18 07:40 nkbj * ufraw_ufraw.c: Select the correct version of ctime_r() on Solaris. 2009-02-17 08:35 nkbj * configure.ac: Make configuration more flexible. Based on patch by Markus Meier. 2009-02-12 21:45 nkbj * dcraw.cc: dcraw modified 8.91 (1.419). Changelog: Don't hang when a RIFF file has an extra byte at the end. 2009-02-12 21:40 nkbj * dcraw.cc: dcraw original 8.91 (1.419). 2009-02-09 00:05 nkbj * ufraw_developer.c, ufraw_icons.c, ufraw_lens_ui.c: Update copyright information. 2009-02-09 00:00 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2009-02-08 23:03 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_icons.c, ufraw_preview.c, ufraw_ui.h, icons/Makefile.am, icons/hueadjust-24.png, icons/hueadjust.svg: dded lightness adjustmens by hue. Based on patch by Bruce Guenter. 2009-02-07 11:00 nkbj * ufraw_conf.c: Write lens model to ID file. 2009-02-06 01:30 udifuchs * ufraw_lens_ui.c: Automatic lens selection with lensfun. Based on patch by Martin Ling. 2009-02-06 00:30 udifuchs * wb_presets.c: WB Presets + fine tuning for the Sony Alpha 350. 2009-02-05 22:45 udifuchs * configure.ac, wb_presets.c: WB presets for the Canon 5D Mark II. 2009-02-02 23:55 nkbj * dcraw.cc: dcraw modified 8.91 (1.418). Changelog: Support the Hasselblad V96C. 2009-02-02 23:49 nkbj * dcraw.cc: dcraw original 8.91 (1.418). 2009-02-02 23:30 nkbj * dcraw_indi.c: Remove broken OpenMP support from vng_interpolate_INDI(). 2009-01-28 21:55 nkbj * dcraw_api.cc, dcraw_indi.c: Update scale_colors_INDI() to DCRaw 8.90 code. 2009-01-27 22:15 nkbj * README, dcraw_indi.c: Update ppg_interpolate() to DCRaw 8.90 code. 2009-01-26 12:00 nkbj * dcraw_indi.c: Revert changes to vng_interpolate() to keep OpenMP working. 2009-01-26 10:25 nkbj * dcraw_indi.c: Keep portability. 2009-01-25 22:45 nkbj * dcraw_indi.c: Some whitespace corrections. 2009-01-25 20:48 udifuchs * po/ja.po: Updated Japanese translation by Yota Kunioka. 2009-01-25 19:57 udifuchs * dcraw_indi.c: Fix wavelet denoise when working with OpenMP (ufraw bug 2518452). 2009-01-25 12:00 nkbj * ufraw.pod, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Add --color-smoothing command line option. 2009-01-24 02:15 nkbj * dcraw_indi.c: Update vng_interpolate_INDI() to DCRaw 8.90 code. 2009-01-23 21:45 nkbj * dcraw.cc, dcraw_indi.c: A couple of whitespace changes. 2009-01-23 21:15 nkbj * ufraw_preview.c: Update aspect ratio display when crop region is reset. 2009-01-20 21:10 nkbj * dcraw.cc: dcraw modified 8.90 (1.417). Changelog: Get camera WB from ARW files edited by Sony IDC software. 2009-01-20 21:08 nkbj * dcraw.cc: dcraw original 8.90 (1.417). 2009-01-19 10:10 nkbj * dcraw_indi.c: Revert latest change until bug in 64-bit version has been investigated. 2009-01-16 08:55 nkbj * dcraw_indi.c: Undo whitespace changes in latest commit. 2009-01-16 08:45 nkbj * dcraw_indi.c: Update wavelet_denoise() to DCRaw 8.90 code. 2009-01-15 22:30 nkbj * ufraw.pod, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Update help text and man page entry for --exif option. 2009-01-15 22:00 nkbj * dcraw.cc: dcraw modified 8.90 (1.416). Changelog: Fixed an overflow bug in wavelet_denoise(). 2009-01-15 21:56 nkbj * dcraw.cc: dcraw original 8.90 (1.416). 2009-01-15 20:28 udifuchs * ufraw_preview.c: Most format (except ppm and fits) support saving EXIF. Update label accordingly. 2009-01-14 12:25 nkbj * dcraw.cc: dcraw modified 8.90 (1.415). Changelog: Support the Samsung S85 at ISO 800 and higher. 2009-01-14 12:20 nkbj * dcraw.cc: dcraw original 8.90 (1.415). 2009-01-14 12:15 nkbj * ufraw_preview.c: Change exposure adjustment stepping to 1/6 EV. 2009-01-14 10:40 nkbj * ufraw_exiv2.cc: Fall back to read short lens name from Nikon NEF files if full lens name is not defined in Exiv2. 2009-01-14 10:15 nkbj * ufraw_exiv2.cc: Read full lens name from Nikon NEF files. Needed for future work on lensfun support. 2009-01-13 23:26 nkbj * ufraw_preview.c: Set exposure compensation to +/-6 EV to keep usability of slider. 2009-01-13 22:30 nkbj * dcraw.cc: dcraw modified 8.90 (1.414). Changelog: Better support the Apple QuickTake 100. 2009-01-13 22:28 nkbj * dcraw.cc: dcraw original 8.90 (1.414). 2009-01-13 21:45 nkbj * ufraw_preview.c: Allow exposure compensation of +/-8 EV for extreme HDR work. 2009-01-13 07:00 nkbj * ufraw_conf.c: More clean-ups. 2009-01-13 04:50 nkbj * ufraw_preview.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Various clean-ups. 2009-01-12 21:15 nkbj * configure.ac: Fix link error on Mac OS X. 2009-01-12 12:00 nkbj * ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Add --maximize-window command line switch. 2009-01-11 16:44 udifuchs * wb_presets.c: WB presets for the Canon PowerShot A710 IS. 2009-01-11 15:07 udifuchs * ufraw_writer.c: Use the heap instead of malloc(). 2009-01-11 02:50 nkbj * ufraw_preview.c: Fix warning with recent GTK+: Gtk-WARNING **: GtkSpinButton: setting an adjustment with non-zero page size is deprecated. 2009-01-10 22:45 nkbj * ufraw_writer.c: Make code from latest commit simpler. 2009-01-10 21:45 nkbj * ufraw_conf.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Add option not to embed built-in sRGB profile (default). 2009-01-10 20:15 nkbj * dcraw.cc: dcraw modified 8.90 (1.413). Changelog: Support the Samsung S85. 2009-01-10 20:09 nkbj * dcraw.cc: dcraw original 8.90 (1.413). 2009-01-10 10:20 nkbj * ufraw_conf.c: Fix a couple of typoes. 2009-01-10 02:20 nkbj * ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Update error handling in embedding sRGB profile. 2009-01-10 00:15 nkbj * ufraw_writer.c: Make some strings ready for translation. 2009-01-09 23:25 nkbj * ufraw_ufraw.c: Fix crash while saving TIFF files. 2009-01-09 04:20 nkbj * ufraw_conf.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Embed sRGB profile made by cmsCreate_sRGBProfile() if no other output profile is set. 2009-01-08 18:55 nkbj * dcraw.cc: dcraw modified 8.89 (1.412). Changelog: Regardless of the Software tag, a DNG file is always raw. 2009-01-08 18:50 nkbj * dcraw.cc: dcraw original 8.89 (1.412). 2009-01-08 07:30 nkbj * ufraw.h, ufraw_conf.c, ufraw_ufraw.c, ufraw_ui.h: Update some comments. 2009-01-07 22:30 nkbj * ufraw_ufraw.c: Avoid getting dark corners with lensfun (fix bug #2023470). 2009-01-06 22:15 nkbj * wb_presets.c: Add WB presets for the Canon PowerShot G10. Please test if this camera model really supports native WB presets. 2009-01-04 22:10 nkbj * wb_presets.c: Update Panasonic DMC-L1 Kelvin presets. 2009-01-04 21:50 nkbj * wb_presets.c: Add WB presets for the Leica DIGILUX 3. 2009-01-04 21:45 nkbj * dcraw.cc: dcraw modified 8.89 (1.411). Changelog: Support 3672 x 2486 images from the Panasonic DMC-FZ50. 2009-01-04 21:40 nkbj * dcraw.cc: dcraw original 8.89 (1.411). 2009-01-04 05:00 nkbj * dcraw.cc: Fix reading Panasonic DMC-FZ50 files (bug #2464573). 2009-01-03 23:00 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2009-01-03 13:00 nkbj * wb_presets.c: Update WB presets for Canon EOS 30D. 2009-01-03 09:10 nkbj * dcraw.cc: dcraw modified 8.89 (1.410). Changelog: Support FFF format from the Hasselblad H3D. 2009-01-03 09:04 nkbj * dcraw.cc: dcraw original 8.89 (1.410). 2009-01-03 09:01 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nb.po, nl.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2009-01-03 09:00 nkbj * wb_presets.c: Add WB fine tune and Kelvin presets for the Nikon D90. 2008-12-24 01:24 udifuchs * README: Final textual changes before UFRaw 0.15 release. 2008-12-24 00:25 udifuchs * po/: fr.po, ko.po, nb.po, nl.po: Updated Korean translation. 2008-12-23 01:58 udifuchs * mkinstalldirs: Update to the latest mkinstalldirs generated by automake 1.10.1. 2008-12-23 01:56 udifuchs * dcraw.cc, ufraw_embedded.c, ufraw_ufraw.c: Refined the warning messaged that were added lately. A few warnings are actually errors. Some warning were downgrade to log messages, since they are very 'light' warning. If they do pop-up to users, they would only be an annoyance. 2008-12-23 00:58 udifuchs * ufraw_exiv2.cc: With Exiv2-0.18 there is no need any more to explicitly delete tags Exif.Canon.0x4002, Exif.Canon.0x4005. 2008-12-23 00:45 udifuchs * po/: nb.po, nl.po: Update Nederlands translation. Update comments in Norwegian translation. 2008-12-23 00:32 udifuchs * configure.ac, ufraw-setup.iss.in, ufraw.desktop, po/nb.po, po/no.po: The Norwegian (no) translation is actually a translation to Norwegian bokml (nb). (There is also a Norwegian Nynorsk (nn) language.) 2008-12-23 00:04 udifuchs * ufraw_developer.c, ufraw_preview.c: Updated preview correctly when display profile changes (ufraw bug 2459398). 2008-12-22 21:00 udifuchs * dcraw_indi.c: OpenMP support also for VNG interpolation. Patch by Bruce Guenter. 2008-12-22 03:20 nkbj * po/: cs.po, fr.po: Update translation files. 2008-12-21 09:42 lexort * README: Note that OpenMP is enabled by default, and how to disable it. 2008-12-21 00:05 nkbj * po/cs.po: Update Czech translation. 2008-12-20 21:50 udifuchs * po/fr.po: Udated French translation. 2008-12-20 21:46 udifuchs * po/cs.po: Updated Czech translation. 2008-12-20 21:21 udifuchs * ufraw_preview.c: Add scrollbars to the profiles/curves page in the options window. Set default option window size 600 by 400. 2008-12-20 08:00 nkbj * po/da.po: Fix typo in latest commit. 2008-12-20 00:30 nkbj * po/da.po: Update Danish translation to UFRaw 0.15. 2008-12-19 01:03 udifuchs * configure.ac: Bump UFRaw's version to 0.15. 2008-12-19 00:59 udifuchs * dcraw.cc: Fix redundant warning when loading .badpixels. 2008-12-19 00:51 udifuchs * ufraw_writer.c: Continue openmp support by developing the image in big patches to improve performance. Patch by Bruce Guenter. The use of variable arrays is introduced into ufraw code base. If noone complains, we will start using it all over. 2008-12-18 22:45 nkbj * wb_presets.c: Fix goof in latest commit. 2008-12-18 22:25 nkbj * wb_presets.c: Add WB presets for Canon EOS 450D/REBEL XSi/Kiss X2 and REBEL XS/Kiss F. 2008-12-18 01:31 udifuchs * ufraw_ufraw.c: Fix the warning message for the last commit. 2008-12-18 01:08 udifuchs * wb_presets.c: Added WB presets for the Canon 1000D. 2008-12-18 00:15 udifuchs * ufraw_ufraw.c: Fix a check that produced a wrong "fread 1!=9" warning. 2008-12-16 06:15 nkbj * curveeditor_widget.h, nikon_curve.h: Update copyright information. 2008-12-16 00:58 udifuchs * configure.ac, dcraw_api.h, nikon_curve.c, ufraw_conf.c, ufraw_embedded.c, ufraw_routines.c, ufraw_ufraw.c: Fix all the unused result warnings. Add -D_FORTIFY_SOURCE=2 to configure.ac to turn on these warnings. Remove the #include , which does not exist in all environments. 2008-12-15 23:43 udifuchs * dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, ufraw_ufraw.c: Add integrity checks for dcraw's standard io functions, instead of ignoring them. I think the added warnings are too technical to be translated. Add progress report during the loading of the raw file. 2008-12-13 19:15 udifuchs * wb_presets.c: Some more WB presets for the Nikon D90. 2008-12-12 02:36 udifuchs * ac_openmp.m4, configure.ac, dcraw_indi.c, ufraw_developer.c: Added openmp support for parallel processing of interpolations and pixel development. Patch by Bruce Guenter. 2008-12-11 06:10 nkbj * dcraw.cc: dcraw modified 8.89 (1.409). Changelog: Correctly handle negative pixels in split NEF files. 2008-12-11 06:08 nkbj * dcraw.cc: dcraw original 8.89 (1.409). 2008-12-10 23:02 udifuchs * wb_presets.c: WB presets + fine tuning + temperature presets for the Nikon D700. 2008-12-09 22:22 udifuchs * ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h: Magor simplification of the conf/rc code. Fixes ufraw-Bugs-2190311 : Defaults always saved in 0.14.1 2008-12-07 13:11 nkbj * dcraw.cc: dcraw modified 8.89 (1.408). Changelog: Support GPS-tagged ORFs and anonymous DNGs. 2008-12-07 13:09 nkbj * dcraw.cc: dcraw original 8.89 (1.408). 2008-12-01 22:32 nkbj * dcraw.cc: dcraw modified 8.89 (1.407). Changelog: Correctly handle edges of Canon sRAW images. 2008-12-01 22:28 nkbj * dcraw.cc: dcraw original 8.89 (1.407). 2008-11-26 13:07 nkbj * dcraw.cc: dcraw modified 8.89 (1.406). Changelog: Show exposure from Canon MakerNote only if EXIF values are missing. Support the sRAW1 and sRAW2 modes of the Canon EOS 50D and 5D Mark II. Support the Leaf AFi 7, Panasonic FX150 and G1, and Canon PowerShot G10. 2008-11-26 12:57 nkbj * dcraw.cc: dcraw original 8.89 (1.406). 2008-11-23 23:23 udifuchs * wb_presets.c: Added WB presets for the Nikon D90. Added WB presets for the Canon 50D. 2008-11-18 00:58 udifuchs * ufraw_exiv2.cc: Keep the NEFThumbnailSize tag as it turns out it is really a RawImageCenter tag. 2008-11-18 00:30 nkbj * dcraw.cc, nikon_curve.c, ufraw_conf.c, ufraw_embedded.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: Fix compiler warnings from gcc 3.4.x. 2008-11-15 00:15 nkbj * ufraw_routines.c: Add general support for Nikon DSLR input profiles. 2008-11-13 23:30 nkbj * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/no.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Do not make JPEG size optimization optional. 2008-11-13 23:30 nkbj * ufraw_exiv2.cc: Delete Exif.Canon.0x4002 if EXIF header is too big. 2008-11-11 00:10 nkbj * wb_presets.c: Add WB presets for OLYMPUS E-420. 2008-11-11 00:00 nkbj * ufraw.pod, ufraw_conf.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/no.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Add jpg and tif as valid --out-type options. 2008-11-10 23:30 nkbj * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_writer.c, po/ca.po, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/no.po, po/pl.po, po/pt.po, po/ru.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ufraw.pot: Add option for JPEG size optimization. 2008-11-09 17:33 udifuchs * po/: sr.po, sr@latin.po: Updated Serbian translation by Milos Popovic. 2008-11-08 14:53 udifuchs * ufraw_exiv2.cc: Delete Exif.Canon.0x4005 tag if EXIF block is too big. 2008-11-07 10:00 nkbj * ufraw_exiv2.cc: Add comments. 2008-11-01 13:49 udifuchs * ufraw_exiv2.cc: Fix again last commit for users of "older" exiv2 libraries. 2008-10-27 12:36 udifuchs * dcraw.cc: Canon 5D Mark II support patch from Dave Coffin. 2008-10-23 21:20 nkbj * ufraw_conf.c: Save grayscale channel mixer settings properly. 2008-10-22 17:13 udifuchs * ufraw_exiv2.cc: Fix previous commit. 2008-10-21 23:20 nkbj * ufraw_exiv2.cc: Fix latest commit. 2008-10-21 16:48 udifuchs * ufraw_exiv2.cc: Use the new Exiv2::Metadatum::print() method. Read the Exif.CanonCs.LensType tag. 2008-10-20 22:00 udifuchs * icons/Makefile.am: ufraw_icons.h should only be deleted on 'make distclean'. Exit with error if gdk-pixbuf-csource is needed but not found. 2008-10-20 21:44 udifuchs * ufraw_preview.c, ufraw_ui.h: Split the notebook pages generation out of ufraw_preview(). Patch by Bruce Guenter. 2008-10-19 01:57 udifuchs * README: Final textual changes for version 0.14.1. 2008-10-19 01:05 nkbj * po/ru.po: Update copyright information. 2008-10-19 01:00 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2008-10-18 14:54 udifuchs * po/ru.po: Russian translation update by Alexander Rabtchevich. 2008-10-18 02:49 udifuchs * ufraw_developer.c: Output and Display intents where switched when a proofing transformation was used. 2008-10-17 20:01 udifuchs * configure.ac: Change version to 0.14.1. 2008-10-17 19:58 udifuchs * po/ko.po: Korean translation update from Homin Lee. 2008-10-17 19:46 udifuchs * wb_presets.c: WB presets for the Panasonic LX3. 2008-10-16 20:12 udifuchs * configure.ac, ufraw_conf.c, ufraw_saver.c: gimp-2.6 no longer has the gimp-remote command. For OS's with sane packaging this is checked during ./configure For win32 we check both options during run-time. 2008-10-16 13:27 udifuchs * configure.ac: Require lensfun 0.2.3. 2008-10-16 11:30 udifuchs * README: Rewrite history. The JPEG 2x2 sampling is for the chrominance components, not the luminance. 2008-10-16 00:49 udifuchs * README, ufraw-setup.jpg: Final textual changes before the 0.14 release. Update the win32 installer photo. 2008-10-15 20:31 udifuchs * dcraw.cc: Prevent dcraw from recognizing UFRaw's generated TIFFs as raw files. 2008-10-15 20:18 udifuchs * po/ko.po: Updated Korean translation by Homin Lee. 2008-10-12 22:50 nkbj * ufraw_preview.c, ufraw_routines.c: Extend color temperature range to 15000K. 2008-10-10 03:05 udifuchs * Makefile.am, icons/grayscale.svg: Fix 'make distcheck'. 2008-10-10 03:01 udifuchs * ufraw_exiv2.cc: Really fix writing EXIF data of the Nikon D80 (hopefuly). 2008-10-08 00:50 udifuchs * ufraw_exiv2.cc: Remove the Exif.NikonPreview tag from the EXIF data. Now EXIF from Nikon D80 files can be written to JPEG. 2008-10-07 22:43 udifuchs * ufraw_writer.c: Use predictor value 2 when saving deflated TIFFs for much better compression. 2008-10-07 22:34 udifuchs * ufraw_conf.c: If input profile was "No" or "Matrix" it was not written to ID files. Fixes bug 2004097. 2008-09-29 22:45 nkbj * wb_presets.c: Update WB presets for CANON EOS 400D DIGITAL. Patch by Pascal de Bruijn. 2008-09-26 19:40 udifuchs * ufraw.pod: Fix the last commit. 2008-09-26 17:39 udifuchs * ufraw.pod: Add --grayscale to the man page. 2008-09-26 17:24 udifuchs * ufraw_conf.c, ufraw_preview.c: Fix the "remember outpath" option to work also when "save configuration" is set to "never". Now that outputPath is a GUI entry there is no need to guess it anymore. 2008-09-20 22:50 nkbj * ufraw_preview.c: Better preview screen fit on GNOME. 2008-09-16 11:15 nkbj * dcraw.cc: Make dcraw.cc closer to the original dcraw.c. 2008-09-15 23:55 nkbj * ufraw_routines.c: Add support for the Panasonic .RW2 file format. 2008-09-15 23:00 nkbj * ufraw_routines.c: Add support for Nikon .NRW files. 2008-09-15 23:00 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.88 (1.405). Changelog: Detect and correct even/odd dark skew in Canon images. Merged three other functions into packed_12_load_raw(). Support the Panasonics LX3 and FZ28, Nikons D90 and P6000, Canon EOS 50D, and Sony A900. 2008-09-15 22:40 nkbj * dcraw.cc: dcraw original 8.88 (1.405). 2008-09-13 19:40 nkbj * ufraw_ufraw.c: Fix preview image for all values of raw->pixel_aspect. 2008-09-13 17:56 udifuchs * wb_presets.c: Sony A200 WB presets and fine tuning. 2008-09-13 17:32 udifuchs * ufraw_ufraw.c: Fix preview image for raw files with raw->pixel_aspect. 2008-09-13 11:25 nkbj * configure.ac: Only check for gtk_image_view_damage_pixels if GtkImageView is found. 2008-09-13 11:15 nkbj * dcraw.cc: Fix compiler warnings with older version of gcc. 2008-09-12 22:00 nkbj * wb_presets.c: Add WB presets for the OLYMPUS E-410. 2008-09-10 19:08 udifuchs * ufraw-setup.iss.in: Warn win32 users not to change the installation directory. 2008-09-10 19:06 udifuchs * ufraw_ufraw.c: Re-enable shrink sizes between 1 and 2. 2008-09-10 09:00 nkbj * README, configure.ac: Add --enable-contrast option to the configure script. 2008-09-04 22:15 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2008-09-01 15:15 nkbj * dcraw.cc, dcraw.h: Add support for the Nikon D90. 2008-08-30 13:40 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Hide the contrast feature behind an #ifdef UFRAW_CONTRAST. 2008-08-30 00:15 nkbj * po/: es.po, sr.po, sr@latin.po: Update copyright information. 2008-08-29 23:30 nkbj * po/: es.po, it.po, nl.po, no.po, pl.po: Fix build error in Italian translation. 2008-08-29 18:50 udifuchs * po/es.po: Updated Spanish translation by Enrique Jorreto Ledesma. 2008-08-29 18:43 udifuchs * configure.ac: Build with lensfun only if './configure --with-lensfun' is specified. 2008-08-29 17:44 udifuchs * po/no.po: Updated Norwegian translation by Alvin Brattli. 2008-08-29 16:58 udifuchs * po/nl.po: Updated Dutch translation by Simon Oosthoek. 2008-08-29 16:54 udifuchs * po/it.po: Updated Italian translation by Daniele Medri. 2008-08-29 10:30 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2008-08-23 02:30 nkbj * wb_presets.c: Update WB presets for the Canon EOS 300D DIGITAL (firmware 1.1.1). 2008-08-21 10:00 nkbj * README, configure.ac: Change --enable-local-time to --enable-dst-correction to reflect what it does. 2008-08-21 07:45 nkbj * README, configure.ac, dcraw_api.cc: Add --enable-local-time option to use local time (with DST) for file timestamps. 2008-08-20 10:30 nkbj * po/cs.po: Update Czech .po file. 2008-08-18 20:48 udifuchs * po/cs.po: Updated Czech translation by Milan Knzek. 2008-08-17 22:35 nkbj * po/: ca.po, cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2008-08-17 21:54 udifuchs * ufraw_preview.c: Removed the 9:16, 10:16, 9:21 aspect ratio presets. I think they are only useful in the landscape ratio. 2008-08-17 21:44 udifuchs * po/pl.po: Updated polish translation by Tomasz Goliski. 2008-08-17 21:36 udifuchs * ufraw_routines.c: Restore the defualt gamma=0.45 and linearity=0.10 when not using ICC profiles. 2008-08-17 18:36 udifuchs * configure.ac, ufraw-setup.iss.in, po/ca.po: New Catalan translation by Paco Rivière. 2008-08-17 18:05 udifuchs * po/nl.po: Updated Dutch translation by Simon Oosthoek. 2008-08-17 01:30 nkbj * ufraw_preview.c: Make preview windows resizeable without GtkImageView. 2008-08-16 23:55 nkbj * dcraw_api.cc: Add call to remove_zeroes(). 2008-08-16 13:25 nkbj * wb_presets.c: Add Flash WB preset for the SONY DSLR-A300. 2008-08-16 06:30 nkbj * wb_presets.c: Add WB presets for the SONY DSLR-A300. 2008-08-16 05:30 nkbj * dcraw.cc: Use correct dark value for odd/even columns in Canon EOS 400D files. 2008-08-12 22:35 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.87 (1.404). Changelog: Support the Kodak C603, Nikon D700, Canon EOS 1000D, Canon PowerShot SD300, and Olympus E-520. Removed useless code from ppg_interpolate(). 2008-08-12 22:26 nkbj * dcraw.cc: dcraw original 8.87 (1.404). 2008-08-07 03:00 nkbj * dcraw.cc: Make dcraw.cc closer to original dcraw.c code. 2008-08-02 01:25 nkbj * ufraw_preview.c: Add predefined 16:10 crop ratio. 2008-08-01 12:30 nkbj * dcraw.cc: Fine-tune error handling (fix bugs #1972371 and #2028871). 2008-07-28 15:50 nkbj * ufraw_ufraw.c: Fix segfault with Sigma .X3F files. 2008-07-28 13:20 nkbj * ufraw_preview.c, ufraw_ufraw.c: Fix various zoom problems. 2008-07-28 12:20 nkbj * ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_ufraw.c: Better fix for seg-fault in ufraw-batch. 2008-07-27 09:45 nkbj * ufraw_ufraw.c: Fix segfault in ufraw-batch with rotated images. 2008-07-27 04:40 nkbj * ufraw_preview.c: Correct fix for segfault on high-resolution monitors. 2008-07-26 22:30 nkbj * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c: Really fix segfault on high-resolution monitors. Patch by Omari Stephens. 2008-07-26 15:21 nkbj * ufraw_preview.c: Prevent segfault on high-resolution monitors. 2008-07-26 14:35 nkbj * ufraw-setup.iss.in: Update translations and file associations. 2008-07-25 08:45 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. 2008-07-25 08:12 lexort * TODO: Explain that "Understand differences between ufraw with defaults and in-camera with defaults." is particularly relevant to the "need varying exposure compensation" issue. 2008-07-25 07:45 nkbj * dcraw.cc: Add preliminary color matrix for Nikon D700. 2008-07-23 02:30 nkbj * wb_presets.c: Add WB presets for OLYMPUS E-520. 2008-07-23 01:30 nkbj * dcraw_api.cc: Revert latest change. 2008-07-23 01:05 nkbj * dcraw.cc: Update a comment. 2008-07-23 01:00 nkbj * wb_presets.c: Update comments. 2008-07-22 01:00 nkbj * dcraw.cc: Add support for the OLYMPUS E-520 camera. 2008-07-21 08:50 nkbj * ufraw_ufraw.c: Fix a couple of typoes in comments. 2008-07-10 17:43 udifuchs * po/fr.po: Updated French translation by Gatan Perrier. 2008-07-08 08:50 nkbj * dcraw.cc, dcraw_api.cc: Various small clean-ups. 2008-07-07 17:01 udifuchs * ufraw_exiv2.cc: Synchronize list of EXIF tags that should not be copied with digikam. Remove redundant test. If you are using Exiv2 0.17.91 you should update to revision 1527 or later. 2008-07-05 05:00 nkbj * ufraw_conf.c: Various clean-ups. 2008-07-05 02:55 nkbj * ufraw_conf.c: Revert latest commit. It did not fix cases with horizontal or vertical flipping. 2008-07-05 02:31 nkbj * ufraw_conf.c: Fix segfault in ufraw-batch. 2008-07-03 11:30 nkbj * dcraw.cc: Add preliminary support for the Nikon D700 camera. 2008-07-03 10:45 nkbj * nikon_curve.c, uf_glib.h, uf_gtk.cc, uf_gtk.h, ufraw_embedded.c, ufraw_message.c, ufraw_saver.c: Update copyright information. 2008-07-03 00:00 nkbj * ufraw_ufraw.c: Fix aspect ratio for rotated Nikon D1x images. 2008-07-02 17:09 udifuchs * ufraw_preview.c: Fix cropping after rotation. 2008-07-02 15:16 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_exiv2.cc, ufraw_ufraw.c, ufraw_writer.c: Update EXIF code to build with Exiv2 0.17.91. Initial support for writting EXIF to TIFF files (still doesn't work). 2008-07-02 08:40 nkbj * wb_presets.c: Add Panasonic DMC-FZ18 WB presets. 2008-06-30 16:59 udifuchs * curveeditor_widget.c, curveeditor_widget.h, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, uf_gtk.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_ui.h, ufraw_writer.c, wb_presets.c: Change UFRaw's license from 'GPLv2' to 'GPLv2 or later'. All contributors of substantial (meaning non trivial) code agreed to the license change. 2008-06-30 15:47 udifuchs * ufraw_conf.c: Remove spurious warning in 'ufraw --version'. 2008-06-30 13:57 udifuchs * ufraw_writer.c: Fix a very small leak when writing ICC profiles to PNG. 2008-06-29 17:39 udifuchs * wb_presets.c: Add WB presets for the Nikon D60. 2008-06-28 17:05 udifuchs * ufraw_preview.c: Fix build when GtkImageView is not used. 2008-06-20 16:42 udifuchs * ufraw_preview.c: In continuation to the previous commit also disable Ctrl+scroll which activates GtkImageView's zoom. 2008-06-20 15:17 udifuchs * ufraw_preview.c: Hide zoom key bindings from GtkImageView. Hide left, right scroll events from GtkImageView. 2008-06-20 10:00 nkbj * ufraw_delete.c: Update copyright information. 2008-06-18 15:48 udifuchs * ufraw_lens_ui.c: Get UFRaw to build with latest lensfun SVN. This means that it will fail to build with older versions of lensfun. 2008-06-18 15:37 udifuchs * ufraw_ufraw.c: Add boundary checks, hopefully fixing ufraw-Bugs-1992672. 2008-06-12 16:49 udifuchs * ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ui.h: Change grayscale mixer value to 1.0 instead of 100 and some code cleaning. Patch by Bruce Guenter. 2008-06-11 15:57 udifuchs * wb_presets.c: Update Nikon D3 WB presets and added temperature presets. 2008-06-09 22:30 nkbj * ufraw_lens_ui.c, ufraw_ufraw.c: Fix compiler warnings. 2008-06-09 22:21 nkbj * ufraw_conf.c: Add missing initializers. 2008-06-08 00:00 nkbj * ufraw_exiv2.cc: Fix passing EXIF data to JPEG files. 2008-06-07 01:50 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sr.po, sr@latin.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2008-06-07 01:30 nkbj * ufraw_preview.c: Fix build error when UFRaw is built with GtkImageView. 2008-06-06 19:22 udifuchs * configure.ac, ufraw-setup.iss.in: Update win32 installer. Use pkg-config for libpng, otherwise win32 requires special attention. 2008-06-05 15:38 udifuchs * ufraw_exiv2.cc: Read lens information from Minolta and Pentax makernotes. 2008-06-04 17:46 udifuchs * ufraw_lens_ui.c: Some textual changes in the lensfun code. We are back to about 320 pixels for the control panel. Description is ellipsized. Yet it (and the URL) is selectable. 2008-06-04 01:07 udifuchs * ufraw_preview.c: Fix notebook page num when there is no lensfun. Patch by Bruce Guenter. 2008-06-03 15:59 udifuchs * ufraw.h, ufraw_conf.c, ufraw_lens_ui.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_ui.h, po/ru.po: Lensfuns update patch by Andrew Zabolotny: * Respect the camera crop factor setting. * Made conf_default const again. * Substantial improvements to camera and lens search. * Implemented priority subarea preview. This requires the latest lensfun from SVN. 2008-05-31 14:31 udifuchs * dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_indi.c, ufraw_conf.c, ufraw_delete.c, ufraw_preview.c, ufraw_routines.c: Convert ifname to utf8 for dcraw_message() calls. Code in DCRaw::main() was not fixed since it is never called from GTK. Use the newly discovered g_locale_display_name() instead of g_locale_to_utf8(). Thanks Andrew Zabolotny for the tips. 2008-05-30 07:30 nkbj * dcraw_api.h, ufraw-batch.c, ufraw_lens_ui.c, ufraw_ufraw.c, ufraw_ui.h: Fix compiler warning when UFRaw is built without lensfun. Update copyright information. 2008-05-29 15:45 udifuchs * ufraw.pod: Update the man page. --grayscale and --contrast are still not in the man page, because their design is not finalized yet. 2008-05-29 15:17 udifuchs * ufraw-batch.c, ufraw.c: Return exit code 1 if ufraw-batch or ufraw fail. 2008-05-26 17:39 udifuchs * ufraw.desktop, po/sr.po, po/sr@latin.po: Update Serbian translation. 2008-05-26 17:32 udifuchs * ufraw_preview.c: Fix crop controls using the mouse. 2008-05-25 08:07 udifuchs * configure.ac, po/sr.po, po/sr@latin.po: New Serbian translation (Cyrilic and Latin) by Miloš Popović. 2008-05-25 06:45 udifuchs * ufraw_preview.c: Add some missing preview updates. 2008-05-24 23:45 nkbj * wb_presets.c: Add Panasonic DMC-L1 Kelvin presets. 2008-05-23 22:35 nkbj * wb_presets.c: Add Panasonic DMC-L1 WB presets. 2008-05-23 16:32 udifuchs * Makefile.am, configure.ac, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw.h, ufraw_conf.c, ufraw_exiv2.cc, ufraw_icons.c, ufraw_lens_ui.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, ufraw_ui.h, icons/Makefile.am, icons/distortion-24.png, icons/distortion.svg, icons/geometry-24.png, icons/geometry.svg, icons/lens-24.png, icons/lens.svg, icons/tca-24.png, icons/tca.svg, icons/vignetting-24.png, icons/vignetting.svg, po/POTFILES.in, po/ru.po: lensfun patch by Andrew Zabolotny. 2008-05-19 05:43 udifuchs * wb_presets.c: WB presets for the Pentax K200D. 2008-05-18 09:04 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Remove the grayscaleMixerNormalization option. 2008-05-18 08:44 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Grayscale path by Bruce Guenter: - Sets the default channel mixer as above - Adds a color patch below the mixer sliders - Adds a reset button - Removes the redundant "average" grayscale mode In addition, the option to disable luminosity preservation was removed from the UI. And the interface was cleaned up a bit. 2008-05-18 07:45 udifuchs * ufraw.pod: Document $HOME/.ufraw-gtkrc. 2008-05-14 13:45 nkbj * ufraw-gimp.c, ufraw.c: Load private resource file at startup. 2008-05-12 13:48 lexort * README-processing.txt: + Discussion of sensor saturation levels and highlight recovery in dcraw: http://www.guillermoluijk.com/tutorial/dcraw/index_en.htm 2008-05-11 08:14 lexort * README-processing.txt: Note and link to PPM output specification. 2008-05-10 19:29 lexort * README-processing.txt: add pointer to lprof site that describes how to create ufraw profiles 2008-05-07 22:50 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update Danish translation. 2008-05-07 22:45 nkbj * dcraw.cc: Stand-alone dcraw should not depend on glib. 2008-05-02 15:25 udifuchs * ufraw_preview.c: Fix default loaded profile setting, broken by previous commit. 2008-05-01 17:00 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Replace the "use matrix" check box with a "Color matrix" profile. Based on patch by Rafael Espíndola. 2008-05-01 16:37 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier 2008-05-01 14:39 udifuchs * curveeditor_widget.c, ufraw_conf.c, ufraw_routines.c: Fix possible overflows in curve data. 2008-05-01 11:07 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c: Make LockAspect a configuration option. LockAspect defaults to TRUE. Fix reset crop area. 2008-04-29 22:30 nkbj * dcraw.cc: dcraw modified 8.86 (1.403). Changelog: Don't crash on corrupt CR2 files. Extract the largest JPEG from any X3F file. 2008-04-29 22:24 nkbj * dcraw.cc: dcraw original 8.86 (1.403). 2008-04-28 22:30 nkbj * po/nl.po: Update translation to Nederlands. 2008-04-26 05:40 nkbj * ufraw_conf.c, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/no.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Fix typo. Update Danish translation. 2008-04-24 13:16 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_icons.c, ufraw_preview.c, icons/Makefile.am, icons/channel-blue-24.png, icons/channel-green-24.png, icons/channel-red-24.png: 1. The grayscale tab is now the second tab, placing it between WB and base curve. 2. The drop down is now a set of radio boxes. This improves interactivity of the setting (one click to get to a setting instead of two). 3. As requested, the color picker is now a channel mixer, which updates the image as it is adjusted. The three color icons are taken from GIMP's channel mixer. (patch by Bruce Guenter) Also added: 4. Enable the spot-selector on the grayscale page. 2008-04-22 19:09 lexort * README-processing.txt: Drop all links in B&W section, because they are motsly focused on non-free software and have little technical content or insight. Now that the section is empty, rm it. 2008-04-21 09:39 lexort * README-processing.txt: b&w/channel mixer refs 2008-04-20 17:39 udifuchs * po/fr.po: Updated French translation by Gatan Perrier. 2008-04-20 10:15 nkbj * dcraw.cc: dcraw modified 8.86 (1.402). Changelog: Added SONY A300 (dcraw's 300th camera\!), fixed camera WB on the A200. Set model-specific saturation levels in adobe_coeff(). 2008-04-20 10:00 nkbj * dcraw.cc: dcraw original 8.86 (1.402). 2008-04-19 09:15 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update Danish translation. 2008-04-19 09:00 nkbj * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_icons.c, ufraw_preview.c, ufraw_writer.c, icons/Makefile.am, icons/grayscale-24.png: Add grayscale conversion. Patch by Bruce Guenter. 2008-04-14 22:15 nkbj * dcraw.cc: Fix WB on the SONY DSLR-A200. 2008-04-12 09:50 nkbj * ufraw_preview.c: Lock aspect ratio when target ratio selected. Patch by Martin Ling. 2008-04-12 09:45 nkbj * ufraw_developer.c, po/ko.po: Update copyright information. 2008-04-12 01:00 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, nl.po, no.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update Danish and Korean translations. 2008-04-12 00:45 nkbj * README-processing.txt, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Add contrast adjustment. Patch by Bruce Guenter 2008-04-12 00:35 nkbj * dcraw.cc: Fix Panasonic WB bug. 2008-04-11 08:44 lexort * README-processing.txt: Add reference to an available profile that is compatible with AdobeRGB. 2008-04-08 11:45 nkbj * wb_presets.c: Add PENTAX K20D WB presets. 2008-04-08 10:01 nkbj * ufraw_preview.c, ufraw_ufraw.c: Fix cropping. Patch by Martin Ling. 2008-04-07 22:25 nkbj * dcraw.cc: dcraw modified 8.85 (1.401). Changelog: Support the Olympus E-420. 2008-04-07 22:15 nkbj * dcraw.cc: dcraw original 8.85 (1.401). 2008-04-05 23:45 nkbj * dcraw.cc: dcraw modified 8.84 (1.400). Changelog: Support the Canon EOS 450D, Nikon D60, and Fuji S100FS. Copied new matrices from Adobe DNG Converter 4.4. sRAW support in 1.393 broke Fuji DNG files, now fixed. 2008-04-05 23:40 nkbj * configure.ac: Enable FITS support by default. 2008-04-05 23:35 nkbj * dcraw.cc: dcraw original 8.84 (1.400). 2008-04-02 17:35 udifuchs * ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_ufraw.c, ufraw_writer.c: rbitrary rotation support for ufraw-batch. Patch by Martin Ling. 2008-03-29 01:15 nkbj * ufraw_writer.c: Fix typo in FITS code. 2008-03-27 22:45 nkbj * ufraw.desktop: Add Norwegian translation. 2008-03-26 23:00 nkbj * curveeditor_widget.c, dcraw.h, dcraw_api.cc, dcraw_indi.c, ufraw-gimp.c, ufraw.c, ufraw.desktop, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, ufraw_writer.c, wb_presets.c, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/no.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Update copyright information. 2008-03-26 22:15 nkbj * configure.ac, ufraw-setup.iss.in, po/no.po: Add Norwegian translation. 2008-03-25 22:00 nkbj * ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Revert latest changes. 2008-03-25 14:06 lexort * README-processing.txt: add reference to incorrect scaling 2008-03-23 02:35 nkbj * ufraw_conf.c: Remember RememberOutputPath and progressiveJPEG between images. 2008-03-22 12:40 nkbj * ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Add conf_copy_transform() function. Patch by Martin Ling. 2008-03-15 19:06 udifuchs * wb_presets.c: Added WB presets for the Canon PowerShot A630 (CHDK firmware). 2008-03-15 18:58 udifuchs * curveeditor_widget.c: Undo irrelevant changes from last commit. 2008-03-15 18:22 udifuchs * curveeditor_widget.c, wb_presets.c: WB presets for the Nikon D3. 2008-03-14 11:40 nkbj * po/nl.po: Update Dutch translation. 2008-03-14 10:35 nkbj * ufraw-setup.iss.in: Add missing translations. 2008-03-14 10:25 nkbj * ufraw.desktop: Add Dutch translation by Simon Oosthoek. 2008-03-14 10:15 nkbj * configure.ac, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Add Dutch translation by Simon Oosthoek. 2008-03-13 13:30 nkbj * dcraw.cc: Do not read TIFF files made by hugin. 2008-03-09 08:55 lexort * README-processing.txt: add rawtherapee reference from Jos De Laender 2008-03-08 17:24 udifuchs * po/pl.po: Updated Polish translation by Tomasz Golinski. 2008-03-06 14:45 udifuchs * po/cs.po: Updated Czech translation by Milan Knizek. 2008-03-05 10:10 nkbj * wb_presets.c: Add WB presets for Panasonic DMC-FZ8. 2008-03-05 10:00 nkbj * dcraw.cc, dcraw.h, dcraw_indi.c: dcraw modified 8.83 (1.399). Changelog: Copy GPS data into thumbnails and TIFF output. Support the Apple QuickTake 200, Fuji IS-1, Sony DSLR-A350, Pentax K20D, Nokia N95, and Canon PowerShots A460, A530, and A650. 2008-03-05 09:33 nkbj * dcraw.cc: dcraw original 8.83 (1.399). 2008-03-05 07:06 lexort * wb_presets.c: fix typo in comment (D300 not D200) 2008-03-04 16:20 udifuchs * wb_presets.c: WB presets and fine tunings for Panasonic DMC-LX2. 2008-02-20 10:45 nkbj * dcraw.cc: Add support for the Sony A350 camera. 2008-02-17 00:10 nkbj * ufraw_writer.c: Tidy up duplicate code. Patch by Martin Ling. 2008-02-11 11:00 nkbj * ufraw_preview.c: Make better use of 1280x800 pixels. 2008-02-11 09:55 nkbj * ufraw_preview.c: Make preview fit on monitors with a resolution of 1280x800 pixels. 2008-02-11 07:40 nkbj * dcraw_api.cc: Re-instate .badpixels support. 2008-02-06 21:50 nkbj * dcraw_api.cc: Remove bad_pixel() support ATM. It has to be integrated in the GUI. 2008-02-06 21:50 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.82 (1.398). Changelog: Added the -P and -S options. Support the Sony DSLR-A200 and the PowerShots A720 and S5 IS. 2008-02-06 21:12 nkbj * dcraw.cc: dcraw original 8.82 (1.398). 2008-02-05 14:47 lexort * wb_presets.c: Expanded set of D300 presets (all 13 fine adjustment values from -6 to 6), contributed by Alvin Brattli. 2008-01-29 22:00 nkbj * wb_presets.c: Add WB presets for Canon PowerShot G9. 2008-01-23 08:45 nkbj * ufraw_exiv2.cc: Make Exiv2 0.16-pre1 work. 2008-01-23 07:45 nkbj * configure.ac, ufraw_exiv2.cc: More elegant solution to EXIF changes from Yesterday. 2008-01-22 13:10 nkbj * ufraw_exiv2.cc: Make latest commit work with Exiv2 0.12 (and newer versions). 2008-01-22 12:50 nkbj * configure.ac, ufraw_exiv2.cc: Remove misleading EXIF fields. Based on patch by Martin Ling. 2008-01-22 06:24 lexort * wb_extract.pl: Document usage in a comment. 2008-01-22 06:15 lexort * wb_extract.pl: Use /usr/bin/env (refrain from assuming perl is in /usr/bin/perl, because it isn't always). Use "use warnings;" instead of -w a) which doesn't work with env and b) is recommended by perllexwarn(1). 2008-01-21 21:15 nkbj * wb_presets.c: Copy FUJIFILM FinePix S5600 presets to FUJIFILM FinePix S5200 since they are the same camera. 2008-01-19 02:55 nkbj * ufraw_writer.c: Fix segfault in ufraw-batch. 2008-01-19 01:30 nkbj * ufraw_routines.c: Add support for Hasselblad 3FR and CINE RAW file formats. 2008-01-19 00:30 nkbj * ufraw-gimp.c, ufraw.h, ufraw_exiv2.cc, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Write Exif.Photo.ColorSpace tag for sRGB output. Patch by Martin Ling. 2008-01-14 11:45 nkbj * wb_presets.c: Add WB presets for PENTAX K100D Super. 2008-01-10 23:00 nkbj * po/ja.po: Remove fuzzy. 2008-01-10 22:55 nkbj * po/: cs.po, es.po, fr.po, it.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po: Small updates to translation files. Patch by Andrew Zabolotny. 2008-01-05 22:35 nkbj * ufraw_preview.c: Fix saving in the FITS file format. 2008-01-04 09:05 nkbj * ufraw_conf.c, ufraw_preview.c, po/cs.po, po/da.po, po/es.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Fix use of non-ascii control keys. Check if ID files are regular files. Update translation files. Update Danish translation. 2008-01-03 11:30 nkbj * ufraw_exiv2.cc: Fix for localized exiv2 values. Patch by Andrew Zabolotny. 2008-01-02 18:51 udifuchs * po/: fr.po, it.po: Updated French translation by Gatan PERRIER. 2008-01-02 18:43 udifuchs * wb_presets.c: Turns out that the S9600 is a bit different from the S9100. The presets values are almost the same. The biggest difference is that the American "Cloudy" turns into "Shade" in Europe. 2008-01-02 16:26 udifuchs * ufraw.desktop, po/it.po: Updated Italian translation. 2008-01-02 07:55 nkbj * wb_presets.c: Add WB presets for OLYMPUS E-3. 2008-01-01 23:05 nkbj * po/: cs.po, da.po, es.po, fr.po, it.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2008-01-01 11:53 udifuchs * ufraw.c, ufraw.h, ufraw_conf.c, ufraw_exiv2.cc, ufraw_ufraw.c: Added --rotate=no to ufraw-batch. This is useful for creating contact sheets. Based on a patch by Serge Droz. 2007-12-31 10:51 udifuchs * wb_presets.c: Copied the Fuji S9500 WB presets to the S9000. Copied the Fuji S9100 WB presets to the S9600. These cameras pairs are identical. 2007-12-30 17:09 udifuchs * wb_presets.c: WB presets for the Fuji s9100. 2007-12-30 16:55 udifuchs * configure.ac, po/it.po: New Italian translation by Daniele Medri. 2007-12-29 23:05 nkbj * po/: cs.po, da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2007-12-29 19:07 lexort * README-processing.txt: add references, and caution about 'gamma' in some of them. explain rationale for canon "1 stop" reduction in raw files. 2007-12-29 13:47 udifuchs * ufraw_preview.c: Rename "Threshold" to "Denoise". 2007-12-28 09:49 udifuchs * uf_gtk.cc: Fix compilation on OS-X. 2007-12-27 10:21 udifuchs * po/pl.po: Updated Polish translation by Tomasz Golinski. 2007-12-26 23:35 nkbj * wb_presets.c: Fix capitalization in comment. 2007-12-23 17:17 udifuchs * ufraw.desktop: Czech translation. 2007-12-23 16:22 udifuchs * configure.ac, po/cs.po: New Czech translation by Milan Knizek. 2007-12-13 16:51 udifuchs * ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Fix some 64-bits warnings. 2007-12-12 15:15 nkbj * wb_presets.c: Added WB presets and fine tuning for the Sony A700. 2007-12-10 11:09 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.81 (1.397). Changelog: Support the Panasonic DMC-L10, added the "-W" option. 2007-12-10 10:55 nkbj * dcraw.cc: dcraw original 8.81 (1.397). 2007-12-09 12:48 udifuchs * ufraw.h, ufraw_ufraw.c: Switch from raw luminosity histogram to normalized raw histogram for the auto-exposure/black/curve tools. 2007-12-08 20:30 nkbj * wb_presets.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Add WB presets and fine tuning for Nikon D300 (patch by Duncan Grisby). Update translation files. Update Danish translation. 2007-12-06 07:54 lexort * README-processing.txt: more gamma text from Rafael Espindola. 2007-12-06 07:51 lexort * README-processing.txt: add references 2007-12-05 23:15 nkbj * po/da.po: Update Danish translation. 2007-12-05 23:05 nkbj * po/: da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2007-12-05 16:19 udifuchs * ufraw-batch.c: Add progress report to ufraw-batch as suggested by Alexandre Prokoudine. 2007-12-05 15:50 udifuchs * po/fr.po: Update of French translation by Gatan Perrier. 2007-12-02 16:28 udifuchs * wb_presets.c: Fix type in the incandescent wb preset of the Canon 400D. 2007-12-02 14:48 lexort * README-processing.txt: Describe gamma input processing. From patch by Rafael Espindola, edited my me, plus some of my own ramblings. 2007-12-01 14:56 udifuchs * uf_gtk.cc: Fix build on 64-bits targets. 2007-12-01 09:52 lexort * README-processing.txt: some discussion of input processing and white balance. 2007-11-30 19:58 lexort * README-documentation.txt: mention README-processing.txt 2007-11-30 10:00 nkbj * po/: da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Update translation files. Update Danish translation. 2007-11-28 16:35 udifuchs * uf_gtk.cc, uf_gtk.h, ufraw_preview.c: Allow attaching a value to each uf_combo_box entry. Fix the bit-depth combo. Make sure that the text in combo boxes doesn't make the window too wide. 2007-11-26 17:58 udifuchs * ufraw_routines.c: Add some comments. 2007-11-26 16:58 udifuchs * ufraw_writer.c: For JPEG output 2x2 sampling factor for the luminance components was used by default. Now for compression>90 we use 2x1 sampling and for compression>92 we use 1x1 sampling. 2007-11-26 16:52 udifuchs * ufraw_routines.c: Fix uf_file_set_absolute() from previous commit. 2007-11-26 16:04 udifuchs * configure.ac, uf_gtk.cc, uf_gtk.h, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c: Move save-as dialog controls to main window. Add a 'remember output path' option. Depend on Gtk+ 2.6 because of GtkFileChooserButton. 2007-11-23 10:08 udifuchs * ufraw_preview.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: No need to translate numbers. 2007-11-21 23:40 nkbj * ufraw_conf.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Fix capitalization in string. Update translation files accordingly. Update Danish translation. 2007-11-20 14:01 udifuchs * po/POTFILES.skip: Add list of files that do not need translation. 2007-11-18 17:39 udifuchs * ufraw_conf.c, ufraw_preview.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Some string fixes. 2007-11-18 17:31 udifuchs * ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_saver.c, ufraw_writer.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/sv.po, po/ufraw.pot: Make bit-depth part of the output profile settings. 2007-11-18 17:24 udifuchs * configure.ac: Bump version to 0.14. 2007-11-17 15:02 udifuchs * ufraw_developer.c: Fix interger overflow in Canon exposure calculation. 2007-11-16 12:05 udifuchs * po/: Makefile.in.in, da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, sv.po, ufraw.pot: Do not generate the "#: filename:line" comments in PO files. 2007-11-16 11:45 udifuchs * ufraw_preview.c, uf_gtk.cc, uf_gtk.h: Stop jiggling by fixing the width of the spot values. Patch by Lydia van Dijk. 2007-11-16 10:45 nkbj * dcraw.cc: dcraw modified 8.80 (1.396). Changelog: Cropped four columns from the Nikon D3. 2007-11-16 10:40 nkbj * dcraw.cc: dcraw original 8.80 (1.396). 2007-11-14 10:20 nkbj * configure.ac: Fix typo in comment. 2007-11-13 15:20 udifuchs * configure.ac: Make the compile command a bit shorter. 2007-11-13 15:00 udifuchs * configure.ac, po/sv.po: Start of Swedish translation by Daniel Nylander. 2007-11-12 21:52 nkbj * dcraw.cc: dcraw modified 8.80 (1.395). Changelog: Generated color matrix for Nikon Coolpix 2100. 2007-11-12 21:49 nkbj * dcraw.cc: dcraw original 8.80 (1.395). 2007-11-12 15:42 udifuchs * README, TODO: Final textual changes before UFRaw-0.13 release. 2007-11-12 13:15 nkbj * dcraw.cc: dcraw modified 8.80 (1.395). Changelog: Abolish the getrat() macro, support the Hasselblad H3D. 2007-11-12 12:59 nkbj * dcraw.cc: dcraw original 8.80 (1.395). 2007-11-11 18:54 udifuchs * po/es.po: Updated Spanish translation by Enrique Jorreto Ledesma. 2007-11-11 01:45 nkbj * po/: da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-11-10 20:25 udifuchs * README, curveeditor_widget.c, dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, uf_glib.h, uf_gtk.cc, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.pod, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, wb_presets.c: whitespace cleanup. 2007-11-10 01:10 nkbj * configure.ac: Make sure MSGFMT_OPTS is defined. 2007-11-09 11:50 nkbj * dcraw.cc: More changes to get code closer to DCRaw 8.79. 2007-11-09 11:30 nkbj * dcraw.cc: Change code to be closer to DCRaw 8.79. 2007-11-09 10:45 nkbj * po/ko.po: Update Korean translation. 2007-11-08 22:00 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc: Make code closed to dcraw.c. 2007-11-08 15:51 udifuchs * po/ru.po: Updated Russian translation by Alexandre Prokoudine. 2007-11-07 22:00 nkbj * dcraw.cc: ftello/fseeko is handled by config system. 2007-11-06 17:49 udifuchs * po/: da.po, es.po, fr.po, ja.po, ko.po, pl.po, pt.po, ru.po, ufraw.pot: Updated Polish translation by Tomasz Golinski Updated French translation by Gatan PERRIER. 2007-11-06 04:54 udifuchs * po/ru.po: Updated Russian translation from Alexandre Prokoudine. 2007-11-05 21:15 nkbj * po/Makefile.in.in: Fix build with non-GNU msgfmt. 2007-11-04 22:37 nkbj * ufraw-gimp.c: Fix compiler warning in CinePaint plug-in. 2007-11-04 14:26 udifuchs * ufraw_preview.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/ufraw.pot: Update crop ranges in GUI when rotating the image. 2007-11-03 22:57 nkbj * dcraw.cc: dcraw modified 8.79 (1.394). Changelog: Added the Olympus E-3 and adjusted a few maximums. 2007-11-03 22:48 nkbj * dcraw.cc: dcraw original 8.79 (1.394). 2007-11-03 20:24 udifuchs * ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Fix some localizations issues on win32 (snprintf->g_snprintf). Fix timing problem in preview rendering. Small log message fix. Make Gimp-2.4 the default for win32 gimp-remote. 2007-11-03 02:40 nkbj * po/da.po: Update Danish translation. 2007-11-02 21:10 udifuchs * ufraw_conf.c, ufraw_routines.c: Fix the setting and resetting of the C locale for XML output. 2007-11-02 19:03 udifuchs * configure.ac: UFRaw does not use deprecated GTK 2.12 symbols. 2007-11-01 18:45 udifuchs * dcraw_api.cc, ufraw_ufraw.c: Make memory allocation a bit more efficient. 2007-11-01 18:07 udifuchs * uf_gtk.cc, po/POTFILES.in, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/ufraw.pot: Added the single message from GtkImageView to UFRaw's translated strings. 2007-11-01 17:32 udifuchs * configure.ac, ufraw.desktop, po/da.po, po/es.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/pt.po, po/ru.po, po/ufraw.pot: New Polish translation by Tomasz Golinski. 2007-11-01 17:24 udifuchs * ufraw.c: Do not use outputPath from .ufrawrc, also in interactive mode. The default output path is always the path of the input file. 2007-11-01 17:04 udifuchs * Makefile.am, dcraw.cc: Fix build with automake-1.10 on win32 and mac. Fix dcraw.cc warnings in win32. 2007-11-01 16:23 udifuchs * dcraw.cc, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Fix updateTransform so that lcms transformations are really only created when needed. Fix reading/writing of display profile from/to .ufrawrc. 2007-11-01 06:03 udifuchs * po/ko.po: New Korean translation by Homin Lee. 2007-11-01 05:56 udifuchs * configure.ac, ufraw.desktop: New Korean translation by Homin Lee. 2007-10-31 19:08 udifuchs * Makefile.am, README, configure.ac: Clean up the build process. The compiler optimization options are only set for GNU C and only if the user did not specify CFLAGS, CXXFLAGS of his own. ufraw-batch no longer requires the GTK libraries (again). 2007-10-31 11:30 nkbj * dcraw.cc, dcraw.h: Various cosmetic fixes. 2007-10-31 10:39 udifuchs * dcraw.h: Fix memory overflow. 2007-10-31 09:27 udifuchs * uf_gtk.cc: Read system default display ICC profile also for the Mac Quartz backend. I don't have a Mac, so I cannot even test if it builds correctly. 2007-10-30 11:23 nkbj * dcraw.cc, dcraw.h: Update license to reflect dcraw.c 8.78 changes. 2007-10-30 11:23 nkbj * dcraw_indi.c: Update lin_interpolate_INDI() to dcraw.c 8.78 code. 2007-10-30 11:10 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.78 (1.393). Changelog: Support the AVT F-080C, Canon EOS 40D, Canon EOS-1Ds Mark III, Canon PowerShot G9, Nikon Coolpix S6, Nikon D3, Nikon D300, Panasonic DMC-FZ18, and Sony DSLR-A700. Support the new Canon sRAW CR2 format. Added median filtering after interpolation. 2007-10-30 10:37 nkbj * dcraw.cc: dcraw original 8.78 (1.393). 2007-10-29 23:50 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-10-29 17:58 udifuchs * dcraw.cc: Updated dcraw's Canon 40D support. 2007-10-29 16:34 udifuchs * ufraw_conf.c: Changed "System profile" to "System default". 2007-10-29 15:15 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-10-28 13:17 udifuchs * ufraw_preview.c: Small cleanups. 2007-10-28 12:56 udifuchs * dcraw.h, uf_gtk.cc, uf_gtk.h, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Add 'System profile' option to read display ICC profile from the X display. 2007-10-27 16:08 udifuchs * wb_presets.c: WB presets+finetuning for the Olympus SP500UZ. Finetuning -7 stands for 7 blue in camera. Finetuning 7 stands for 7 red in camera. 2007-10-27 13:51 udifuchs * ufraw_conf.c, ufraw_preview.c: Do not read/write display ICC profile from/to ID files. 2007-10-27 12:41 udifuchs * ufraw_preview.c: Fix bug in mouse click mapping, only noticed in older versions of GTK+. 2007-10-27 12:38 udifuchs * configure.ac: Do not override CFLAGS, CXXFLAGS. 2007-10-24 11:45 nkbj * README: Update requirements for building UFRaw on the PowerPC platform. 2007-10-24 04:33 udifuchs * ufraw_preview.c: Fix some rounding issues when GtkImageView is not used. 2007-10-23 23:05 nkbj * configure.ac: Remove old cruft. 2007-10-23 15:34 udifuchs * ufraw_preview.c: Re-revert the change from August 16th and be more careful in the calls to preview_draw_area(). 2007-10-21 05:20 nkbj * ufraw_preview.c: Revert change from August 16th to avoid errors like this: preview_draw_area(): y:385 out of range, 0 <= y < 385. 2007-10-20 23:30 nkbj * configure.ac: Update comment. 2007-10-20 06:15 nkbj * configure.ac: Make it possible to override CFLAGS and CXXFLAGS from the command line. 2007-10-18 11:00 nkbj * uf_gtk.cc: Fix compiler warning with GTK+ 2.12.0 and higher. 2007-10-17 07:28 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2007-10-17 07:24 udifuchs * ufraw_ufraw.c: Do not read EXIF data with --embedded-image. 2007-10-14 23:00 nkbj * ufraw_ufraw.c: Fix building on Solaris. 2007-10-14 14:42 udifuchs * ufraw_preview.c: Fix the GUI freeze from the last commit. 2007-10-14 03:20 nkbj * ufraw_saver.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Update Danish translation. 2007-10-13 16:10 udifuchs * ufraw.h, ufraw_conf.c, ufraw_exiv2.cc, ufraw_preview.c: Show camera white balance in EXIF data. Patch by Erik Burrows. 2007-10-13 14:59 udifuchs * ufraw_preview.c: Stop the CPU hogging that started after the last commit. 2007-10-12 16:56 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c: Automatically fit histograms to allocated height. 2007-10-11 15:09 udifuchs * dcraw_indi.c: Apply the correct patch this time, without the color smoothing. 2007-10-11 14:49 udifuchs * ufraw_preview.c: Fix the TWO bugs that caused the scrollbars to appear at startup. 2007-10-10 18:30 udifuchs * dcraw_indi.c: Suppress the "Wavelet denoising..." message, since it just fills up the log. 2007-10-10 17:33 udifuchs * ufraw_exiv2.cc: Read Canon lens from EXIF data (Exif.Canon.0x0095). Patch by Andreas Steinel. 2007-10-10 17:27 udifuchs * ufraw.h, ufraw_conf.c, ufraw_embedded.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Changed FITS to output a 3d array (width, height, colors) instead of 3 images. Add more data statistics, correct time handling and conditional inclusion of EXIF data. Patch by Andreas Steinel. 2007-10-10 15:41 udifuchs * dcraw_indi.c: PPG interpolation code revised. Calculation of gradients improved, Pattern management is no longer necessary. Better handling of diagonals. Patch by Alain Desbiolles. A similar patch should appear in dcraw 8.78. 2007-10-09 17:29 udifuchs * Makefile.am, uf_gtk.cc, uf_gtk.h, ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_preview.c, ufraw_saver.c: Add an interface to some GTK+ mess. The C++ ending of uf_gtk.cc is for future plans. 2007-10-09 13:30 udifuchs * ufraw_saver.c: Remove redundant g_free(). 2007-10-08 23:45 nkbj * ufraw_saver.c: Fix possible segfault. 2007-10-07 13:45 nkbj * dcraw_api.cc, dcraw_indi.c: Fix off-by-one error in fuji_rotate_INDI(). 2007-10-07 06:43 udifuchs * ufraw_chooser.c: Fix focus bug in the file chooser dialog (fixed by Niels). 2007-10-06 08:18 nkbj * configure.ac: Revert latest commit. 2007-10-06 08:15 nkbj * configure.ac, iccjpeg.c: Fix comment. 2007-10-06 08:00 nkbj * iccjpeg.h: Another header file search order fix. 2007-10-06 07:45 nkbj * dcraw_api.cc, nikon_curve.c, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: Search for uf_glib.h in local directory first. 2007-10-06 07:30 nkbj * ufraw_saver.c: Fix building with EXIF support when libjpeg is not installed. 2007-10-06 05:15 nkbj * ufraw_ufraw.c: Fix building on Fedora Linux. 2007-10-06 04:15 nkbj * wb_presets.c: Update WB presets for the Canon EOS 350D family. 2007-10-05 19:09 lexort * ufraw_ufraw.c: add/adjust comments around ctime_r. Actual POSIX.1c says two arguments, and it's some versions of solaris that have 3. This was hard to figure out; hence the comment. 2007-10-05 18:41 udifuchs * ufraw_ufraw.c: Hopefully fix the call to ctime_r on for the new Solaris. 2007-10-05 10:49 udifuchs * Makefile.am, configure.ac: echo an error message when pod2man is needed but missing. add ufraw.1 to the tarball so that pod2man is usually not needed. 2007-10-03 22:56 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po: Update Danish translation. 2007-10-03 18:12 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Remember maximized state of window between sessions. 2007-10-03 14:04 udifuchs * ufraw_preview.c: Make vertical lines in live histogram more visible (patch by Laurent Monin). 2007-10-03 13:55 udifuchs * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Add color smoothing option to all interpolation (partly based on patch by alexander melkozerov). AHD+smoothing is exactly the same as the now obsolete EAHD. The smoothing applies 3 passes to AHD and 1 pass to other interpolations. 2007-10-02 14:26 udifuchs * ufraw_ufraw.c: Fix exposure norm calculation for Canon cameras. 2007-10-01 12:00 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-09-30 15:54 udifuchs * dcraw_api.cc, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Small code optimization. 2007-09-30 11:23 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c: Make the over/under blinks a config option (based on patch by Bruce Guenter). Save the gimp-remote command when needed. 2007-09-29 15:18 udifuchs * dcraw_api.cc, dcraw_indi.c: Fix the vng interpolation (hopefully). Free some memory that was never freed. 2007-09-28 05:35 udifuchs * uf_glib.h: Fix build with glib-2.4. 2007-09-27 16:35 udifuchs * Makefile.am, dcraw.cc, ufraw_ufraw.c, po/da.po, po/es.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Fix exposure for the new 14bit Canon cameras. Fix daylight multipliers (chan_mul) for some DNG files. Fix 'make dist'. 2007-09-26 16:51 udifuchs * uf_glib.h: Add forgotten file from last commit. 2007-09-26 16:06 udifuchs * Makefile.am, dcraw.h, dcraw_api.cc, nikon_curve.c, ufraw-batch.c, ufraw-gimp.c, ufraw-setup.iss.in, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_delete.c, ufraw_developer.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: Start using gstdio function to allow upgrade to GTK+2.6 on win32. Remove version information from liblcms-1-16-ufraw.dll. make "send to gimp" work by default on win32. 2007-09-23 13:05 udifuchs * ufraw_preview.c: Remove the 11:14 aspect ratio preset. Explain in the tooltip that ratios can be entered. Allow for non-integer ratios. 2007-09-23 11:02 udifuchs * ufraw.h, ufraw_chooser.c, ufraw_preview.c, ufraw_ufraw.c: Added darkframe to GUI (patch by Bruce Guenter). 2007-09-22 14:20 udifuchs * wb_presets.c: WB presets for the Canon 40D. 2007-09-22 13:45 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw_ufraw.c: Move darkframe subtraction code to dcraw_api.h (patch by Bruce Guenter). 2007-09-21 15:44 udifuchs * ufraw_preview.c: Show spot values only if spot is selected and allow unselecting spot values. 2007-09-21 09:15 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-09-20 22:30 nkbj * curveeditor_widget.c, dcraw.cc: Fix typo in latest commit and update copyfight notice. 2007-09-20 19:29 lexort * ufraw_preview.c: prettify whitespace on 11:14, following original scheme. 2007-09-20 19:28 lexort * ufraw_preview.c: CSE: Hoist list of aspect ratios to static global, and use it in two places: converting numbers to symbolic aspect ratio offering a choice of aspect ratios Add 5:7, 14:11 4:5 and inverses (note that 4:5 is 8:10), which were somehow not present in a photography program; these are of course the commonly available print sizes other than 3:2. 2007-09-20 18:18 udifuchs * ufraw.h, ufraw_icons.c, ufraw_message.c, ufraw_preview.c, ufraw_writer.c: Get rid of ufraw_private_function, which is no longer relevant. Fix some warnings from earlier commits. 2007-09-20 18:02 udifuchs * curveeditor_widget.c, dcraw_indi.c, ufraw-batch.c, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_embedded.c, ufraw_message.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, wb_presets.c: Make all local functions static (patch by Bruce Guenter). 2007-09-20 16:39 udifuchs * ufraw_preview.c: Fix last commit. 2007-09-20 15:25 udifuchs * dcraw.cc, ufraw-gimp.c, ufraw_conf.c, ufraw_developer.c, ufraw_message.c, ufraw_preview.c, ufraw_writer.c: Added mnemonics to delete and sent-to-gimp buttons. Made the save-as button an icon only to save space. Removed some craft. Marked all static variabled that might cause problems in threads. They can be found using grep "not thread-safe". 2007-09-19 12:48 udifuchs * ufraw_ufraw.c: Improved dark frame elimination (patch by Bruce Guenter). 2007-09-18 16:38 udifuchs * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Updated French translation by Gatan PERRIER. 2007-09-18 16:21 udifuchs * wb_presets.c: Added WB presets for the Panasonic DMC-LX1. 2007-09-17 18:57 udifuchs * dcraw.cc, dcraw.h, ufraw-gimp.c: Fix gcc 4.2 warnings. Textual fixes to ufraw-gimp. 2007-09-17 17:22 udifuchs * wb_presets.c: WB presets for the Leica M8. 2007-09-17 17:10 udifuchs * dcraw.cc, dcraw_api.cc: Fix generation of PPM thumbnails. Suppress a valgrind warning. 2007-09-16 09:28 lexort * ufraw_routines.c: Restore include of locale.h, listed as required by setlocale man page, and indeed required on NetBSD. Inexplicably removed in 1.78 without being mentioned in commit message, and I therefore assume it was a stray unintentional change. Sort includes alphabetically, and separate system and glib includes with a blank line. 2007-09-16 08:21 udifuchs * configure.ac, ufraw_preview.c: Use the new gtk_image_view_damage_pixels(). It requires GtkImageView SVN and GtkImageView version should be manually increased to a value larger than 1.5.0. 2007-09-16 06:50 udifuchs * ufraw_preview.c: Add missing initialization for BlinkTimer. 2007-09-14 08:52 udifuchs * ufraw.desktop: Get rid of some depreceted options. 2007-09-14 08:51 udifuchs * ufraw_ufraw.c: Fix some typos. 2007-09-14 08:48 udifuchs * ufraw_preview.c: Get rid of a global variable. 2007-09-13 10:16 udifuchs * dcraw.cc: Support Canon 40D. Patch by Dave Coffin, to be included in dcraw v8.78. 2007-09-13 08:55 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_delete.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c: Improve the blinking activation (patch by Bruce Guenter): -Stop blinking when the window is unmapped (minimized) -Stop blinking when saving -Start blinking only once per image -Return to normal preview when turning off blinks 2007-09-12 10:20 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-09-12 07:25 udifuchs * ufraw_saver.c: Added a 0.2 seconds sleep after calling gimp-remote. 2007-09-11 15:59 udifuchs * configure.ac, ufraw.h, ufraw_conf.c, ufraw_routines.c, ufraw_saver.c, ufraw_writer.c: Add FITS output (patch by Andreas Steinel). Notice the comment in configure.ac on enabling this option. 2007-09-11 14:03 udifuchs * ufraw.h, ufraw_conf.c, ufraw_saver.c, ufraw_writer.c: Progress JPEG encoding (patch by Bruce Guenter). 2007-09-11 13:49 udifuchs * ufraw_preview.c: Blink over/under exposure in preview (patch by Bruce Guenter). 2007-09-10 10:35 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-09-09 22:30 nkbj * dcraw.cc: Fix standalone dcraw return values. 2007-09-05 17:13 udifuchs * ufraw-gimp.c, ufraw.c, ufraw_preview.c: 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. 2007-09-05 12:30 nkbj * wb_presets.c: Add WB fine tuning for Nikon D100. 2007-09-01 18:26 udifuchs * po/fr.po: Updated French translation by Gaëtan Perrier. 2007-08-23 12:15 nkbj * ufraw_routines.c: Set correct gamma for Nikon D1/H/X color profile. 2007-08-22 13:00 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-08-21 15:50 udifuchs * ufraw_preview.c: Avoid warnings with the latest GtkImageView SVN. 2007-08-20 14:47 udifuchs * ufraw_saver.c: Do not write CreateID=send_id to .ufrawrc. CVS users with the line 3 in their .ufrawrc should delete it manually. 2007-08-20 13:49 udifuchs * ufraw_preview.c: Reset filenames between images. Fixes bug of filename carried over between images. 2007-08-19 10:57 udifuchs * ufraw_conf.c, ufraw_saver.c, ufraw_writer.c: Write EXIF data to PNG files. Based on code from DigiKam. 2007-08-18 19:50 udifuchs * ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_icons.c, ufraw_preview.c, ufraw_saver.c, ufraw_ufraw.c, icons/Makefile.am, icons/gimp-24.png: Added 'send to Gimp' option. Both ufraw, and ufraw-gimp need to be updated for this to work properly. 2007-08-17 14:05 udifuchs * ufraw.h, ufraw_conf.c, ufraw_exiv2.cc, ufraw_preview.c, ufraw_ufraw.c: Display flash mode EXIF data. 2007-08-16 17:00 udifuchs * ufraw_writer.c: Attempt to fix the 16-bit png output on big-endian machines. 2007-08-16 15:29 udifuchs * ufraw_preview.c: Revert last change. There was simply a missing call to preview_notify_dirty(). 2007-08-16 11:42 nkbj * ufraw_preview.c: Make preview work with GtkImageView 1.4.0. 2007-08-16 10:53 udifuchs * ufraw_preview.c: Fix memory flow in spot selector. 2007-08-16 00:00 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update Danish translation. 2007-08-14 18:55 udifuchs * Makefile.am, ufraw-batch.c, ufraw.h, ufraw_conf.c, ufraw_embedded.c, ufraw_icons.c, ufraw_message.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, icons/lock-24.png, icons/lock.svg: Added option to save as png 8 or 16 bits. Trying a new error handling mechanism on ufraw_write_image(). 2007-08-14 11:26 nkbj * dcraw_api.cc: Remember to include "config.h". 2007-08-14 11:15 nkbj * dcraw_api.cc: Make sure off_t is defined (for d->data_offset and d->thumb_offset). 2007-08-13 13:26 udifuchs * ufraw.h, ufraw_icons.c, ufraw_preview.c: Removed inline function, since it is not ANSI-C. Added ufraw_private_function macro, to mark functions private to the source file. 2007-08-12 14:18 udifuchs * ufraw_icons.c, ufraw_preview.c, icons/Makefile.am, icons/crop-24.png, icons/crop.svg, icons/exif-24.png, icons/exif.svg, icons/rectify-24.png, icons/rectify.svg: Added some new icons and reimplemented the EXIF page. Patch by Andrew Zabolotny. 2007-08-12 00:35 nkbj * po/: da.po, es.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-08-11 15:53 udifuchs * ufraw_preview.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: Moved shrink/size controls from Save dialog to main window. It might make sense to scale also the crop coordinates, but it is tricky because of rounding issues. conf->outputFilename is now set in ufraw_config(). It simplifies (and hopefully does not break) things. 2007-08-11 08:53 udifuchs * icons/: lock-24.png, lock.svg: Added icon for the last commit. 2007-08-11 08:52 udifuchs * ufraw_icons.c, ufraw_preview.c, icons/Makefile.am: Added aspect ratio control. Patch by Andrew Zabolotny. 2007-08-11 01:15 nkbj * configure.ac, ufraw_delete.c, po/POTFILES.in, po/da.po, po/es.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Change version to 0.13 and add ufraw_delete.c to translation files. 2007-08-11 00:56 nkbj * dcraw.cc: dcraw modified 8.77 (1.392). Changelog: Use fseeko() and ftello() only when needed. 2007-08-11 00:39 nkbj * dcraw.cc: dcraw original 8.77 (1.392). 2007-08-10 16:45 udifuchs * Makefile.am, ufraw.h, ufraw_delete.c, ufraw_preview.c: Add delete button to stand-alone tool. 2007-08-10 09:16 udifuchs * configure.ac, ufraw.desktop, po/es.po: Added new Spanish (es) translation by Enrique Jorreto Ledesma. 2007-08-09 17:11 udifuchs * README, configure.ac, dcraw.cc: Fix fseeko compatibility issues on win32. Final textual changes before UFRaw-0.12.1 release. 2007-08-09 01:12 nkbj * dcraw.cc: Do not use fseeko() with DJGPP compiler system. 2007-08-09 00:27 nkbj * dcraw.cc: dcraw modified 8.77 (1.391). Changelog: Reject TIFF files with unsupported Compression tags. 2007-08-09 00:16 nkbj * dcraw.cc: dcraw original 8.77 (1.391). 2007-08-08 03:06 nkbj * wb_presets.c: Added PENTAX K110D WB presets (copied from PENTAX K100D presets). 2007-08-07 23:01 nkbj * po/: da.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-08-07 23:00 nkbj * dcraw.cc: Enable fseek() for CINE files. 2007-08-06 15:09 udifuchs * dcraw.cc: Fix build on MacPorts. 2007-08-06 14:53 udifuchs * configure.ac: Bump version to 0.12.1. This is going to be a bug correction release. 2007-08-06 14:52 udifuchs * ufraw-gimp.c, ufraw_preview.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: Fix non-integer shrink bug. 2007-08-02 18:00 udifuchs * ufraw_preview.c: Hopefully fixed crash when selection crosses image [ufraw-Bugs-1762052]. Fixed 2 tiny bugs found during the search for the above bug. 2007-08-01 23:20 nkbj * dcraw.cc: dcraw modified 8.77 (1.390) updated. Changelog: When they differ, use DateTimeOriginal instead of DateTime. 2007-08-01 23:17 nkbj * dcraw.cc: dcraw original 8.77 (1.390) updated. 2007-07-31 15:03 udifuchs * ufraw.desktop, ufraw_exif.c: Update RU description in ufraw.desktop. Delete ufraw_exif.c, which should have being removed a long time ago. 2007-07-31 08:00 udifuchs * README: Fix mistaken commit. 2007-07-30 16:02 udifuchs * README, TODO, po/POTFILES.in: Final textual changes before release of UFRaw-0.12. 2007-07-30 11:05 nkbj * dcraw.cc: dcraw modified 8.77 (1.390). Changelog: Time tag 36868 may be modified, so use it as a last resort. 2007-07-30 10:58 nkbj * dcraw.cc: dcraw original 8.77 (1.390). 2007-07-29 16:20 lexort * README: adjust advice given that plugins are in ufraw's prefix 2007-07-29 16:18 lexort * configure.ac: make comment about gimp/cinepaint plugin installation location match reality 2007-07-29 15:56 lexort * README-processing.txt: talk about bit depths in typical cameras. Introduce notion of in-camera JPG conversion with all settings NORMAL as a reference. 2007-07-29 00:07 nkbj * dcraw.cc: dcraw modified 8.77 (1.389). Changelog: Added color matrix for the Canon PowerShot A640. 2007-07-29 00:02 nkbj * dcraw.cc: dcraw original 8.77 (1.389). 2007-07-29 00:00 nkbj * po/: da.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-07-28 15:22 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw_ufraw.c: Fix crop/rotate bug when loading ID file. 2007-07-28 14:46 udifuchs * configure.ac: Depend on the just released GtkImageView 1.3. 2007-07-28 11:18 nkbj * ufraw-batch.c, ufraw_embedded.c: Update copyright information. 2007-07-27 15:07 udifuchs * ufraw-setup.iss.in, ufraw_preview.c: Fix crash in spot tool since on win32. 2007-07-27 01:22 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.77 (1.388). Changelog: Reject 8-bit grayscale TIFFs. Decode raw CINE files, which may exceed 2GB. Error-check the "-s" option, and enable "-s all". Support camera WB for the Canon EOS-1D and EOS-1DS. Use full output range for "-H 2". 2007-07-27 01:00 nkbj * dcraw.cc: dcraw original 8.77 (1.388). 2007-07-26 18:01 udifuchs * ufraw_ufraw.c: Fix possible floating exception [ufraw-bugs-1761037] 2007-07-24 19:19 udifuchs * ufraw_preview.c: Reduce the cases where the blue channel in the raw histogram disappears. 2007-07-23 16:27 udifuchs * ufraw-setup.iss.in: Give a name to the UFRaw filetype in win32. 2007-07-22 17:01 udifuchs * nikon_curve.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: Use the correct codeset for translated string when output is send to console (patch by Andrew Zabolotny). 2007-07-22 11:59 udifuchs * Makefile.am, README: No need to install ufraw-mime.xml any more. 2007-07-22 10:50 udifuchs * po/ru.po: Update Russian translation thanks to Andrew Zabolotny and Alexander Prokoudine. 2007-07-21 18:52 udifuchs * dcraw_api.cc: Fix foveon image size. 2007-07-21 18:11 udifuchs * ufraw.desktop: Use URI instead of FILE in desktop entry. It seems to be need to allow f-spot to open images with ufraw. 2007-07-19 17:02 udifuchs * wb_presets.c: Added Samsung GX10 WB presets (same as Pentax K-10). 2007-07-19 16:53 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw-gimp.c, ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Fix handling of Foveon image size. Change name of variable predictedHeight/Width to more appropriate initialHeight/Width. Fix crash in spot drawing. 2007-07-17 16:30 udifuchs * po/fr.po: Updated French translation by Gaertan Perrier. 2007-07-17 10:09 nkbj * dcraw.cc: Fix compiler warning when using g++ 4.0.x. 2007-07-17 02:55 nkbj * po/ru.po: Fix bug in latest update to Russian translation. 2007-07-16 16:59 udifuchs * po/: fr.po, ru.po: Update to fr and ru translations. 2007-07-16 15:51 udifuchs * ufraw_preview.c: Fix some bugs in the latest crop code. 2007-07-16 14:00 nkbj * po/: da.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-07-15 13:46 udifuchs * ufraw_preview.c: Improve speed of the crop selector. 2007-07-14 16:29 udifuchs * ufraw_preview.c: New controls for the crop tool. Still need to improve performance issues. 2007-07-14 10:56 udifuchs * ufraw_ufraw.c: Keep crop info for ID files. 2007-07-13 11:01 udifuchs * wb_presets.c: Added WB presets for the RICOH Caplio GX100. 2007-07-13 10:35 udifuchs * configure.ac: Support both released version (1.1) and SVN version (1.2) of GtkImageView. 2007-07-09 15:57 udifuchs * ufraw_saver.c: Remove Interpolation setting from saver dialog where it does not belong. 2007-07-09 15:51 udifuchs * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_saver.c: Added new interpolation method - EAHD. It is the AHD interpolation with another phase at the end. It is about 80% slower. The improvement is mostly seen in high contrast as it removes some CA artifacts. Patch by Michael Goertz. 2007-07-09 04:15 nkbj * wb_presets.c: Add WB presets for FUJIFILM FinePix S6500fd. 2007-07-08 23:53 nkbj * ufraw_conf.c, ufraw_ufraw.c: Do not save crop coordinates to .ufrawrc and reset between images. 2007-07-08 23:16 nkbj * wb_presets.c: Add OLYMPUS E-510 WB presets + fine tuning. 2007-07-08 17:15 udifuchs * ufraw-gimp.c, ufraw_preview.c, ufraw_ufraw.c: Fix some cropping issues (patches from Martin Ling). 2007-07-02 22:55 nkbj * ufraw_preview.c, po/da.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Fix typo in preview and update translation files. 2007-07-02 18:34 udifuchs * ufraw_preview.c: Darken cropped area. 2007-07-02 14:36 udifuchs * ufraw_preview.c: Put rotate controls together with crop controls. 2007-07-01 18:16 udifuchs * ufraw_preview.c, po/da.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Updated French translation by Gaetan Perrier. Fixed mix up in tooltips. 2007-07-01 15:13 udifuchs * ufraw_preview.c: Fit buttons better in the UI (with French in mind). 2007-07-01 13:58 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_saver.c, ufraw_writer.c: Added cropping (patch by Martin Ling). 2007-06-24 04:34 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.76 (1.387). Changelog: Support all Lossless JPEG predictors. 2007-06-24 04:17 nkbj * dcraw.cc: dcraw original 8.76 (1.387). 2007-06-23 20:04 udifuchs * ufraw_preview.c: Added max zoom (50%) button. 2007-06-23 18:52 udifuchs * wb_presets.c: Leica model name no long ends with 'DNG'. 2007-06-23 18:21 udifuchs * ufraw_preview.c: Redraw in zoom events only if needed (patch by Lydia). 2007-06-22 18:04 udifuchs * configure.ac, ufraw_exiv2.cc, ufraw_preview.c, ufraw_saver.c: Don't use deprecated GTK+2.10 and Exiv2 1.15 options. 2007-06-21 22:34 nkbj * dcraw.cc: Changes to make dcraw.cc closer to the original dcraw.c code. 2007-06-20 23:24 nkbj * po/: da.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-06-20 23:24 nkbj * dcraw.cc, dcraw.h: Clean up global variables. 2007-06-20 14:58 udifuchs * ufraw_preview.c: Fix zone calculation when using film highlight clipping. 2007-06-19 15:08 udifuchs * ufraw_preview.c: Add a zoom to fit button. Add a reset threshold button. Rearrange the UI a bit. 2007-06-18 22:35 nkbj * po/: da.po, ufraw.pot: Update Danish translation. 2007-06-18 05:07 udifuchs * wb_presets.c: Update WB presets for Canon 400D/Rebel XTi/Kiss X. The flash preset is not exactly a preset as it depends on the background light. The currect numbers match both daylight and darkness. 2007-06-18 04:48 udifuchs * po/ru.po: Fix header of Russian translation. 2007-06-17 15:19 udifuchs * wb_presets.c: Added WB presets for the Fuji s6000fd. 2007-06-16 19:32 lexort * TODO: add exif for Exposure value, more zone stuff, reorganize. 2007-06-16 17:43 udifuchs * po/ru.po: Updated Russian translation from Alexander Rabtchevich. 2007-06-14 22:34 nkbj * dcraw.cc: dcraw modified 8.75 (1.386). Changelog: Reports of corruption in 16-bit linear DNGs were false (added previously). 2007-06-14 22:20 nkbj * dcraw.cc: dcraw original 8.75 (1.386). 2007-06-14 18:55 udifuchs * ufraw.h, ufraw_developer.c, ufraw_preview.c: Display value and Adams' zone. Based on patch by Greg Troxel. 2007-06-14 09:19 nkbj * po/da.po: Update Danish translation file. 2007-06-14 09:17 nkbj * po/: da.po, fr.po, ja.po, pt.po, ru.po, ufraw.pot: Update translation files. 2007-06-13 19:04 udifuchs * dcraw.cc, dcraw_api.cc, ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Fix dcraw warnings in linear DNG file. Patch from Dave Coffin that will appear in next version of dcraw. Do not use ppg_inderpolation if colors==4 (as dcraw does). Fix the sometimes missing green channel in the raw histogram. Show only relevant interpolations in the combo-box. 2007-06-13 09:03 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.75 (1.385). Changelog: Added +M option for version 8.75. 2007-06-13 08:29 nkbj * dcraw.cc: dcraw original 8.75 (1.385). 2007-06-11 23:58 nkbj * dcraw.cc: Fix color temperature display for some Olympus .ORF files. 2007-06-09 17:07 udifuchs * TODO: Delete tasks that are already implemented. 2007-06-09 14:45 udifuchs * ufraw_ufraw.c: Fix memory leak in denoising. 2007-06-09 01:20 nkbj * dcraw_indi.c: More updates for ppg_interpolate_INDI(). 2007-06-09 01:14 nkbj * dcraw.cc: dcraw modified 8.74 (1.384). Changelog: More fixes for PPG interpolation. 2007-06-09 01:07 nkbj * dcraw.cc: dcraw original 8.74 (1.384). 2007-06-08 17:51 udifuchs * ufraw_ufraw.c: Fix initialization bug. 2007-06-08 07:27 nkbj * dcraw_indi.c: Update ppg_interpolate_INDI() to dcraw 8.74 code. 2007-06-08 05:28 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.74 (1.384). Changelog: Added -M option and improved PPG interpolation. 2007-06-08 05:16 nkbj * dcraw.cc: dcraw original 8.74 (1.384). 2007-06-07 18:51 lexort * README, TODO: Move todo items from README (which describes how things are) into TODO. Adjust format of TODO to match those from README. Delete 'rotate by 90 degrees' and 'zoom' since they appaer done in the current code. 2007-06-07 18:45 lexort * README: Document new optional dependency on gtkimageview. Define term 'development' package once up front, and then just use it. Clarify that compressed tiff needs zlib development package. Retitle 'Development Version' to "Building from CVS" and "CVS" to "source control using CVS" for clarity. Update configure summary output example for new options. Minor language editing. 2007-06-06 10:33 udifuchs * configure.ac: Fix configure compatibility with NetBSD's /bin/sh. 2007-06-06 10:10 udifuchs * configure.ac: Fix a change that slipped into the last commit. 2007-06-06 10:00 udifuchs * configure.ac, ufraw_preview.c: Fix WB spot selection when GtkImageView is not used. 2007-06-05 18:11 udifuchs * ufraw.c, ufraw_preview.c, ufraw_ufraw.c: Ignore button presses for spot WB outside the preview image. Free some memory that wasn't freed before. 2007-06-05 05:25 nkbj * wb_presets.c: Update WB presets for Nikon D1. 2007-06-05 01:56 nkbj * wb_presets.c: Correct incandescent WB presets for Nikon D1. 2007-06-05 00:07 nkbj * wb_presets.c: Added Nikon D1 WB presets + fine tuning. 2007-06-03 22:40 nkbj * dcraw.cc: dcraw modified 8.73 (1.383). Changelog: Added "-C" option to the usage message. 2007-06-03 22:29 nkbj * dcraw.cc: dcraw original 8.73 (1.383). 2007-06-03 02:52 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.73 (1.382). Changelog: Added "-C" option to correct chromatic aberration. Support the Hasselblad CFV, Kodak EasyShare C330, and Nikon D40X. Use a switch statement for Leica and Panasonic models. Output seven new TIFF tags, including ImageDescription and Artist. Generated color matrices for the Apple QuickTake and Phase One H 20. Copied new matrices from Adobe DNG Converter 4.1. 2007-06-03 02:22 nkbj * dcraw.cc: dcraw original 8.73 (1.382). 2007-05-28 04:38 nkbj * ufraw_ufraw.c: Really fix interpolation for Foveon (Sigma) cameras. 2007-05-28 01:40 nkbj * ufraw_ufraw.c: Fix interpolation of images from Foveon (Sigma) cameras. 2007-05-28 01:02 nkbj * ufraw.h, ufraw.pod, ufraw_conf.c, po/da.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Make PPG interpolation work with ufraw-batch. 2007-05-27 19:46 udifuchs * wb_presets.c: Added WB presets + fine tuning for the Nikon D40X. 2007-05-27 17:22 udifuchs * ufraw_conf.c: Fix a very improbable memory flow related to ProductName. 2007-05-27 17:06 udifuchs * ufraw_exiv2.cc: Delete thumbnail if EXIF data is too long. 2007-05-27 14:10 udifuchs * ufraw_preview.c: Fix the spot WB. 2007-05-25 22:30 nkbj * ufraw_preview.c: Fix typo in latest commit. 2007-05-25 22:20 nkbj * ufraw_preview.c: Make code build without the GtkImageView library. 2007-05-24 16:48 udifuchs * configure.ac, ufraw-setup.iss.in, ufraw_preview.c: Fix win32 build. Add optional file associations to the win32 installer. Cleanup ufraw_preview from last commit. 2007-05-22 16:52 udifuchs * ufraw_preview.c, wb_presets.c: Added more detailed WB presets for the Nikon D40. Added flash WB for the Minolta G500. It is not a real preset, but was measured by shoting a white object with flash and low ambient light. 2007-05-14 10:45 udifuchs * ufraw_preview.c: Fix order of operation for casting. 2007-05-13 22:00 nkbj * po/: da.po, ufraw.pot: Update Danish translation. 2007-05-13 14:40 udifuchs * dcraw_api.cc, ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Make setting of Threshold in GUI much more responsive. 2007-05-13 08:15 udifuchs * ufraw_chooser.c, ufraw_routines.c: Handle all possible cases for gz and bz2 endings. 2007-05-13 06:48 udifuchs * ufraw_preview.c, ufraw_saver.c: Change string "Pixel grouping interpolation" to "PPG interpolation" since apparently it is not exactly the same thing. 2007-05-13 06:43 udifuchs * ufraw_embedded.c: Fix build when libjpeg dev package is missing. 2007-05-12 00:16 nkbj * Makefile.am, configure.ac: Removing support for CinePaint 0.21 since CinePaint 0.22 has been released. 2007-05-10 23:12 nkbj * po/: da.po, ufraw.pot: Update Danish translation. 2007-05-10 17:05 udifuchs * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw_conf.c, ufraw_preview.c, ufraw_saver.c: Added Patterned Pixel Grouping Interpolation by Alain Desbiolles. 2007-05-09 23:49 nkbj * dcraw.cc: dcraw modified 8.72 (1.381). Changelog: Support 3096x2103 mode for the Panasonic DMC-FZ8. 2007-05-09 23:42 nkbj * dcraw.cc: dcraw original 8.72 (1.381). 2007-05-08 23:35 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.72 (1.380). Changelog: Added Patterned Pixel Grouping interpolation. 2007-05-08 23:25 nkbj * dcraw.cc: dcraw original 8.72 (1.380). 2007-05-07 17:22 udifuchs * dcraw_api.cc, dcraw_api.h, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Add denoise threshold to the GUI, with very slow response time. Made flip/rotate response time in the GUI very fast. Start of infrastructure that gives better control on the rendering, which fixes some old bugs and hopefully one day will lead to 100% zoom. 2007-05-06 13:36 udifuchs * ufraw_preview.c: Fix last commit for users that do not use GtkImageView. 2007-05-06 11:37 udifuchs * configure.ac, ufraw_preview.c: Add support for spot selector when using GtkImageView. Fix preview redraw. Depend on GtkImageView 1.1.0 2007-05-05 09:49 udifuchs * wb_presets.c: WB presets for the Olympus E-330. 2007-05-04 13:48 udifuchs * ufraw.h, ufraw_developer.c, ufraw_ufraw.c: Fix crash on 64bit machines during lcms error reporting. 2007-05-03 10:39 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.71 (1.379). Changelog: Offer blended highlights with the "-H 2" option. Set "shot_order" for ORF and CR2 files. Support the Pentax Optio 750Z. 2007-05-03 10:24 nkbj * dcraw.cc: dcraw original 8.71 (1.379). 2007-05-02 16:49 udifuchs * ufraw_preview.c: Improve the GtkImageView code. When this code is enabled, the window size can be modified by the user. 2007-05-01 10:21 udifuchs * ufraw_preview.c: Small correction to last GtkImageView commit. 2007-05-01 08:48 udifuchs * configure.ac, ufraw_preview.c: Added VERY experimental scrolling support in preview window based on GtkImageView. 2007-04-30 23:24 nkbj * dcraw.cc: Whitespace changes for consistancy with original dcraw.c code. 2007-04-30 16:33 udifuchs * ufraw-batch.c, ufraw.c, ufraw.h, ufraw_exiv2.cc, ufraw_ufraw.c: Read EXIF data also for zipped raw files. 2007-04-30 12:14 udifuchs * README-processing.txt: Correct some facts. 2007-04-30 11:56 lexort * README-processing.txt: Skeleton for file to explain the processing flow: This document describes how UFRaw processes raw files to produce output files. The description is intended to be correct and precise, even at the expense of readability. This document is not a HOWTO. This document assumes that the reader is generally familiar with computer image processing, and understands the issues surrounding Bayer arrays, white balance, and color management. This file is an asciidoc article. It is quite readable as plain text, and "asciidoc README-processing.txt" produces HTML. This decision is subject to change as the grand documentation strategy evolves, but seems reasonable for now. 2007-04-30 10:49 udifuchs * dcraw.cc, dcraw_api.cc, dcraw_api.h, ufraw_ufraw.c: Better error handling in ufraw/dcraw. 2007-04-30 10:19 nkbj * README: Remove "make install-user" from README. 2007-04-30 10:12 nkbj * dcraw.cc: Various updates to get closer to the original dcraw code. 2007-04-30 07:39 udifuchs * wb_presets.c: Added WB presets+fine tuning for the Nikon D40. 2007-04-30 07:23 udifuchs * ufraw_routines.c: Create correct default output filename for zipped raw files. 2007-04-30 06:29 udifuchs * ufraw_icons.c, ufraw_preview.c: Use the Tango icon naming specification for the rotate/flip icons. 2007-04-29 09:52 nkbj * TODO, po/da.po, po/ufraw.pot: Update TODO file. Update Danish translation. 2007-04-29 09:47 lexort * README-documentation.txt: pointers to all documentation gdt knows about 2007-04-29 09:19 nkbj * ufraw_routines.c: Add support for .mef and .qtk file formats. 2007-04-29 09:16 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.70 (1.378). Changelog: Added -A option to select a rectangle for white balance. Protect against overflow attacks on malloc() or calloc(). Nucore raw formats are not used outside Nucore, so drop them. Support the Canon PowerShots A630 and A640, Panasonic DMC-FZ8, Sigma SD14, Apple QuickTake 100 & 150, Mamiya ZD, Casio QV-R41, and Olympus E-410. 2007-04-29 08:11 nkbj * dcraw.cc: dcraw original 8.70 (1.378). 2007-04-26 16:47 udifuchs * wb_presets.c: Added WB presets and fine tuning for the Olympus E-400. Fine tuning of +7 stands for setting red +7 and green +7 in camera. 2007-04-26 16:22 udifuchs * wb_presets.c: Added temperature WB presets for the Minolta Dynax 7D. 2007-04-26 16:09 udifuchs * ufraw.h, ufraw_conf.c, ufraw_embedded.c, ufraw_icons.c, ufraw_preview.c, ufraw_ufraw.c, icons/Makefile.am, icons/flip-horiz-24.png, icons/flip-vert-24.png, icons/rotate-270-24.png, icons/rotate-90-24.png: Added rotate/flip support, based on patch by Bruce Guenter. Icons taken from gthumb sources, which are also GPLv2. 2007-04-23 05:27 nkbj * dcraw.cc: Fix FUJIFILM FinePix S6500fd WB problem. 2007-04-22 10:33 nkbj * ufraw_developer.c: Fix call to cmsCreateMultiprofileTransform() the right way. 2007-04-22 10:04 nkbj * ufraw_developer.c: Update ugly hack to bypass a bug in cmsCreateMultiprofileTransform() in lcms-1.16. 2007-04-22 09:56 nkbj * ufraw_developer.c: Ugly hack to bypass a bug in cmsCreateMultiprofileTransform() in lcms-1.16. 2007-04-21 23:36 nkbj * ufraw_routines.c: Set default gamma to 0.45 for Adobe RGB profile from lcms. 2007-04-15 12:28 lexort * ufraw_developer.c: revert part of last commit that was unintentional whitespace change 2007-04-15 12:02 lexort * ufraw_developer.c: Check likely troublesome return value from lcms and abort() on failure, pending better error checking and recovery. Makes failures less mysterious. 2007-04-15 08:58 nkbj * wb_presets.c: Update Canon PowerShot S60 WB presets. 2007-04-09 02:18 nkbj * ufraw_routines.c: Revert latest change. 2007-04-01 23:48 nkbj * ufraw_routines.c: Add .bz2 and .gz as recognized file extensions. 2007-04-01 23:46 nkbj * configure.ac: Fix output from CinePaint search. 2007-04-01 18:19 udifuchs * ufraw_developer.c: Fix an ugly bug in applying the color matrix, which was introduced in ufraw-0.11. I'm not sure why, but the effect of this bug seems to be very small. 2007-04-01 13:15 udifuchs * ufraw_developer.c: Simplify clipping code from yesterday. 2007-03-31 17:28 udifuchs * ufraw_developer.c: Retain some hue and saturation when clipping pixels to 0xFFFF. This is only relevant when applying positive exposure compensation, and mostly for Canon cameras where positive exposure is applied by default. 2007-03-31 13:52 udifuchs * ufraw-gimp.c, ufraw.h, ufraw_preview.c, ufraw_saver.c, ufraw_writer.c: Fix ufraw-Bugs-1691138 - Don't quit when save fails. Make the surronding code a bit more elegant. 2007-03-31 13:01 nkbj * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw_ufraw.c: Make wavelet denoising work for all WB settings. 2007-03-31 01:18 nkbj * dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw.h, ufraw_conf.c, ufraw_ufraw.c: Adding wavelet denoising step 1 - Adding --wavelet-denoising-threshold switch to ufraw and ufraw-batch. 2007-03-31 01:11 nkbj * po/: da.po, ufraw.pot: Update Danish translation. 2007-03-30 23:57 nkbj * README, dcraw.cc, dcraw_api.cc, dcraw_indi.c: Adding wavelet denoising step 0 - Copying the code into UFRaw. 2007-03-28 15:05 udifuchs * wb_presets.c: Improved WB presets for the Minolta Z2 from the MakerNote. 2007-03-28 14:54 udifuchs * dcraw.cc: Keep daylight multipliers in pre_mul[], as suggested by Dave Coffin. Camera multipliers (cam_mul[]) come from the AsShotNeutral tag. Setting camera multipliers with AsShotWhiteXY is not supported, at least until we get a sample DNG that uses this tag. 2007-03-26 15:49 udifuchs * configure.ac, ufraw_chooser.c, ufraw_ufraw.c: Support gzipped and bzipped raw files. EXIF support is still not working for these files. 2007-03-25 22:11 nkbj * dcraw.cc: dcraw modified 8.69 (1.377). Changelog: Better detect and reject non-raw TIFFs. 2007-03-25 22:03 nkbj * dcraw.cc: dcraw original 8.69 (1.377). 2007-03-24 14:49 udifuchs * ufraw_developer.c: Simplifies the saturation_sampler() as suggested by Stephane Chauveau. 2007-03-23 09:28 nkbj * .cvsignore: Remove ufraw-exif from the .cvsignore file. 2007-03-23 09:11 nkbj * .cvsignore: Add CinePaint plug-in to .cvsignore file. 2007-03-23 09:10 nkbj * Makefile.am, configure.ac: Fix CinePaint plug-in installation. 2007-03-22 15:52 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c: Use the rendering and proofing intent correctly. Changed the names for the two intent's to make their role a bit clearer. 2007-03-22 11:20 nkbj * configure.ac: Fix line break problem in latest commit. 2007-03-22 11:13 nkbj * Makefile.am, configure.ac: Get correct CinePaint plug-in installation directory. 2007-03-22 10:47 nkbj * configure.ac: Replace --variable=cinepaintlibdir by --variable=libdir since the former is not in the default cinepaint-gtk.pc file. 2007-03-22 10:11 nkbj * po/: da.po, ufraw.pot: Update ufraw.pot and Danish translation. 2007-03-22 10:08 nkbj * Makefile.am, configure.ac, ufraw-gimp.c: Rename the CinePaint plug-in to be consistent with the GIMP plug-in. Fix call to gimp_layer_new(). 2007-03-21 15:22 udifuchs * ufraw_exiv2.cc: Be compatiple with exiv2-0.14. 2007-03-20 14:30 udifuchs * ufraw_developer.c: When handling clipped highlight, don't clip to RGB right away. It can be done in later in XYZ space. 2007-03-20 00:20 nkbj * README, dcraw_api.cc, dcraw_indi.c: Update UFRaw to use new, faster AHD interpolation. 2007-03-19 23:29 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.68 (1.376). Changelog: Optimized AHD interpolation to take 22% less time. 2007-03-19 23:17 nkbj * dcraw.cc: dcraw original 8.68 (1.376). 2007-03-19 15:03 udifuchs * ufraw_preview.c: Make notebook icons smaller. 2007-03-19 15:00 udifuchs * ufraw-gimp.c: Do not display a GIMP error if user press 'cancel'. 2007-03-18 07:56 udifuchs * Makefile.am, configure.ac: The cinepaint plug-in can also work with cinepaint-0.21. 2007-03-18 01:27 nkbj * ufraw_preview.c: Fix "restore-highlights-hsv" button. 2007-03-17 02:57 nkbj * dcraw.cc: dcraw modified 8.67 (1.375). Changelog: Support the Fuji FinePix S5Pro. 2007-03-17 02:51 nkbj * dcraw.cc: dcraw original 8.67 (1.375). 2007-03-17 02:48 nkbj * dcraw.cc, dcraw_api.cc, dcraw_indi.c: More dcraw_indi.c updates. 2007-03-16 12:38 nkbj * dcraw_api.cc, dcraw_indi.c, nikon_curve.c, ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_exif.c, ufraw_saver.c, ufraw_writer.c: Update scale_colors_INDI() to current dcraw code and update copyright information. 2007-03-16 10:31 nkbj * ufraw_conf.c: Fix compiler warning. 2007-03-16 08:14 nkbj * wb_presets.c: Added WB presets for Canon EOS-1D Mark II N. 2007-03-15 23:11 nkbj * po/da.po: Update Danish translation. 2007-03-15 20:06 udifuchs * Makefile.am, configure.ac: Simplify build process using a libufraw local library. 2007-03-15 18:50 udifuchs * ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_icons.c, ufraw_preview.c, ufraw_ufraw.c, icons/Makefile.am, icons/color-corrections-24.png, icons/color-corrections.svg, icons/color-management-24.png, icons/curve-24.png, icons/curve.svg, icons/icc-profile-camera-24.png, icons/icc-profile-display-24.png, icons/icc-profile-display.svg, icons/icc-profile-output-24.png, icons/icc-profile-output.svg, icons/white-balance-24.png, icons/white-balance.svg, po/da.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Added display-profile. UFRaw now has a full color management workflow. Added some more icons to the UI. 2007-03-15 08:21 nkbj * dcraw.cc: dcraw modified 8.66 (1.374). Changelog: Refactored wavelet_denoise() to use memory more intelligently. 2007-03-15 08:09 nkbj * dcraw.cc: dcraw original 8.66 (1.374). 2007-03-14 23:33 nkbj * dcraw.cc: Make derror() use the dcraw_message() error system. 2007-03-14 23:25 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.65 (1.373). Changelog: Detect and report data errors wherever possible. 2007-03-14 23:00 nkbj * dcraw.cc: dcraw original 8.65 (1.373). 2007-03-13 00:51 nkbj * configure.ac: Test for zlib before libpng (fix for OpenBSD build system). 2007-03-13 00:44 nkbj * dcraw.cc, dcraw.h: [no log message] 2007-03-13 00:32 nkbj * dcraw.cc: dcraw original 8.64 (1.372). 2007-03-11 14:32 udifuchs * nikon_curve.c, ufraw_writer.c: Add error handling for some fatal errors. 2007-03-11 10:07 lexort * README: pass to spiff up and align with current reality gimp must be >= 2.0, not equal change 'this option will be suppressed' to 'foo support will be omitted' remove --disable-gimp discussion note what happens on install with gimp plug-in, since for some it will violate POLA clarify bit about rawphoto not being installed (Udi: please make sure it's accurate) add hint to use local packaging system for dependencies if possible 2007-03-11 09:58 lexort * configure.ac: spiff up comment: Note that gimp plugin is installed in gimp's prefix. 2007-03-09 17:13 udifuchs * Makefile.am, configure.ac, ufraw-gimp.c: Removed the --disable-gimp option. The Gimp plug-in is build if the gimp-dev files are found. Added Cinepaint plug-in. It is build if the cinepaint-dev files are found. 2007-03-08 17:03 udifuchs * wb_presets.c: Added WB presets for the Pentax *ist D and for the Minolta DiMAGE Z2. 2007-03-08 15:34 udifuchs * README, configure.ac, ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_preview.c, ufraw_saver.c: Use GTK_CHECK_VERSION instead of configuration macros. 2007-03-08 15:16 udifuchs * configure.ac, nikon_curve.c: Use STATIC_ASSERT instead of the slow configuration macros. 2007-03-08 15:00 udifuchs * Makefile.am, README, configure.ac, ufraw-setup.iss.in, ufraw.h, ufraw_conf.c, ufraw_exif.c, ufraw_exiv2.cc, ufraw_ufraw.c: Use exiv2.pc instead of the deprecated exiv2-config. Remove --with-exiv2 option. Exiv2 is used by default if found. Remove all dependency on libexif. 2007-03-08 13:24 nkbj * dcraw_indi.c: Fix typo in fc_INDI(). 2007-03-08 13:09 udifuchs * ufraw_conf.c: Fix --restore and --clip options. 2007-03-08 11:30 nkbj * dcraw_indi.c: Update copyright information. 2007-03-08 11:15 nkbj * dcraw.cc, dcraw_indi.c, ufraw_developer.c: Clean up some extern definitions. 2007-03-08 10:54 nkbj * configure.ac: Bump version number to 0.12. 2007-03-07 22:14 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.63 (1.371). 2007-03-07 22:05 nkbj * dcraw.cc: dcraw original 8.63 (1.371). 2007-03-06 16:03 udifuchs * README, ufraw-setup.jpg: New photo for the win32 installer. Final textual changes for version 0.11. 2007-03-06 15:59 udifuchs * Makefile.am, icons/Makefile.am: Support different source and object directories for win32 build. Clean everything needed in 'make clean'. 2007-03-06 15:08 udifuchs * po/ja.po: Updated Japanese translation by Yota Kunloka. 2007-03-06 15:01 udifuchs * ufraw_ufraw.c: Add a comment on Canon 1D. 2007-03-05 21:20 nkbj * po/da.po: Update Danish translation. 2007-03-05 14:37 udifuchs * wb_presets.c, po/da.po, po/fr.po, po/ja.po, po/pt.po, po/ru.po, po/ufraw.pot: Beautify both source and translation files. 2007-03-04 17:35 udifuchs * po/fr.po: Formatting corrections. 2007-03-04 10:09 nkbj * ufraw.pod: More spelling error fixes. 2007-03-04 09:36 udifuchs * ufraw.pod: Spelling corrections. 2007-03-03 12:57 udifuchs * wb_presets.c: Add WB presets for the Fuji E900. 2007-03-03 12:32 nkbj * po/: pt.po, ru.po: Remove obsolete strings from translations. 2007-03-03 10:24 udifuchs * po/fr.po: Update of French translation by Gaetan Perrier. 2007-03-03 09:41 udifuchs * po/ru.po: Update Russian translation. 2007-03-03 02:31 nkbj * dcraw_api.cc, ufraw_icons.c, po/da.po: Update copyright information. 2007-03-03 00:15 nkbj * TODO: Update TODO file. 2007-03-02 12:05 nkbj * dcraw.cc: dcraw modified 8.62 (1.370). 2007-03-02 11:55 nkbj * dcraw.cc: dcraw original 8.62 (1.370). 2007-02-28 13:25 udifuchs * ufraw.desktop: Finish the commit of the Portuguese translation. 2007-02-27 15:00 udifuchs * configure.ac, ufraw-setup.iss.in, po/pt.po: Added Portuguese translation by Bruno Buys. The translation was added as pt, even though it is actually pt_BR. 2007-02-26 22:17 nkbj * dcraw.cc: dcraw modified 8.61 (1.369). 2007-02-26 22:15 nkbj * dcraw.cc: dcraw original 8.61 (1.369). 2007-02-25 22:02 nkbj * po/: da.po, ufraw.pot: Update Danish translation. 2007-02-25 14:56 udifuchs * ufraw_preview.c: Fix the width of the WB page. 2007-02-25 13:48 udifuchs * ufraw_icons.c, ufraw_preview.c, icons/Makefile.am, icons/interpolation-24.png, icons/interpolation.svg: Move interpolation options to the WB page. Make Green adjustment steps larger. 2007-02-24 23:25 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.61 (1.368). 2007-02-24 23:14 nkbj * dcraw.cc: dcraw original 8.61 (1.368). 2007-02-24 10:27 udifuchs * po/ru.po: Update the russian translation. 2007-02-24 08:10 nkbj * wb_presets.c: Added WB presets for OLYMPUS SP510UZ. 2007-02-22 22:31 nkbj * dcraw.cc: More consistency fixes. 2007-02-22 05:00 nkbj * dcraw.cc: Various changes for consistency with the original dcraw.c file. 2007-02-21 22:30 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.60 (1.366). 2007-02-21 21:57 nkbj * dcraw.cc: dcraw original 8.60 (1.366). 2007-02-18 17:16 udifuchs * Makefile.am, ufraw-setup.iss.in: Fix conflict with liblcms-1.dll supplied with the Gimp windows installer. 2007-02-18 16:21 udifuchs * dcraw_api.cc, ufraw_ufraw.c: Add sanity check before normalizing EOS images. Relevant to DNG files. Fix possible uninitialized memory access. 2007-02-12 22:35 nkbj * dcraw.cc: dcraw modified 8.54 (1.365). 2007-02-12 22:27 nkbj * dcraw.cc: dcraw original 8.54 (1.365). 2007-02-11 23:00 nkbj * ufraw_routines.c: Add support for Sinar .IA files. 2007-02-08 15:39 udifuchs * po/ja.po: Updated Japanese translation by Yota Kunioka. 2007-02-03 00:28 nkbj * ufraw_exiv2.cc: Fix typo in comment. 2007-02-02 18:42 udifuchs * ufraw_exiv2.cc: Erase MakerNote tag if EXIF block too large for JPEG files. 2007-01-28 15:11 udifuchs * ufraw_preview.c, ufraw_ufraw.c: Make sure temperature from old ID files gets recalculated. 2007-01-28 13:23 udifuchs * ufraw_routines.c: Make uf_file_set_absolute() fail more gracefully. 2007-01-27 00:41 nkbj * po/: da.po, fr.po, ja.po, ru.po, ufraw.pot: Update ja.po to latest ufraw.pot file. 2007-01-26 23:15 nkbj * ufraw_ufraw.c: Fix segfault in Canon DSLR exposure normalization code. 2007-01-26 15:16 udifuchs * ufraw.h, ufraw_ufraw.c: Fix auto-exposure for Canon EOS cameras. Convert exposure value from ID files from before the exposure normalization. 2007-01-26 09:25 nkbj * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_routines.c: Update copyright messages. 2007-01-26 09:15 nkbj * ufraw_routines.c: Add support for Kodak DSC200 files. 2007-01-25 14:59 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_ufraw.c: Normalize the exposure for Canon DSLRs. 2007-01-24 16:34 udifuchs * ufraw.pod: Update the long forgotten man page. 2007-01-24 14:14 udifuchs * wb_presets.c: Added WB presets for the Kodak P850. 2007-01-21 14:53 udifuchs * configure.ac, ufraw-setup.iss.in, po/ja.po: Added Japanese translation. 2007-01-21 10:07 nkbj * dcraw.cc: dcraw modified 8.53 (1.364). 2007-01-21 09:57 nkbj * dcraw.cc: dcraw original 8.53 (1.364). 2007-01-20 12:34 udifuchs * ufraw_preview.c: Make the raw histogram rendering much more efficient. 2007-01-20 12:33 udifuchs * ufraw_developer.c: Fix bug in first run of rgb_to_cielch(). 2007-01-18 22:19 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.52 (1.363). 2007-01-18 22:00 nkbj * dcraw.cc: dcraw original 8.52 (1.363). 2007-01-18 21:56 nkbj * wb_presets.c: Add custom WB presets for Canon PowerShot S3 IS. 2007-01-16 17:04 udifuchs * ufraw_routines.c: Add default values for D80 ICC profile. 2007-01-09 23:00 nkbj * ufraw_preview.c, ufraw_ufraw.c: Fix EXIF data display in preview. 2007-01-09 00:15 nkbj * ufraw_ufraw.c: Fix EXIF data spill over between images. 2007-01-08 22:10 nkbj * dcraw.cc: dcraw modified 8.50 (1.362). 2007-01-08 22:02 nkbj * dcraw.cc: dcraw original 8.50 (1.362). 2007-01-07 01:30 nkbj * ufraw_preview.c, ufraw_ufraw.c: Better fix for overexposure at 50% zoom (does not break ufraw-batch --size this time). 2007-01-06 11:30 nkbj * ufraw_ufraw.c: Fix overexposure at 50% zoom. 2007-01-06 00:15 nkbj * ufraw_ufraw.c: Update copyright information. 2007-01-06 00:05 nkbj * ufraw_ufraw.c: Fix zooming with NIKON D1X images. 2007-01-02 22:16 nkbj * wb_presets.c: Added PENTAX K10D presets. 2007-01-01 22:20 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.49 (1.361). 2007-01-01 22:11 nkbj * dcraw.cc: dcraw original 8.49 (1.361). 2006-12-31 02:30 nkbj * ufraw_saver.c, po/da.po: Save image size as width x height and update Danish translation. 2006-12-31 01:15 nkbj * ufraw_preview.c: Show image size as width x height. 2006-12-30 00:24 nkbj * po/da.po: Update Danish translation. 2006-12-29 07:45 nkbj * dcraw.cc, dcraw_api.cc, dcraw_indi.c, ufraw.c, ufraw.desktop, ufraw_conf.c, po/da.po, po/fr.po, po/ru.po, po/ufraw.pot: Update i18n and complete the Danish translation. 2006-12-25 13:00 nkbj * ufraw_ufraw.c: Fix ufraw-batch --shrink. 2006-12-25 11:50 nkbj * dcraw.cc, dcraw_api.cc, ufraw-gimp.c, ufraw.c, ufraw_conf.c, ufraw_embedded.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, po/POTFILES.in, po/da.po, po/fr.po, po/ru.po, po/ufraw.pot: Add stretch() function from dcraw.c 8.48 (1.360) and update i18n. 2006-12-22 03:45 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc, dcraw_api.h, dcraw_indi.c, ufraw_ufraw.c: dcraw modified 8.48 (1.360). 2006-12-22 00:48 nkbj * dcraw.cc: dcraw original 8.48 (1.360). 2006-12-21 00:08 nkbj * ufraw_preview.c: Change channel multiplier increments to 0.001. 2006-12-20 23:52 nkbj * ufraw_preview.c: Change green component increments to 0.001. 2006-12-17 11:57 nkbj * dcraw_api.cc: White space fix. 2006-12-17 10:03 lexort * autogen.sh: Accept automake 1.10 Add RCS id. Spiff up comments. 2006-12-17 09:55 lexort * icons/.cvsignore: ignore generated files 2006-12-15 22:20 nkbj * ufraw_conf.c, po/da.po, po/fr.po, po/ru.po, po/ufraw.pot: Update string. 2006-12-15 04:24 nkbj * po/: da.po, fr.po, ru.po, ufraw.pot: Update translation system. 2006-12-14 13:56 nkbj * dcraw.cc: Add changes from rereleased dcraw 8.46 (1.359). 2006-12-13 23:49 nkbj * dcraw.cc: dcraw modified 8.46 (1.359). 2006-12-13 23:41 nkbj * dcraw.cc: dcraw original 8.46 (1.359). 2006-12-13 23:33 nkbj * wb_presets.c: Add WB presets + fine tuning for NIKON D1X. 2006-12-11 22:39 nkbj * configure.ac, ufraw.desktop, po/da.po: Add first step of Danish translation (not complete). 2006-12-07 07:48 nkbj * wb_presets.c: Added WB presets for PENTAX K100D. 2006-12-05 00:37 nkbj * dcraw.cc: dcraw modified 8.45 (1.358). 2006-12-05 00:23 nkbj * dcraw.cc: dcraw original 8.45 (1.358). 2006-12-04 08:19 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.45 (1.358). 2006-12-04 08:00 nkbj * dcraw.cc: dcraw original 8.45 (1.358). 2006-11-27 23:58 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.44 (1.357). 2006-11-27 23:34 nkbj * dcraw.cc: dcraw original 8.44 (1.357). 2006-11-22 09:04 nkbj * dcraw.cc: dcraw modified 8.43 (1.356). 2006-11-22 08:47 nkbj * dcraw.cc: dcraw original 8.43 (1.356). 2006-11-20 17:51 udifuchs * ufraw_preview.c: Fix possible crash in spot-wb. Improve a bit the pen color calculation for the raw histogram. 2006-11-12 19:51 nkbj * wb_presets.c: Add missing comma. 2006-11-12 19:35 nkbj * wb_presets.c: Correct names for Panasonic DMC-FZ50 WB presets. 2006-11-12 18:30 udifuchs * Makefile.am, configure.ac, nikon_curve.c, nikon_curve.h, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw.png, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_icon.h, ufraw_icons.c, ufraw_preview.c, ufraw_ufraw.c, icons/Makefile.am, icons/digital-24.png, icons/digital.svg, icons/exposure-24.png, icons/exposure.svg, icons/film-24.png, icons/film.svg, icons/restore-hsv-24.png, icons/restore-hsv.svg, icons/restore-lch-24.png, icons/restore-lch.svg, icons/ufraw.png, po/fr.po, po/ru.po, po/ufraw.pot: Bumped version to 0.11. Change name of '--unclip' option to '--restore'. Allow user to choose between restoring highlights in LCH and HSV spaces. Add option for soft, filmlike clipping of highlights. Base GUI more on icons. Added nikon_curve function CurveDataIsTrivial(). 2006-11-08 18:09 udifuchs * wb_presets.c: Added WB presets for the Panasonic DMC-FZ50. 2006-11-08 08:13 nkbj * ufraw_preview.c: Keep output path in saved configuration (fix for last commit). 2006-11-07 14:19 udifuchs * ufraw_preview.c: Fix bug were second file saved had name of the first file as default. 2006-11-06 04:16 udifuchs * ufraw_developer.c: Fix divide by zero. 2006-11-06 00:37 nkbj * dcraw.cc: Keep dcraw.cc thread-safe. 2006-11-05 11:52 udifuchs * ufraw_saver.c, ufraw_ufraw.c: Use OutputFilename from the ID file to set the output filename. 2006-11-05 10:24 udifuchs * ufraw_conf.c: Document the --silent option. 2006-11-05 00:57 nkbj * dcraw.cc, dcraw.h, dcraw_api.cc: dcraw modified 8.42 (1.355). 2006-11-04 23:42 nkbj * dcraw.cc: dcraw original 8.42 (1.355). 2006-11-04 13:01 udifuchs * ufraw_developer.c: Added unclipping option in LCh space. This is not enabled by default, but requires setting CFLAGS=-DLCH_BLENDING during make. Setting this option disables the HSV unclipping. For HSV unclipping use 100% saturation from clipped pixel to prevent any color artifacts. 2006-11-03 15:28 udifuchs * ufraw.h, ufraw_developer.c, ufraw_preview.c: New algorithm for unclipping hightlights that really restores some details. Fix colors in raw histogram. 2006-10-31 16:30 udifuchs * ufraw_preview.c: Make the WB combo as wide as possible. 2006-10-30 17:28 udifuchs * generate_schemas.sh, ufraw-mime.xml: Added k25 mime-type and made some modifications to kdc, raf, crw. 2006-10-26 17:37 udifuchs * README, TODO: Final textual changes for version 0.10. 2006-10-26 17:33 udifuchs * ufraw_exiv2.cc: Fix compatibility with Exiv2-0.11. 2006-10-26 15:42 udifuchs * po/: fr.po, ru.po, ufraw.pot: Update Russian translation. 2006-10-26 00:03 nkbj * dcraw.cc: dcraw modified 8.41 (1.354). 2006-10-25 23:46 nkbj * dcraw.cc: dcraw original 8.41 (1.354). 2006-10-25 17:47 udifuchs * generate_schemas.sh, ufraw-batch.c, ufraw-mime.xml, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_preview.c: Add undocumented --silent option and use this option to silent the thumbnail generation schema. Add mime type for DNG files. 2006-10-25 17:36 udifuchs * dcraw.cc: Fix Kodak WB bug. 2006-10-25 15:16 udifuchs * Makefile.am, po/Makefile.in.in: Fix 'make distcheck'. 2006-10-24 17:21 udifuchs * dcraw.cc: Add a small fix that will appear in dcraw 8.41. 2006-10-24 16:16 udifuchs * wb_presets.c: Duplicate the Leica R8 WB presets for the Lecia R9. 2006-10-23 17:08 udifuchs * ufraw_preview.c: Center the raw histogram if the rest of the controls are too wide. 2006-10-23 16:38 udifuchs * configure.ac, ufraw-setup.iss.in, po/fr.po: Added French translation, thanks to Gatan Perrier. 2006-10-22 17:40 udifuchs * ufraw_conf.c, ufraw_preview.c, po/ru.po, po/ufraw.pot: Add i18n to the About text and some bug fixing. 2006-10-22 01:38 nkbj * po/da.po: [no log message] 2006-10-22 01:31 nkbj * configure.ac: Remove Danish translation until it is completed. 2006-10-21 15:39 udifuchs * ufraw_ufraw.c: 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. 2006-10-21 01:48 nkbj * Makefile.am: Make building ufraw.schemas work with BSD make. 2006-10-21 01:23 nkbj * po/ru.po: Clean up after latest commit. 2006-10-20 23:59 nkbj * po/: da.po, ru.po, ufraw.pot: Update ufraw.pot after latest changes. 2006-10-20 16:24 udifuchs * ufraw-gimp.c: Fix compilation warning from last commit. 2006-10-20 16:22 udifuchs * ufraw-batch.c, ufraw-gimp.c, ufraw-setup.iss.in, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_routines.c: Make the windows installer install translation files. Find these files in the windows environment. Check for UFRAW_LOCALEDIR environment variable on all archs. 2006-10-20 14:08 udifuchs * ufraw_routines.c: Remove unneeded check and accompaning message. 2006-10-20 11:23 nkbj * dcraw.cc: dcraw modified 8.40 (1.353). 2006-10-20 11:20 nkbj * dcraw.cc: dcraw original 8.40 (1.353). 2006-10-18 09:27 lexort * ufraw_conf.c, ufraw_routines.c: Replace isspace with g_ascii_isspace (to avoid passing signed/wrong type to isspace). 2006-10-18 07:24 lexort * Makefile.am: Use dcraw.cc explicitly in the dcraw_nomain.o make rule instead of using $^ (a GNU make extension). Fixes build with BSD make, and of course still works fine with GNU make. 2006-10-12 22:40 nkbj * po/da.po: Update Danish translation. 2006-10-12 22:37 nkbj * ufraw_conf.c, po/da.po, po/ru.po, po/ufraw.pot: Fix typo in string. 2006-10-08 16:15 udifuchs * wb_presets.c: Added Nikon D80 WB presets and fine tuning. 2006-10-07 11:21 udifuchs * ufraw_ufraw.c: When handling ID files save output image in same directory as ID file. 2006-10-07 09:48 udifuchs * wb_presets.c: Added Nikon E4500 WB presets and fine tuning. 2006-10-07 08:31 udifuchs * ufraw_saver.c: Fix saver to work with GTK+ 2.10. 2006-10-07 01:54 nkbj * wb_presets.c: Add WB presets for Canon EOS 400D DIGITAL, Canon EOS Kiss Digital N, and Canon EOS Kiss Digital X. 2006-10-06 22:58 nkbj * dcraw.cc, dcraw.h: dcraw modified 8.40 (1.352). 2006-10-06 22:52 nkbj * dcraw.cc: dcraw original 8.40 (1.352). 2006-10-06 13:53 udifuchs * wb_presets.c: Added WB presets for the Canon EOS Digital Rebel XTi. (and removed some white spaces.) 2006-10-05 13:48 udifuchs * wb_presets.c: Add WB presets for Canon Kiss, same as the 300D. 2006-10-04 16:04 udifuchs * po/ru.po: Russian translation by Alexander Rabtsevich and Alexandre Prokoudine. 2006-10-04 15:59 udifuchs * ufraw_ufraw.c: Adjust focal length formatting to changes in dcraw. 2006-10-02 02:55 nkbj * ufraw_routines.c, po/da.po, po/ru.po, po/ufraw.pot: Fix a string in ufraw_routines.c 2006-09-27 23:46 nkbj * dcraw.cc: dcraw modified 8.39 (1.351). 2006-09-27 23:26 nkbj * dcraw.cc: dcraw original 8.39 (1.351). 2006-09-20 09:43 nkbj * dcraw.cc: dcraw modified 8.39 (1.350). 2006-09-20 09:27 nkbj * dcraw.cc: dcraw original 8.39 (1.350). 2006-09-18 23:34 nkbj * dcraw.cc: Fix FUJIFILM FinePix S5500 artifacts. 2006-09-17 15:31 udifuchs * ufraw_conf.c: Fix a valgrind warning. 2006-09-17 14:24 udifuchs * wb_presets.c: Added WB presets for the Fuji S9500 and the Lecia R8. 2006-09-15 13:39 udifuchs * dcraw.cc: Fix crash cause by int/unsigned tricks. 2006-09-12 18:33 udifuchs * ufraw-batch.c, ufraw_writer.c, po/da.po, po/ru.po, po/ufraw.pot: Fixed i18n in ufraw-batch. Added i18n for the [y/n] question. 2006-09-12 10:56 nkbj * dcraw.cc: dcraw modified 8.38 (1.349). 2006-09-12 10:43 nkbj * dcraw.cc: dcraw original 8.38 (1.349). 2006-09-09 12:02 udifuchs * ufraw.h, ufraw_conf.c, ufraw_embedded.c, ufraw_exiv2.cc, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, wb_presets.c, po/da.po, po/ru.po, po/ufraw.pot: Mostly finish the i18n. WB presets are now standardized. 2006-09-08 23:48 nkbj * dcraw.cc: dcraw modified 8.37 (1.348). 2006-09-08 23:32 nkbj * dcraw.cc: dcraw original 8.37 (1.348). 2006-09-07 13:22 udifuchs * wb_presets.c: Added WB presets (+fine tuning) for the Minolta DiMAGE A2. 2006-09-07 07:57 udifuchs * ufraw-mime.xml: Added mime type for Kodak KDC 2006-09-07 00:16 nkbj * dcraw.cc: dcraw modified 8.36 (1.347). 2006-09-07 00:07 nkbj * dcraw.cc: dcraw original 8.36 (1.347). 2006-09-06 16:43 udifuchs * wb_presets.c: Added WB presets for the Minolta DiMAGE 7. 2006-09-06 16:18 udifuchs * Makefile.am, configure.ac, ufraw-batch.c, ufraw-gimp.c, ufraw_chooser.c, ufraw_conf.c, ufraw_saver.c, po/Makefile.in.in, po/da.po, po/ru.po, po/ufraw.pot: Some more translation markups. 2006-09-05 15:35 udifuchs * ufraw-batch.c, po/ufraw.pot: Some more i18n updates. 2006-09-05 13:40 udifuchs * ufraw_preview.c, po/da.po, po/ru.po: Marked most text in ufraw_preview.c for translation. Russian translation to above texts. (patch by Alexander Rabtchevich and Alexandre Prokoudine) 2006-09-05 13:04 udifuchs * mkinstalldirs: Added file as executable. 2006-09-05 13:02 udifuchs * mkinstalldirs: Removed for changing file to executable. 2006-09-05 01:31 nkbj * configure.ac: Add Danish translation to ALL_LINGUAS. 2006-09-05 01:19 nkbj * po/da.po: Add Danish translation for UFRaw. 2006-09-05 01:15 nkbj * po/Makefile.in.in: Fix configuration warning in po directory. 2006-09-04 16:35 udifuchs * Makefile.am, configure.ac, mkinstalldirs, ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_preview.c, po/.cvsignore, po/Makefile.in.in, po/POTFILES.in, po/ru.po: Added infrastructure for i18n support (patch by Alexey Voinov). 2006-09-04 14:05 udifuchs * ufraw_preview.c: If 'save ID' is set to 'never again' then .ufrawrc is not written after each processed image. Instead, after curves/profiles are loaded or deleted .ufrawrc is written (regardless of the 'save ID' setting). Added a 'Cancel' button to the 'Options' window. 2006-09-03 23:21 nkbj * dcraw.cc: dcraw modified 8.35 (1.346). 2006-09-03 23:07 nkbj * dcraw.cc: dcraw original 8.35 (1.346). 2006-08-31 23:29 nkbj * dcraw.cc: dcraw modified 8.33 (1.344). 2006-08-31 23:15 nkbj * dcraw.cc: dcraw original 8.33 (1.344). 2006-08-31 13:42 udifuchs * ufraw_ufraw.c: Fix possible segfault when uf==NULL. 2006-08-30 11:23 udifuchs * ufraw_conf.c: Fix ISO speed in the ID file. 2006-08-28 15:53 nkbj * Makefile.am: Add ufraw.schemas to CLEANFILES. 2006-08-28 15:28 nkbj * .cvsignore: Add ufraw.schemas to .cvsignore. 2006-08-28 15:26 nkbj * ufraw_embedded.c: Fix compiler warning on FreeBSD in a thread safe way. 2006-08-26 11:25 nkbj * generate_schemas.sh: Make generate_schemas.sh work for non-bash /bin/sh. 2006-08-26 11:12 nkbj * ufraw_embedded.c: Fix compiler warning on FreeBSD. 2006-08-26 08:29 udifuchs * Makefile.am, README, configure.ac, generate_schemas.sh, ufraw-mime.xml, ufraw.desktop, ufraw.h, ufraw_conf.c, ufraw_embedded.c, ufraw_routines.c, ufraw_ufraw.c: Support --out-type=png for embedded images. This adds a dependency on libpng development package, but GTK+2 depends on it anyway. 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. The mime options are only enabled with the configuration option '--enable-mime'. See the README for further information on installing these options. Bump ufraw version to 0.10 2006-08-25 05:06 nkbj * ufraw_embedded.c: Remove superfluous #include . 2006-08-25 04:41 udifuchs * ufraw_embedded.c: Fix bug in saving jpegs of ppm type embedded images. 2006-08-25 01:09 nkbj * dcraw.cc: dcraw modified 8.32 (1.343). 2006-08-25 00:58 nkbj * dcraw.cc: dcraw original 8.32 (1.343). 2006-08-24 14:40 udifuchs * wb_presets.c: Added WB presets for the Nikon E8700. 2006-08-24 02:53 nkbj * ufraw_embedded.c: Fix compile error on FreeBSD. 2006-08-22 00:52 nkbj * ufraw_developer.c: Let workaround for lcms 1.13 bug depend on LCMS_VERSION. 2006-08-21 02:24 nkbj * dcraw.cc: Fix compiler warnings. 2006-08-21 01:53 udifuchs * ufraw_embedded.c: Complete the '--embedded-image' commit. 2006-08-20 23:01 nkbj * dcraw.cc: dcraw modified 8.31 (1.342). 2006-08-20 22:48 nkbj * dcraw.cc: dcraw original 8.31 (1.342). 2006-08-20 15:57 udifuchs * dcraw.cc: Fix a sign bug in reading Leaf images. Downgrade "Failed to read metadata" from DCRAW_ERROR to DCRAW_WARNING. 2006-08-20 15:51 udifuchs * Makefile.am, dcraw.cc, dcraw_api.cc, dcraw_api.h, ufraw-gimp.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, ufraw_writer.c: Add the '--embedded-image' option to ufraw-batch for reading the embedded preview image in raw files. It supports most of the format supported by dcraw. The most notable missing support is for Foveon images. Use the above code in the Gimp plug-in for a much quicker generation of the preview thumbnails. 2006-08-20 04:52 udifuchs * ufraw_developer.c: Bypass an lcms 1.13 bug. 2006-08-18 02:28 nkbj * dcraw.cc, dcraw.h: Fix compiler warnings. 2006-08-18 02:22 nkbj * dcraw.h: ABI changes for DCRaw 8.30 (1.341). 2006-08-18 02:08 nkbj * dcraw.cc: dcraw modified 8.30 (1.341). 2006-08-18 02:06 nkbj * dcraw.cc: dcraw original 8.30 (1.341). 2006-08-17 05:18 udifuchs * wb_presets.c: Added WB presets to the Pentax *ist DL. 2006-08-17 00:00 nkbj * iccjpeg.c: Fix comment. 2006-08-14 23:12 nkbj * wb_presets.c: Add WB presets for Canon PowerShot S45. 2006-08-13 11:12 nkbj * wb_presets.c: Add WB presets for Minolta DiMAGE 7i. 2006-08-13 10:33 udifuchs * curveeditor_widget.c, nikon_curve.c, ufraw.h, ufraw_developer.c: Apply luminosity curve and saturation corrections in LCV(ab) space. Fix some rounding issues in the curve sampling. 2006-08-12 10:46 udifuchs * README, configure.ac: Bump version to 0.9.1 and final textual changes before 0.9.1 release. 2006-08-11 16:07 udifuchs * ufraw_preview.c, ufraw_ufraw.c, wb_presets.c: Treat Minolta's ALPHA and MAXXUM models as the DYNAX model for WB presets. 2006-08-10 23:15 nkbj * README: Add Minolta (MRW) to file types supported by exiv2. 2006-08-10 14:16 udifuchs * ufraw_exiv2.cc: Fix possible crash in std::cerr redirection. 2006-08-08 22:18 nkbj * dcraw.cc: dcraw modified 8.29 (1.340). 2006-08-08 22:14 nkbj * dcraw.cc: dcraw original 8.29 (1.340). 2006-08-07 23:00 nkbj * wb_presets.c: Added WB presets for Canon PowerShot G3. 2006-08-07 00:31 nkbj * dcraw.cc: dcraw modified 8.29 (1.339). 2006-08-07 00:18 nkbj * dcraw.cc: dcraw original 8.29 (1.339). 2006-08-05 16:59 udifuchs * ufraw_routines.c: Reconize Sony's *.arw file type. 2006-08-04 17:35 udifuchs * dcraw_api.cc, ufraw_exiv2.cc: Fix log messages and redirect exiv2 warnings from stderr to the log. 2006-08-04 17:22 udifuchs * configure.ac: Fix ./configure --help text. 2006-08-04 16:50 udifuchs * dcraw.cc: Add 'extern C' around jpeglib include. Needed for some buggy versions of libjpeg 2006-08-03 14:01 udifuchs * README, TODO: Final textual changes for the 0.9 release. 2006-08-01 16:29 udifuchs * dcraw.cc: Use the correct VERSION in the standalone dcraw. 2006-08-01 16:12 udifuchs * dcraw.cc: Remove unneeded 'static' directives 2006-08-01 15:51 udifuchs * wb_presets.c: Added wb presets for the Samsung GX-1S. 2006-07-31 18:31 udifuchs * dcraw.cc, dcraw.h: dcraw modified 8.28 (1.338). 2006-07-31 18:19 udifuchs * dcraw.cc: dcraw original 8.28 (1.338). 2006-07-31 18:13 udifuchs * dcraw.cc: Fix build on minw32 which has very strange prototype for swab(). 2006-07-31 13:34 udifuchs * wb_presets.c: Added Sony A100 WB presets with fine tuning 2006-07-30 13:08 udifuchs * ufraw_preview.c: Fix crash in spot WB. 2006-07-30 11:56 udifuchs * Makefile.am, README, dcraw.c, dcraw.h, dcraw_api.c, dcraw_api.cc, dcraw_api.h, dcraw_indi.c: Replaces the old dcraw interface with a C++ interface. This gets rid of global variables and allows opening several files simultaniously and easier access to dcraw variables. Some files have changed names in this change and seem to require applying 'make distclean' and './configure' again. 2006-07-30 11:50 udifuchs * dcraw.cc: dcraw modified 8.26 (1.336) 2006-07-30 11:47 udifuchs * dcraw.cc: New C++ interface for dcraw. dcraw original 8.26 (1.336) 2006-07-23 16:26 udifuchs * wb_presets.c: Added WB presets for the Minolta DiMAGE 5. 2006-07-21 14:41 udifuchs * curveeditor_widget.c, curveeditor_widget.h, dcraw_api.c, dcraw_api.h, dcraw_indi.c, nikon_curve.c, nikon_curve.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_exif.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, wb_presets.c: Clear up the license and copyright in all the source files. 2006-07-19 14:19 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_ufraw.c: Smarter highlight unclipping that should not create color artifact. Now the difference between clip and unclip is usually very small. Made clip highlights the default. 2006-07-19 08:32 udifuchs * ufraw_exiv2.cc: Do not copy EXIF 'Strip' tags from raw/tiff files. 2006-07-18 09:36 udifuchs * ufraw_ufraw.c: Support local file URI (bug #1519520). 2006-07-18 09:20 udifuchs * ufraw_ufraw.c: Fix preview size in the Gimp plug-in (bug #1523071). 2006-07-17 18:06 udifuchs * ufraw_preview.c: Fix the positioning of widgets in large windows. 2006-07-13 09:17 udifuchs * ufraw-batch.c, ufraw.c, ufraw_conf.c: Fix some bugs in the darkframe subtraction. 2006-07-10 15:00 udifuchs * ufraw-gimp.c: Finish the last change. 2006-07-10 11:05 udifuchs * ufraw.h, ufraw_preview.c, ufraw_saver.c, ufraw_ufraw.c: Scale the selected spot WB aread together with the zooming. It makes more sense and fixes a possible crash. 2006-07-06 10:05 udifuchs * wb_presets.c: Added WB presets for: Fuji F700 Fuji S2Pro Fuji S5500 Olympus E300 (with fine tuning) Olympus E500 2006-06-28 18:08 udifuchs * ufraw-batch.c, ufraw.c, ufraw.h, ufraw_conf.c, ufraw_ufraw.c: Add the --darkframe option for subtracting a raw darkframe image. Based on a patch by Kevin Vacit 2006-06-26 11:40 cbennett * wb_extract.pl: Added support in wb_extract.pl for D70 white balance values, which are in different Exif fields than the D200. 2006-06-25 18:38 cbennett * wb_extract.pl, wb_presets.c: Added WB fine tune presets for Nikon D200. Added Perl script that uses Exiftool to get WB info from images automatically and creates lines ready for wb_presets.c. 2006-06-24 11:20 udifuchs * Makefile.am, ufraw.h, ufraw_conf.c, ufraw_exif.c, ufraw_exiv2.cc, ufraw_preview.c, ufraw_ufraw.c: Show basic EXIF information in the UI. Removed the obselete ufraw-exif extra program. Disabled the code to read TIFF style raw file using libexif. This can be enabled by 'CCFLAGS=-DUSE_LIBEXIF_LIBTIFF_HACK'. 2006-06-23 15:42 nkbj * dcraw.c: DCRaw modified 8.23 (1.332). 2006-06-23 15:21 nkbj * dcraw.c: DCRaw original 8.23 (1.332). 2006-06-21 15:14 nkbj * dcraw.c: DCRaw modified 8.22 (1.331). 2006-06-21 14:48 nkbj * dcraw.c: DCRaw original 8.22 (1.331). 2006-06-10 15:29 udifuchs * ufraw_ufraw.c, wb_presets.c: Add WB presets for the Fuji S5600 and for the Nikon D1H (with fine tuning). Reset fine tuning value on auto wb. 2006-05-31 00:39 nkbj * configure.ac: Clean up messages. 2006-05-29 14:54 nkbj * dcraw.c: DCRaw modified 8.21 (1.330). 2006-05-29 14:45 nkbj * dcraw.c: DCRaw original 8.21 (1.330). 2006-05-28 12:12 nkbj * dcraw_api.c, dcraw_indi.c: Update API for DCRaw 8.20 (1.329). 2006-05-28 12:11 nkbj * dcraw.c: DCRaw modified 8.20 (1.329). 2006-05-28 11:48 nkbj * dcraw.c: DCRaw original 8.20 (1.329). 2006-05-22 20:50 nkbj * dcraw_indi.c: Update dcraw_indi.c for DCRaw 8.19 (1.328). 2006-05-22 20:48 nkbj * dcraw.c: DCRaw modified 8.19 (1.328). 2006-05-22 20:17 nkbj * dcraw.c: DCRaw original 8.19 (1.328). 2006-05-22 07:58 udifuchs * ufraw_exiv2.cc: Reset orientation tag in exiv2 since UFRaw already rotates the image. 2006-05-21 01:34 nkbj * configure.ac: Stop './configure --with-libexif' from barfing with 'libexif < 0.6.13'. 2006-05-21 01:08 nkbj * TODO: Add highlight recovery to TODO list. 2006-05-19 00:17 nkbj * dcraw.c: DCRaw modified 8.18 (1.326). 2006-05-19 00:01 nkbj * dcraw.c: DCRaw original 8.18 (1.326). 2006-05-16 06:05 nkbj * dcraw_indi.c: Update definition of CLIP() to match DCRaw 8.17 (1.325). 2006-05-16 04:06 nkbj * configure.ac: Update version number to 0.9. 2006-05-16 04:05 nkbj * dcraw.c: DCRaw modified 8.17 (1.325). 2006-05-16 03:33 nkbj * dcraw.c: DCRaw original 8.17 (1.325). 2006-05-13 16:52 udifuchs * README: Final textual changes before 0.8.1 release. 2006-05-13 16:09 udifuchs * configure.ac, ufraw_preview.c, ufraw_ufraw.c, wb_presets.c: Fix gimp plug-in half-interpolation crash. Fix possible auto-exposure crash. Add Canon 30D WB presets. 2006-05-07 12:00 nkbj * README: Fix yet another typo i README. 2006-05-07 11:35 nkbj * README: Fix typo in README. 2006-05-05 03:16 nkbj * README, configure.ac, dcraw_indi.c: Change version number to 0.9 and update dcraw_indi.c and README. 2006-05-05 02:07 nkbj * configure.ac, dcraw.c: Make ./configure test for memmem(). 2006-05-05 01:50 nkbj * configure.ac, dcraw.c: Integrate dcraw.c in UFRaw config system. 2006-05-05 00:56 nkbj * dcraw.c: DCRaw modified 8.15 (1.324). 2006-05-05 00:38 nkbj * dcraw.c: DCRaw original 8.15 (1.324). 2006-05-04 15:36 udifuchs * README, TODO: Final textual changes for the release of version 0.8. 2006-05-03 17:12 udifuchs * ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Fix bug in auto-exposure calculation. Fix some uninitialized memory access. 2006-05-02 16:57 udifuchs * ufraw_ufraw.c: Remove some cruft that for some reason was crashing ufraw. 2006-05-02 15:38 udifuchs * ufraw_ufraw.c: Fix auto-black for 4 color cameras and another very improbable bug. 2006-05-01 16:45 udifuchs * ufraw_ufraw.c: Fix overflow in calculation RawLumHistogram and auto-exposure, which was apparent with 16-bit cameras. 2006-04-29 17:03 udifuchs * configure.ac, ufraw_preview.c: Fix build flags to set both CFLAGS and CXXFLAGS. Make sure that ResetExposure works correctly with auto-exposure. 2006-04-29 14:45 udifuchs * curveeditor_widget.c: Fix bug where selected curve point was not drawn. 2006-04-28 19:00 udifuchs * ufraw_preview.c: Improve widgets positioning and save a few pixels in width. 2006-04-28 11:51 udifuchs * ufraw_preview.c: Enable ResetBlackButton after choosing auto-black. Increase the "safety margins" around the preview window to decrease the chances of getting a window larger than the screen size. 2006-04-27 06:57 udifuchs * configure.ac: Remove powerpc specific flag since it does not build on powerpc64. 2006-04-26 11:30 udifuchs * nikon_curve.c: Fix bug when no anchor points are specified. 2006-04-26 11:12 udifuchs * nikon_curve.c: Set some defaults and add some checks when loading a curve file. 2006-04-25 06:11 udifuchs * ufraw_ufraw.c: Add a cutoff to the auto-wb 2006-04-24 13:35 udifuchs * curveeditor_widget.c, ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Modified all the 'auto' functions: Auto WB, no longer uses the dcraw code. Current code is at least 49 times faster, with very similar results. Auto exposure is a bit slower now, but much more accurate, taking into account many more conversion parameters, like the gamma corrections and the base curve. Auto black and auto curve are much faster with simpler code, and fairly similar results. Auto black is now persistent, meaning that onces set, it will be recalculated when relevant parameters are changed. 2006-04-22 10:57 udifuchs * wb_presets.c: Added WB presets for Canon Pro1, Olympus C5050Z (+fine tuning) and Nikon D70s (same as D70). 2006-04-20 07:49 udifuchs * ufraw-gimp.c, ufraw_exiv2.cc, ufraw_ufraw.c, ufraw_writer.c: JPEG supports EXIF buffers up to 65533 bytes in size. Therefore, larger buffers are ignored. 2006-04-19 16:32 udifuchs * wb_presets.c: Added Canon D60 WB presets. 2006-04-19 11:20 nkbj * wb_presets.c: Add WB presets for Canon PowerShot S30. 2006-04-08 22:54 nkbj * dcraw.c: DCRaw modified 8.13 (1.323). 2006-04-08 22:45 nkbj * dcraw.c: DCRaw original 8.13 (1.323). 2006-04-06 21:57 nkbj * dcraw.c: DCRaw modified 8.12 (1.322). 2006-04-06 21:56 nkbj * dcraw.c: DCRaw original 8.12 (1.322). 2006-04-05 01:37 nkbj * dcraw_indi.c: Update dcraw_indi.c to use d65_white[]. 2006-04-05 00:05 nkbj * dcraw.c: DCRaw modified 8.11 (1.321). 2006-04-04 23:56 nkbj * dcraw.c: DCRaw original 8.11 (1.321). 2006-03-28 23:23 nkbj * TODO, ufraw_ufraw.c: Update TODO for UFRaw 0.8. 2006-03-28 23:22 nkbj * dcraw.c: DCRaw modified 8.10 (1.320). 2006-03-28 23:17 nkbj * dcraw.c: DCRaw original 8.10 (1.320). 2006-03-28 16:48 udifuchs * nikon_curve.c, wb_presets.c: Added WB presets for the Olympus C5060WZ and WB presets with fine tunning for the Olympus C8080WZ. Make curve interpulation calculation faster. This can have an affect on the UI responsiveness. 2006-03-28 16:03 udifuchs * dcraw_api.c, ufraw_conf.c, ufraw_ufraw.c: Handle 'spot_wb' in --conf correctly. Fix bug that caused a 'maze effect' in the output. This only happend when working with the 'file-chooser' and for some reason mostly on Windows. 2006-03-25 12:40 udifuchs * configure.ac, dcraw_api.c, ufraw_ufraw.c: Make code compatible with Solaris. Fix the pseudoinverse() function declaration. 2006-03-24 22:16 nkbj * dcraw.c: DCRaw modified 8.09 (1.319). 2006-03-24 22:06 nkbj * dcraw.c: DCRaw original 8.09 (1.319). 2006-03-21 23:26 nkbj * dcraw.c: DCRaw modified 8.08 (1.318). 2006-03-21 23:19 nkbj * dcraw.c: DCRaw original 8.08 (1.318). 2006-03-20 23:21 nkbj * dcraw.c: DCRaw modified 8.07 (1.317). 2006-03-20 23:08 nkbj * dcraw.c: DCRaw original 8.07 (1.317). 2006-03-16 00:43 nkbj * Makefile.am, configure.ac, dcraw.c, dcraw_api.c, dcraw_indi.c: Fix dcraw.c so -Wno-sign-compare is no longer necessary. 2006-03-13 01:47 nkbj * configure.ac: Fix typo in comment. 2006-03-11 09:47 udifuchs * nikon_curve.c: Fix a few possible memory flows. 2006-03-10 10:04 udifuchs * configure.ac: Check if exiv2 is installed. 2006-03-09 15:54 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Add preliminary zoom support. Can zoom only up to 50%. No panning, and a bit non-responsive interface since create_base_image() should run in g_idle_add(). 2006-03-08 13:22 udifuchs * ufraw_exiv2.cc: Make exiv2 compatible with gcc-3.3. 2006-03-07 14:23 udifuchs * ufraw_exiv2.cc: Add the forgotten ufraw_exiv2.cc. 2006-03-06 16:22 udifuchs * Makefile.am, configure.ac, ufraw_conf.c, ufraw_exif.c, ufraw_saver.c, ufraw_writer.c: Use exiv2 to read EXIF data from CRW files (if --with-exiv2 is specified). libexif can now also read Fuji RAF files thanks to a patch from Heiko Schroeder. 2006-03-05 17:56 udifuchs * wb_presets.c: Added WB presets for Fuji S20Pro. Modified WB presets for Minolta 5D + fine tuning. 2006-03-04 14:32 udifuchs * Makefile.am, README, blackbody.h, configure.ac, ufraw_routines.c: Bump up version to 0.8 Some code clean up. Remove blackbody.h that is no longer used and will not be used. Add configuration option --with-prefix instead of the environment variable PREFIX. 2006-03-03 15:11 udifuchs * MANIFEST, README, TODO: Final textual changes for version 0.7 release. 2006-03-02 16:46 udifuchs * ufraw_saver.c: Fix alignment of the 8-bit TIFF radio button in the Save As window. 2006-03-01 11:41 lexort * TODO: remove deleting profiles - done in options 2006-03-01 10:30 lexort * TODO: move WB Presets per camera to done, since we're over the hump. add some items. 2006-02-28 16:16 udifuchs * wb_presets.c: Added WB fine tuning for the Nikon D70. 2006-02-27 10:00 udifuchs * README, configure.ac, dcraw_api.c, dcraw_indi.c: #include is missing for building with some versions of mingw. Since libexif-0.6.13 is two month old, we now require it. 2006-02-24 07:39 udifuchs * wb_presets.c: Add all WB fine tuning values for the Olympus E-1 2006-02-23 15:27 udifuchs * ufraw_conf.c, ufraw_routines.c, ufraw_ufraw.c: Handle errors during XML parsing correctly. Fix a very improbable bug in the WB setting. 2006-02-22 16:33 udifuchs * dcraw.c, dcraw_api.c: After checking that pseudoinverse of pseudoinverse gives back the same matrix, we can get rid of the cam_rgb global variable. 2006-02-22 05:08 udifuchs * ufraw_conf.c: [no log message] 2006-02-22 04:46 udifuchs * wb_presets.c: Added WB presets for the Canon 5D. 2006-02-21 01:24 nkbj * wb_presets.c: Add WB fine tuning for MINOLTA DYNAX 7D and OLYMPUS E-1. 2006-02-20 18:05 udifuchs * Makefile.am, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, wb_presets.c: Added suppord for WB presets fine tuning. At the moment there are only fine tuning data for the Nikon D2X. 2006-02-20 08:52 udifuchs * ufraw_developer.c: Apply the base curve before the gamma curve. This seems to simulate the results from the Nikon software better. 2006-02-19 11:47 nkbj * ufraw_routines.c: Add WB presets for Canon PowerShot S70. 2006-02-18 23:12 nkbj * ufraw_routines.c: Add WB presets for PENTAX *ist DS. 2006-02-18 22:23 nkbj * ufraw_routines.c: Add WB presets for Canon PowerShot G2, Nikon D100 and Nikon D200. 2006-02-18 10:04 udifuchs * ufraw_routines.c: Added WB presets for the Minolta A1. 2006-02-18 07:59 nkbj * ufraw_routines.c: Fix gamma for Nikon D50 input profile + reordering WB presets following camera list on Dave Coffin's homepage. 2006-02-16 21:41 nkbj * ufraw_routines.c: Use correct WB presets for Canon PowerShot S60. 2006-02-15 10:26 nkbj * ufraw_routines.c: Update WB presets for Minolta DiMAGE 7Hi. 2006-02-15 09:52 udifuchs * ufraw_routines.c: Added WB presets for the Minolta 5D. 2006-02-15 09:27 nkbj * ufraw_routines.c: Use correct WB presets for Canon PowerShot G6. 2006-02-14 23:35 nkbj * ufraw_routines.c: Add WB presets for Canon PowerShot G6 and S60. 2006-02-14 00:28 nkbj * ufraw_routines.c: Add WB presets for Canon PowerShot G5 and FUJIFILM FinePix S7000. 2006-02-11 22:20 nkbj * ufraw_routines.c: Add WB presets for OLYMPUS E-10 + spelling fixes. 2006-02-11 20:02 udifuchs * ufraw_preview.c: Split between the WB page and the Color management page in the preview. This structure is much more logical. It also helps fit the window inside 1024x768 screens. 2006-02-11 07:18 udifuchs * ufraw_routines.c: Added WB presets from the Canon S60. 2006-02-09 11:34 udifuchs * ufraw_routines.c: Add WB presets for the Panasonic FZ30. 2006-02-08 23:50 nkbj * dcraw.c: DCRaw modified 8.05 (1.315). 2006-02-08 23:49 nkbj * dcraw.c: DCRaw original 8.05 (1.315). 2006-02-08 18:27 udifuchs * ufraw_routines.c, ufraw_ufraw.c: Added WB presets for Olumpus E-1 and Leica Digilux 2. For Nikon D1X images stretch the pixels before shrinking the image to improve shrank image quality. 2006-02-08 11:35 udifuchs * ufraw_routines.c: Added WB presets for the Canon 20D. Added in comments fit functions for a real blackbody. 2006-02-08 02:35 udifuchs * ufraw_routines.c: Added WB presets for Canon 1D Mark II and Minolta G500 2006-02-07 23:32 nkbj * ufraw_routines.c: Add WB presets for MINOLTA DYNAX 7D. 2006-02-07 01:35 nkbj * dcraw_api.c: Update API for DCRaw 8.04 (1.314). 2006-02-07 01:32 nkbj * dcraw.c: DCRaw modified 8.04 (1.314). 2006-02-07 01:12 nkbj * dcraw.c: DCRaw original 8.04 (1.314). 2006-02-06 23:22 nkbj * ufraw_routines.c: Add remaining Canon EOS DIGITAL REBEL WB presets. 2006-02-06 14:40 udifuchs * ufraw_conf.c, ufraw_preview.c, ufraw_routines.c: Allow for loading of curves with older versions. Don't crash when loaded curve has more than 20 anchors. Fit the channel multipliers better in the window. 2006-02-06 02:36 nkbj * ufraw_preview.c: Extend WB range to 12000 K. 2006-02-05 11:52 udifuchs * ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Added the channel multipliers to the GUI. Fixed a bug in the developer that caused jaginess in the raw histogram curves. Fixed a WB bug for the Sony-828. 2006-02-04 14:36 udifuchs * configure.ac, dcraw_api.c, ufraw_routines.c: In cygwin build a native cygwin executatble by default. Cross compiling mingw32 executable should also work fine. Add WB presets for Canon 300D. Fix initialization bug in dcraw_api.c. 2006-02-03 12:35 lexort * ufraw_routines.c: note firmware version (which is current) on d2x multipliers; it's different from older firmware. 2006-02-02 16:38 udifuchs * dcraw.c, dcraw_api.c, ufraw_conf.c, ufraw_ufraw.c: Fix some camera specific bugs introduced in yesterday's commit. Fix bug where output path was only updated at the end of the session. 2006-02-01 18:02 udifuchs * dcraw.c, dcraw_api.c, dcraw_api.h, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: Replace the old WB temperature calculation with a correct one. This calculation is for a reference white of D65. The color matrices are used to convert it to the camera color space. Bump the internal version for UFRaw IDs to 7. This marks the change in temperature definition. Still, the old temperature is not converted to the current one. Added WB presets for the Nikon D50. 2006-01-31 08:29 lexort * ufraw_routines.c: Add fine-tune presets (-3, -2, -1, 1, 2, 3) for the six basic source types. Add Kelvin presets, corresponding to camera settings. The WB menu is now a bit awkward, but still usable. Patch from Bill Chiarchiaro . 2006-01-30 19:14 lexort * ufraw_routines.c: Add Nikon D2X (basic six, no fine adjustments, not the K presets) white balance presets. Patch received via email from Bill Chiarchiaro (wjc@cleartech.com). 2006-01-30 05:18 udifuchs * ufraw_routines.c: Add WB presets for Canon 350D and Fuji S5000. 2006-01-29 13:59 udifuchs * ufraw_routines.c: Add WB presets for Canon EOS 10D. 2006-01-29 11:29 udifuchs * ufraw.h, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: Show WB presets according to the make and model of the camera. 2006-01-29 07:31 udifuchs * ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Change 'wb' in conf_data from int to string. It is a first step in making the WB presets camera dependent. 2006-01-26 02:11 nkbj * dcraw_api.c: Update to match output from DCRaw. 2006-01-26 01:17 nkbj * README, configure.ac: Updated documentation for EXIF support. 2006-01-25 23:36 nkbj * ufraw.pod: Include link to the GIMP homepage. 2006-01-25 16:55 udifuchs * configure.ac, ufraw-setup.iss.in, ufraw_ufraw.c: Do not read EXIF data using libexif by default. Add the --with-libexif option to the configuration for those that still want this feature. Fixed the build on mingw32. Do not include the libexif dll in the windows package if not needed. 2006-01-25 13:31 udifuchs * ufraw_preview.c: Fix leakage in the spot size calculation. 2006-01-25 00:24 nkbj * dcraw_api.c: Various cosmetic fixes (mainly in comments) for consistency. 2006-01-25 00:20 nkbj * MANIFEST, README, configure.ac, dcraw.c, dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw-batch.c, ufraw-gimp.c, ufraw-setup.iss.in, ufraw.c, ufraw.h, ufraw_preview.c, ufraw_ufraw.c: Various cosmetic fixes (mainly in comments) for consistency. 2006-01-24 18:19 nkbj * README: Update status for reading EXIF data. 2006-01-24 18:14 nkbj * TODO: Update what has been done. 2006-01-24 18:11 nkbj * dcraw.c: DCRaw modified 8.03 (1.313). 2006-01-24 18:07 nkbj * dcraw.c: DCRaw original 8.03 (1.313). 2006-01-24 15:18 udifuchs * configure.ac, dcraw_api.c, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_ufraw.c: Pass the EXIF tags DCRaw reads to UFRaw and save them in the ID file. Nothing else is done with this information for now. Change the WB setting logic so that the algorithems for full interpolation and shrinked images will be almost the same. There is also some commented code in develope() to handle highlight clipping better. 2006-01-24 02:35 nkbj * dcraw_api.c: Fix crash when saving images from foveon cameras. 2006-01-23 23:51 nkbj * dcraw_indi.c: Update functions to recent code. 2006-01-23 15:36 udifuchs * dcraw_api.c: Update logic according to dcraw 8.01 main(). 2006-01-23 04:38 nkbj * dcraw_indi.c: Update scale_colors_INDI() for DCRaw 8.01. 2006-01-23 04:36 nkbj * dcraw.c: DCRaw modified 8.01 (1.311). 2006-01-23 04:31 nkbj * dcraw.c: DCRaw original 8.01 (1.311). 2006-01-23 00:39 nkbj * Makefile.am, dcraw_api.c, dcraw_api.h: API changes for DCRaw 8.00. 2006-01-23 00:38 nkbj * dcraw.c: DCRaw modified 8.00 (1.310). 2006-01-21 05:15 nkbj * dcraw.c: DCRaw original 8.00 (1.310). 2006-01-20 00:47 nkbj * ufraw_exif.c: Fix a couple of comments. 2006-01-19 15:35 udifuchs * nikon_curve.c: Support Nikon D2H default embedded curve. 2005-12-18 22:12 nkbj * dcraw.c: DCRaw modified 7.94 (1.309). 2005-12-18 22:09 nkbj * dcraw.c: DCRaw original 7.94 (1.309). 2005-12-12 16:43 udifuchs * ufraw_ufraw.c: A subtraction of the black point from the maximum (rgbMax) was missing. 2005-12-11 04:51 nkbj * dcraw.c: DCRaw modified 7.93 (1.308). 2005-12-11 04:49 nkbj * dcraw.c: DCRaw original 7.93 (1.308). 2005-12-09 01:26 nkbj * dcraw.c: DCRaw modified 7.92 (1.307). 2005-12-09 01:25 nkbj * dcraw.c: DCRaw original 7.92 (1.307). 2005-12-07 22:30 nkbj * dcraw.c: DCRaw modified 7.91 (1.306). 2005-12-07 22:11 nkbj * dcraw.c: DCRaw original 7.91 (1.306). 2005-12-07 01:49 nkbj * dcraw.c: Fix artifacts in FUJIFILM FinePix S5100 images caused by previous fix. 2005-12-06 23:19 nkbj * dcraw.c: Fix FUJIFILM FinePix S5100 top margin artifacts. 2005-12-06 21:36 nkbj * dcraw.c: DCRaw modified 7.90 (1.305). 2005-12-06 21:33 nkbj * dcraw.c: DCRaw original 7.90 (1.305). 2005-11-29 22:15 nkbj * README: Update DCRaw update information. 2005-11-29 22:09 nkbj * dcraw.c: DCRaw modified 7.86 (1.304). 2005-11-29 22:07 nkbj * dcraw.c: DCRaw original 7.86 (1.304). 2005-11-29 02:53 nkbj * dcraw.c: dcraw modified 7.86 (1.303) 2005-11-29 02:51 nkbj * dcraw.c: dcraw original 7.86 (1.303) 2005-11-24 00:10 nkbj * dcraw.c: dcraw modified 7.35 (1.302). 2005-11-24 00:07 nkbj * dcraw.c: dcraw original 7.35 (1.302). 2005-11-24 00:03 nkbj * ufraw_routines.c: Update supported file formats. 2005-11-23 03:10 nkbj * dcraw.c: dcraw modified 7.85 (1.301). 2005-11-23 03:07 nkbj * dcraw.c: dcraw original 7.85 (1.301). 2005-11-22 14:36 udifuchs * ufraw_preview.c: Fix compile warning on 64-bit machines. 2005-11-22 14:21 udifuchs * TODO, dcraw_api.c: Fix crash when saving images from four color-filter cameras. 2005-11-22 14:15 udifuchs * configure.ac: Bump UFRaw version to 0.7 2005-11-21 19:35 lexort * TODO: Add some features gdt would like to see. 2005-11-13 14:39 udifuchs * README, TODO, ufraw-setup.jpg: Final changes for the 0.6 release. 2005-11-13 11:07 udifuchs * ufraw_preview.c: Fix 'reset base curve'. 2005-11-12 23:12 nkbj * dcraw.c: dcraw modified 7.84 (1.300). 2005-11-12 23:04 nkbj * dcraw.c: dcraw original 7.84 (1.300). 2005-11-12 13:33 nkbj * dcraw.c: dcraw modified 7.84 (1.299). 2005-11-12 13:31 nkbj * dcraw.c: dcraw original 7.84 (1.299). 2005-11-11 16:06 udifuchs * README: Add recomendations for packagers in README. 2005-11-06 17:01 udifuchs * Makefile.am, configure.ac, ufraw-gimp.c, ufraw.c, ufraw_exif.c: Link each executable only with the libraries that it uses. Fix EXIF support to work with libtiff 3.7.4. Change default language for RTL languages from "en_US" to "C". 2005-11-06 11:06 nkbj * dcraw.c: Fix for building on FreeBSD 6.0-RELEASE. 2005-11-06 01:06 nkbj * dcraw.c: dcraw modified 7.82 (1.297). 2005-11-06 01:05 nkbj * dcraw.c: dcraw original 7.82 (1.297). 2005-11-05 15:51 udifuchs * dcraw_indi.c: Fix bug in border_interpolate_INDI(). 2005-11-04 07:21 udifuchs * ufraw_conf.c: Fix reading of BaseCurve from configuration file. 2005-11-04 01:12 nkbj * dcraw.c: dcraw modified 7.82 2005-11-04 01:11 nkbj * dcraw.c: dcraw original 7.82 2005-11-03 17:18 udifuchs * ufraw.h, ufraw.pod, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_ufraw.c: Add a base curve, which is applied before the ICC transformation. This curve corresponds to Nikon's tone curve. Therefore there is now an option --base-curve=camera, while the option --curve=camera is no longer valid. This could break some scripts that use ufraw-batch with this option. 2005-11-02 10:32 udifuchs * dcraw.c, dcraw_api.c, dcraw_api.h, ufraw.h, ufraw.pod, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c: Added the Custom Curve option which is the sample as the old Camera Curve Option. The new Camera Curve applied the Custom Curve only if the camera was set to use this curve. (Patch from Solomon Peachy.) 2005-10-28 13:23 nkbj * dcraw.c: dcraw modified 7.81 2005-10-28 13:15 nkbj * dcraw.c: dcraw original 7.81 2005-10-21 00:50 nkbj * configure.ac, dcraw.c: Fix some gcc-4.x compiler warnings. 2005-10-20 10:23 nkbj * dcraw_api.c, dcraw_indi.c: Small fix for fuji_rotate(). 2005-10-20 08:39 nkbj * dcraw_indi.c: Update AHD interpolation to dcraw 7.79 2005-10-20 08:38 nkbj * dcraw.c: dcraw modified 7.79 2005-10-20 08:29 nkbj * dcraw.c: dcraw original 7.79 2005-10-12 17:04 udifuchs * ufraw_ufraw.c: Fix --size bug. 2005-10-12 04:17 nkbj * dcraw.c: Small fix to parse_fuji(). 2005-10-11 09:46 udifuchs * dcraw_api.c, dcraw_api.h, ufraw_ufraw.c: Remove some redundant code. 2005-10-08 07:42 nkbj * dcraw.c, dcraw_api.c: Fix breakage in 'Use color matrix' from Yesterday. 2005-10-08 04:52 nkbj * TODO: Update TODO. 2005-10-08 04:36 nkbj * dcraw.c: dcraw modified 7.77 2005-10-08 04:31 nkbj * dcraw.c: dcraw original 7.77 2005-10-08 04:25 nkbj * dcraw_indi.c: Another cosmetic fix (whitespace). 2005-10-08 03:34 nkbj * README, configure.ac, curveeditor_widget.c, dcraw_api.c, dcraw_indi.c, iccjpeg.c, nikon_curve.c, nikon_curve.h, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw.pod, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_exif.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: Various cosmetic fixes (mainly in comments) for consistency. 2005-10-08 02:59 nkbj * dcraw.c, dcraw_api.c: Better fix for dark foveon images. 2005-10-07 13:06 udifuchs * dcraw_indi.c, ufraw_preview.c: Fix small memory leak in dcraw_indi.c. Fix segfault bug after pressing "Cancel". 2005-10-07 06:00 nkbj * dcraw.c, dcraw_api.c, dcraw_indi.c: Fix color scaling bug with Canon PowerShot S60. 2005-10-07 04:50 udifuchs * dcraw.c: Fix memory leak in dcraw.c. 2005-10-07 03:52 nkbj * dcraw.c: Revert last change (messed up color scaling for anything but preview image). 2005-10-07 01:45 nkbj * dcraw.c: Remove pre-AHD hack. 2005-10-06 15:43 udifuchs * ufraw_ufraw.c: Fix handling of Foveon images. 2005-10-04 17:28 udifuchs * dcraw.c, dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw-gimp.c, ufraw.h, ufraw_ufraw.c, ufraw_writer.c: Updated to dcraw 7.74. This involved some API changes, mostly getting rid of 'trim', since there is a new border_interpolate(). 2005-10-04 16:48 udifuchs * dcraw.c: dcraw original 7.74 2005-10-04 07:55 lexort * ufraw.c: Don't declare optInd after statements; move the decl up to the decl block and just assign to it later. Fixes failure to compile on NetBSD 1.6.2 which uses gcc 2.95.3, and should restore compilation with other pre-C99 compilers. 2005-10-04 07:51 lexort * dcraw.c: Before defining memmem, include sys/param.h, and test for __NetBSD_Version__ being >= 300000000 (3.0). Awkward, but without autoconf it's hard to do feature tests. May need augmenting for recent FreeBSD, which I hear also has memmem. 2005-09-29 16:24 udifuchs * dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw_ufraw.c: Stretch the Nikon D1x rectangular pixels. 2005-09-29 13:50 udifuchs * dcraw_api.c: Use gushort instead of ushort for compatibility with MS-Windows. 2005-09-28 15:53 udifuchs * dcraw.c, dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw-batch.c, ufraw.c, ufraw.h, ufraw.pod, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_saver.c, ufraw_ufraw.c: Add AHD interpolation support. 2005-09-28 05:09 udifuchs * nikon_curve.c, nikon_curve.h: Removed restrictions on the GPL in nikon_curve, with permision from the original author, Shawn Freeman. 2005-09-28 00:30 nkbj * TODO: Start TODO for UFRaw-0.6 2005-09-28 00:15 nkbj * TODO: Update future plans. 2005-09-28 00:14 nkbj * configure.ac: Fix typo. 2005-09-27 19:36 lexort * configure.ac: Rationalize handling of have_foo for foo in {exif jpg tiff zlib}. For each, set have_foo to yes if the library is found, and otherwise no. Solves problem of have_foo being "" if the header check failed (e.g. in have_tiff), causing a shell syntax error. Improve comment about pow and libm. For tiff check, set have_tiff, not have_zlib. Explain the reason for the odd (to an autoconf user) -DNO_JPEG usage. Only print a message about TIFF compression support if we have tiff to start with; it's odd to report having TIFF lossless compression but not tiff. Use the word 'deflate', so the clueful will realize we mean that and not LZW or packbits. 2005-09-27 12:44 lexort * configure.ac: add comment about the whole pkgconfig/prefix mechanism spiff up getopt_long comment 2005-09-26 19:07 lexort * configure.ac: add $Id:$ fix up some comments, and mark things that need attention (but don't change them) 2005-09-26 18:42 lexort * Makefile.am: add commented $Id line cleanup whitespace 2005-09-26 18:33 lexort * README: Note that perl is required. Explain the term 'development package' for those not using Linux. 2005-09-26 00:49 nkbj * ufraw.pod: Fix typography. 2005-09-26 00:18 nkbj * TODO: Add bilateral filtering for noise reduction as future addition. 2005-09-26 00:17 nkbj * configure.ac: Change version to 0.6 2005-09-25 19:30 nkbj * dcraw.c: dcraw modified 7.70 2005-09-25 19:16 nkbj * dcraw.c: dcraw original 7.70 2005-09-25 14:39 udifuchs * Makefile.am, README, TODO, ufraw-setup.jpg, ufraw_saver.c: - Final changes for the release of ufraw-0.5. 2005-09-23 17:00 udifuchs * ufraw_ufraw.c: Improved a bit the ufraw_exif_from_raw() memory leak bypass. 2005-09-21 22:40 nkbj * configure.ac: Fix gcc-4.0.x compiler warnings. 2005-09-21 13:00 nkbj * ufraw_exif.c: Fix gcc-4.0.x compiler warnings. 2005-09-18 02:20 nkbj * TODO, configure.ac: Be ready til strip binaries for release. 2005-09-15 23:05 nkbj * TODO: Update to current state. 2005-09-15 07:07 udifuchs * ufraw_exif.c: -Do not write the EXIF orientation tag 2005-09-15 02:26 udifuchs * ufraw_ufraw.c: -Ugly fix to memory leak in ufraw_exif 2005-09-14 19:15 udifuchs * ufraw-gimp.c, ufraw_exif.c, ufraw_routines.c, ufraw_saver.c, ufraw_writer.c: Fixed some gcc-4.0 warnings and one bug. 2005-09-12 23:50 nkbj * dcraw.c: dcraw modified 7.65 2005-09-12 23:36 nkbj * dcraw.c: dcraw original 7.65 2005-09-09 07:17 udifuchs * configure.ac: -Fix bug when libjpeg or libtiff are not installed. 2005-09-09 06:51 nkbj * dcraw.c: Make stand-alone dcraw use new scale_colors() code. 2005-09-09 01:48 nkbj * Makefile.am, configure.ac: Fix build system for stand-alone dcraw. 2005-09-08 05:39 nkbj * README: ./autogen.sh must be used in development version. 2005-09-08 05:35 nkbj * ufraw_routines.c: Update supported RAW file formats. 2005-09-08 02:30 nkbj * dcraw.c: Revert to old scale_colors() (for UFRaw 0.5), second part. 2005-09-08 02:00 nkbj * dcraw.c: Revert to old scale_colors() (for UFRaw 0.5). 2005-09-08 00:44 nkbj * dcraw.c: dcraw modified 7.64 2005-09-08 00:08 nkbj * dcraw.c: dcraw original 7.64 2005-09-07 07:45 nkbj * dcraw.c: dcraw modified 7.63 2005-09-07 03:24 nkbj * dcraw.c: dcraw original 7.63 2005-09-06 02:42 udifuchs * ufraw_conf.c, ufraw_preview.c: -Bug corrections in save configurations. 2005-09-06 00:15 nkbj * dcraw_indi.c: Cosmetic fix. 2005-09-05 17:11 udifuchs * ufraw_chooser.c, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c: Many small bug corrections. 2005-09-05 11:21 udifuchs * configure.ac: -Add sizeof checks for nikon_curve. 2005-09-03 06:00 nkbj * dcraw.c: dcraw modified 7.60 2005-09-03 06:00 nkbj * dcraw_api.c: Update API for dcraw 7.60 2005-09-03 05:18 nkbj * dcraw.c: dcraw original 7.60 2005-09-02 16:40 udifuchs * ufraw_preview.c: Fixed curve-editor refresh with auto black point 2005-09-01 18:47 udifuchs * ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c, ufraw_writer.c: -Fix the conf_save() crash. -Rewrite string manipulation in conf_save(), curve_buffer(). -Bring back the log buffer (was cleared by mistake). 2005-09-01 04:53 udifuchs * README, configure.ac, gimp-2.0.pc, gimpui-2.0.pc: -Update MS-Windows build. 2005-09-01 03:50 udifuchs * nikon_curve.c: -Get rid of global variables and beautify the code a bit. 2005-09-01 01:35 udifuchs * curveeditor_widget.c, nikon_curve.c, nikon_curve.h, ufraw.h, ufraw_developer.c, ufraw_ufraw.c: -Fix error handling in nikon_curve. -Fix "knots must be increasing" crash in nikon_curve. -Fix ufraw_auto_curve() to prevent this error in the first place. -Small change in the shape of the gamma curve. 2005-08-30 17:01 udifuchs * ufraw_chooser.c, ufraw_preview.c: -Add "Reset WB" button. -Allow relative directory when using 'ufraw directory-name'. -Make preview window a bit smaller for 800 pixel high screens. 2005-08-29 19:10 udifuchs * .cvsignore, Makefile.am, configure.ac, ufraw-batch.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw.pod, ufraw_conf.c, ufraw_preview.c, ufraw_ufraw.c, ufraw_writer.c: -Split ufraw and ufraw-batch to two different source files. -Remove the --batch option. -Organize error messaging a bit. -Add man page. 2005-08-29 17:01 udifuchs * Makefile.am, ufraw.desktop, ufraw.png, ufraw_icon.h, ufraw_icon.ico, ufraw_icon.png: -Added ufraw.desktop file. -Renamed ufraw_icon.png to ufraw.png and resized it to 48x48. 2005-08-29 08:16 udifuchs * ufraw-gimp.c: Create an 'icc-profile' parasite in the GIMP plug-in. 2005-08-28 16:52 udifuchs * dcraw.c, dcraw_api.c, dcraw_api.h, ufraw_developer.c, ufraw_ufraw.c: -Fix highlights discolorization. -Fix dark foveon images. 2005-08-25 06:53 nkbj * ufraw.h: Fix prototype. 2005-08-25 02:20 nkbj * dcraw.c: dcraw modified 7.53 2005-08-25 02:18 nkbj * dcraw.c: dcraw original 7.53 2005-08-24 22:45 nkbj * dcraw.c: dcraw modified 7.52 2005-08-24 22:39 nkbj * dcraw.c: dcraw original 7.52 2005-08-23 15:36 udifuchs * ufraw.c: Added --curve-file option (patch from Artur Wroblewski). 2005-08-23 10:03 udifuchs * ufraw.c: Add the --version option. 2005-08-23 08:41 udifuchs * nikon_curve.c, nikon_curve.h, ufraw-gimp.c, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c: Big endian support, take two. 2005-08-22 13:40 nkbj * dcraw.c: dcraw modified 7.51 2005-08-22 13:35 nkbj * dcraw.c: dcraw original 7.51 2005-08-22 11:19 udifuchs * nikon_curve.c, nikon_curve.h: Nikon Curve support for big endian machines. 2005-08-18 23:15 nkbj * ufraw_routines.c: Update supported RAW file formats. 2005-08-18 00:30 nkbj * ufraw_routines.c: Update supported RAW file formats. 2005-08-17 01:00 nkbj * dcraw.c: dcraw modified 7.50 2005-08-17 00:49 nkbj * dcraw.c: dcraw original 7.50 2005-08-13 08:00 nkbj * dcraw.c: dcraw modified 7.49 2005-08-13 07:24 nkbj * dcraw.c: dcraw original 7.49 2005-08-06 13:30 nkbj * dcraw.c: dcraw modified 7.48 2005-08-06 12:55 nkbj * dcraw.c: dcraw original 7.48 2005-07-28 00:30 nkbj * ufraw_preview.c, ufraw_routines.c: Set correct gamma for Nikon D100 input profile. 2005-07-27 23:45 nkbj * README, ufraw_preview.c: Fix some more typos. 2005-07-27 05:01 nkbj * README, dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw.h, ufraw_conf.c, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: Fix various typos in comments etc. 2005-07-27 00:30 nkbj * dcraw.c: dcraw modified 7.43 2005-07-26 23:38 nkbj * dcraw.c: dcraw original 7.43 2005-07-26 10:56 nkbj * ufraw.h, ufraw_preview.c, ufraw_saver.c: Make ufraw.h independent of gtk. 2005-07-26 01:05 nkbj * ufraw.h, ufraw_preview.c, ufraw_saver.c: Show hidden files optionally in all open/save dialogues. 2005-07-24 17:45 udifuchs * ufraw-gimp.c, ufraw.c, ufraw_chooser.c, ufraw_conf.c, ufraw_routines.c: - Load .ufrawrc before every image. - Show hidden files optionally. - Add XML header to ID files. 2005-07-22 10:42 udifuchs * ufraw-gimp.c, ufraw_ufraw.c, ufraw_routines.c: - Fixed ChannelMultipliers normalization in Manual WB. - Updated list of supported extensions (added DNG). - Small corrections to the plug-in. 2005-07-21 17:23 udifuchs * dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw-gimp.c, ufraw_ufraw.c: - Changed back the size of fuji images to the conservative size. - Support Gimp 2.2 thumbnail API. 2005-07-21 08:42 udifuchs * ufraw-setup.iss.in: Modified text in windows installer. 2005-07-20 18:55 udifuchs * ufraw.c, ufraw.h, ufraw_conf.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: - Create outputPath in conf_save(). - If needed, set "C" locale while creating config. - Added saveConfiguration combo in options. 2005-07-17 19:00 udifuchs * Makefile.am, dcraw_api.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_conf.c, ufraw_developer.c, ufraw_exif.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: - Reorginized all configuration issues. - Reading ID files is supported. - Added --conf option. 2005-07-15 14:54 udifuchs * ufraw_saver.c: Fix memory leak if file exists. 2005-07-15 08:04 udifuchs * ufraw_preview.c, ufraw_routines.c, ufraw_saver.c: Fix some more filename/utf8 conversions 2005-07-14 04:48 udifuchs * ufraw_preview.c: Stabilize utf-8 a bit. 2005-07-14 04:44 udifuchs * dcraw.c: dcraw modified 7.42 2005-07-14 04:38 udifuchs * dcraw.c: dcraw original 7.42 2005-07-13 09:18 udifuchs * curveeditor_widget.c, ufraw_preview.c: - Set depth of pixbuf according to display. - Add g_filename_to_utf8() for window header. 2005-07-08 10:01 udifuchs * dcraw.c: dcraw modified 7.39 2005-07-08 09:53 udifuchs * dcraw.c: dcraw original 7.39 2005-07-05 11:02 udifuchs * dcraw_api.c, ufraw.c: - Support --curve on curves from ~/.ufrawrc (patch by Tomasz). - Fix image shrink artifacts. 2005-07-04 10:38 udifuchs * dcraw_api.c, ufraw_preview.c: - Fix colors in raw histogram. - Fix foveon support. 2005-07-04 06:48 udifuchs * configure.ac: Fix default prefix back to /usr/local 2005-07-02 15:07 udifuchs * configure.ac, ufraw.c, ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c: - use apply_state enum instead of nan() to signal when auto exposure/black has to be calculated. - correct (gint64) casting in develope(). - Moved interpolation combo-box from save-as to main window. - fix appearence of a ghost profile in input-profile combo. - Added a 'Save default configuration' option. 2005-06-30 17:12 udifuchs * TODO, configure.ac, dcraw.c, dcraw_api.c, dcraw_api.h, dcraw_indi.c, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_chooser.c, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: - Support dcraw's color matrices. - Major change in dcraw_data and ufraw_data (was image_data) which simplifies the code. - Improved auto-curve behavior. - The correction curve now controls the value (preserving saturation and hue). - Added "Manual curve". - Fixed multi file output in ufraw-batch, - Fixed mingw32 build - Fixed Options menu for 64-bits. 2005-06-22 12:14 udifuchs * Makefile.am, autogen.sh: - Makefile.am now supports automake-1.5 or heigher. - autogen.sh tries to find the right automake. ('automake' itself might point to an older version.) 2005-06-20 18:00 udifuchs * curveeditor_widget.c, nikon_curve.c, nikon_curve.h, ufraw-gimp.c, ufraw.c, ufraw.h, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c: * Freeze preview correctly while processing image. * Inactivate reset buttons when value is already reset. * Add auto curve calculation. * Get rid of global variables in ufraw_preview.c 2005-06-17 09:59 udifuchs * dcraw_api.c: Fixed Foveon X3F raw support 2005-06-16 07:44 udifuchs * ufraw_writer.c: Fixed output to stdout 2005-06-15 10:56 udifuchs * Makefile.am, configure.ac, iccjpeg.c: Better support for older version of automake. 2005-06-14 18:32 udifuchs * curveeditor_widget.c, nikon_curve.c, nikon_curve.h, ufraw.c, ufraw.h, ufraw_developer.c, ufraw_preview.c, ufraw_routines.c, ufraw_ufraw.c: -Moved black-point functionality into curve editor. -Removed contrast control. -Preview window should look better on 1024x768 screens. -Fixed black output in batch mode. 2005-06-14 08:56 udifuchs * Makefile.am, README, configure.ac, ufraw_saver.c: Fix build when JPEG is disabled. 2005-06-14 05:16 udifuchs * nikon_curve.c, nikon_curve.h: Added casts and comments. (Shawn) 2005-06-13 17:11 udifuchs * README, TODO: Documentation changes 2005-06-13 07:12 udifuchs * ufraw_preview.c, ufraw_routines.c: Fix crash in Save. 2005-06-11 18:01 udifuchs * ufraw-setup.jpg, ufraw_icon.ico, ufraw_icon.png: Initial import of binary files. 2005-06-11 17:58 udifuchs * dcraw.c: UFRaw's modified version of dcraw.c 7.30. 2005-06-11 17:49 udifuchs * dcraw.c: Dave Coffin's original dcraw.c version 7.30. 2005-06-11 17:39 udifuchs * autogen.sh, blackbody.h, configure.ac, COPYING, curveeditor_widget.c, curveeditor_widget.h, dcraw_api.c, dcraw_api.h, dcraw_indi.c, gimp-2.0.pc, gimpui-2.0.pc, Makefile.am, iccjpeg.c, iccjpeg.h, MANIFEST, nikon_curve.c, README, TODO, nikon_curve.h, ufraw_chooser.c, ufraw_developer.c, ufraw_exif.c, ufraw_icon.h, ufraw_icon.rc, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, ufraw.c, ufraw.h, .cvsignore, ufraw-gimp.c, ufraw-setup.iss.in: Initial import. 2005-06-11 17:39 udifuchs * autogen.sh, blackbody.h, configure.ac, COPYING, curveeditor_widget.c, curveeditor_widget.h, dcraw_api.c, dcraw_api.h, dcraw_indi.c, gimp-2.0.pc, gimpui-2.0.pc, Makefile.am, iccjpeg.c, iccjpeg.h, MANIFEST, nikon_curve.c, README, TODO, nikon_curve.h, ufraw_chooser.c, ufraw_developer.c, ufraw_exif.c, ufraw_icon.h, ufraw_icon.rc, ufraw_preview.c, ufraw_routines.c, ufraw_saver.c, ufraw_ufraw.c, ufraw_writer.c, ufraw.c, ufraw.h, .cvsignore, ufraw-gimp.c, ufraw-setup.iss.in: Initial revision ufraw-0.20/dcraw.h0000644000175000017500000002517012360046724010762 00000000000000/* dcraw.h - Dave Coffin's raw photo decoder - header for C++ adaptation Copyright 1997-2014 by Dave Coffin, dcoffin a cybercom o net Copyright 2004-2014 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, xtrans[6][6], xtrans_abs[6][6]; 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; off_t strip_offset, data_offset; off_t thumb_offset, meta_offset, profile_offset; unsigned shot_order, kodak_cbpp, exif_cfa, unique_id; 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, 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; unsigned flip, tiff_flip, filters, colors; 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], cblack[4102]; ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; double pixel_aspect, aber[4], gamm[6]; float bright, user_mul[4], threshold; int mask[8][4]; 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, tag_21a; int black, split_col, black_col, split_row, black_row; 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 cubic_spline(const int *x_, const int *y_, const int len); 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(); void canon_rmf_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 samsung_load_raw(); void samsung2_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(int 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(float rgb_cam[3][4], 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(unsigned border); void lin_interpolate(); void vng_interpolate(); void ppg_interpolate(); void cielab(ushort rgb[3], short lab[3]); void xtrans_interpolate(int passes); 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, int depth); 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.20/README0000644000175000017500000006250712410700153010363 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 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 (lcms 2.x is used if found). 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 all optional dependencies are present it will look like this: configure: ====================== summary ===================== configure: color management support: lcms 2.x configure: build GTK GUI: yes configure: build GIMP 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 support using 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. 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-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 plugin, if built, will be installed into UFRaw's prefix. Thus, if UFRaw's prefix is different from GIMP's prefix, you may have to add the plugin directory to the search path, add a symbolic link, 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 (version 2.57 or higher) and automake (version 1.5 or higher) 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(), cielab(), xtrans_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 ======= 24/09/2014 - UFRaw-0.20 released, based on DCRaw v 9.22. * Fuji X-Trans filters are finally supported. 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.20/configure0000775000175000017500000103644612401246460011426 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for UFRaw 0.20. # # # 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.20' PACKAGE_STRING='UFRaw 0.20' 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 GIMP_LIBDIR MAKE_GIMP_FALSE MAKE_GIMP_TRUE MAKE_GTK_FALSE MAKE_GTK_TRUE 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 LCMS1_LIBS LCMS1_CFLAGS LCMS2_LIBS LCMS2_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 enable_no_cygwin with_dosprefix enable_mime enable_extras enable_dst_correction enable_contrast 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 LCMS2_CFLAGS LCMS2_LIBS LCMS1_CFLAGS LCMS1_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 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.20 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.20:";; 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") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --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-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-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 LCMS2_CFLAGS C compiler flags for LCMS2, overriding pkg-config LCMS2_LIBS linker flags for LCMS2, overriding pkg-config LCMS1_CFLAGS C compiler flags for LCMS1, overriding pkg-config LCMS1_LIBS linker flags for LCMS1, 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 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.20 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.20, 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.14' # 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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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 --is-lightweight"; then am_missing_run="$MISSING " 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; } 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 # 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=1;; 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='\' 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.20' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 10 /bin/sh. echo '/* dummy */' > 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 10 /bin/sh. echo '/* dummy */' > 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 ac_func in strcasecmp do : ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCASECMP 1 _ACEOF fi done for ac_func in strcasestr do : ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCASESTR 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 LCMS2" >&5 $as_echo_n "checking for LCMS2... " >&6; } if test -n "$LCMS2_CFLAGS"; then pkg_cv_LCMS2_CFLAGS="$LCMS2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms2\""; } >&5 ($PKG_CONFIG --exists --print-errors "lcms2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCMS2_CFLAGS=`$PKG_CONFIG --cflags "lcms2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LCMS2_LIBS"; then pkg_cv_LCMS2_LIBS="$LCMS2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms2\""; } >&5 ($PKG_CONFIG --exists --print-errors "lcms2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCMS2_LIBS=`$PKG_CONFIG --libs "lcms2" 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 LCMS2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms2" 2>&1` else LCMS2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LCMS2_PKG_ERRORS" >&5 have_lcms="lcms 2.x not found" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_lcms="lcms 2.x not found" else LCMS2_CFLAGS=$pkg_cv_LCMS2_CFLAGS LCMS2_LIBS=$pkg_cv_LCMS2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_lcms="lcms 2.x" $as_echo "#define HAVE_LCMS2 1" >>confdefs.h LCMS_CFLAGS="$LCMS2_CFLAGS" LCMS_LIBS="$LCMS2_LIBS" fi if test "x$have_lcms" != "xlcms 2.x"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS1" >&5 $as_echo_n "checking for LCMS1... " >&6; } if test -n "$LCMS1_CFLAGS"; then pkg_cv_LCMS1_CFLAGS="$LCMS1_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_LCMS1_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 "$LCMS1_LIBS"; then pkg_cv_LCMS1_LIBS="$LCMS1_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_LCMS1_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 LCMS1_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms >= 1.14" 2>&1` else LCMS1_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 "$LCMS1_PKG_ERRORS" >&5 as_fn_error $? "can not build UFRaw without lcms" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "can not build UFRaw without lcms" "$LINENO" 5 else LCMS1_CFLAGS=$pkg_cv_LCMS1_CFLAGS LCMS1_LIBS=$pkg_cv_LCMS1_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_lcms="lcms 1.x" $as_echo "#define HAVE_LCMS1 1" >>confdefs.h LCMS_CFLAGS="$LCMS1_CFLAGS" LCMS_LIBS="$LCMS1_LIBS" fi 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 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 plugin # in the corresponding place in our prefix, or in GIMP's # lib dir in its prefix. Currently, we install the # plugin in our prefix. If the GIMP 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 # 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 # 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 '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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 "${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.20, 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.20 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"" || { # Older Autoconf 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"` # 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'`; 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}: color management support: $have_lcms" >&5 $as_echo "$as_me: color management support: $have_lcms" >&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}: 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 support using lensfun: $have_lensfun" >&5 $as_echo "$as_me: lens defects correction support using lensfun: $have_lensfun" >&6;} ufraw-0.20/ufraw-mime.xml0000644000175000017500000001623612113304360012274 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.20/ufraw_lens_ui.c0000644000175000017500000007251212303017427012514 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-2014 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.20/wb_presets.c0000644000175000017500000202706012407166374012042 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * wb_presets.c - White balance preset values for various cameras * Copyright 2004-2014 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 } }, /* -9/+9 fine tuning is B9/A9 in blue-amber and zero in magenta-green */ { "Canon", "PowerShot SX50 HS", Daylight, -9, { 1.260171, 1, 2.286938, 0 } }, { "Canon", "PowerShot SX50 HS", Daylight, 0, { 1.502585, 1, 1.871768, 0 } }, { "Canon", "PowerShot SX50 HS", Daylight, 9, { 1.868853, 1, 1.460041, 0 } }, { "Canon", "PowerShot SX50 HS", Cloudy, -9, { 1.413865, 1, 1.962185, 0 } }, { "Canon", "PowerShot SX50 HS", Cloudy, 0, { 1.767708, 1, 1.563542, 0 } }, { "Canon", "PowerShot SX50 HS", Cloudy, 9, { 2.782759, 1, 1.100000, 0 } }, { "Canon", "PowerShot SX50 HS", Tungsten, -9, { 1, 1.092348, 3.565963, 0 } }, { "Canon", "PowerShot SX50 HS", Tungsten, 0, { 1.056582, 1, 2.853349, 0 } }, { "Canon", "PowerShot SX50 HS", Tungsten, 9, { 1.251378, 1, 2.389195, 0 } }, { "Canon", "PowerShot SX50 HS", Fluorescent, -9, { 1.197637, 1, 2.493018, 0 } }, { "Canon", "PowerShot SX50 HS", Fluorescent, 0, { 1.383910, 1, 2.011202, 0 } }, { "Canon", "PowerShot SX50 HS", Fluorescent, 9, { 1.677323, 1, 1.619381, 0 } }, { "Canon", "PowerShot SX50 HS", FluorescentHigh, -9, { 1.468421, 1, 1.918947, 0 } }, { "Canon", "PowerShot SX50 HS", FluorescentHigh, 0, { 1.805208, 1, 1.527083, 0 } }, { "Canon", "PowerShot SX50 HS", FluorescentHigh, 9, { 3.464467, 1, 1.029188, 0 } }, { "Canon", "PowerShot SX50 HS", Flash, -9, { 1.488683, 1, 1.777778, 0 } }, { "Canon", "PowerShot SX50 HS", Flash, 0, { 1.876289, 1, 1.398969, 0 } }, { "Canon", "PowerShot SX50 HS", Flash, 9, { 4.536036, 1.073574, 1, 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 70D Firmware Version 1.1.1 */ { "Canon", "EOS 70D", Daylight, 0, { 2.068359, 1, 1.672852, 0 } }, { "Canon", "EOS 70D", Shade, 0, { 2.403320, 1, 1.446289, 0 } }, { "Canon", "EOS 70D", Cloudy, 0, { 2.226563, 1, 1.551758, 0 } }, { "Canon", "EOS 70D", Tungsten, 0, { 1.448242, 1, 2.409180, 0 } }, { "Canon", "EOS 70D", Fluorescent, 0, { 1.790039, 1, 2.280273, 0 } }, { "Canon", "EOS 70D", Flash, 0, { 2.286133, 1, 1.548828, 0 } }, // Copied from Canon EOS 650D { "Canon", "EOS 100D", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS 100D", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS 100D", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS 100D", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS 100D", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS 100D", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS 100D", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS 100D", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS 100D", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS 100D", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS 100D", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS 100D", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS 100D", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS 100D", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS 100D", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS 100D", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS 100D", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS 100D", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS REBEL SL1", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS REBEL SL1", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS REBEL SL1", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS REBEL SL1", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS REBEL SL1", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS REBEL SL1", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS REBEL SL1", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS REBEL SL1", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS REBEL SL1", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS REBEL SL1", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS REBEL SL1", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS REBEL SL1", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS REBEL SL1", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS REBEL SL1", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS REBEL SL1", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS REBEL SL1", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS REBEL SL1", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS REBEL SL1", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS Kiss X7", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS Kiss X7", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS Kiss X7", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS Kiss X7", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS Kiss X7", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS Kiss X7", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS Kiss X7", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS Kiss X7", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS Kiss X7", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS Kiss X7", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS Kiss X7", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS Kiss X7", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS Kiss X7", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS Kiss X7", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS Kiss X7", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS Kiss X7", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS Kiss X7", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS Kiss X7", Flash, 3, { 2.3701, 1, 1.4502, 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 X2", Daylight, 0, { 2.216797, 1, 1.471680, 0 } }, { "Canon", "EOS Kiss X2", Shade, 0, { 2.566406, 1, 1.241211, 0 } }, { "Canon", "EOS Kiss X2", Cloudy, 0, { 2.386719, 1, 1.345703, 0 } }, { "Canon", "EOS Kiss X2", Tungsten, 0, { 1.559034, 1, 2.170841, 0 } }, { "Canon", "EOS Kiss X2", Fluorescent, 0, { 1.922857, 1, 1.996190, 0 } }, { "Canon", "EOS Kiss 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 X3", Daylight, 0, { 2.023438, 1, 1.417969, 0 } }, { "Canon", "EOS Kiss X3", Shade, 0, { 2.291016, 1, 1.217773, 0 } }, { "Canon", "EOS Kiss X3", Cloudy, 0, { 2.156250, 1, 1.304687, 0 } }, { "Canon", "EOS Kiss X3", Tungsten, 0, { 1.481347, 1, 1.976342, 0 } }, { "Canon", "EOS Kiss X3", Fluorescent, 0, { 1.799224, 1, 1.824442, 0 } }, { "Canon", "EOS Kiss 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 X4", Daylight, -9, { 1.903320, 1, 1.784180, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -8, { 1.924805, 1, 1.756836, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -7, { 1.950195, 1, 1.729492, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -6, { 1.980469, 1, 1.701172, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -5, { 2.007813, 1, 1.672852, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -4, { 2.040039, 1, 1.646484, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -3, { 2.064453, 1, 1.615234, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -2, { 2.089844, 1, 1.587891, 0 } }, { "Canon", "EOS Kiss X4", Daylight, -1, { 2.120117, 1, 1.556641, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 0, { 2.146484, 1, 1.526367, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 1, { 2.178711, 1, 1.503906, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 2, { 2.211914, 1, 1.481445, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 3, { 2.246094, 1, 1.458984, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 4, { 2.280273, 1, 1.436523, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 5, { 2.316406, 1, 1.412109, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 6, { 2.342773, 1, 1.391602, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 7, { 2.375977, 1, 1.373047, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 8, { 2.409180, 1, 1.350586, 0 } }, { "Canon", "EOS Kiss X4", Daylight, 9, { 2.444336, 1, 1.328125, 0 } }, { "Canon", "EOS Kiss X4", Shade, -9, { 2.173828, 1, 1.507813, 0 } }, { "Canon", "EOS Kiss X4", Shade, -8, { 2.207031, 1, 1.484375, 0 } }, { "Canon", "EOS Kiss X4", Shade, -7, { 2.240234, 1, 1.460938, 0 } }, { "Canon", "EOS Kiss X4", Shade, -6, { 2.275391, 1, 1.438477, 0 } }, { "Canon", "EOS Kiss X4", Shade, -5, { 2.311523, 1, 1.414063, 0 } }, { "Canon", "EOS Kiss X4", Shade, -4, { 2.342773, 1, 1.395508, 0 } }, { "Canon", "EOS Kiss X4", Shade, -3, { 2.370117, 1, 1.374023, 0 } }, { "Canon", "EOS Kiss X4", Shade, -2, { 2.403320, 1, 1.352539, 0 } }, { "Canon", "EOS Kiss X4", Shade, -1, { 2.444336, 1, 1.332031, 0 } }, { "Canon", "EOS Kiss X4", Shade, 0, { 2.479492, 1, 1.307617, 0 } }, { "Canon", "EOS Kiss X4", Shade, 1, { 2.509766, 1, 1.292969, 0 } }, { "Canon", "EOS Kiss X4", Shade, 2, { 2.541016, 1, 1.276367, 0 } }, { "Canon", "EOS Kiss X4", Shade, 3, { 2.573242, 1, 1.259766, 0 } }, { "Canon", "EOS Kiss X4", Shade, 4, { 2.612305, 1, 1.241211, 0 } }, { "Canon", "EOS Kiss X4", Shade, 5, { 2.645508, 1, 1.223633, 0 } }, { "Canon", "EOS Kiss X4", Shade, 6, { 2.673828, 1, 1.206055, 0 } }, { "Canon", "EOS Kiss X4", Shade, 7, { 2.702148, 1, 1.187500, 0 } }, { "Canon", "EOS Kiss X4", Shade, 8, { 2.738281, 1, 1.168945, 0 } }, { "Canon", "EOS Kiss X4", Shade, 9, { 2.782227, 1, 1.148438, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -9, { 2.043945, 1, 1.640625, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -8, { 2.068359, 1, 1.612305, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -7, { 2.093750, 1, 1.583008, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -6, { 2.120117, 1, 1.553711, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -5, { 2.151367, 1, 1.523438, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -4, { 2.183594, 1, 1.501953, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -3, { 2.216797, 1, 1.477539, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -2, { 2.250977, 1, 1.454102, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, -1, { 2.280273, 1, 1.432617, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 0, { 2.316406, 1, 1.408203, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 1, { 2.348633, 1, 1.389648, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 2, { 2.381836, 1, 1.369141, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 3, { 2.415039, 1, 1.347656, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 4, { 2.450195, 1, 1.326172, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 5, { 2.491211, 1, 1.304688, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 6, { 2.515625, 1, 1.290039, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 7, { 2.546875, 1, 1.272461, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 8, { 2.579102, 1, 1.254883, 0 } }, { "Canon", "EOS Kiss X4", Cloudy, 9, { 2.619141, 1, 1.236328, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -9, { 1.345703, 1, 2.605469, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -8, { 1.361328, 1, 2.579102, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -7, { 1.379883, 1, 2.546875, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -6, { 1.398438, 1, 2.515625, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -5, { 1.417969, 1, 2.491211, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -4, { 1.440430, 1, 2.456055, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -3, { 1.460938, 1, 2.409180, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -2, { 1.479492, 1, 2.365234, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, -1, { 1.503906, 1, 2.322266, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 0, { 1.526367, 1, 2.275391, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 1, { 1.546875, 1, 2.240234, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 2, { 1.568359, 1, 2.207031, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 3, { 1.589844, 1, 2.169922, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 4, { 1.612305, 1, 2.137695, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 5, { 1.638672, 1, 2.102539, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 6, { 1.662109, 1, 2.068359, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 7, { 1.684570, 1, 2.032227, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 8, { 1.707031, 1, 2.000000, 0 } }, { "Canon", "EOS Kiss X4", Tungsten, 9, { 1.732422, 1, 1.965820, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -9, { 1.662109, 1, 2.473633, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -8, { 1.684570, 1, 2.432617, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -7, { 1.709961, 1, 2.392578, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -6, { 1.735352, 1, 2.342773, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -5, { 1.762695, 1, 2.300781, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -4, { 1.787109, 1, 2.260742, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -3, { 1.812500, 1, 2.226563, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -2, { 1.841797, 1, 2.188477, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, -1, { 1.872070, 1, 2.156250, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 0, { 1.899414, 1, 2.115234, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 1, { 1.924805, 1, 2.081055, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 2, { 1.950195, 1, 2.051758, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 3, { 1.976563, 1, 2.015625, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 4, { 2.007813, 1, 1.984375, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 5, { 2.040039, 1, 1.950195, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 6, { 2.064453, 1, 1.920898, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 7, { 2.089844, 1, 1.889648, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 8, { 2.120117, 1, 1.862305, 0 } }, { "Canon", "EOS Kiss X4", WhiteFluorescent, 9, { 2.146484, 1, 1.832031, 0 } }, { "Canon", "EOS Kiss X4", Flash, -9, { 2.098633, 1, 1.625000, 0 } }, { "Canon", "EOS Kiss X4", Flash, -8, { 2.124023, 1, 1.594727, 0 } }, { "Canon", "EOS Kiss X4", Flash, -7, { 2.156250, 1, 1.565430, 0 } }, { "Canon", "EOS Kiss X4", Flash, -6, { 2.188477, 1, 1.535156, 0 } }, { "Canon", "EOS Kiss X4", Flash, -5, { 2.221680, 1, 1.510742, 0 } }, { "Canon", "EOS Kiss X4", Flash, -4, { 2.255859, 1, 1.488281, 0 } }, { "Canon", "EOS Kiss X4", Flash, -3, { 2.286133, 1, 1.464844, 0 } }, { "Canon", "EOS Kiss X4", Flash, -2, { 2.322266, 1, 1.442383, 0 } }, { "Canon", "EOS Kiss X4", Flash, -1, { 2.354492, 1, 1.419922, 0 } }, { "Canon", "EOS Kiss X4", Flash, 0, { 2.381836, 1, 1.397461, 0 } }, { "Canon", "EOS Kiss X4", Flash, 1, { 2.420898, 1, 1.377930, 0 } }, { "Canon", "EOS Kiss X4", Flash, 2, { 2.456055, 1, 1.356445, 0 } }, { "Canon", "EOS Kiss X4", Flash, 3, { 2.491211, 1, 1.334961, 0 } }, { "Canon", "EOS Kiss X4", Flash, 4, { 2.522461, 1, 1.312500, 0 } }, { "Canon", "EOS Kiss X4", Flash, 5, { 2.553711, 1, 1.295898, 0 } }, { "Canon", "EOS Kiss X4", Flash, 6, { 2.585938, 1, 1.280273, 0 } }, { "Canon", "EOS Kiss X4", Flash, 7, { 2.625977, 1, 1.262695, 0 } }, { "Canon", "EOS Kiss X4", Flash, 8, { 2.653320, 1, 1.244141, 0 } }, { "Canon", "EOS Kiss 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 X5", Daylight, 0, { 2.235352, 1, 1.612305, 0 } }, { "Canon", "EOS Kiss X5", Shade, 0, { 2.592773, 1, 1.377930, 0 } }, { "Canon", "EOS Kiss X5", Cloudy, 0, { 2.409180, 1, 1.486328, 0 } }, { "Canon", "EOS Kiss X5", Tungsten, 0, { 1.597656, 1, 2.409180, 0 } }, { "Canon", "EOS Kiss X5", Fluorescent, 0, { 1.958008, 1, 2.260742, 0 } }, { "Canon", "EOS Kiss 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 X6i", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS Kiss X6i", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS Kiss X6i", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS Kiss X6i", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS Kiss X6i", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS Kiss X6i", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS Kiss X6i", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS Kiss X6i", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS Kiss X6i", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS Kiss X6i", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS Kiss X6i", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS Kiss X6i", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS Kiss X6i", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS Kiss X6i", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS Kiss X6i", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS Kiss X6i", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS Kiss X6i", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS Kiss X6i", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, // Copied from Canon EOS 650D { "Canon", "EOS 700D", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS 700D", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS 700D", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS 700D", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS 700D", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS 700D", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS 700D", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS 700D", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS 700D", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS 700D", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS 700D", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS 700D", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS 700D", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS 700D", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS 700D", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS 700D", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS 700D", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS 700D", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS REBEL T5i", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS REBEL T5i", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS REBEL T5i", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS REBEL T5i", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS REBEL T5i", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS REBEL T5i", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS REBEL T5i", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS REBEL T5i", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS REBEL T5i", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS REBEL T5i", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS REBEL T5i", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS REBEL T5i", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS REBEL T5i", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS REBEL T5i", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS REBEL T5i", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS REBEL T5i", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS REBEL T5i", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS REBEL T5i", Flash, 3, { 2.3701, 1, 1.4502, 0 } }, { "Canon", "EOS Kiss X7i", Daylight, -3, { 1.9502, 1, 1.7539, 0 } }, { "Canon", "EOS Kiss X7i", Daylight, 0, { 2.0322, 1, 1.6572, 0 } }, { "Canon", "EOS Kiss X7i", Daylight, 3, { 2.1152, 1, 1.5850, 0 } }, { "Canon", "EOS Kiss X7i", Shade, -3, { 2.2305, 1, 1.4951, 0 } }, { "Canon", "EOS Kiss X7i", Shade, 0, { 2.3379, 1, 1.4238, 0 } }, { "Canon", "EOS Kiss X7i", Shade, 3, { 2.4443, 1, 1.3604, 0 } }, { "Canon", "EOS Kiss X7i", Cloudy, -3, { 2.0898, 1, 1.6074, 0 } }, { "Canon", "EOS Kiss X7i", Cloudy, 0, { 2.1787, 1, 1.5332, 0 } }, { "Canon", "EOS Kiss X7i", Cloudy, 3, { 2.2705, 1, 1.4668, 0 } }, { "Canon", "EOS Kiss X7i", Tungsten, -3, { 1.3975, 1, 2.5928, 0 } }, { "Canon", "EOS Kiss X7i", Tungsten, 0, { 1.4541, 1, 2.4561, 0 } }, { "Canon", "EOS Kiss X7i", Tungsten, 3, { 1.5127, 1, 2.3428, 0 } }, { "Canon", "EOS Kiss X7i", Fluorescent, -3, { 1.6982, 1, 2.4268, 0 } }, { "Canon", "EOS Kiss X7i", Fluorescent, 0, { 1.7715, 1, 2.3066, 0 } }, { "Canon", "EOS Kiss X7i", Fluorescent, 3, { 1.8486, 1, 2.1973, 0 } }, { "Canon", "EOS Kiss X7i", Flash, -3, { 2.1699, 1, 1.5879, 0 } }, { "Canon", "EOS Kiss X7i", Flash, 0, { 2.2607, 1, 1.5166, 0 } }, { "Canon", "EOS Kiss X7i", 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-1D X Firmware Version 1.0.6 */ { "Canon", "EOS-1D X", Daylight, 0, { 1.943359, 1, 1.374023, 0 } }, { "Canon", "EOS-1D X", Shade, 0, { 2.230469, 1, 1.175781, 0 } }, { "Canon", "EOS-1D X", Cloudy, 0, { 2.085938, 1, 1.268555, 0 } }, { "Canon", "EOS-1D X", Tungsten, 0, { 1.385742, 1, 2.068359, 0 } }, { "Canon", "EOS-1D X", Fluorescent, 0, { 1.726563, 1, 1.950195, 0 } }, { "Canon", "EOS-1D X", Flash, 0, { 2.173828, 1, 1.239258, 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 } }, /* Fujifilm X100S firmware 1.10 */ { "FUJIFILM", "X100S", Daylight, 0, { 1.850993, 1, 1.533113, 0 } }, { "FUJIFILM", "X100S", Shade, 0, { 2.029801, 1, 1.324503, 0 } }, { "FUJIFILM", "X100S", DaylightFluorescent, 0, { 2.324503, 1, 1.317881, 0 } }, { "FUJIFILM", "X100S", WarmWhiteFluorescent, 0, { 1.976821, 1, 1.549669, 0 } }, { "FUJIFILM", "X100S", CoolWhiteFluorescent, 0, { 1.850993, 1, 1.933775, 0 } }, { "FUJIFILM", "X100S", Incandescent, 0, { 1.172185, 1, 2.341060, 0 } }, { "FUJIFILM", "X100S", Underwater, 0, { 1.850993, 1, 1.533113, 0 } }, { "FUJIFILM", "X100S", "2500K", 0, { 0.907285, 1, 3.331126, 0 } }, { "FUJIFILM", "X100S", "2700K", 0, { 0.976821, 1, 2.930464, 0 } }, { "FUJIFILM", "X100S", "3000K", 0, { 1.096026, 1, 2.509934, 0 } }, { "FUJIFILM", "X100S", "3300K", 0, { 1.218543, 1, 2.228477, 0 } }, { "FUJIFILM", "X100S", "5000K", 0, { 1.751656, 1, 1.559603, 0 } }, { "FUJIFILM", "X100S", "5000K", 0, { 1.751656, 1, 1.559603, 0 } }, { "FUJIFILM", "X100S", "5600K", 0, { 1.880795, 1, 1.460265, 0 } }, { "FUJIFILM", "X100S", "6700K", 0, { 2.059603, 1, 1.334437, 0 } }, { "FUJIFILM", "X100S", "10000K", 0, { 2.370861, 1, 1.132450, 0 } }, /* FUJIFILM X-E1 Firmware Version 1.01 */ // The manual calls it "Direct sunlight". { "FUJIFILM", "X-E1", Daylight, 0, { 1.821192, 1, 1.804636, 0 } }, // The manual calls it "Shade", but exiftool shows it as "Cloudy". { "FUJIFILM", "X-E1", Shade, 0, { 2.039735, 1, 1.572848, 0 } }, { "FUJIFILM", "X-E1", DaylightFluorescent, 0, { 2.321192, 1, 1.566225, 0 } }, { "FUJIFILM", "X-E1", WarmWhiteFluorescent, 0, { 1.966887, 1, 1.837748, 0 } }, { "FUJIFILM", "X-E1", CoolWhiteFluorescent, 0, { 1.847682, 1, 2.317881, 0 } }, { "FUJIFILM", "X-E1", Incandescent, 0, { 1.165563, 1, 2.920530, 0 } }, { "FUJIFILM", "X-E1", Underwater, 0, { 1.821192, 1, 1.804636, 0 } }, { "FUJIFILM", "X-E1", "2500K", 0, { 0.980132, 1, 3.427152, 0 } }, { "FUJIFILM", "X-E1", "2550K", 0, { 1.009934, 1, 3.334437, 0 } }, { "FUJIFILM", "X-E1", "2650K", 0, { 1.059603, 1, 3.165563, 0 } }, { "FUJIFILM", "X-E1", "2700K", 0, { 1.082781, 1, 3.086093, 0 } }, { "FUJIFILM", "X-E1", "2800K", 0, { 1.125828, 1, 2.950331, 0 } }, { "FUJIFILM", "X-E1", "2850K", 0, { 1.145695, 1, 2.887417, 0 } }, { "FUJIFILM", "X-E1", "2950K", 0, { 1.182119, 1, 2.771523, 0 } }, { "FUJIFILM", "X-E1", "3000K", 0, { 1.201987, 1, 2.718543, 0 } }, { "FUJIFILM", "X-E1", "3100K", 0, { 1.235099, 1, 2.622517, 0 } }, { "FUJIFILM", "X-E1", "3200K", 0, { 1.271523, 1, 2.536424, 0 } }, { "FUJIFILM", "X-E1", "3300K", 0, { 1.304636, 1, 2.456954, 0 } }, { "FUJIFILM", "X-E1", "3400K", 0, { 1.334437, 1, 2.387417, 0 } }, { "FUJIFILM", "X-E1", "3600K", 0, { 1.397351, 1, 2.261589, 0 } }, { "FUJIFILM", "X-E1", "3700K", 0, { 1.430464, 1, 2.205298, 0 } }, { "FUJIFILM", "X-E1", "3800K", 0, { 1.460265, 1, 2.152318, 0 } }, { "FUJIFILM", "X-E1", "4000K", 0, { 1.523179, 1, 2.062914, 0 } }, { "FUJIFILM", "X-E1", "4200K", 0, { 1.582781, 1, 1.980132, 0 } }, { "FUJIFILM", "X-E1", "4300K", 0, { 1.612583, 1, 1.943709, 0 } }, { "FUJIFILM", "X-E1", "4500K", 0, { 1.672185, 1, 1.874172, 0 } }, { "FUJIFILM", "X-E1", "4800K", 0, { 1.758278, 1, 1.784768, 0 } }, { "FUJIFILM", "X-E1", "5000K", 0, { 1.814570, 1, 1.731788, 0 } }, { "FUJIFILM", "X-E1", "5300K", 0, { 1.897351, 1, 1.658940, 0 } }, { "FUJIFILM", "X-E1", "5600K", 0, { 1.973510, 1, 1.596026, 0 } }, { "FUJIFILM", "X-E1", "5900K", 0, { 2.049669, 1, 1.536424, 0 } }, { "FUJIFILM", "X-E1", "6300K", 0, { 2.149007, 1, 1.466887, 0 } }, { "FUJIFILM", "X-E1", "6700K", 0, { 2.238411, 1, 1.403974, 0 } }, { "FUJIFILM", "X-E1", "7100K", 0, { 2.324503, 1, 1.350993, 0 } }, { "FUJIFILM", "X-E1", "7700K", 0, { 2.447020, 1, 1.274834, 0 } }, { "FUJIFILM", "X-E1", "8300K", 0, { 2.556291, 1, 1.211921, 0 } }, { "FUJIFILM", "X-E1", "9100K", 0, { 2.688742, 1, 1.135762, 0 } }, { "FUJIFILM", "X-E1", "10000K", 0, { 2.821192, 1, 1.062914, 0 } }, /* FUJIFILM X-T1 Firmware Version 1.10 */ { "FUJIFILM", "X-T1", Daylight, 0, { 1.894040, 1, 1.569536, 0 } }, // The manual calls it "Shade", but exiftool shows it as "Cloudy". { "FUJIFILM", "X-T1", Shade, 0, { 2.092715, 1, 1.347682, 0 } }, { "FUJIFILM", "X-T1", DaylightFluorescent, 0, { 2.394040, 1, 1.377483, 0 } }, { "FUJIFILM", "X-T1", WarmWhiteFluorescent, 0, { 2.023179, 1, 1.622517, 0 } }, { "FUJIFILM", "X-T1", CoolWhiteFluorescent, 0, { 1.947020, 1, 2.066225, 0 } }, { "FUJIFILM", "X-T1", Incandescent, 0, { 1.268212, 1, 2.284768, 0 } }, { "FUJIFILM", "X-T1", Underwater, 0, { 1.894040, 1, 1.569536, 0 } }, { "FUJIFILM", "X-T1", "5000K", 0, { 1.847682, 1, 1.546358, 0 } }, /* FUJIFILM X-Pro1 Firmware Version v3.30 */ // The manual calls it "Fine". { "FUJIFILM", "X-Pro1", Daylight, 0, { 1.860927, 1, 1.708609, 0 } }, // The manual calls it "Shade", but exiftool shows it as "Cloudy". { "FUJIFILM", "X-Pro1", Shade, 0, { 2.105960, 1, 1.460265, 0 } }, { "FUJIFILM", "X-Pro1", DaylightFluorescent, 0, { 2.390728, 1, 1.500000, 0 } }, { "FUJIFILM", "X-Pro1", WarmWhiteFluorescent, 0, { 2.059603, 1, 1.794702, 0 } }, { "FUJIFILM", "X-Pro1", CoolWhiteFluorescent, 0, { 1.966887, 1, 2.254967, 0 } }, { "FUJIFILM", "X-Pro1", Incandescent, 0, { 1.225166, 1, 2.708609, 0 } }, { "FUJIFILM", "X-Pro1", Underwater, 0, { 1.860927, 1, 1.708609, 0 } }, { "FUJIFILM", "X-Pro1", "2500K", 0, { 1.009934, 1, 3.423841, 0 } }, { "FUJIFILM", "X-Pro1", "2550K", 0, { 1.039735, 1, 3.327815, 0 } }, { "FUJIFILM", "X-Pro1", "2650K", 0, { 1.092715, 1, 3.155629, 0 } }, { "FUJIFILM", "X-Pro1", "2700K", 0, { 1.115894, 1, 3.079470, 0 } }, { "FUJIFILM", "X-Pro1", "2800K", 0, { 1.158940, 1, 2.937086, 0 } }, { "FUJIFILM", "X-Pro1", "2850K", 0, { 1.178808, 1, 2.874172, 0 } }, { "FUJIFILM", "X-Pro1", "2950K", 0, { 1.218543, 1, 2.758278, 0 } }, { "FUJIFILM", "X-Pro1", "3000K", 0, { 1.235099, 1, 2.705298, 0 } }, { "FUJIFILM", "X-Pro1", "3100K", 0, { 1.271523, 1, 2.605960, 0 } }, { "FUJIFILM", "X-Pro1", "3200K", 0, { 1.307947, 1, 2.519868, 0 } }, { "FUJIFILM", "X-Pro1", "3300K", 0, { 1.341060, 1, 2.440397, 0 } }, { "FUJIFILM", "X-Pro1", "3400K", 0, { 1.374172, 1, 2.367550, 0 } }, { "FUJIFILM", "X-Pro1", "3600K", 0, { 1.437086, 1, 2.238411, 0 } }, { "FUJIFILM", "X-Pro1", "3700K", 0, { 1.470199, 1, 2.182119, 0 } }, { "FUJIFILM", "X-Pro1", "3800K", 0, { 1.500000, 1, 2.132450, 0 } }, { "FUJIFILM", "X-Pro1", "4000K", 0, { 1.562914, 1, 2.036424, 0 } }, { "FUJIFILM", "X-Pro1", "4200K", 0, { 1.622517, 1, 1.953642, 0 } }, { "FUJIFILM", "X-Pro1", "4300K", 0, { 1.652318, 1, 1.917219, 0 } }, { "FUJIFILM", "X-Pro1", "4500K", 0, { 1.711921, 1, 1.847682, 0 } }, { "FUJIFILM", "X-Pro1", "4800K", 0, { 1.801325, 1, 1.754967, 0 } }, { "FUJIFILM", "X-Pro1", "5000K", 0, { 1.857616, 1, 1.701987, 0 } }, { "FUJIFILM", "X-Pro1", "5300K", 0, { 1.940397, 1, 1.629139, 0 } }, { "FUJIFILM", "X-Pro1", "5600K", 0, { 2.019868, 1, 1.562914, 0 } }, { "FUJIFILM", "X-Pro1", "5900K", 0, { 2.096026, 1, 1.503311, 0 } }, { "FUJIFILM", "X-Pro1", "6300K", 0, { 2.192053, 1, 1.433775, 0 } }, { "FUJIFILM", "X-Pro1", "6700K", 0, { 2.281457, 1, 1.370861, 0 } }, { "FUJIFILM", "X-Pro1", "7100K", 0, { 2.367550, 1, 1.311258, 0 } }, { "FUJIFILM", "X-Pro1", "7700K", 0, { 2.486755, 1, 1.238411, 0 } }, { "FUJIFILM", "X-Pro1", "8300K", 0, { 2.592715, 1, 1.172185, 0 } }, { "FUJIFILM", "X-Pro1", "9100K", 0, { 2.721854, 1, 1.096026, 0 } }, { "FUJIFILM", "X-Pro1", "10000K", 0, { 2.847682, 1, 1.023179, 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 J3", Incandescent, 0, { 1.484375, 1, 2.308594, 0 } }, { "NIKON", "1 J3", CoolWhiteFluorescent, 0, { 2.003906, 1, 2.160156, 0 } }, { "NIKON", "1 J3", DirectSunlight, 0, { 2.269531, 1, 1.621094, 0 } }, { "NIKON", "1 J3", Flash, 0, { 2.648438, 1, 1.390625, 0 } }, { "NIKON", "1 J3", Cloudy, 0, { 2.394531, 1, 1.519531, 0 } }, { "NIKON", "1 J3", Shade, 0, { 2.718750, 1, 1.382813, 0 } }, { "NIKON", "1 J3", Underwater, 0, { 2.144531, 1, 1.660156, 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 } }, // Nikon CoolPix P330 firmware 1.0 { "NIKON", "COOLPIX P330", DirectSunlight, 0, { 1.792969, 1, 1.65625, 0 }}, { "NIKON", "COOLPIX P330", Incandescent, 0, { 1.171875, 1, 2.730469, 0 }}, { "NIKON", "COOLPIX P330", WhiteFluorescent, 0, { 1.867188, 1, 2.421875, 0 }}, { "NIKON", "COOLPIX P330", DayWhiteFluorescent, 0, { 1.8125, 1, 1.742188, 0 }}, { "NIKON", "COOLPIX P330", DaylightFluorescent, 0, { 2.046875, 1, 1.390625, 0}}, { "NIKON", "COOLPIX P330", Cloudy, 0, { 1.929688, 1, 1.480469, 0 }}, { "NIKON", "COOLPIX P330", Flash, 0, { 2.039063, 1, 1.578125, 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 } }, /* D610 with firmware C1.00 L1.009 */ { "NIKON", "D610", DirectSunlight, 0, { 1.906250, 1, 1.390625, 0 } }, { "NIKON", "D610", Flash, 0, { 2.136719, 1, 1.214844, 0 } }, { "NIKON", "D610", Cloudy, 0, { 2.039063, 1, 1.261719, 0 } }, { "NIKON", "D610", Shade, 0, { 2.328125, 1, 1.136719, 0 } }, { "NIKON", "D610", Incandescent, 0, { 1.226563, 1, 2.214844, 0 } }, { "NIKON", "D610", SodiumVaporFluorescent, 0, { 1.148438, 1, 2.433594, 0 } }, { "NIKON", "D610", WarmWhiteFluorescent, 0, { 1.230469, 1, 1.953125, 0 } }, { "NIKON", "D610", WhiteFluorescent, 0, { 1.421875, 1, 2.281250, 0 } }, { "NIKON", "D610", CoolWhiteFluorescent, 0, { 1.730469, 1, 2.003906, 0 } }, { "NIKON", "D610", DayWhiteFluorescent, 0, { 1.777344, 1, 1.375000, 0 } }, { "NIKON", "D610", DaylightFluorescent, 0, { 2.039063, 1, 1.117188, 0 } }, { "NIKON", "D610", 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 } }, /* Firmware version 1.01 */ /* -6/+6 fine tuning is A6/B6 in amber-blue and zero in green-magenta */ { "NIKON", "D3200", DirectSunlight, -6, { 2.199219, 1, 1.140625, 0 } }, { "NIKON", "D3200", DirectSunlight, 0, { 2.050781, 1, 1.273438, 0 } }, { "NIKON", "D3200", DirectSunlight, 6, { 1.882813, 1, 1.406250, 0 } }, { "NIKON", "D3200", Flash, -6, { 2.515625, 1, 1.062500, 0 } }, { "NIKON", "D3200", Flash, 0, { 2.320313, 1, 1.148438, 0 } }, { "NIKON", "D3200", Flash, 6, { 2.121094, 1, 1.218750, 0 } }, { "NIKON", "D3200", Cloudy, -6, { 2.355469, 1, 1.078125, 0 } }, { "NIKON", "D3200", Cloudy, 0, { 2.171875, 1, 1.164063, 0 } }, { "NIKON", "D3200", Cloudy, 6, { 2.031250, 1, 1.300781, 0 } }, { "NIKON", "D3200", Shade, -6, { 2.750000, 1, 1.000000, 0 } }, { "NIKON", "D3200", Shade, 0, { 2.449219, 1, 1.050781, 0 } }, { "NIKON", "D3200", Shade, 6, { 2.242188, 1, 1.121094, 0 } }, { "NIKON", "D3200", Incandescent, -6, { 1.468750, 1, 1.796875, 0 } }, { "NIKON", "D3200", Incandescent, 0, { 1.359375, 1, 1.964844, 0 } }, { "NIKON", "D3200", Incandescent, 6, { 1.269531, 1, 2.144531, 0 } }, { "NIKON", "D3200", SodiumVaporFluorescent, -6, { 1.390625, 1, 1.917969, 0 } }, { "NIKON", "D3200", SodiumVaporFluorescent, 0, { 1.277344, 1, 2.093750, 0 } }, { "NIKON", "D3200", SodiumVaporFluorescent, 6, { 1.203125, 1, 2.281250, 0 } }, { "NIKON", "D3200", WarmWhiteFluorescent, -6, { 1.453125, 1, 1.679688, 0 } }, { "NIKON", "D3200", WarmWhiteFluorescent, 0, { 1.351563, 1, 1.773438, 0 } }, { "NIKON", "D3200", WarmWhiteFluorescent, 6, { 1.246094, 1, 1.878906, 0 } }, { "NIKON", "D3200", WhiteFluorescent, -6, { 1.800781, 1, 1.812500, 0 } }, { "NIKON", "D3200", WhiteFluorescent, 0, { 1.503906, 1, 1.972656, 0 } }, { "NIKON", "D3200", WhiteFluorescent, 6, { 1.085938, 1, 2.253906, 0 } }, { "NIKON", "D3200", CoolWhiteFluorescent, -6, { 2.085938, 1, 1.628906, 0 } }, { "NIKON", "D3200", CoolWhiteFluorescent, 0, { 1.820313, 1, 1.796875, 0 } }, { "NIKON", "D3200", CoolWhiteFluorescent, 6, { 1.531250, 1, 1.957031, 0 } }, { "NIKON", "D3200", DayWhiteFluorescent, -6, { 2.027344, 1, 1.117188, 0 } }, { "NIKON", "D3200", DayWhiteFluorescent, 0, { 1.878906, 1, 1.261719, 0 } }, { "NIKON", "D3200", DayWhiteFluorescent, 6, { 1.742188, 1, 1.398438, 0 } }, { "NIKON", "D3200", DaylightFluorescent, -6, { 2.296875, 1, 1.000000, 0 } }, { "NIKON", "D3200", DaylightFluorescent, 0, { 2.109375, 1, 1.031250, 0 } }, { "NIKON", "D3200", DaylightFluorescent, 6, { 1.957031, 1, 1.183594, 0 } }, { "NIKON", "D3200", HighTempMercuryVaporFluorescent, -6, { 2.542969, 1, 1.117188, 0 } }, { "NIKON", "D3200", HighTempMercuryVaporFluorescent, 0, { 2.445313, 1, 1.250000, 0 } }, { "NIKON", "D3200", HighTempMercuryVaporFluorescent, 6, { 2.324219, 1, 1.394531, 0 } }, { "NIKON", "D3300", DirectSunlight, 0, { 2.054688, 1, 1.394531, 0 } }, { "NIKON", "D3300", Flash, 0, { 2.289063, 1, 1.230469, 0 } }, { "NIKON", "D3300", Cloudy, 0, { 2.199219, 1, 1.277344, 0 } }, { "NIKON", "D3300", Shade, 0, { 2.527344, 1, 1.152344, 0 } }, { "NIKON", "D3300", Incandescent, 0, { 1.312500, 1, 2.214844, 0 } }, { "NIKON", "D3300", CoolWhiteFluorescent, 0, { 1.855469, 1, 2.023438, 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, -6, { 2.199219, 1, 1.242188, 0 } }, { "NIKON", "D5100", DirectSunlight, -5, { 2.167969, 1, 1.265625, 0 } }, { "NIKON", "D5100", DirectSunlight, -4, { 2.140625, 1, 1.285156, 0 } }, { "NIKON", "D5100", DirectSunlight, -3, { 2.117188, 1, 1.308594, 0 } }, { "NIKON", "D5100", DirectSunlight, -2, { 2.085938, 1, 1.335938, 0 } }, { "NIKON", "D5100", DirectSunlight, -1, { 2.058594, 1, 1.363281, 0 } }, { "NIKON", "D5100", DirectSunlight, 0, { 2.027344, 1, 1.390625, 0 } }, { "NIKON", "D5100", DirectSunlight, 1, { 2.000000, 1, 1.421875, 0 } }, { "NIKON", "D5100", DirectSunlight, 2, { 1.972656, 1, 1.449219, 0 } }, { "NIKON", "D5100", DirectSunlight, 3, { 1.941406, 1, 1.472656, 0 } }, { "NIKON", "D5100", DirectSunlight, 4, { 1.910156, 1, 1.500000, 0 } }, { "NIKON", "D5100", DirectSunlight, 5, { 1.882813, 1, 1.523438, 0 } }, { "NIKON", "D5100", DirectSunlight, 6, { 1.847656, 1, 1.542969, 0 } }, { "NIKON", "D5100", Flash, -6, { 2.511719, 1, 1.132813, 0 } }, { "NIKON", "D5100", Flash, -5, { 2.460938, 1, 1.144531, 0 } }, { "NIKON", "D5100", Flash, -4, { 2.414063, 1, 1.160156, 0 } }, { "NIKON", "D5100", Flash, -3, { 2.375000, 1, 1.171875, 0 } }, { "NIKON", "D5100", Flash, -2, { 2.339844, 1, 1.183594, 0 } }, { "NIKON", "D5100", Flash, -1, { 2.308594, 1, 1.199219, 0 } }, { "NIKON", "D5100", Flash, 0, { 2.281250, 1, 1.210938, 0 } }, { "NIKON", "D5100", Flash, 1, { 2.250000, 1, 1.226563, 0 } }, { "NIKON", "D5100", Flash, 2, { 2.222656, 1, 1.238281, 0 } }, { "NIKON", "D5100", Flash, 3, { 2.191406, 1, 1.253906, 0 } }, { "NIKON", "D5100", Flash, 4, { 2.160156, 1, 1.273438, 0 } }, { "NIKON", "D5100", Flash, 5, { 2.125000, 1, 1.289063, 0 } }, { "NIKON", "D5100", Flash, 6, { 2.089844, 1, 1.308594, 0 } }, { "NIKON", "D5100", Cloudy, -6, { 2.386719, 1, 1.164063, 0 } }, { "NIKON", "D5100", Cloudy, -5, { 2.343750, 1, 1.175781, 0 } }, { "NIKON", "D5100", Cloudy, -4, { 2.300781, 1, 1.195313, 0 } }, { "NIKON", "D5100", Cloudy, -3, { 2.261719, 1, 1.210938, 0 } }, { "NIKON", "D5100", Cloudy, -2, { 2.230469, 1, 1.226563, 0 } }, { "NIKON", "D5100", Cloudy, -1, { 2.199219, 1, 1.242188, 0 } }, { "NIKON", "D5100", Cloudy, 0, { 2.167969, 1, 1.265625, 0 } }, { "NIKON", "D5100", Cloudy, 1, { 2.140625, 1, 1.285156, 0 } }, { "NIKON", "D5100", Cloudy, 2, { 2.117188, 1, 1.308594, 0 } }, { "NIKON", "D5100", Cloudy, 3, { 2.085938, 1, 1.335938, 0 } }, { "NIKON", "D5100", Cloudy, 4, { 2.058594, 1, 1.363281, 0 } }, { "NIKON", "D5100", Cloudy, 5, { 2.027344, 1, 1.390625, 0 } }, { "NIKON", "D5100", Cloudy, 6, { 2.000000, 1, 1.421875, 0 } }, { "NIKON", "D5100", Shade, -6, { 2.828125, 1, 1.023438, 0 } }, { "NIKON", "D5100", Shade, -5, { 2.769531, 1, 1.050781, 0 } }, { "NIKON", "D5100", Shade, -4, { 2.703125, 1, 1.074219, 0 } }, { "NIKON", "D5100", Shade, -3, { 2.644531, 1, 1.093750, 0 } }, { "NIKON", "D5100", Shade, -2, { 2.585938, 1, 1.109375, 0 } }, { "NIKON", "D5100", Shade, -1, { 2.539063, 1, 1.121094, 0 } }, { "NIKON", "D5100", Shade, 0, { 2.492188, 1, 1.136719, 0 } }, { "NIKON", "D5100", Shade, 1, { 2.445313, 1, 1.148438, 0 } }, { "NIKON", "D5100", Shade, 2, { 2.406250, 1, 1.156250, 0 } }, { "NIKON", "D5100", Shade, 3, { 2.359375, 1, 1.171875, 0 } }, { "NIKON", "D5100", Shade, 4, { 2.316406, 1, 1.187500, 0 } }, { "NIKON", "D5100", Shade, 5, { 2.277344, 1, 1.203125, 0 } }, { "NIKON", "D5100", Shade, 6, { 2.246094, 1, 1.218750, 0 } }, { "NIKON", "D5100", Incandescent, -6, { 1.417969, 1, 2.003906, 0 } }, { "NIKON", "D5100", Incandescent, -5, { 1.394531, 1, 2.035156, 0 } }, { "NIKON", "D5100", Incandescent, -4, { 1.375000, 1, 2.066406, 0 } }, { "NIKON", "D5100", Incandescent, -3, { 1.355469, 1, 2.101563, 0 } }, { "NIKON", "D5100", Incandescent, -2, { 1.339844, 1, 2.140625, 0 } }, { "NIKON", "D5100", Incandescent, -1, { 1.324219, 1, 2.179688, 0 } }, { "NIKON", "D5100", Incandescent, 0, { 1.304688, 1, 2.214844, 0 } }, { "NIKON", "D5100", Incandescent, 1, { 1.289063, 1, 2.257813, 0 } }, { "NIKON", "D5100", Incandescent, 2, { 1.273438, 1, 2.296875, 0 } }, { "NIKON", "D5100", Incandescent, 3, { 1.261719, 1, 2.335938, 0 } }, { "NIKON", "D5100", Incandescent, 4, { 1.246094, 1, 2.378906, 0 } }, { "NIKON", "D5100", Incandescent, 5, { 1.230469, 1, 2.421875, 0 } }, { "NIKON", "D5100", Incandescent, 6, { 1.218750, 1, 2.464844, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -6, { 1.324219, 1, 2.187500, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -5, { 1.296875, 1, 2.230469, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -4, { 1.273438, 1, 2.277344, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -3, { 1.253906, 1, 2.316406, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -2, { 1.238281, 1, 2.355469, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, -1, { 1.218750, 1, 2.398438, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 0, { 1.203125, 1, 2.437500, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 1, { 1.187500, 1, 2.480469, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 2, { 1.175781, 1, 2.523438, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 3, { 1.164063, 1, 2.566406, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 4, { 1.152344, 1, 2.609375, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 5, { 1.140625, 1, 2.664063, 0 } }, { "NIKON", "D5100", SodiumVaporFluorescent, 6, { 1.128906, 1, 2.718750, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -6, { 1.414063, 1, 1.859375, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -5, { 1.394531, 1, 1.878906, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -4, { 1.375000, 1, 1.894531, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -3, { 1.355469, 1, 1.914063, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -2, { 1.335938, 1, 1.929688, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, -1, { 1.316406, 1, 1.949219, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 0, { 1.300781, 1, 1.964844, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 1, { 1.281250, 1, 1.984375, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 2, { 1.261719, 1, 2.003906, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 3, { 1.246094, 1, 2.023438, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 4, { 1.230469, 1, 2.042969, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 5, { 1.214844, 1, 2.062500, 0 } }, { "NIKON", "D5100", WarmWhiteFluorescent, 6, { 1.199219, 1, 2.082031, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -6, { 1.812500, 1, 2.042969, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -5, { 1.765625, 1, 2.085938, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -4, { 1.714844, 1, 2.128906, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -3, { 1.664063, 1, 2.171875, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -2, { 1.609375, 1, 2.214844, 0 } }, { "NIKON", "D5100", WhiteFluorescent, -1, { 1.550781, 1, 2.261719, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 0, { 1.496094, 1, 2.304688, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 1, { 1.429688, 1, 2.355469, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 2, { 1.363281, 1, 2.406250, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 3, { 1.296875, 1, 2.460938, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 4, { 1.226563, 1, 2.515625, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 5, { 1.156250, 1, 2.570313, 0 } }, { "NIKON", "D5100", WhiteFluorescent, 6, { 1.078125, 1, 2.628906, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -6, { 2.105469, 1, 1.808594, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -5, { 2.062500, 1, 1.843750, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -4, { 2.019531, 1, 1.878906, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -3, { 1.976563, 1, 1.917969, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -2, { 1.933594, 1, 1.953125, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, -1, { 1.882813, 1, 1.988281, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 0, { 1.832031, 1, 2.027344, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 1, { 1.789063, 1, 2.070313, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 2, { 1.738281, 1, 2.109375, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 3, { 1.687500, 1, 2.152344, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 4, { 1.632813, 1, 2.195313, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 5, { 1.574219, 1, 2.238281, 0 } }, { "NIKON", "D5100", CoolWhiteFluorescent, 6, { 1.519531, 1, 2.281250, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -6, { 2.070313, 1, 1.214844, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -5, { 2.042969, 1, 1.246094, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -4, { 2.011719, 1, 1.277344, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -3, { 1.984375, 1, 1.304688, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -2, { 1.953125, 1, 1.332031, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, -1, { 1.925781, 1, 1.363281, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 0, { 1.898438, 1, 1.390625, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 1, { 1.871094, 1, 1.417969, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 2, { 1.843750, 1, 1.441406, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 3, { 1.816406, 1, 1.472656, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 4, { 1.792969, 1, 1.496094, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 5, { 1.765625, 1, 1.523438, 0 } }, { "NIKON", "D5100", DayWhiteFluorescent, 6, { 1.742188, 1, 1.546875, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -6, { 2.359375, 1, 1.000000, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -5, { 2.328125, 1, 1.000000, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -4, { 2.296875, 1, 1.000000, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -3, { 2.261719, 1, 1.015625, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -2, { 2.230469, 1, 1.050781, 0 } }, { "NIKON", "D5100", DaylightFluorescent, -1, { 2.199219, 1, 1.082031, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 0, { 2.167969, 1, 1.117188, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 1, { 2.136719, 1, 1.148438, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 2, { 2.109375, 1, 1.179688, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 3, { 2.078125, 1, 1.210938, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 4, { 2.046875, 1, 1.242188, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 5, { 2.019531, 1, 1.269531, 0 } }, { "NIKON", "D5100", DaylightFluorescent, 6, { 1.988281, 1, 1.300781, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -6, { 2.578125, 1, 1.222656, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -5, { 2.566406, 1, 1.246094, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -4, { 2.550781, 1, 1.265625, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -3, { 2.535156, 1, 1.292969, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -2, { 2.519531, 1, 1.316406, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, -1, { 2.503906, 1, 1.343750, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 0, { 2.484375, 1, 1.367188, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 1, { 2.464844, 1, 1.394531, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 2, { 2.441406, 1, 1.421875, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 3, { 2.425781, 1, 1.453125, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 4, { 2.402344, 1, 1.476563, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 5, { 2.375000, 1, 1.511719, 0 } }, { "NIKON", "D5100", HighTempMercuryVaporFluorescent, 6, { 2.375000, 1, 1.511719, 0 } }, { "NIKON", "D5300", DirectSunlight, 0, { 2.054688, 1, 1.394531, 0 } }, { "NIKON", "D5300", Flash, 0, { 2.289063, 1, 1.230469, 0 } }, { "NIKON", "D5300", Cloudy, 0, { 2.199219, 1, 1.277344, 0 } }, { "NIKON", "D5300", Shade, 0, { 2.527344, 1, 1.152344, 0 } }, { "NIKON", "D5300", Incandescent, 0, { 1.312500, 1, 2.214844, 0 } }, { "NIKON", "D5300", CoolWhiteFluorescent, 0, { 1.855469, 1, 2.023438, 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", "D7100", DirectSunlight, 0, { 2.386719, 1, 1.597656, 0 } }, { "NIKON", "D7100", Flash, 0, { 2.753906, 1, 1.371094, 0 } }, { "NIKON", "D7100", Cloudy, 0, { 2.656250, 1, 1.453125, 0 } }, { "NIKON", "D7100", Shade, 0, { 3.183594, 1, 1.292969, 0 } }, { "NIKON", "D7100", Incandescent, 0, { 1.445313, 1, 2.667969, 0 } }, { "NIKON", "D7100", SodiumVaporFluorescent, 0, { 1.332031, 1, 2.894531, 0 } }, { "NIKON", "D7100", WarmWhiteFluorescent, 0, { 1.480469, 1, 2.425781, 0 } }, { "NIKON", "D7100", WhiteFluorescent, 0, { 1.746094, 1, 2.777344, 0 } }, { "NIKON", "D7100", CoolWhiteFluorescent, 0, { 2.222656, 1, 2.417969, 0 } }, { "NIKON", "D7100", DayWhiteFluorescent, 0, { 2.242188, 1, 1.656250, 0 } }, { "NIKON", "D7100", DaylightFluorescent, 0, { 2.628906, 1, 1.308594, 0 } }, { "NIKON", "D7100", HighTempMercuryVaporFluorescent, 0, { 3.187500, 1, 1.585938, 0 } }, { "NIKON", "D7100", "5000K", 0, { 2.332031, 1, 1.652344, 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.5 */ { "OLYMPUS", "E-P5", Daylight, 0, { 1.945313, 1, 1.796875, 0 } }, { "OLYMPUS", "E-P5", Shade, 0, { 2.273438, 1, 1.406250, 0 } }, { "OLYMPUS", "E-P5", Cloudy, 0, { 2.093750, 1, 1.625000, 0 } }, { "OLYMPUS", "E-P5", Incandescent, 0, { 1.203125, 1, 3.218750, 0 } }, { "OLYMPUS", "E-P5", Fluorescent, 0, { 1.890625, 1, 2.585938, 0 } }, { "OLYMPUS", "E-P5", Flash, 0, { 2.218750, 1, 1.531250, 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 } }, /* Firmware version 1.2 */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-PL5", Daylight, -7, { 1.671875, 1, 2.164063, 0 } }, { "OLYMPUS", "E-PL5", Daylight, 0, { 1.945313, 1, 1.898438, 0 } }, { "OLYMPUS", "E-PL5", Daylight, 7, { 2.210938, 1, 1.625000, 0 } }, { "OLYMPUS", "E-PL5", Shade, -7, { 1.953125, 1, 1.687500, 0 } }, { "OLYMPUS", "E-PL5", Shade, 0, { 2.273438, 1, 1.484375, 0 } }, { "OLYMPUS", "E-PL5", Shade, 7, { 2.585938, 1, 1.273438, 0 } }, { "OLYMPUS", "E-PL5", Cloudy, -7, { 1.789063, 1, 1.945313, 0 } }, { "OLYMPUS", "E-PL5", Cloudy, 0, { 2.085938, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PL5", Cloudy, 7, { 2.375000, 1, 1.468750, 0 } }, { "OLYMPUS", "E-PL5", Tungsten, -7, { 1.023438, 1, 3.851563, 0 } }, { "OLYMPUS", "E-PL5", Tungsten, 0, { 1.195313, 1, 3.382813, 0 } }, { "OLYMPUS", "E-PL5", Tungsten, 7, { 1.359375, 1, 2.906250, 0 } }, { "OLYMPUS", "E-PL5", Fluorescent, -7, { 1.625000, 1, 3.101563, 0 } }, { "OLYMPUS", "E-PL5", Fluorescent, 0, { 1.890625, 1, 2.726563, 0 } }, { "OLYMPUS", "E-PL5", Fluorescent, 7, { 2.148438, 1, 2.343750, 0 } }, { "OLYMPUS", "E-PL5", Flash, -7, { 1.906250, 1, 1.835938, 0 } }, { "OLYMPUS", "E-PL5", Flash, 0, { 2.218750, 1, 1.617188, 0 } }, { "OLYMPUS", "E-PL5", Flash, 7, { 2.523438, 1, 1.390625, 0 } }, { "OLYMPUS", "E-PL5", "2000K", 0, { 0.578125, 1, 5.343750, 0 } }, { "OLYMPUS", "E-PL5", "2050K", 0, { 0.632813, 1, 5.164063, 0 } }, { "OLYMPUS", "E-PL5", "2100K", 0, { 0.679688, 1, 5.015625, 0 } }, { "OLYMPUS", "E-PL5", "2150K", 0, { 0.726563, 1, 4.867188, 0 } }, { "OLYMPUS", "E-PL5", "2200K", 0, { 0.781250, 1, 4.710938, 0 } }, { "OLYMPUS", "E-PL5", "2250K", 0, { 0.820313, 1, 4.578125, 0 } }, { "OLYMPUS", "E-PL5", "2300K", 0, { 0.867188, 1, 4.437500, 0 } }, { "OLYMPUS", "E-PL5", "2350K", 0, { 0.906250, 1, 4.312500, 0 } }, { "OLYMPUS", "E-PL5", "2400K", 0, { 0.945313, 1, 4.187500, 0 } }, { "OLYMPUS", "E-PL5", "2450K", 0, { 0.976563, 1, 4.078125, 0 } }, { "OLYMPUS", "E-PL5", "2500K", 0, { 1.015625, 1, 3.968750, 0 } }, { "OLYMPUS", "E-PL5", "2550K", 0, { 1.046875, 1, 3.859375, 0 } }, { "OLYMPUS", "E-PL5", "2600K", 0, { 1.078125, 1, 3.750000, 0 } }, { "OLYMPUS", "E-PL5", "2650K", 0, { 1.109375, 1, 3.656250, 0 } }, { "OLYMPUS", "E-PL5", "2700K", 0, { 1.140625, 1, 3.554688, 0 } }, { "OLYMPUS", "E-PL5", "2750K", 0, { 1.171875, 1, 3.460938, 0 } }, { "OLYMPUS", "E-PL5", "2800K", 0, { 1.195313, 1, 3.382813, 0 } }, { "OLYMPUS", "E-PL5", "2900K", 0, { 1.250000, 1, 3.210938, 0 } }, { "OLYMPUS", "E-PL5", "3000K", 0, { 1.296875, 1, 3.054688, 0 } }, { "OLYMPUS", "E-PL5", "3100K", 0, { 1.343750, 1, 2.906250, 0 } }, { "OLYMPUS", "E-PL5", "3200K", 0, { 1.390625, 1, 2.765625, 0 } }, { "OLYMPUS", "E-PL5", "3300K", 0, { 1.429688, 1, 2.640625, 0 } }, { "OLYMPUS", "E-PL5", "3400K", 0, { 1.460938, 1, 2.562500, 0 } }, { "OLYMPUS", "E-PL5", "3500K", 0, { 1.492188, 1, 2.484375, 0 } }, { "OLYMPUS", "E-PL5", "3600K", 0, { 1.523438, 1, 2.414063, 0 } }, { "OLYMPUS", "E-PL5", "3700K", 0, { 1.554688, 1, 2.359375, 0 } }, { "OLYMPUS", "E-PL5", "3800K", 0, { 1.585938, 1, 2.304688, 0 } }, { "OLYMPUS", "E-PL5", "3900K", 0, { 1.617188, 1, 2.250000, 0 } }, { "OLYMPUS", "E-PL5", "4000K", 0, { 1.640625, 1, 2.242188, 0 } }, { "OLYMPUS", "E-PL5", "4200K", 0, { 1.687500, 1, 2.226563, 0 } }, { "OLYMPUS", "E-PL5", "4400K", 0, { 1.742188, 1, 2.179688, 0 } }, { "OLYMPUS", "E-PL5", "4600K", 0, { 1.796875, 1, 2.101563, 0 } }, { "OLYMPUS", "E-PL5", "4800K", 0, { 1.843750, 1, 2.031250, 0 } }, { "OLYMPUS", "E-PL5", "5000K", 0, { 1.882813, 1, 1.984375, 0 } }, { "OLYMPUS", "E-PL5", "5200K", 0, { 1.921875, 1, 1.929688, 0 } }, { "OLYMPUS", "E-PL5", "5400K", 0, { 1.960938, 1, 1.875000, 0 } }, { "OLYMPUS", "E-PL5", "5600K", 0, { 2.007813, 1, 1.820313, 0 } }, { "OLYMPUS", "E-PL5", "5800K", 0, { 2.046875, 1, 1.765625, 0 } }, { "OLYMPUS", "E-PL5", "6000K", 0, { 2.085938, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PL5", "6200K", 0, { 2.109375, 1, 1.679688, 0 } }, { "OLYMPUS", "E-PL5", "6400K", 0, { 2.140625, 1, 1.648438, 0 } }, { "OLYMPUS", "E-PL5", "6600K", 0, { 2.164063, 1, 1.609375, 0 } }, { "OLYMPUS", "E-PL5", "6800K", 0, { 2.187500, 1, 1.585938, 0 } }, { "OLYMPUS", "E-PL5", "7000K", 0, { 2.218750, 1, 1.546875, 0 } }, { "OLYMPUS", "E-PL5", "7400K", 0, { 2.257813, 1, 1.500000, 0 } }, { "OLYMPUS", "E-PL5", "7800K", 0, { 2.296875, 1, 1.453125, 0 } }, { "OLYMPUS", "E-PL5", "8200K", 0, { 2.335938, 1, 1.406250, 0 } }, { "OLYMPUS", "E-PL5", "8600K", 0, { 2.367188, 1, 1.375000, 0 } }, { "OLYMPUS", "E-PL5", "9000K", 0, { 2.398438, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PL5", "9400K", 0, { 2.421875, 1, 1.304688, 0 } }, { "OLYMPUS", "E-PL5", "9800K", 0, { 2.445313, 1, 1.273438, 0 } }, { "OLYMPUS", "E-PL5", "10000K", 0, { 2.460938, 1, 1.257813, 0 } }, { "OLYMPUS", "E-PL5", "11000K", 0, { 2.515625, 1, 1.195313, 0 } }, { "OLYMPUS", "E-PL5", "12000K", 0, { 2.554688, 1, 1.148438, 0 } }, { "OLYMPUS", "E-PL5", "13000K", 0, { 2.593750, 1, 1.093750, 0 } }, { "OLYMPUS", "E-PL5", "14000K", 0, { 2.625000, 1, 1.062500, 0 } }, /* Copied from OLYMPUS E-PL3 presets */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-PM1", Daylight, -7, { 1.695313, 1, 1.656250, 0 } }, { "OLYMPUS", "E-PM1", Daylight, 0, { 1.976562, 1, 1.453125, 0 } }, { "OLYMPUS", "E-PM1", Daylight, 7, { 2.250000, 1, 1.242187, 0 } }, { "OLYMPUS", "E-PM1", Shade, -7, { 2.046875, 1, 1.312500, 0 } }, { "OLYMPUS", "E-PM1", Shade, 0, { 2.382812, 1, 1.156250, 0 } }, { "OLYMPUS", "E-PM1", Shade, 7, { 2.732283, 1.007874, 1, 0 } }, { "OLYMPUS", "E-PM1", Cloudy, -7, { 1.859375, 1, 1.515625, 0 } }, { "OLYMPUS", "E-PM1", Cloudy, 0, { 2.164063, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PM1", Cloudy, 7, { 2.460937, 1, 1.148437, 0 } }, { "OLYMPUS", "E-PM1", Tungsten, -7, { 1.007812, 1, 2.812500, 0 } }, { "OLYMPUS", "E-PM1", Tungsten, 0, { 1.171875, 1, 2.468750, 0 } }, { "OLYMPUS", "E-PM1", Tungsten, 7, { 1.335937, 1, 2.117187, 0 } }, { "OLYMPUS", "E-PM1", Fluorescent, -7, { 1.679688, 1, 2.203125, 0 } }, { "OLYMPUS", "E-PM1", Fluorescent, 0, { 1.953125, 1, 1.937500, 0 } }, { "OLYMPUS", "E-PM1", Fluorescent, 7, { 2.226562, 1, 1.664062, 0 } }, { "OLYMPUS", "E-PM1", Underwater, -7, { 1.812500, 1, 1.789062, 0 } }, { "OLYMPUS", "E-PM1", Underwater, 0, { 2.390625, 1, 1.484375, 0 } }, { "OLYMPUS", "E-PM1", Underwater, 7, { 2.429688, 1, 1.335937, 0 } }, { "OLYMPUS", "E-PM1", Flash, -7, { 2.218750, 1, 1.421875, 0 } }, { "OLYMPUS", "E-PM1", Flash, 0, { 2.585938, 1, 1.250000, 0 } }, { "OLYMPUS", "E-PM1", Flash, 7, { 2.945313, 1, 1.070312, 0 } }, { "OLYMPUS", "E-PM1", "2000K", 0, { 1, 1.882353, 6.897059, 0 } }, { "OLYMPUS", "E-PM1", "2050K", 0, { 1, 1.684211, 5.986842, 0 } }, { "OLYMPUS", "E-PM1", "2100K", 0, { 1, 1.560976, 5.402439, 0 } }, { "OLYMPUS", "E-PM1", "2150K", 0, { 1, 1.454545, 4.909091, 0 } }, { "OLYMPUS", "E-PM1", "2200K", 0, { 1, 1.347368, 4.421053, 0 } }, { "OLYMPUS", "E-PM1", "2250K", 0, { 1, 1.267327, 4.049505, 0 } }, { "OLYMPUS", "E-PM1", "2300K", 0, { 1, 1.207547, 3.754717, 0 } }, { "OLYMPUS", "E-PM1", "2350K", 0, { 1, 1.153153, 3.504504, 0 } }, { "OLYMPUS", "E-PM1", "2400K", 0, { 1, 1.094017, 3.239316, 0 } }, { "OLYMPUS", "E-PM1", "2450K", 0, { 1, 1.057851, 3.057851, 0 } }, { "OLYMPUS", "E-PM1", "2500K", 0, { 1, 1.015873, 2.873016, 0 } }, { "OLYMPUS", "E-PM1", "2550K", 0, { 1.015625, 1, 2.757813, 0 } }, { "OLYMPUS", "E-PM1", "2600K", 0, { 1.054687, 1, 2.695312, 0 } }, { "OLYMPUS", "E-PM1", "2650K", 0, { 1.085938, 1, 2.632813, 0 } }, { "OLYMPUS", "E-PM1", "2700K", 0, { 1.117187, 1, 2.570312, 0 } }, { "OLYMPUS", "E-PM1", "2750K", 0, { 1.148438, 1, 2.515625, 0 } }, { "OLYMPUS", "E-PM1", "2800K", 0, { 1.171875, 1, 2.468750, 0 } }, { "OLYMPUS", "E-PM1", "2900K", 0, { 1.226562, 1, 2.367187, 0 } }, { "OLYMPUS", "E-PM1", "3000K", 0, { 1.273437, 1, 2.273437, 0 } }, { "OLYMPUS", "E-PM1", "3100K", 0, { 1.328125, 1, 2.179688, 0 } }, { "OLYMPUS", "E-PM1", "3200K", 0, { 1.367188, 1, 2.093750, 0 } }, { "OLYMPUS", "E-PM1", "3300K", 0, { 1.414062, 1, 2.015625, 0 } }, { "OLYMPUS", "E-PM1", "3400K", 0, { 1.445312, 1, 1.968750, 0 } }, { "OLYMPUS", "E-PM1", "3500K", 0, { 1.476563, 1, 1.914063, 0 } }, { "OLYMPUS", "E-PM1", "3600K", 0, { 1.507812, 1, 1.867188, 0 } }, { "OLYMPUS", "E-PM1", "3700K", 0, { 1.539062, 1, 1.828125, 0 } }, { "OLYMPUS", "E-PM1", "3800K", 0, { 1.570312, 1, 1.789062, 0 } }, { "OLYMPUS", "E-PM1", "3900K", 0, { 1.609375, 1, 1.750000, 0 } }, { "OLYMPUS", "E-PM1", "4000K", 0, { 1.640625, 1, 1.734375, 0 } }, { "OLYMPUS", "E-PM1", "4200K", 0, { 1.703125, 1, 1.695313, 0 } }, { "OLYMPUS", "E-PM1", "4400K", 0, { 1.757812, 1, 1.648437, 0 } }, { "OLYMPUS", "E-PM1", "4600K", 0, { 1.812500, 1, 1.601562, 0 } }, { "OLYMPUS", "E-PM1", "4800K", 0, { 1.867188, 1, 1.554688, 0 } }, { "OLYMPUS", "E-PM1", "5000K", 0, { 1.906250, 1, 1.515625, 0 } }, { "OLYMPUS", "E-PM1", "5200K", 0, { 1.953125, 1, 1.476562, 0 } }, { "OLYMPUS", "E-PM1", "5400K", 0, { 2.000000, 1, 1.437500, 0 } }, { "OLYMPUS", "E-PM1", "5600K", 0, { 2.054688, 1, 1.406250, 0 } }, { "OLYMPUS", "E-PM1", "5800K", 0, { 2.109375, 1, 1.375000, 0 } }, { "OLYMPUS", "E-PM1", "6000K", 0, { 2.164063, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PM1", "6200K", 0, { 2.195313, 1, 1.312500, 0 } }, { "OLYMPUS", "E-PM1", "6400K", 0, { 2.226562, 1, 1.289062, 0 } }, { "OLYMPUS", "E-PM1", "6600K", 0, { 2.257812, 1, 1.257812, 0 } }, { "OLYMPUS", "E-PM1", "6800K", 0, { 2.289063, 1, 1.234375, 0 } }, { "OLYMPUS", "E-PM1", "7000K", 0, { 2.320313, 1, 1.210938, 0 } }, { "OLYMPUS", "E-PM1", "7400K", 0, { 2.367187, 1, 1.171875, 0 } }, { "OLYMPUS", "E-PM1", "7800K", 0, { 2.414062, 1, 1.132812, 0 } }, { "OLYMPUS", "E-PM1", "8200K", 0, { 2.460937, 1, 1.093750, 0 } }, { "OLYMPUS", "E-PM1", "8600K", 0, { 2.492188, 1, 1.070313, 0 } }, { "OLYMPUS", "E-PM1", "9000K", 0, { 2.523438, 1, 1.039063, 0 } }, { "OLYMPUS", "E-PM1", "9400K", 0, { 2.554687, 1, 1.015625, 0 } }, { "OLYMPUS", "E-PM1", "9800K", 0, { 2.606299, 1.007874, 1, 0 } }, { "OLYMPUS", "E-PM1", "10000K", 0, { 2.664000, 1.024000, 1, 0 } }, { "OLYMPUS", "E-PM1", "11000K", 0, { 2.865546, 1.075630, 1, 0 } }, { "OLYMPUS", "E-PM1", "12000K", 0, { 3.043860, 1.122807, 1, 0 } }, { "OLYMPUS", "E-PM1", "13000K", 0, { 3.238532, 1.174312, 1, 0 } }, { "OLYMPUS", "E-PM1", "14000K", 0, { 3.400000, 1.219048, 1, 0 } }, /* Copied from OLYMPUS E-PL5 presets */ /* -7/+7 fine tuning is -7/+7 in amber-blue and zero in green-magenta */ { "OLYMPUS", "E-PM2", Daylight, -7, { 1.671875, 1, 2.164063, 0 } }, { "OLYMPUS", "E-PM2", Daylight, 0, { 1.945313, 1, 1.898438, 0 } }, { "OLYMPUS", "E-PM2", Daylight, 7, { 2.210938, 1, 1.625000, 0 } }, { "OLYMPUS", "E-PM2", Shade, -7, { 1.953125, 1, 1.687500, 0 } }, { "OLYMPUS", "E-PM2", Shade, 0, { 2.273438, 1, 1.484375, 0 } }, { "OLYMPUS", "E-PM2", Shade, 7, { 2.585938, 1, 1.273438, 0 } }, { "OLYMPUS", "E-PM2", Cloudy, -7, { 1.789063, 1, 1.945313, 0 } }, { "OLYMPUS", "E-PM2", Cloudy, 0, { 2.085938, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PM2", Cloudy, 7, { 2.375000, 1, 1.468750, 0 } }, { "OLYMPUS", "E-PM2", Tungsten, -7, { 1.023438, 1, 3.851563, 0 } }, { "OLYMPUS", "E-PM2", Tungsten, 0, { 1.195313, 1, 3.382813, 0 } }, { "OLYMPUS", "E-PM2", Tungsten, 7, { 1.359375, 1, 2.906250, 0 } }, { "OLYMPUS", "E-PM2", Fluorescent, -7, { 1.625000, 1, 3.101563, 0 } }, { "OLYMPUS", "E-PM2", Fluorescent, 0, { 1.890625, 1, 2.726563, 0 } }, { "OLYMPUS", "E-PM2", Fluorescent, 7, { 2.148438, 1, 2.343750, 0 } }, { "OLYMPUS", "E-PM2", Flash, -7, { 1.906250, 1, 1.835938, 0 } }, { "OLYMPUS", "E-PM2", Flash, 0, { 2.218750, 1, 1.617188, 0 } }, { "OLYMPUS", "E-PM2", Flash, 7, { 2.523438, 1, 1.390625, 0 } }, { "OLYMPUS", "E-PM2", "2000K", 0, { 0.578125, 1, 5.343750, 0 } }, { "OLYMPUS", "E-PM2", "2050K", 0, { 0.632813, 1, 5.164063, 0 } }, { "OLYMPUS", "E-PM2", "2100K", 0, { 0.679688, 1, 5.015625, 0 } }, { "OLYMPUS", "E-PM2", "2150K", 0, { 0.726563, 1, 4.867188, 0 } }, { "OLYMPUS", "E-PM2", "2200K", 0, { 0.781250, 1, 4.710938, 0 } }, { "OLYMPUS", "E-PM2", "2250K", 0, { 0.820313, 1, 4.578125, 0 } }, { "OLYMPUS", "E-PM2", "2300K", 0, { 0.867188, 1, 4.437500, 0 } }, { "OLYMPUS", "E-PM2", "2350K", 0, { 0.906250, 1, 4.312500, 0 } }, { "OLYMPUS", "E-PM2", "2400K", 0, { 0.945313, 1, 4.187500, 0 } }, { "OLYMPUS", "E-PM2", "2450K", 0, { 0.976563, 1, 4.078125, 0 } }, { "OLYMPUS", "E-PM2", "2500K", 0, { 1.015625, 1, 3.968750, 0 } }, { "OLYMPUS", "E-PM2", "2550K", 0, { 1.046875, 1, 3.859375, 0 } }, { "OLYMPUS", "E-PM2", "2600K", 0, { 1.078125, 1, 3.750000, 0 } }, { "OLYMPUS", "E-PM2", "2650K", 0, { 1.109375, 1, 3.656250, 0 } }, { "OLYMPUS", "E-PM2", "2700K", 0, { 1.140625, 1, 3.554688, 0 } }, { "OLYMPUS", "E-PM2", "2750K", 0, { 1.171875, 1, 3.460938, 0 } }, { "OLYMPUS", "E-PM2", "2800K", 0, { 1.195313, 1, 3.382813, 0 } }, { "OLYMPUS", "E-PM2", "2900K", 0, { 1.250000, 1, 3.210938, 0 } }, { "OLYMPUS", "E-PM2", "3000K", 0, { 1.296875, 1, 3.054688, 0 } }, { "OLYMPUS", "E-PM2", "3100K", 0, { 1.343750, 1, 2.906250, 0 } }, { "OLYMPUS", "E-PM2", "3200K", 0, { 1.390625, 1, 2.765625, 0 } }, { "OLYMPUS", "E-PM2", "3300K", 0, { 1.429688, 1, 2.640625, 0 } }, { "OLYMPUS", "E-PM2", "3400K", 0, { 1.460938, 1, 2.562500, 0 } }, { "OLYMPUS", "E-PM2", "3500K", 0, { 1.492188, 1, 2.484375, 0 } }, { "OLYMPUS", "E-PM2", "3600K", 0, { 1.523438, 1, 2.414063, 0 } }, { "OLYMPUS", "E-PM2", "3700K", 0, { 1.554688, 1, 2.359375, 0 } }, { "OLYMPUS", "E-PM2", "3800K", 0, { 1.585938, 1, 2.304688, 0 } }, { "OLYMPUS", "E-PM2", "3900K", 0, { 1.617188, 1, 2.250000, 0 } }, { "OLYMPUS", "E-PM2", "4000K", 0, { 1.640625, 1, 2.242188, 0 } }, { "OLYMPUS", "E-PM2", "4200K", 0, { 1.687500, 1, 2.226563, 0 } }, { "OLYMPUS", "E-PM2", "4400K", 0, { 1.742188, 1, 2.179688, 0 } }, { "OLYMPUS", "E-PM2", "4600K", 0, { 1.796875, 1, 2.101563, 0 } }, { "OLYMPUS", "E-PM2", "4800K", 0, { 1.843750, 1, 2.031250, 0 } }, { "OLYMPUS", "E-PM2", "5000K", 0, { 1.882813, 1, 1.984375, 0 } }, { "OLYMPUS", "E-PM2", "5200K", 0, { 1.921875, 1, 1.929688, 0 } }, { "OLYMPUS", "E-PM2", "5400K", 0, { 1.960938, 1, 1.875000, 0 } }, { "OLYMPUS", "E-PM2", "5600K", 0, { 2.007813, 1, 1.820313, 0 } }, { "OLYMPUS", "E-PM2", "5800K", 0, { 2.046875, 1, 1.765625, 0 } }, { "OLYMPUS", "E-PM2", "6000K", 0, { 2.085938, 1, 1.710938, 0 } }, { "OLYMPUS", "E-PM2", "6200K", 0, { 2.109375, 1, 1.679688, 0 } }, { "OLYMPUS", "E-PM2", "6400K", 0, { 2.140625, 1, 1.648438, 0 } }, { "OLYMPUS", "E-PM2", "6600K", 0, { 2.164063, 1, 1.609375, 0 } }, { "OLYMPUS", "E-PM2", "6800K", 0, { 2.187500, 1, 1.585938, 0 } }, { "OLYMPUS", "E-PM2", "7000K", 0, { 2.218750, 1, 1.546875, 0 } }, { "OLYMPUS", "E-PM2", "7400K", 0, { 2.257813, 1, 1.500000, 0 } }, { "OLYMPUS", "E-PM2", "7800K", 0, { 2.296875, 1, 1.453125, 0 } }, { "OLYMPUS", "E-PM2", "8200K", 0, { 2.335938, 1, 1.406250, 0 } }, { "OLYMPUS", "E-PM2", "8600K", 0, { 2.367188, 1, 1.375000, 0 } }, { "OLYMPUS", "E-PM2", "9000K", 0, { 2.398438, 1, 1.335938, 0 } }, { "OLYMPUS", "E-PM2", "9400K", 0, { 2.421875, 1, 1.304688, 0 } }, { "OLYMPUS", "E-PM2", "9800K", 0, { 2.445313, 1, 1.273438, 0 } }, { "OLYMPUS", "E-PM2", "10000K", 0, { 2.460938, 1, 1.257813, 0 } }, { "OLYMPUS", "E-PM2", "11000K", 0, { 2.515625, 1, 1.195313, 0 } }, { "OLYMPUS", "E-PM2", "12000K", 0, { 2.554688, 1, 1.148438, 0 } }, { "OLYMPUS", "E-PM2", "13000K", 0, { 2.593750, 1, 1.093750, 0 } }, { "OLYMPUS", "E-PM2", "14000K", 0, { 2.625000, 1, 1.062500, 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 } }, /* Firmware version 1.0 */ /* -9/+9 fine tuning is -9/+9 in blue-amber and zero in magenta-green */ { "Panasonic", "DMC-FZ200", Daylight, -9, { 1.811321, 1, 2.049057, 0 } }, { "Panasonic", "DMC-FZ200", Daylight, 0, { 2.015094, 1, 1.758491, 0 } }, { "Panasonic", "DMC-FZ200", Daylight, 9, { 2.264151, 1, 1.550943, 0 } }, { "Panasonic", "DMC-FZ200", Cloudy, -9, { 1.935849, 1, 1.890566, 0 } }, { "Panasonic", "DMC-FZ200", Cloudy, 0, { 2.154717, 1, 1.622642, 0 } }, { "Panasonic", "DMC-FZ200", Cloudy, 9, { 2.426415, 1, 1.433962, 0 } }, { "Panasonic", "DMC-FZ200", Shade, -9, { 2.052830, 1, 1.773585, 0 } }, { "Panasonic", "DMC-FZ200", Shade, 0, { 2.286792, 1, 1.524528, 0 } }, { "Panasonic", "DMC-FZ200", Shade, 9, { 2.569811, 1, 1.343396, 0 } }, { "Panasonic", "DMC-FZ200", Incandescent, -9, { 1.230189, 1, 3.143396, 0 } }, { "Panasonic", "DMC-FZ200", Incandescent, 0, { 1.369811, 1, 2.701887, 0 } }, { "Panasonic", "DMC-FZ200", Incandescent, 9, { 1.539623, 1, 2.384906, 0 } }, { "Panasonic", "DMC-FZ200", Flash, -9, { 1.962264, 1, 1.932076, 0 } }, { "Panasonic", "DMC-FZ200", Flash, 0, { 2.184906, 1, 1.660377, 0 } }, { "Panasonic", "DMC-FZ200", Flash, 9, { 2.460377, 1, 1.464151, 0 } }, { "Panasonic", "DMC-FZ200", "2500K", 0, { 1.158491, 1, 3.169811, 0 } }, { "Panasonic", "DMC-FZ200", "2600K", 0, { 1.188679, 1, 3.094340, 0 } }, { "Panasonic", "DMC-FZ200", "2700K", 0, { 1.226415, 1, 3.018868, 0 } }, { "Panasonic", "DMC-FZ200", "2800K", 0, { 1.256604, 1, 2.943396, 0 } }, { "Panasonic", "DMC-FZ200", "2900K", 0, { 1.294340, 1, 2.867925, 0 } }, { "Panasonic", "DMC-FZ200", "3000K", 0, { 1.332075, 1, 2.784906, 0 } }, { "Panasonic", "DMC-FZ200", "3100K", 0, { 1.362264, 1, 2.716981, 0 } }, { "Panasonic", "DMC-FZ200", "3200K", 0, { 1.392453, 1, 2.641509, 0 } }, { "Panasonic", "DMC-FZ200", "3300K", 0, { 1.422642, 1, 2.573585, 0 } }, { "Panasonic", "DMC-FZ200", "3400K", 0, { 1.452830, 1, 2.498113, 0 } }, { "Panasonic", "DMC-FZ200", "3500K", 0, { 1.490566, 1, 2.422642, 0 } }, { "Panasonic", "DMC-FZ200", "3600K", 0, { 1.520755, 1, 2.362264, 0 } }, { "Panasonic", "DMC-FZ200", "3700K", 0, { 1.558491, 1, 2.294340, 0 } }, { "Panasonic", "DMC-FZ200", "3800K", 0, { 1.588679, 1, 2.233962, 0 } }, { "Panasonic", "DMC-FZ200", "3900K", 0, { 1.626415, 1, 2.166038, 0 } }, { "Panasonic", "DMC-FZ200", "4000K", 0, { 1.664151, 1, 2.098113, 0 } }, { "Panasonic", "DMC-FZ200", "4100K", 0, { 1.686792, 1, 2.067925, 0 } }, { "Panasonic", "DMC-FZ200", "4200K", 0, { 1.720755, 1, 2.030189, 0 } }, { "Panasonic", "DMC-FZ200", "4300K", 0, { 1.750943, 1, 2.000000, 0 } }, { "Panasonic", "DMC-FZ200", "4400K", 0, { 1.781132, 1, 1.962264, 0 } }, { "Panasonic", "DMC-FZ200", "4500K", 0, { 1.811321, 1, 1.924528, 0 } }, { "Panasonic", "DMC-FZ200", "4600K", 0, { 1.830189, 1, 1.909434, 0 } }, { "Panasonic", "DMC-FZ200", "4700K", 0, { 1.852830, 1, 1.894340, 0 } }, { "Panasonic", "DMC-FZ200", "4800K", 0, { 1.879245, 1, 1.879245, 0 } }, { "Panasonic", "DMC-FZ200", "4900K", 0, { 1.905660, 1, 1.864151, 0 } }, { "Panasonic", "DMC-FZ200", "5000K", 0, { 1.928302, 1, 1.841509, 0 } }, { "Panasonic", "DMC-FZ200", "5100K", 0, { 1.939623, 1, 1.826415, 0 } }, { "Panasonic", "DMC-FZ200", "5200K", 0, { 1.958491, 1, 1.811321, 0 } }, { "Panasonic", "DMC-FZ200", "5300K", 0, { 1.977358, 1, 1.796226, 0 } }, { "Panasonic", "DMC-FZ200", "5400K", 0, { 1.996226, 1, 1.781132, 0 } }, { "Panasonic", "DMC-FZ200", "5500K", 0, { 2.015094, 1, 1.758491, 0 } }, { "Panasonic", "DMC-FZ200", "5600K", 0, { 2.033962, 1, 1.743396, 0 } }, { "Panasonic", "DMC-FZ200", "5700K", 0, { 2.052830, 1, 1.720755, 0 } }, { "Panasonic", "DMC-FZ200", "5800K", 0, { 2.075472, 1, 1.698113, 0 } }, { "Panasonic", "DMC-FZ200", "5900K", 0, { 2.094340, 1, 1.675472, 0 } }, { "Panasonic", "DMC-FZ200", "6000K", 0, { 2.120755, 1, 1.652830, 0 } }, { "Panasonic", "DMC-FZ200", "6100K", 0, { 2.132075, 1, 1.637736, 0 } }, { "Panasonic", "DMC-FZ200", "6200K", 0, { 2.150943, 1, 1.622642, 0 } }, { "Panasonic", "DMC-FZ200", "6300K", 0, { 2.169811, 1, 1.607547, 0 } }, { "Panasonic", "DMC-FZ200", "6400K", 0, { 2.184906, 1, 1.592453, 0 } }, { "Panasonic", "DMC-FZ200", "6500K", 0, { 2.203774, 1, 1.577358, 0 } }, { "Panasonic", "DMC-FZ200", "6600K", 0, { 2.211321, 1, 1.569811, 0 } }, { "Panasonic", "DMC-FZ200", "6700K", 0, { 2.218868, 1, 1.562264, 0 } }, { "Panasonic", "DMC-FZ200", "6800K", 0, { 2.230189, 1, 1.554717, 0 } }, { "Panasonic", "DMC-FZ200", "6900K", 0, { 2.237736, 1, 1.547170, 0 } }, { "Panasonic", "DMC-FZ200", "7000K", 0, { 2.249057, 1, 1.532075, 0 } }, { "Panasonic", "DMC-FZ200", "7100K", 0, { 2.260377, 1, 1.524528, 0 } }, { "Panasonic", "DMC-FZ200", "7200K", 0, { 2.279245, 1, 1.516981, 0 } }, { "Panasonic", "DMC-FZ200", "7300K", 0, { 2.290566, 1, 1.501887, 0 } }, { "Panasonic", "DMC-FZ200", "7400K", 0, { 2.309434, 1, 1.494340, 0 } }, { "Panasonic", "DMC-FZ200", "7500K", 0, { 2.328302, 1, 1.479245, 0 } }, { "Panasonic", "DMC-FZ200", "7600K", 0, { 2.343396, 1, 1.471698, 0 } }, { "Panasonic", "DMC-FZ200", "7700K", 0, { 2.354717, 1, 1.464151, 0 } }, { "Panasonic", "DMC-FZ200", "7800K", 0, { 2.366038, 1, 1.456604, 0 } }, { "Panasonic", "DMC-FZ200", "7900K", 0, { 2.377358, 1, 1.449057, 0 } }, { "Panasonic", "DMC-FZ200", "8000K", 0, { 2.388679, 1, 1.441509, 0 } }, { "Panasonic", "DMC-FZ200", "8100K", 0, { 2.396226, 1, 1.441509, 0 } }, { "Panasonic", "DMC-FZ200", "8200K", 0, { 2.407547, 1, 1.433962, 0 } }, { "Panasonic", "DMC-FZ200", "8300K", 0, { 2.415094, 1, 1.433962, 0 } }, { "Panasonic", "DMC-FZ200", "8400K", 0, { 2.426415, 1, 1.426415, 0 } }, { "Panasonic", "DMC-FZ200", "8500K", 0, { 2.437736, 1, 1.418868, 0 } }, { "Panasonic", "DMC-FZ200", "8600K", 0, { 2.445283, 1, 1.418868, 0 } }, { "Panasonic", "DMC-FZ200", "8700K", 0, { 2.452830, 1, 1.411321, 0 } }, { "Panasonic", "DMC-FZ200", "8800K", 0, { 2.464151, 1, 1.411321, 0 } }, { "Panasonic", "DMC-FZ200", "8900K", 0, { 2.471698, 1, 1.403774, 0 } }, { "Panasonic", "DMC-FZ200", "9000K", 0, { 2.483019, 1, 1.396226, 0 } }, { "Panasonic", "DMC-FZ200", "9100K", 0, { 2.486792, 1, 1.396226, 0 } }, { "Panasonic", "DMC-FZ200", "9200K", 0, { 2.494340, 1, 1.396226, 0 } }, { "Panasonic", "DMC-FZ200", "9300K", 0, { 2.501887, 1, 1.388679, 0 } }, { "Panasonic", "DMC-FZ200", "9400K", 0, { 2.505660, 1, 1.388679, 0 } }, { "Panasonic", "DMC-FZ200", "9500K", 0, { 2.520755, 1, 1.381132, 0 } }, { "Panasonic", "DMC-FZ200", "9600K", 0, { 2.524528, 1, 1.381132, 0 } }, { "Panasonic", "DMC-FZ200", "9700K", 0, { 2.532075, 1, 1.381132, 0 } }, { "Panasonic", "DMC-FZ200", "9800K", 0, { 2.543396, 1, 1.373585, 0 } }, { "Panasonic", "DMC-FZ200", "9900K", 0, { 2.550943, 1, 1.373585, 0 } }, { "Panasonic", "DMC-FZ200", "10000K", 0, { 2.562264, 1, 1.366038, 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 } }, /* Firmware version 1.1 */ { "Panasonic", "DMC-G6", Daylight, 0, { 2.265625, 1, 1.699219, 0 } }, { "Panasonic", "DMC-G6", Cloudy, 0, { 2.406250, 1, 1.593750, 0 } }, { "Panasonic", "DMC-G6", Shade, 0, { 2.617188, 1, 1.511719, 0 } }, { "Panasonic", "DMC-G6", Incandescent, 0, { 1.535156, 1, 2.375000, 0 } }, { "Panasonic", "DMC-G6", Flash, 0, { 2.332031, 1, 1.566406, 0 } }, /* Firmware version 1.2 */ /* -9/+9 fine tuning is -9/+9 in blue-amber and zero in magenta-green */ { "Panasonic", "DMC-GF1", Daylight, -9, { 1.817490, 1, 1.760456, 0 } }, { "Panasonic", "DMC-GF1", Daylight, 0, { 2.049430, 1, 1.437262, 0 } }, { "Panasonic", "DMC-GF1", Daylight, 9, { 2.368821, 1, 1.254753, 0 } }, { "Panasonic", "DMC-GF1", Cloudy, -9, { 1.969582, 1, 1.608365, 0 } }, { "Panasonic", "DMC-GF1", Cloudy, 0, { 2.220532, 1, 1.311787, 0 } }, { "Panasonic", "DMC-GF1", Cloudy, 9, { 2.566540, 1, 1.148289, 0 } }, { "Panasonic", "DMC-GF1", Shade, -9, { 2.171103, 1, 1.482890, 0 } }, { "Panasonic", "DMC-GF1", Shade, 0, { 2.448669, 1, 1.209125, 0 } }, { "Panasonic", "DMC-GF1", Shade, 9, { 2.832700, 1, 1.057034, 0 } }, { "Panasonic", "DMC-GF1", Incandescent, -9, { 1.231939, 1, 2.623574, 0 } }, { "Panasonic", "DMC-GF1", Incandescent, 0, { 1.391635, 1, 2.136882, 0 } }, { "Panasonic", "DMC-GF1", Incandescent, 9, { 1.608365, 1, 1.870722, 0 } }, { "Panasonic", "DMC-GF1", Flash, -9, { 2.125475, 1, 1.528517, 0 } }, { "Panasonic", "DMC-GF1", Flash, 0, { 2.399239, 1, 1.247148, 0 } }, { "Panasonic", "DMC-GF1", Flash, 9, { 2.775665, 1, 1.091255, 0 } }, { "Panasonic", "DMC-GF1", "2500K", 0, { 1.068441, 1, 2.760456, 0 } }, { "Panasonic", "DMC-GF1", "2600K", 0, { 1.110266, 1, 2.676806, 0 } }, { "Panasonic", "DMC-GF1", "2700K", 0, { 1.155894, 1, 2.589354, 0 } }, { "Panasonic", "DMC-GF1", "2800K", 0, { 1.193916, 1, 2.501901, 0 } }, { "Panasonic", "DMC-GF1", "2900K", 0, { 1.239544, 1, 2.414449, 0 } }, { "Panasonic", "DMC-GF1", "3000K", 0, { 1.285171, 1, 2.319392, 0 } }, { "Panasonic", "DMC-GF1", "3100K", 0, { 1.323194, 1, 2.239544, 0 } }, { "Panasonic", "DMC-GF1", "3200K", 0, { 1.357415, 1, 2.159696, 0 } }, { "Panasonic", "DMC-GF1", "3300K", 0, { 1.391635, 1, 2.079848, 0 } }, { "Panasonic", "DMC-GF1", "3400K", 0, { 1.425856, 1, 2.000000, 0 } }, { "Panasonic", "DMC-GF1", "3500K", 0, { 1.463878, 1, 1.920152, 0 } }, { "Panasonic", "DMC-GF1", "3600K", 0, { 1.509506, 1, 1.878327, 0 } }, { "Panasonic", "DMC-GF1", "3700K", 0, { 1.555133, 1, 1.832700, 0 } }, { "Panasonic", "DMC-GF1", "3800K", 0, { 1.600761, 1, 1.790875, 0 } }, { "Panasonic", "DMC-GF1", "3900K", 0, { 1.646388, 1, 1.745247, 0 } }, { "Panasonic", "DMC-GF1", "4000K", 0, { 1.695817, 1, 1.695817, 0 } }, { "Panasonic", "DMC-GF1", "4100K", 0, { 1.730038, 1, 1.673004, 0 } }, { "Panasonic", "DMC-GF1", "4200K", 0, { 1.768061, 1, 1.653992, 0 } }, { "Panasonic", "DMC-GF1", "4300K", 0, { 1.802281, 1, 1.631179, 0 } }, { "Panasonic", "DMC-GF1", "4400K", 0, { 1.836502, 1, 1.608365, 0 } }, { "Panasonic", "DMC-GF1", "4500K", 0, { 1.874525, 1, 1.581749, 0 } }, { "Panasonic", "DMC-GF1", "4600K", 0, { 1.885932, 1, 1.566540, 0 } }, { "Panasonic", "DMC-GF1", "4700K", 0, { 1.908745, 1, 1.551331, 0 } }, { "Panasonic", "DMC-GF1", "4800K", 0, { 1.927757, 1, 1.536122, 0 } }, { "Panasonic", "DMC-GF1", "4900K", 0, { 1.946768, 1, 1.520913, 0 } }, { "Panasonic", "DMC-GF1", "5000K", 0, { 1.969582, 1, 1.501901, 0 } }, { "Panasonic", "DMC-GF1", "5100K", 0, { 1.984791, 1, 1.494296, 0 } }, { "Panasonic", "DMC-GF1", "5200K", 0, { 2.000000, 1, 1.479087, 0 } }, { "Panasonic", "DMC-GF1", "5300K", 0, { 2.015209, 1, 1.463878, 0 } }, { "Panasonic", "DMC-GF1", "5400K", 0, { 2.030418, 1, 1.448669, 0 } }, { "Panasonic", "DMC-GF1", "5500K", 0, { 2.049430, 1, 1.437262, 0 } }, { "Panasonic", "DMC-GF1", "5600K", 0, { 2.076046, 1, 1.422053, 0 } }, { "Panasonic", "DMC-GF1", "5700K", 0, { 2.098859, 1, 1.406844, 0 } }, { "Panasonic", "DMC-GF1", "5800K", 0, { 2.125475, 1, 1.384030, 0 } }, { "Panasonic", "DMC-GF1", "5900K", 0, { 2.152091, 1, 1.368821, 0 } }, { "Panasonic", "DMC-GF1", "6000K", 0, { 2.174905, 1, 1.349810, 0 } }, { "Panasonic", "DMC-GF1", "6100K", 0, { 2.197719, 1, 1.342205, 0 } }, { "Panasonic", "DMC-GF1", "6200K", 0, { 2.216730, 1, 1.326996, 0 } }, { "Panasonic", "DMC-GF1", "6300K", 0, { 2.243346, 1, 1.311787, 0 } }, { "Panasonic", "DMC-GF1", "6400K", 0, { 2.262357, 1, 1.296578, 0 } }, { "Panasonic", "DMC-GF1", "6500K", 0, { 2.288973, 1, 1.281369, 0 } }, { "Panasonic", "DMC-GF1", "6600K", 0, { 2.304183, 1, 1.277567, 0 } }, { "Panasonic", "DMC-GF1", "6700K", 0, { 2.323194, 1, 1.266160, 0 } }, { "Panasonic", "DMC-GF1", "6800K", 0, { 2.342205, 1, 1.254753, 0 } }, { "Panasonic", "DMC-GF1", "6900K", 0, { 2.365019, 1, 1.247148, 0 } }, { "Panasonic", "DMC-GF1", "7000K", 0, { 2.384030, 1, 1.231939, 0 } }, { "Panasonic", "DMC-GF1", "7100K", 0, { 2.403042, 1, 1.224335, 0 } }, { "Panasonic", "DMC-GF1", "7200K", 0, { 2.425856, 1, 1.216730, 0 } }, { "Panasonic", "DMC-GF1", "7300K", 0, { 2.444867, 1, 1.209125, 0 } }, { "Panasonic", "DMC-GF1", "7400K", 0, { 2.463878, 1, 1.201521, 0 } }, { "Panasonic", "DMC-GF1", "7500K", 0, { 2.490494, 1, 1.190114, 0 } }, { "Panasonic", "DMC-GF1", "7600K", 0, { 2.501901, 1, 1.190114, 0 } }, { "Panasonic", "DMC-GF1", "7700K", 0, { 2.509506, 1, 1.182509, 0 } }, { "Panasonic", "DMC-GF1", "7800K", 0, { 2.520913, 1, 1.182509, 0 } }, { "Panasonic", "DMC-GF1", "7900K", 0, { 2.532319, 1, 1.174905, 0 } }, { "Panasonic", "DMC-GF1", "8000K", 0, { 2.547528, 1, 1.167300, 0 } }, { "Panasonic", "DMC-GF1", "8100K", 0, { 2.555133, 1, 1.167300, 0 } }, { "Panasonic", "DMC-GF1", "8200K", 0, { 2.566540, 1, 1.159696, 0 } }, { "Panasonic", "DMC-GF1", "8300K", 0, { 2.574145, 1, 1.152091, 0 } }, { "Panasonic", "DMC-GF1", "8400K", 0, { 2.585551, 1, 1.144487, 0 } }, { "Panasonic", "DMC-GF1", "8500K", 0, { 2.600760, 1, 1.136882, 0 } }, { "Panasonic", "DMC-GF1", "8600K", 0, { 2.612167, 1, 1.136882, 0 } }, { "Panasonic", "DMC-GF1", "8700K", 0, { 2.623574, 1, 1.129278, 0 } }, { "Panasonic", "DMC-GF1", "8800K", 0, { 2.634981, 1, 1.129278, 0 } }, { "Panasonic", "DMC-GF1", "8900K", 0, { 2.646388, 1, 1.121673, 0 } }, { "Panasonic", "DMC-GF1", "9000K", 0, { 2.661597, 1, 1.117871, 0 } }, { "Panasonic", "DMC-GF1", "9100K", 0, { 2.673004, 1, 1.117871, 0 } }, { "Panasonic", "DMC-GF1", "9200K", 0, { 2.684411, 1, 1.110266, 0 } }, { "Panasonic", "DMC-GF1", "9300K", 0, { 2.692015, 1, 1.110266, 0 } }, { "Panasonic", "DMC-GF1", "9400K", 0, { 2.703422, 1, 1.102662, 0 } }, { "Panasonic", "DMC-GF1", "9500K", 0, { 2.718631, 1, 1.095057, 0 } }, { "Panasonic", "DMC-GF1", "9600K", 0, { 2.726236, 1, 1.095057, 0 } }, { "Panasonic", "DMC-GF1", "9700K", 0, { 2.737643, 1, 1.087452, 0 } }, { "Panasonic", "DMC-GF1", "9800K", 0, { 2.752852, 1, 1.079848, 0 } }, { "Panasonic", "DMC-GF1", "9900K", 0, { 2.764259, 1, 1.072243, 0 } }, { "Panasonic", "DMC-GF1", "10000K", 0, { 2.779468, 1, 1.064639, 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-GH2", Cloudy, 0, { 2.520913, 1, 1.547529, 0 } }, { "Panasonic", "DMC-GH2", Daylight, 0, { 2.399240, 1, 1.634981, 0 } }, { "Panasonic", "DMC-GH2", Flash, 0, { 2.745247, 1, 1.444867, 0 } }, { "Panasonic", "DMC-GH2", Incandescent, 0, { 1.634981, 1, 2.307985, 0 } }, { "Panasonic", "DMC-GH2", Shade, 0, { 2.718631, 1, 1.460076, 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 } }, /* Firmware version 1.1 */ /* -9/+9 fine tuning is -9/+9 in blue-amber and zero in magenta-green */ { "Panasonic", "DMC-GX1", Daylight, -9, { 2.256604, 1, 1.916981, 0 } }, { "Panasonic", "DMC-GX1", Daylight, 0, { 2.611321, 1, 1.615094, 0 } }, { "Panasonic", "DMC-GX1", Daylight, 9, { 3.060377, 1, 1.411321, 0 } }, { "Panasonic", "DMC-GX1", Cloudy, -9, { 2.407547, 1, 1.796226, 0 } }, { "Panasonic", "DMC-GX1", Cloudy, 0, { 2.792453, 1, 1.513208, 0 } }, { "Panasonic", "DMC-GX1", Cloudy, 9, { 3.271698, 1, 1.324528, 0 } }, { "Panasonic", "DMC-GX1", Shade, -9, { 2.626415, 1, 1.698113, 0 } }, { "Panasonic", "DMC-GX1", Shade, 0, { 3.045283, 1, 1.430189, 0 } }, { "Panasonic", "DMC-GX1", Shade, 9, { 3.569811, 1, 1.249057, 0 } }, { "Panasonic", "DMC-GX1", Incandescent, -9, { 1.464151, 1, 2.864151, 0 } }, { "Panasonic", "DMC-GX1", Incandescent, 0, { 1.698113, 1, 2.415094, 0 } }, { "Panasonic", "DMC-GX1", Incandescent, 9, { 1.988679, 1, 2.109434, 0 } }, { "Panasonic", "DMC-GX1", Flash, -9, { 2.683019, 1, 1.667925, 0 } }, { "Panasonic", "DMC-GX1", Flash, 0, { 3.109434, 1, 1.407547, 0 } }, { "Panasonic", "DMC-GX1", Flash, 9, { 3.645283, 1, 1.230189, 0 } }, { "Panasonic", "DMC-GX1", "2500K", 0, { 1.286792, 1, 3.052830, 0 } }, { "Panasonic", "DMC-GX1", "2600K", 0, { 1.339623, 1, 2.966038, 0 } }, { "Panasonic", "DMC-GX1", "2700K", 0, { 1.392453, 1, 2.875472, 0 } }, { "Panasonic", "DMC-GX1", "2800K", 0, { 1.452830, 1, 2.781132, 0 } }, { "Panasonic", "DMC-GX1", "2900K", 0, { 1.505660, 1, 2.690566, 0 } }, { "Panasonic", "DMC-GX1", "3000K", 0, { 1.566038, 1, 2.596226, 0 } }, { "Panasonic", "DMC-GX1", "3100K", 0, { 1.615094, 1, 2.513208, 0 } }, { "Panasonic", "DMC-GX1", "3200K", 0, { 1.667925, 1, 2.418868, 0 } }, { "Panasonic", "DMC-GX1", "3300K", 0, { 1.728302, 1, 2.335849, 0 } }, { "Panasonic", "DMC-GX1", "3400K", 0, { 1.777359, 1, 2.245283, 0 } }, { "Panasonic", "DMC-GX1", "3500K", 0, { 1.837736, 1, 2.150943, 0 } }, { "Panasonic", "DMC-GX1", "3600K", 0, { 1.898113, 1, 2.105660, 0 } }, { "Panasonic", "DMC-GX1", "3700K", 0, { 1.958491, 1, 2.052830, 0 } }, { "Panasonic", "DMC-GX1", "3800K", 0, { 2.022642, 1, 2.000000, 0 } }, { "Panasonic", "DMC-GX1", "3900K", 0, { 2.083019, 1, 1.943396, 0 } }, { "Panasonic", "DMC-GX1", "4000K", 0, { 2.150943, 1, 1.890566, 0 } }, { "Panasonic", "DMC-GX1", "4100K", 0, { 2.196226, 1, 1.867925, 0 } }, { "Panasonic", "DMC-GX1", "4200K", 0, { 2.241509, 1, 1.845283, 0 } }, { "Panasonic", "DMC-GX1", "4300K", 0, { 2.286792, 1, 1.815094, 0 } }, { "Panasonic", "DMC-GX1", "4400K", 0, { 2.328302, 1, 1.788679, 0 } }, { "Panasonic", "DMC-GX1", "4500K", 0, { 2.373585, 1, 1.758491, 0 } }, { "Panasonic", "DMC-GX1", "4600K", 0, { 2.388679, 1, 1.750943, 0 } }, { "Panasonic", "DMC-GX1", "4700K", 0, { 2.403774, 1, 1.735849, 0 } }, { "Panasonic", "DMC-GX1", "4800K", 0, { 2.426415, 1, 1.728302, 0 } }, { "Panasonic", "DMC-GX1", "4900K", 0, { 2.441510, 1, 1.713208, 0 } }, { "Panasonic", "DMC-GX1", "5000K", 0, { 2.464151, 1, 1.698113, 0 } }, { "Panasonic", "DMC-GX1", "5100K", 0, { 2.494340, 1, 1.683019, 0 } }, { "Panasonic", "DMC-GX1", "5200K", 0, { 2.524528, 1, 1.667924, 0 } }, { "Panasonic", "DMC-GX1", "5300K", 0, { 2.554717, 1, 1.652830, 0 } }, { "Panasonic", "DMC-GX1", "5400K", 0, { 2.581132, 1, 1.637736, 0 } }, { "Panasonic", "DMC-GX1", "5500K", 0, { 2.611321, 1, 1.615094, 0 } }, { "Panasonic", "DMC-GX1", "5600K", 0, { 2.633962, 1, 1.603774, 0 } }, { "Panasonic", "DMC-GX1", "5700K", 0, { 2.656604, 1, 1.588679, 0 } }, { "Panasonic", "DMC-GX1", "5800K", 0, { 2.686792, 1, 1.573585, 0 } }, { "Panasonic", "DMC-GX1", "5900K", 0, { 2.709434, 1, 1.558491, 0 } }, { "Panasonic", "DMC-GX1", "6000K", 0, { 2.739623, 1, 1.543396, 0 } }, { "Panasonic", "DMC-GX1", "6100K", 0, { 2.762264, 1, 1.535849, 0 } }, { "Panasonic", "DMC-GX1", "6200K", 0, { 2.784906, 1, 1.528302, 0 } }, { "Panasonic", "DMC-GX1", "6300K", 0, { 2.807547, 1, 1.513208, 0 } }, { "Panasonic", "DMC-GX1", "6400K", 0, { 2.830189, 1, 1.505660, 0 } }, { "Panasonic", "DMC-GX1", "6500K", 0, { 2.860377, 1, 1.490566, 0 } }, { "Panasonic", "DMC-GX1", "6600K", 0, { 2.879245, 1, 1.483019, 0 } }, { "Panasonic", "DMC-GX1", "6700K", 0, { 2.901887, 1, 1.475472, 0 } }, { "Panasonic", "DMC-GX1", "6800K", 0, { 2.924528, 1, 1.467925, 0 } }, { "Panasonic", "DMC-GX1", "6900K", 0, { 2.947170, 1, 1.460377, 0 } }, { "Panasonic", "DMC-GX1", "7000K", 0, { 2.977359, 1, 1.452830, 0 } }, { "Panasonic", "DMC-GX1", "7100K", 0, { 3.000000, 1, 1.445283, 0 } }, { "Panasonic", "DMC-GX1", "7200K", 0, { 3.022642, 1, 1.437736, 0 } }, { "Panasonic", "DMC-GX1", "7300K", 0, { 3.045283, 1, 1.430189, 0 } }, { "Panasonic", "DMC-GX1", "7400K", 0, { 3.067925, 1, 1.418868, 0 } }, { "Panasonic", "DMC-GX1", "7500K", 0, { 3.098113, 1, 1.407547, 0 } }, { "Panasonic", "DMC-GX1", "7600K", 0, { 3.109434, 1, 1.407547, 0 } }, { "Panasonic", "DMC-GX1", "7700K", 0, { 3.128302, 1, 1.396226, 0 } }, { "Panasonic", "DMC-GX1", "7800K", 0, { 3.139623, 1, 1.396226, 0 } }, { "Panasonic", "DMC-GX1", "7900K", 0, { 3.154717, 1, 1.388679, 0 } }, { "Panasonic", "DMC-GX1", "8000K", 0, { 3.169811, 1, 1.381132, 0 } }, { "Panasonic", "DMC-GX1", "8100K", 0, { 3.184906, 1, 1.381132, 0 } }, { "Panasonic", "DMC-GX1", "8200K", 0, { 3.200000, 1, 1.373585, 0 } }, { "Panasonic", "DMC-GX1", "8300K", 0, { 3.215094, 1, 1.373585, 0 } }, { "Panasonic", "DMC-GX1", "8400K", 0, { 3.230189, 1, 1.366038, 0 } }, { "Panasonic", "DMC-GX1", "8500K", 0, { 3.252830, 1, 1.358491, 0 } }, { "Panasonic", "DMC-GX1", "8600K", 0, { 3.267925, 1, 1.358491, 0 } }, { "Panasonic", "DMC-GX1", "8700K", 0, { 3.283019, 1, 1.350943, 0 } }, { "Panasonic", "DMC-GX1", "8800K", 0, { 3.298113, 1, 1.350943, 0 } }, { "Panasonic", "DMC-GX1", "8900K", 0, { 3.313207, 1, 1.343396, 0 } }, { "Panasonic", "DMC-GX1", "9000K", 0, { 3.328302, 1, 1.335849, 0 } }, { "Panasonic", "DMC-GX1", "9100K", 0, { 3.335849, 1, 1.335849, 0 } }, { "Panasonic", "DMC-GX1", "9200K", 0, { 3.350944, 1, 1.328302, 0 } }, { "Panasonic", "DMC-GX1", "9300K", 0, { 3.366038, 1, 1.328302, 0 } }, { "Panasonic", "DMC-GX1", "9400K", 0, { 3.377359, 1, 1.320755, 0 } }, { "Panasonic", "DMC-GX1", "9500K", 0, { 3.396226, 1, 1.313208, 0 } }, { "Panasonic", "DMC-GX1", "9600K", 0, { 3.411321, 1, 1.313208, 0 } }, { "Panasonic", "DMC-GX1", "9700K", 0, { 3.422642, 1, 1.313208, 0 } }, { "Panasonic", "DMC-GX1", "9800K", 0, { 3.437736, 1, 1.305660, 0 } }, { "Panasonic", "DMC-GX1", "9900K", 0, { 3.452830, 1, 1.305660, 0 } }, { "Panasonic", "DMC-GX1", "10000K", 0, { 3.467925, 1, 1.298113, 0 } }, { "Panasonic", "DMC-GX7", "Daylight", 0, { 2.539623, 1, 1.611321, 0 } }, { "Panasonic", "DMC-GX7", "Cloudy", 0, { 2.667925, 1, 1.509434, 0 } }, { "Panasonic", "DMC-GX7", "Shade", 0, { 2.879245, 1, 1.422642, 0 } }, { "Panasonic", "DMC-GX7", "Incandescent", 0, { 1.758491, 1, 2.320755, 0 } }, { "Panasonic", "DMC-GX7", "Flash", 0, { 2.607547, 1, 1.479245, 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 } }, /* DSP Firmware version 1.04.00.11 */ { "PENTAX", "K20D", Daylight, 0, { 1.578735, 1, 1.263428, 0 } }, { "PENTAX", "K20D", Shade, 0, { 1.800293, 1, 0.961304, 0 } }, { "PENTAX", "K20D", Cloudy, 0, { 1.673706, 1, 1.116943, 0 } }, { "PENTAX", "K20D", DaylightFluorescent, 0, { 2.089111, 1, 1.190186, 0 } }, { "PENTAX", "K20D", NeutralFluorescent, 0, { 1.772583, 1, 1.354980, 0 } }, { "PENTAX", "K20D", WhiteFluorescent, 0, { 1.653931, 1, 1.684570, 0 } }, { "PENTAX", "K20D", Tungsten, 0, { 1.012939, 1, 2.343750, 0 } }, { "PENTAX", "K20D", Flash, 0, { 1.673706, 1, 1.190186, 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-01 Firmware Version 1.00 */ { "PENTAX", "K-01", Daylight, 0, { 2.197021, 1, 1.613647, 0 } }, { "PENTAX", "K-01", Shade, 0, { 2.625122, 1, 1.204348, 0 } }, { "PENTAX", "K-01", Cloudy, 0, { 2.367188, 1, 1.379761, 0 } }, { "PENTAX", "K-01", DaylightFluorescent, 0, { 2.712769, 1, 1.555176, 0 } }, { "PENTAX", "K-01", WhiteFluorescent, 0, { 2.325928, 1, 1.730591, 0 } }, { "PENTAX", "K-01", CoolWhiteFluorescent, 0, { 2.114502, 1, 2.139893, 0 } }, { "PENTAX", "K-01", WarmWhiteFluorescent, 0, { 1.768921, 1, 2.677734, 0 } }, { "PENTAX", "K-01", Tungsten, 0, { 1.320313, 1, 2.993530, 0 } }, { "PENTAX", "K-01", Flash, 0, { 2.490967, 1, 1.484985, 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-30 (FW v1.05) { "PENTAX", "K-30", Daylight, 0, { 2.213013, 1, 1.629150, 0 } }, { "PENTAX", "K-30", Shade, 0, { 2.644287, 1, 1.215942, 0 } }, { "PENTAX", "K-30", Cloudy, 0, { 2.384521, 1, 1.392944, 0 } }, { "PENTAX", "K-30", DaylightFluorescent, 0, { 2.732544, 1, 1.570068, 0 } }, { "PENTAX", "K-30", WhiteFluorescent, 0, { 2.342896, 1, 1.747192, 0 } }, { "PENTAX", "K-30", CoolWhiteFluorescent, 0, { 2.130005, 1, 2.160400, 0 } }, { "PENTAX", "K-30", WarmWhiteFluorescent, 0, { 1.781860, 1, 2.703369, 0 } }, { "PENTAX", "K-30", Tungsten, 0, { 1.329956, 1, 3.022217, 0 } }, { "PENTAX", "K-30", Flash, 0, { 2.509155, 1, 1.499268, 0 } }, /* PENTAX K-50 Firmware Version 1.00 */ { "PENTAX", "K-50", Daylight, 0, { 2.244385, 1, 1.560303, 0 } }, { "PENTAX", "K-50", Shade, 0, { 2.681641, 1, 1.164551, 0 } }, { "PENTAX", "K-50", Cloudy, 0, { 2.418213, 1, 1.334229, 0 } }, { "PENTAX", "K-50", DaylightFluorescent, 0, { 2.771240, 1, 1.503784, 0 } }, { "PENTAX", "K-50", WhiteFluorescent, 0, { 2.376099, 1, 1.673462, 0 } }, { "PENTAX", "K-50", CoolWhiteFluorescent, 0, { 2.160034, 1, 2.069214, 0 } }, { "PENTAX", "K-50", WarmWhiteFluorescent, 0, { 1.807007, 1, 2.589355, 0 } }, { "PENTAX", "K-50", Tungsten, 0, { 1.348755, 1, 2.894653, 0 } }, { "PENTAX", "K-50", Flash, 0, { 2.544678, 1, 1.435913, 0 } }, /* PENTAX K-500 Firmware Version 1.00 */ { "PENTAX", "K-500", Daylight, 0, { 2.207642, 1, 1.606079, 0 } }, { "PENTAX", "K-500", Shade, 0, { 2.637695, 1, 1.198730, 0 } }, { "PENTAX", "K-500", Cloudy, 0, { 2.378540, 1, 1.373413, 0 } }, { "PENTAX", "K-500", DaylightFluorescent, 0, { 2.725830, 1, 1.547974, 0 } }, { "PENTAX", "K-500", WhiteFluorescent, 0, { 2.337158, 1, 1.722534, 0 } }, { "PENTAX", "K-500", CoolWhiteFluorescent, 0, { 2.124634, 1, 2.129883, 0 } }, { "PENTAX", "K-500", WarmWhiteFluorescent, 0, { 1.777466, 1, 2.665283, 0 } }, { "PENTAX", "K-500", Tungsten, 0, { 1.326660, 1, 2.979614, 0 } }, { "PENTAX", "K-500", Flash, 0, { 2.502930, 1, 1.478149, 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 } }, /* PENTAX Q Firmware Version 1.00 */ { "PENTAX", "Q", Daylight, 0, { 1.515137, 1, 1.858890, 0 } }, { "PENTAX", "Q", Shade, 0, { 1.818237, 1, 1.417951, 0 } }, { "PENTAX", "Q", Cloudy, 0, { 1.704590, 1, 1.608584, 0 } }, { "PENTAX", "Q", DaylightFluorescent, 0, { 1.969727, 1, 1.787356, 0 } }, { "PENTAX", "Q", WhiteFluorescent, 0, { 1.742432, 1, 2.025679, 0 } }, { "PENTAX", "Q", CoolWhiteFluorescent, 0, { 1.579590, 1, 2.502323, 0 } }, { "PENTAX", "Q", WarmWhiteFluorescent, 0, { 1.325684, 1, 2.907435, 0 } }, { "PENTAX", "Q", Tungsten, 0, { 0.969727, 1, 3.050501, 0 } }, { "PENTAX", "Q", Flash, 0, { 1.829590, 1, 1.513328, 0 } }, /* PENTAX Q7 Firmware Version 1.00 */ { "PENTAX", "Q7", Daylight, 0, { 1.668823, 1, 1.794344, 0 } }, { "PENTAX", "Q7", Shade, 0, { 2.050293, 1, 1.401073, 0 } }, { "PENTAX", "Q7", Cloudy, 0, { 1.923096, 1, 1.597708, 0 } }, { "PENTAX", "Q7", DaylightFluorescent, 0, { 2.221069, 1, 1.769840, 0 } }, { "PENTAX", "Q7", WhiteFluorescent, 0, { 1.907227, 1, 2.003291, 0 } }, { "PENTAX", "Q7", CoolWhiteFluorescent, 0, { 1.780029, 1, 2.482628, 0 } }, { "PENTAX", "Q7", WarmWhiteFluorescent, 0, { 1.494019, 1, 2.888212, 0 } }, { "PENTAX", "Q7", Tungsten, 0, { 1.017212, 1, 3.146410, 0 } }, { "PENTAX", "Q7", Flash, 0, { 1.986694, 1, 1.499451, 0 } }, /* PENTAX Q10 Firmware Version 1.00 */ { "PENTAX", "Q10", Daylight, 0, { 1.561401, 1, 1.653244, 0 } }, { "PENTAX", "Q10", Shade, 0, { 1.965088, 1, 1.327173, 0 } }, { "PENTAX", "Q10", Cloudy, 0, { 1.843262, 1, 1.513464, 0 } }, { "PENTAX", "Q10", DaylightFluorescent, 0, { 2.128906, 1, 1.676499, 0 } }, { "PENTAX", "Q10", WhiteFluorescent, 0, { 1.828003, 1, 1.897674, 0 } }, { "PENTAX", "Q10", CoolWhiteFluorescent, 0, { 1.706177, 1, 2.351775, 0 } }, { "PENTAX", "Q10", WarmWhiteFluorescent, 0, { 1.431885, 1, 2.735985, 0 } }, { "PENTAX", "Q10", Tungsten, 0, { 0.974976, 1, 2.980539, 0 } }, { "PENTAX", "Q10", Flash, 0, { 1.904175, 1, 1.420318, 0 } }, /* PENTAX 645D Firmware Version 1.00 */ { "PENTAX", "645D", Daylight, 0, { 1.805664, 1, 1.327393, 0 } }, { "PENTAX", "645D", Shade, 0, { 2.092651, 1, 0.983276, 0 } }, { "PENTAX", "645D", Cloudy, 0, { 1.916016, 1, 1.106079, 0 } }, { "PENTAX", "645D", DaylightFluorescent, 0, { 2.207397, 1, 1.294556, 0 } }, { "PENTAX", "645D", WhiteFluorescent, 0, { 1.889526, 1, 1.458496, 0 } }, { "PENTAX", "645D", CoolWhiteFluorescent, 0, { 1.748291, 1, 1.737061, 0 } }, { "PENTAX", "645D", WarmWhiteFluorescent, 0, { 1.492188, 1, 2.146729, 0 } }, { "PENTAX", "645D", Tungsten, 0, { 1.130249, 1, 2.097656, 0 } }, { "PENTAX", "645D", Flash, 0, { 1.986694, 1, 1.081543, 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 } }, /* RICOH PENTAX K-3 Firmware version 1.00 */ { "RICOH", "PENTAX K-3", Daylight, 0, { 2.31250, 1, 1.48047, 0 } }, { "RICOH", "PENTAX K-3", Shade, 0, { 2.78516, 1, 1.16797, 0 } }, { "RICOH", "PENTAX K-3", Cloudy, 0, { 2.49219, 1, 1.35156, 0 } }, { "RICOH", "PENTAX K-3", Tungsten, 0, { 1.35938, 1, 2.74609, 0 } }, { "RICOH", "PENTAX K-3", DaylightFluorescent, 0, { 2.71094, 1, 1.51953, 0 } }, { "RICOH", "PENTAX K-3", DayWhiteFluorescent, 0, { 2.30469, 1, 1.70312, 0 } }, { "RICOH", "PENTAX K-3", WhiteFluorescent, 0, { 2.07031, 1, 2.03516, 0 } }, { "RICOH", "PENTAX K-3", WarmWhiteFluorescent, 0, { 1.74609, 1, 2.53125, 0 } }, { "RICOH", "PENTAX K-3", Flash, 0, { 2.56641, 1, 1.31641, 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 } }, // Copied from SAMSUNG NX100 { "SAMSUNG", "NX5", Daylight, -7, { 1.566333, 1, 1.526753, 0 } }, { "SAMSUNG", "NX5", Daylight, -6, { 1.593941, 1, 1.475202, 0 } }, { "SAMSUNG", "NX5", Daylight, -5, { 1.621793, 1, 1.423650, 0 } }, { "SAMSUNG", "NX5", Daylight, -4, { 1.649401, 1, 1.371854, 0 } }, { "SAMSUNG", "NX5", Daylight, -3, { 1.677010, 1, 1.320303, 0 } }, { "SAMSUNG", "NX5", Daylight, -2, { 1.704618, 1, 1.268507, 0 } }, { "SAMSUNG", "NX5", Daylight, -1, { 1.732470, 1, 1.216956, 0 } }, { "SAMSUNG", "NX5", Daylight, 0, { 1.760078, 1, 1.165404, 0 } }, { "SAMSUNG", "NX5", Daylight, 1, { 1.790129, 1, 1.137063, 0 } }, { "SAMSUNG", "NX5", Daylight, 2, { 1.820425, 1, 1.108722, 0 } }, { "SAMSUNG", "NX5", Daylight, 3, { 1.850721, 1, 1.080381, 0 } }, { "SAMSUNG", "NX5", Daylight, 4, { 1.880772, 1, 1.052040, 0 } }, { "SAMSUNG", "NX5", Daylight, 5, { 1.911068, 1, 1.023699, 0 } }, { "SAMSUNG", "NX5", Daylight, 6, { 1.941377, 1, 0.995622, 0 } }, { "SAMSUNG", "NX5", Daylight, 7, { 1.971874, 1, 0.967384, 0 } }, { "SAMSUNG", "NX5", Cloudy, -7, { 1.638896, 1, 1.446372, 0 } }, { "SAMSUNG", "NX5", Cloudy, -6, { 1.667725, 1, 1.397508, 0 } }, { "SAMSUNG", "NX5", Cloudy, -5, { 1.696555, 1, 1.348644, 0 } }, { "SAMSUNG", "NX5", Cloudy, -4, { 1.725629, 1, 1.299780, 0 } }, { "SAMSUNG", "NX5", Cloudy, -3, { 1.754459, 1, 1.250672, 0 } }, { "SAMSUNG", "NX5", Cloudy, -2, { 1.783533, 1, 1.201808, 0 } }, { "SAMSUNG", "NX5", Cloudy, -1, { 1.812607, 1, 1.152944, 0 } }, { "SAMSUNG", "NX5", Cloudy, 0, { 1.841437, 1, 1.103836, 0 } }, { "SAMSUNG", "NX5", Cloudy, 1, { 1.872954, 1, 1.077205, 0 } }, { "SAMSUNG", "NX5", Cloudy, 2, { 1.904471, 1, 1.050330, 0 } }, { "SAMSUNG", "NX5", Cloudy, 3, { 1.936233, 1, 1.023455, 0 } }, { "SAMSUNG", "NX5", Cloudy, 4, { 1.967852, 1, 0.996834, 0 } }, { "SAMSUNG", "NX5", Cloudy, 5, { 1.999289, 1, 0.969905, 0 } }, { "SAMSUNG", "NX5", Cloudy, 6, { 2.030876, 1, 0.943088, 0 } }, { "SAMSUNG", "NX5", Cloudy, 7, { 2.062458, 1, 0.916275, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -7, { 1.526020, 1, 2.316638, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -6, { 1.553140, 1, 2.238212, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -5, { 1.580015, 1, 2.159785, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -4, { 1.606890, 1, 2.081603, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -3, { 1.634009, 1, 2.003176, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -2, { 1.660884, 1, 1.924750, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, -1, { 1.687760, 1, 1.846567, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 0, { 1.714879, 1, 1.768141, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 1, { 1.744197, 1, 1.725140, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 2, { 1.773516, 1, 1.682140, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 3, { 1.803078, 1, 1.639384, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 4, { 1.832397, 1, 1.596384, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 5, { 1.861959, 1, 1.553384, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 6, { 1.891522, 1, 1.510628, 0 } }, { "SAMSUNG", "NX5", WhiteFluorescent, 7, { 1.920596, 1, 1.467628, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -7, { 1.691180, 1, 1.884437, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -6, { 1.720987, 1, 1.821158, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -5, { 1.751038, 1, 1.757146, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -4, { 1.780845, 1, 1.693379, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -3, { 1.810897, 1, 1.629612, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -2, { 1.840704, 1, 1.565844, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, -1, { 1.870755, 1, 1.502077, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 0, { 1.900318, 1, 1.438309, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 1, { 1.933056, 1, 1.403616, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 2, { 1.965795, 1, 1.368678, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 3, { 1.998045, 1, 1.333741, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 4, { 2.030784, 1, 1.298803, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 5, { 2.063279, 1, 1.263621, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 6, { 2.095773, 1, 1.228927, 0 } }, { "SAMSUNG", "NX5", NeutralFluorescent, 7, { 2.128756, 1, 1.193990, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -7, { 1.995358, 1, 1.613731, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -6, { 2.030784, 1, 1.559492, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -5, { 2.065722, 1, 1.504764, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -4, { 2.101393, 1, 1.450037, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -3, { 2.136330, 1, 1.395553, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -2, { 2.171757, 1, 1.341070, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, -1, { 2.207183, 1, 1.286343, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 0, { 2.242365, 1, 1.231859, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 1, { 2.280723, 1, 1.202052, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 2, { 2.319326, 1, 1.172001, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 3, { 2.357684, 1, 1.142194, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 4, { 2.396042, 1, 1.112143, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 5, { 2.434645, 1, 1.082336, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 6, { 2.473003, 1, 1.052284, 0 } }, { "SAMSUNG", "NX5", DaylightFluorescent, 7, { 2.511361, 1, 1.022233, 0 } }, { "SAMSUNG", "NX5", Tungsten, -7, { 0.951650, 1, 3.086007, 0 } }, { "SAMSUNG", "NX5", Tungsten, -6, { 0.968307, 1, 2.981315, 0 } }, { "SAMSUNG", "NX5", Tungsten, -5, { 0.985078, 1, 2.877497, 0 } }, { "SAMSUNG", "NX5", Tungsten, -4, { 1.001710, 1, 2.772538, 0 } }, { "SAMSUNG", "NX5", Tungsten, -3, { 1.018568, 1, 2.668214, 0 } }, { "SAMSUNG", "NX5", Tungsten, -2, { 1.035426, 1, 2.563645, 0 } }, { "SAMSUNG", "NX5", Tungsten, -1, { 1.052284, 1, 2.459565, 0 } }, { "SAMSUNG", "NX5", Tungsten, 0, { 1.069142, 1, 2.354996, 0 } }, { "SAMSUNG", "NX5", Tungsten, 1, { 1.087466, 1, 2.298070, 0 } }, { "SAMSUNG", "NX5", Tungsten, 2, { 1.105790, 1, 2.240655, 0 } }, { "SAMSUNG", "NX5", Tungsten, 3, { 1.123870, 1, 2.183484, 0 } }, { "SAMSUNG", "NX5", Tungsten, 4, { 1.142438, 1, 2.126313, 0 } }, { "SAMSUNG", "NX5", Tungsten, 5, { 1.160762, 1, 2.069142, 0 } }, { "SAMSUNG", "NX5", Tungsten, 6, { 1.179086, 1, 2.011972, 0 } }, { "SAMSUNG", "NX5", Tungsten, 7, { 1.197410, 1, 1.954801, 0 } }, { "SAMSUNG", "NX5", Flash, -7, { 1.843635, 1, 1.282189, 0 } }, { "SAMSUNG", "NX5", Flash, -6, { 1.876130, 1, 1.238700, 0 } }, { "SAMSUNG", "NX5", Flash, -5, { 1.908624, 1, 1.195456, 0 } }, { "SAMSUNG", "NX5", Flash, -4, { 1.941363, 1, 1.151967, 0 } }, { "SAMSUNG", "NX5", Flash, -3, { 1.973858, 1, 1.108722, 0 } }, { "SAMSUNG", "NX5", Flash, -2, { 2.006108, 1, 1.064989, 0 } }, { "SAMSUNG", "NX5", Flash, -1, { 2.038847, 1, 1.021989, 0 } }, { "SAMSUNG", "NX5", Flash, 0, { 2.071719, 1, 0.978723, 0 } }, { "SAMSUNG", "NX5", Flash, 1, { 2.107068, 1, 0.954980, 0 } }, { "SAMSUNG", "NX5", Flash, 2, { 2.142857, 1, 0.931301, 0 } }, { "SAMSUNG", "NX5", Flash, 3, { 2.178191, 1, 0.907358, 0 } }, { "SAMSUNG", "NX5", Flash, 4, { 2.213684, 1, 0.883661, 0 } }, { "SAMSUNG", "NX5", Flash, 5, { 2.249317, 1, 0.859903, 0 } }, { "SAMSUNG", "NX5", Flash, 6, { 2.284664, 1, 0.836022, 0 } }, { "SAMSUNG", "NX5", Flash, 7, { 2.320238, 1, 0.812302, 0 } }, { "SAMSUNG", "NX5", "5000K", 0, { 1.684339, 1, 1.094063, 0 } }, { "SAMSUNG", "NX5", "5500K", 0, { 1.692022, 1, 0.843950, 0 } }, { "SAMSUNG", "NX5", "6500K", 0, { 2.110371, 1, 0.879107, 0 } }, // Copied from SAMSUNG NX100 { "SAMSUNG", "NX10", Daylight, -7, { 1.566333, 1, 1.526753, 0 } }, { "SAMSUNG", "NX10", Daylight, -6, { 1.593941, 1, 1.475202, 0 } }, { "SAMSUNG", "NX10", Daylight, -5, { 1.621793, 1, 1.423650, 0 } }, { "SAMSUNG", "NX10", Daylight, -4, { 1.649401, 1, 1.371854, 0 } }, { "SAMSUNG", "NX10", Daylight, -3, { 1.677010, 1, 1.320303, 0 } }, { "SAMSUNG", "NX10", Daylight, -2, { 1.704618, 1, 1.268507, 0 } }, { "SAMSUNG", "NX10", Daylight, -1, { 1.732470, 1, 1.216956, 0 } }, { "SAMSUNG", "NX10", Daylight, 0, { 1.760078, 1, 1.165404, 0 } }, { "SAMSUNG", "NX10", Daylight, 1, { 1.790129, 1, 1.137063, 0 } }, { "SAMSUNG", "NX10", Daylight, 2, { 1.820425, 1, 1.108722, 0 } }, { "SAMSUNG", "NX10", Daylight, 3, { 1.850721, 1, 1.080381, 0 } }, { "SAMSUNG", "NX10", Daylight, 4, { 1.880772, 1, 1.052040, 0 } }, { "SAMSUNG", "NX10", Daylight, 5, { 1.911068, 1, 1.023699, 0 } }, { "SAMSUNG", "NX10", Daylight, 6, { 1.941377, 1, 0.995622, 0 } }, { "SAMSUNG", "NX10", Daylight, 7, { 1.971874, 1, 0.967384, 0 } }, { "SAMSUNG", "NX10", Cloudy, -7, { 1.638896, 1, 1.446372, 0 } }, { "SAMSUNG", "NX10", Cloudy, -6, { 1.667725, 1, 1.397508, 0 } }, { "SAMSUNG", "NX10", Cloudy, -5, { 1.696555, 1, 1.348644, 0 } }, { "SAMSUNG", "NX10", Cloudy, -4, { 1.725629, 1, 1.299780, 0 } }, { "SAMSUNG", "NX10", Cloudy, -3, { 1.754459, 1, 1.250672, 0 } }, { "SAMSUNG", "NX10", Cloudy, -2, { 1.783533, 1, 1.201808, 0 } }, { "SAMSUNG", "NX10", Cloudy, -1, { 1.812607, 1, 1.152944, 0 } }, { "SAMSUNG", "NX10", Cloudy, 0, { 1.841437, 1, 1.103836, 0 } }, { "SAMSUNG", "NX10", Cloudy, 1, { 1.872954, 1, 1.077205, 0 } }, { "SAMSUNG", "NX10", Cloudy, 2, { 1.904471, 1, 1.050330, 0 } }, { "SAMSUNG", "NX10", Cloudy, 3, { 1.936233, 1, 1.023455, 0 } }, { "SAMSUNG", "NX10", Cloudy, 4, { 1.967852, 1, 0.996834, 0 } }, { "SAMSUNG", "NX10", Cloudy, 5, { 1.999289, 1, 0.969905, 0 } }, { "SAMSUNG", "NX10", Cloudy, 6, { 2.030876, 1, 0.943088, 0 } }, { "SAMSUNG", "NX10", Cloudy, 7, { 2.062458, 1, 0.916275, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -7, { 1.526020, 1, 2.316638, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -6, { 1.553140, 1, 2.238212, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -5, { 1.580015, 1, 2.159785, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -4, { 1.606890, 1, 2.081603, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -3, { 1.634009, 1, 2.003176, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -2, { 1.660884, 1, 1.924750, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, -1, { 1.687760, 1, 1.846567, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 0, { 1.714879, 1, 1.768141, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 1, { 1.744197, 1, 1.725140, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 2, { 1.773516, 1, 1.682140, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 3, { 1.803078, 1, 1.639384, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 4, { 1.832397, 1, 1.596384, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 5, { 1.861959, 1, 1.553384, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 6, { 1.891522, 1, 1.510628, 0 } }, { "SAMSUNG", "NX10", WhiteFluorescent, 7, { 1.920596, 1, 1.467628, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -7, { 1.691180, 1, 1.884437, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -6, { 1.720987, 1, 1.821158, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -5, { 1.751038, 1, 1.757146, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -4, { 1.780845, 1, 1.693379, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -3, { 1.810897, 1, 1.629612, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -2, { 1.840704, 1, 1.565844, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, -1, { 1.870755, 1, 1.502077, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 0, { 1.900318, 1, 1.438309, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 1, { 1.933056, 1, 1.403616, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 2, { 1.965795, 1, 1.368678, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 3, { 1.998045, 1, 1.333741, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 4, { 2.030784, 1, 1.298803, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 5, { 2.063279, 1, 1.263621, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 6, { 2.095773, 1, 1.228927, 0 } }, { "SAMSUNG", "NX10", NeutralFluorescent, 7, { 2.128756, 1, 1.193990, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -7, { 1.995358, 1, 1.613731, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -6, { 2.030784, 1, 1.559492, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -5, { 2.065722, 1, 1.504764, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -4, { 2.101393, 1, 1.450037, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -3, { 2.136330, 1, 1.395553, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -2, { 2.171757, 1, 1.341070, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, -1, { 2.207183, 1, 1.286343, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 0, { 2.242365, 1, 1.231859, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 1, { 2.280723, 1, 1.202052, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 2, { 2.319326, 1, 1.172001, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 3, { 2.357684, 1, 1.142194, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 4, { 2.396042, 1, 1.112143, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 5, { 2.434645, 1, 1.082336, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 6, { 2.473003, 1, 1.052284, 0 } }, { "SAMSUNG", "NX10", DaylightFluorescent, 7, { 2.511361, 1, 1.022233, 0 } }, { "SAMSUNG", "NX10", Tungsten, -7, { 0.951650, 1, 3.086007, 0 } }, { "SAMSUNG", "NX10", Tungsten, -6, { 0.968307, 1, 2.981315, 0 } }, { "SAMSUNG", "NX10", Tungsten, -5, { 0.985078, 1, 2.877497, 0 } }, { "SAMSUNG", "NX10", Tungsten, -4, { 1.001710, 1, 2.772538, 0 } }, { "SAMSUNG", "NX10", Tungsten, -3, { 1.018568, 1, 2.668214, 0 } }, { "SAMSUNG", "NX10", Tungsten, -2, { 1.035426, 1, 2.563645, 0 } }, { "SAMSUNG", "NX10", Tungsten, -1, { 1.052284, 1, 2.459565, 0 } }, { "SAMSUNG", "NX10", Tungsten, 0, { 1.069142, 1, 2.354996, 0 } }, { "SAMSUNG", "NX10", Tungsten, 1, { 1.087466, 1, 2.298070, 0 } }, { "SAMSUNG", "NX10", Tungsten, 2, { 1.105790, 1, 2.240655, 0 } }, { "SAMSUNG", "NX10", Tungsten, 3, { 1.123870, 1, 2.183484, 0 } }, { "SAMSUNG", "NX10", Tungsten, 4, { 1.142438, 1, 2.126313, 0 } }, { "SAMSUNG", "NX10", Tungsten, 5, { 1.160762, 1, 2.069142, 0 } }, { "SAMSUNG", "NX10", Tungsten, 6, { 1.179086, 1, 2.011972, 0 } }, { "SAMSUNG", "NX10", Tungsten, 7, { 1.197410, 1, 1.954801, 0 } }, { "SAMSUNG", "NX10", Flash, -7, { 1.843635, 1, 1.282189, 0 } }, { "SAMSUNG", "NX10", Flash, -6, { 1.876130, 1, 1.238700, 0 } }, { "SAMSUNG", "NX10", Flash, -5, { 1.908624, 1, 1.195456, 0 } }, { "SAMSUNG", "NX10", Flash, -4, { 1.941363, 1, 1.151967, 0 } }, { "SAMSUNG", "NX10", Flash, -3, { 1.973858, 1, 1.108722, 0 } }, { "SAMSUNG", "NX10", Flash, -2, { 2.006108, 1, 1.064989, 0 } }, { "SAMSUNG", "NX10", Flash, -1, { 2.038847, 1, 1.021989, 0 } }, { "SAMSUNG", "NX10", Flash, 0, { 2.071719, 1, 0.978723, 0 } }, { "SAMSUNG", "NX10", Flash, 1, { 2.107068, 1, 0.954980, 0 } }, { "SAMSUNG", "NX10", Flash, 2, { 2.142857, 1, 0.931301, 0 } }, { "SAMSUNG", "NX10", Flash, 3, { 2.178191, 1, 0.907358, 0 } }, { "SAMSUNG", "NX10", Flash, 4, { 2.213684, 1, 0.883661, 0 } }, { "SAMSUNG", "NX10", Flash, 5, { 2.249317, 1, 0.859903, 0 } }, { "SAMSUNG", "NX10", Flash, 6, { 2.284664, 1, 0.836022, 0 } }, { "SAMSUNG", "NX10", Flash, 7, { 2.320238, 1, 0.812302, 0 } }, { "SAMSUNG", "NX10", "5000K", 0, { 1.684339, 1, 1.094063, 0 } }, { "SAMSUNG", "NX10", "5500K", 0, { 1.692022, 1, 0.843950, 0 } }, { "SAMSUNG", "NX10", "6500K", 0, { 2.110371, 1, 0.879107, 0 } }, // Copied from SAMSUNG NX100 { "SAMSUNG", "NX11", Daylight, -7, { 1.566333, 1, 1.526753, 0 } }, { "SAMSUNG", "NX11", Daylight, -6, { 1.593941, 1, 1.475202, 0 } }, { "SAMSUNG", "NX11", Daylight, -5, { 1.621793, 1, 1.423650, 0 } }, { "SAMSUNG", "NX11", Daylight, -4, { 1.649401, 1, 1.371854, 0 } }, { "SAMSUNG", "NX11", Daylight, -3, { 1.677010, 1, 1.320303, 0 } }, { "SAMSUNG", "NX11", Daylight, -2, { 1.704618, 1, 1.268507, 0 } }, { "SAMSUNG", "NX11", Daylight, -1, { 1.732470, 1, 1.216956, 0 } }, { "SAMSUNG", "NX11", Daylight, 0, { 1.760078, 1, 1.165404, 0 } }, { "SAMSUNG", "NX11", Daylight, 1, { 1.790129, 1, 1.137063, 0 } }, { "SAMSUNG", "NX11", Daylight, 2, { 1.820425, 1, 1.108722, 0 } }, { "SAMSUNG", "NX11", Daylight, 3, { 1.850721, 1, 1.080381, 0 } }, { "SAMSUNG", "NX11", Daylight, 4, { 1.880772, 1, 1.052040, 0 } }, { "SAMSUNG", "NX11", Daylight, 5, { 1.911068, 1, 1.023699, 0 } }, { "SAMSUNG", "NX11", Daylight, 6, { 1.941377, 1, 0.995622, 0 } }, { "SAMSUNG", "NX11", Daylight, 7, { 1.971874, 1, 0.967384, 0 } }, { "SAMSUNG", "NX11", Cloudy, -7, { 1.638896, 1, 1.446372, 0 } }, { "SAMSUNG", "NX11", Cloudy, -6, { 1.667725, 1, 1.397508, 0 } }, { "SAMSUNG", "NX11", Cloudy, -5, { 1.696555, 1, 1.348644, 0 } }, { "SAMSUNG", "NX11", Cloudy, -4, { 1.725629, 1, 1.299780, 0 } }, { "SAMSUNG", "NX11", Cloudy, -3, { 1.754459, 1, 1.250672, 0 } }, { "SAMSUNG", "NX11", Cloudy, -2, { 1.783533, 1, 1.201808, 0 } }, { "SAMSUNG", "NX11", Cloudy, -1, { 1.812607, 1, 1.152944, 0 } }, { "SAMSUNG", "NX11", Cloudy, 0, { 1.841437, 1, 1.103836, 0 } }, { "SAMSUNG", "NX11", Cloudy, 1, { 1.872954, 1, 1.077205, 0 } }, { "SAMSUNG", "NX11", Cloudy, 2, { 1.904471, 1, 1.050330, 0 } }, { "SAMSUNG", "NX11", Cloudy, 3, { 1.936233, 1, 1.023455, 0 } }, { "SAMSUNG", "NX11", Cloudy, 4, { 1.967852, 1, 0.996834, 0 } }, { "SAMSUNG", "NX11", Cloudy, 5, { 1.999289, 1, 0.969905, 0 } }, { "SAMSUNG", "NX11", Cloudy, 6, { 2.030876, 1, 0.943088, 0 } }, { "SAMSUNG", "NX11", Cloudy, 7, { 2.062458, 1, 0.916275, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -7, { 1.526020, 1, 2.316638, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -6, { 1.553140, 1, 2.238212, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -5, { 1.580015, 1, 2.159785, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -4, { 1.606890, 1, 2.081603, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -3, { 1.634009, 1, 2.003176, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -2, { 1.660884, 1, 1.924750, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, -1, { 1.687760, 1, 1.846567, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 0, { 1.714879, 1, 1.768141, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 1, { 1.744197, 1, 1.725140, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 2, { 1.773516, 1, 1.682140, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 3, { 1.803078, 1, 1.639384, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 4, { 1.832397, 1, 1.596384, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 5, { 1.861959, 1, 1.553384, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 6, { 1.891522, 1, 1.510628, 0 } }, { "SAMSUNG", "NX11", WhiteFluorescent, 7, { 1.920596, 1, 1.467628, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -7, { 1.691180, 1, 1.884437, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -6, { 1.720987, 1, 1.821158, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -5, { 1.751038, 1, 1.757146, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -4, { 1.780845, 1, 1.693379, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -3, { 1.810897, 1, 1.629612, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -2, { 1.840704, 1, 1.565844, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, -1, { 1.870755, 1, 1.502077, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 0, { 1.900318, 1, 1.438309, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 1, { 1.933056, 1, 1.403616, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 2, { 1.965795, 1, 1.368678, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 3, { 1.998045, 1, 1.333741, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 4, { 2.030784, 1, 1.298803, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 5, { 2.063279, 1, 1.263621, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 6, { 2.095773, 1, 1.228927, 0 } }, { "SAMSUNG", "NX11", NeutralFluorescent, 7, { 2.128756, 1, 1.193990, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -7, { 1.995358, 1, 1.613731, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -6, { 2.030784, 1, 1.559492, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -5, { 2.065722, 1, 1.504764, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -4, { 2.101393, 1, 1.450037, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -3, { 2.136330, 1, 1.395553, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -2, { 2.171757, 1, 1.341070, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, -1, { 2.207183, 1, 1.286343, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 0, { 2.242365, 1, 1.231859, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 1, { 2.280723, 1, 1.202052, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 2, { 2.319326, 1, 1.172001, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 3, { 2.357684, 1, 1.142194, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 4, { 2.396042, 1, 1.112143, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 5, { 2.434645, 1, 1.082336, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 6, { 2.473003, 1, 1.052284, 0 } }, { "SAMSUNG", "NX11", DaylightFluorescent, 7, { 2.511361, 1, 1.022233, 0 } }, { "SAMSUNG", "NX11", Tungsten, -7, { 0.951650, 1, 3.086007, 0 } }, { "SAMSUNG", "NX11", Tungsten, -6, { 0.968307, 1, 2.981315, 0 } }, { "SAMSUNG", "NX11", Tungsten, -5, { 0.985078, 1, 2.877497, 0 } }, { "SAMSUNG", "NX11", Tungsten, -4, { 1.001710, 1, 2.772538, 0 } }, { "SAMSUNG", "NX11", Tungsten, -3, { 1.018568, 1, 2.668214, 0 } }, { "SAMSUNG", "NX11", Tungsten, -2, { 1.035426, 1, 2.563645, 0 } }, { "SAMSUNG", "NX11", Tungsten, -1, { 1.052284, 1, 2.459565, 0 } }, { "SAMSUNG", "NX11", Tungsten, 0, { 1.069142, 1, 2.354996, 0 } }, { "SAMSUNG", "NX11", Tungsten, 1, { 1.087466, 1, 2.298070, 0 } }, { "SAMSUNG", "NX11", Tungsten, 2, { 1.105790, 1, 2.240655, 0 } }, { "SAMSUNG", "NX11", Tungsten, 3, { 1.123870, 1, 2.183484, 0 } }, { "SAMSUNG", "NX11", Tungsten, 4, { 1.142438, 1, 2.126313, 0 } }, { "SAMSUNG", "NX11", Tungsten, 5, { 1.160762, 1, 2.069142, 0 } }, { "SAMSUNG", "NX11", Tungsten, 6, { 1.179086, 1, 2.011972, 0 } }, { "SAMSUNG", "NX11", Tungsten, 7, { 1.197410, 1, 1.954801, 0 } }, { "SAMSUNG", "NX11", Flash, -7, { 1.843635, 1, 1.282189, 0 } }, { "SAMSUNG", "NX11", Flash, -6, { 1.876130, 1, 1.238700, 0 } }, { "SAMSUNG", "NX11", Flash, -5, { 1.908624, 1, 1.195456, 0 } }, { "SAMSUNG", "NX11", Flash, -4, { 1.941363, 1, 1.151967, 0 } }, { "SAMSUNG", "NX11", Flash, -3, { 1.973858, 1, 1.108722, 0 } }, { "SAMSUNG", "NX11", Flash, -2, { 2.006108, 1, 1.064989, 0 } }, { "SAMSUNG", "NX11", Flash, -1, { 2.038847, 1, 1.021989, 0 } }, { "SAMSUNG", "NX11", Flash, 0, { 2.071719, 1, 0.978723, 0 } }, { "SAMSUNG", "NX11", Flash, 1, { 2.107068, 1, 0.954980, 0 } }, { "SAMSUNG", "NX11", Flash, 2, { 2.142857, 1, 0.931301, 0 } }, { "SAMSUNG", "NX11", Flash, 3, { 2.178191, 1, 0.907358, 0 } }, { "SAMSUNG", "NX11", Flash, 4, { 2.213684, 1, 0.883661, 0 } }, { "SAMSUNG", "NX11", Flash, 5, { 2.249317, 1, 0.859903, 0 } }, { "SAMSUNG", "NX11", Flash, 6, { 2.284664, 1, 0.836022, 0 } }, { "SAMSUNG", "NX11", Flash, 7, { 2.320238, 1, 0.812302, 0 } }, { "SAMSUNG", "NX11", "5000K", 0, { 1.684339, 1, 1.094063, 0 } }, { "SAMSUNG", "NX11", "5500K", 0, { 1.692022, 1, 0.843950, 0 } }, { "SAMSUNG", "NX11", "6500K", 0, { 2.110371, 1, 0.879107, 0 } }, // Copied from Samsung NX200 { "SAMSUNG", "NX20", Daylight, 0, { 2.773438, 1, 1.625000, 0 } }, { "SAMSUNG", "NX20", Cloudy, 0, { 2.902344, 1, 1.546875, 0 } }, { "SAMSUNG", "NX20", WhiteFluorescent, 0, { 2.445313, 1, 2.316406, 0 } }, { "SAMSUNG", "NX20", NeutralFluorescent, 0, { 2.746094, 1, 1.937500, 0 } }, { "SAMSUNG", "NX20", DaylightFluorescent, 0, { 3.214844, 1, 1.679688, 0 } }, { "SAMSUNG", "NX20", Tungsten, 0, { 1.511719, 1, 2.941406, 0 } }, { "SAMSUNG", "NX20", Flash, 0, { 2.914063, 1, 1.191406, 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 } }, // Copied from Samsung NX200 { "SAMSUNG", "NX210", Daylight, 0, { 2.773438, 1, 1.625000, 0 } }, { "SAMSUNG", "NX210", Cloudy, 0, { 2.902344, 1, 1.546875, 0 } }, { "SAMSUNG", "NX210", WhiteFluorescent, 0, { 2.445313, 1, 2.316406, 0 } }, { "SAMSUNG", "NX210", NeutralFluorescent, 0, { 2.746094, 1, 1.937500, 0 } }, { "SAMSUNG", "NX210", DaylightFluorescent, 0, { 3.214844, 1, 1.679688, 0 } }, { "SAMSUNG", "NX210", Tungsten, 0, { 1.511719, 1, 2.941406, 0 } }, { "SAMSUNG", "NX210", Flash, 0, { 2.914063, 1, 1.191406, 0 } }, // SAMSUNG NX300 Firmware Version 1.40 { "SAMSUNG", "NX300", Daylight, -7, { 2.308594, 1, 2.097656, 0 } }, { "SAMSUNG", "NX300", Daylight, -6, { 2.347656, 1, 2.027344, 0 } }, { "SAMSUNG", "NX300", Daylight, -5, { 2.390625, 1, 1.953125, 0 } }, { "SAMSUNG", "NX300", Daylight, -4, { 2.429688, 1, 1.882813, 0 } }, { "SAMSUNG", "NX300", Daylight, -3, { 2.472656, 1, 1.812500, 0 } }, { "SAMSUNG", "NX300", Daylight, -2, { 2.511719, 1, 1.742188, 0 } }, { "SAMSUNG", "NX300", Daylight, -1, { 2.554688, 1, 1.671875, 0 } }, { "SAMSUNG", "NX300", Daylight, 0, { 2.593750, 1, 1.601563, 0 } }, { "SAMSUNG", "NX300", Daylight, 1, { 2.636719, 1, 1.562500, 0 } }, { "SAMSUNG", "NX300", Daylight, 2, { 2.683594, 1, 1.523438, 0 } }, { "SAMSUNG", "NX300", Daylight, 3, { 2.726563, 1, 1.484375, 0 } }, { "SAMSUNG", "NX300", Daylight, 4, { 2.773438, 1, 1.445313, 0 } }, { "SAMSUNG", "NX300", Daylight, 5, { 2.816406, 1, 1.406250, 0 } }, { "SAMSUNG", "NX300", Daylight, 6, { 2.859375, 1, 1.367188, 0 } }, { "SAMSUNG", "NX300", Daylight, 7, { 2.906250, 1, 1.328125, 0 } }, { "SAMSUNG", "NX300", Cloudy, -7, { 2.394531, 1, 2.011719, 0 } }, { "SAMSUNG", "NX300", Cloudy, -6, { 2.433594, 1, 1.945313, 0 } }, { "SAMSUNG", "NX300", Cloudy, -5, { 2.476563, 1, 1.878906, 0 } }, { "SAMSUNG", "NX300", Cloudy, -4, { 2.519531, 1, 1.808594, 0 } }, { "SAMSUNG", "NX300", Cloudy, -3, { 2.562500, 1, 1.742188, 0 } }, { "SAMSUNG", "NX300", Cloudy, -2, { 2.605469, 1, 1.671875, 0 } }, { "SAMSUNG", "NX300", Cloudy, -1, { 2.644531, 1, 1.605469, 0 } }, { "SAMSUNG", "NX300", Cloudy, 0, { 2.687500, 1, 1.535156, 0 } }, { "SAMSUNG", "NX300", Cloudy, 1, { 2.734375, 1, 1.500000, 0 } }, { "SAMSUNG", "NX300", Cloudy, 2, { 2.781250, 1, 1.460938, 0 } }, { "SAMSUNG", "NX300", Cloudy, 3, { 2.828125, 1, 1.425781, 0 } }, { "SAMSUNG", "NX300", Cloudy, 4, { 2.875000, 1, 1.386719, 0 } }, { "SAMSUNG", "NX300", Cloudy, 5, { 2.917969, 1, 1.351563, 0 } }, { "SAMSUNG", "NX300", Cloudy, 6, { 2.964844, 1, 1.312500, 0 } }, { "SAMSUNG", "NX300", Cloudy, 7, { 3.011719, 1, 1.273438, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -7, { 2.000000, 1, 2.933594, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -6, { 2.035156, 1, 2.835938, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -5, { 2.070313, 1, 2.734375, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -4, { 2.105469, 1, 2.636719, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -3, { 2.140625, 1, 2.539063, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -2, { 2.175781, 1, 2.437500, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, -1, { 2.214844, 1, 2.339844, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 0, { 2.250000, 1, 2.238281, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 1, { 2.285156, 1, 2.183594, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 2, { 2.324219, 1, 2.128906, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 3, { 2.363281, 1, 2.078125, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 4, { 2.402344, 1, 2.023438, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 5, { 2.441406, 1, 1.968750, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 6, { 2.480469, 1, 1.914063, 0 } }, { "SAMSUNG", "NX300", CoolWhiteFluorescent, 7, { 2.519531, 1, 1.859375, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -7, { 2.253906, 1, 2.445313, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -6, { 2.292969, 1, 2.363281, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -5, { 2.332031, 1, 2.281250, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -4, { 2.371094, 1, 2.199219, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -3, { 2.410156, 1, 2.117188, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -2, { 2.453125, 1, 2.031250, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, -1, { 2.492188, 1, 1.949219, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 0, { 2.531250, 1, 1.867188, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 1, { 2.574219, 1, 1.820313, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 2, { 2.617188, 1, 1.777344, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 3, { 2.660156, 1, 1.730469, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 4, { 2.703125, 1, 1.687500, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 5, { 2.750000, 1, 1.640625, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 6, { 2.792969, 1, 1.593750, 0 } }, { "SAMSUNG", "NX300", DayWhiteFluorescent, 7, { 2.835938, 1, 1.550781, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -7, { 2.699219, 1, 2.128906, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -6, { 2.746094, 1, 2.054688, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -5, { 2.792969, 1, 1.984375, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -4, { 2.839844, 1, 1.910156, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -3, { 2.890625, 1, 1.839844, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -2, { 2.937500, 1, 1.765625, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, -1, { 2.984375, 1, 1.695313, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 0, { 3.031250, 1, 1.625000, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 1, { 3.082031, 1, 1.582031, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 2, { 3.136719, 1, 1.542969, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 3, { 3.187500, 1, 1.503906, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 4, { 3.238281, 1, 1.464844, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 5, { 3.292969, 1, 1.425781, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 6, { 3.343750, 1, 1.386719, 0 } }, { "SAMSUNG", "NX300", DaylightFluorescent, 7, { 3.394531, 1, 1.347656, 0 } }, { "SAMSUNG", "NX300", Tungsten, -7, { 1.390625, 1, 3.695313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -6, { 1.414063, 1, 3.570313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -5, { 1.437500, 1, 3.445313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -4, { 1.460938, 1, 3.320313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -3, { 1.488281, 1, 3.195313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -2, { 1.511719, 1, 3.070313, 0 } }, { "SAMSUNG", "NX300", Tungsten, -1, { 1.535156, 1, 2.945313, 0 } }, { "SAMSUNG", "NX300", Tungsten, 0, { 1.562500, 1, 2.820313, 0 } }, { "SAMSUNG", "NX300", Tungsten, 1, { 1.585938, 1, 2.753906, 0 } }, { "SAMSUNG", "NX300", Tungsten, 2, { 1.613281, 1, 2.683594, 0 } }, { "SAMSUNG", "NX300", Tungsten, 3, { 1.640625, 1, 2.617188, 0 } }, { "SAMSUNG", "NX300", Tungsten, 4, { 1.667969, 1, 2.546875, 0 } }, { "SAMSUNG", "NX300", Tungsten, 5, { 1.695313, 1, 2.480469, 0 } }, { "SAMSUNG", "NX300", Tungsten, 6, { 1.722656, 1, 2.410156, 0 } }, { "SAMSUNG", "NX300", Tungsten, 7, { 1.750000, 1, 2.339844, 0 } }, { "SAMSUNG", "NX300", Flash, -7, { 2.613281, 1, 1.957031, 0 } }, { "SAMSUNG", "NX300", Flash, -6, { 2.660156, 1, 1.890625, 0 } }, { "SAMSUNG", "NX300", Flash, -5, { 2.707031, 1, 1.824219, 0 } }, { "SAMSUNG", "NX300", Flash, -4, { 2.753906, 1, 1.757813, 0 } }, { "SAMSUNG", "NX300", Flash, -3, { 2.800781, 1, 1.691406, 0 } }, { "SAMSUNG", "NX300", Flash, -2, { 2.843750, 1, 1.625000, 0 } }, { "SAMSUNG", "NX300", Flash, -1, { 2.890625, 1, 1.558594, 0 } }, { "SAMSUNG", "NX300", Flash, 0, { 2.937500, 1, 1.492188, 0 } }, { "SAMSUNG", "NX300", Flash, 1, { 2.988281, 1, 1.457031, 0 } }, { "SAMSUNG", "NX300", Flash, 2, { 3.039063, 1, 1.421875, 0 } }, { "SAMSUNG", "NX300", Flash, 3, { 3.089844, 1, 1.386719, 0 } }, { "SAMSUNG", "NX300", Flash, 4, { 3.140625, 1, 1.347656, 0 } }, { "SAMSUNG", "NX300", Flash, 5, { 3.191406, 1, 1.312500, 0 } }, { "SAMSUNG", "NX300", Flash, 6, { 3.238281, 1, 1.277344, 0 } }, { "SAMSUNG", "NX300", Flash, 7, { 3.289063, 1, 1.238281, 0 } }, { "SAMSUNG", "NX300", "5000K", 0, { 2.402344, 1, 1.945313, 0 } }, { "SAMSUNG", "NX300", "5500K", 0, { 2.636719, 1, 1.792969, 0 } }, { "SAMSUNG", "NX300", "6500K", 0, { 3.003906, 1, 1.644531, 0 } }, // Copied from Samsung NX200 { "SAMSUNG", "NX1000", Daylight, 0, { 2.773438, 1, 1.625000, 0 } }, { "SAMSUNG", "NX1000", Cloudy, 0, { 2.902344, 1, 1.546875, 0 } }, { "SAMSUNG", "NX1000", WhiteFluorescent, 0, { 2.445313, 1, 2.316406, 0 } }, { "SAMSUNG", "NX1000", NeutralFluorescent, 0, { 2.746094, 1, 1.937500, 0 } }, { "SAMSUNG", "NX1000", DaylightFluorescent, 0, { 3.214844, 1, 1.679688, 0 } }, { "SAMSUNG", "NX1000", Tungsten, 0, { 1.511719, 1, 2.941406, 0 } }, { "SAMSUNG", "NX1000", Flash, 0, { 2.914063, 1, 1.191406, 0 } }, // Copied from Samsung NX200 { "SAMSUNG", "NX1100", Daylight, 0, { 2.773438, 1, 1.625000, 0 } }, { "SAMSUNG", "NX1100", Cloudy, 0, { 2.902344, 1, 1.546875, 0 } }, { "SAMSUNG", "NX1100", WhiteFluorescent, 0, { 2.445313, 1, 2.316406, 0 } }, { "SAMSUNG", "NX1100", NeutralFluorescent, 0, { 2.746094, 1, 1.937500, 0 } }, { "SAMSUNG", "NX1100", DaylightFluorescent, 0, { 3.214844, 1, 1.679688, 0 } }, { "SAMSUNG", "NX1100", Tungsten, 0, { 1.511719, 1, 2.941406, 0 } }, { "SAMSUNG", "NX1100", 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 } }, // firmware ILCE-7 (A7) Ver 1.0.1 { "SONY", "ILCE-7", Daylight, 0, { 2.398438, 1, 1.464844, 0 } }, { "SONY", "ILCE-7", Shade, 0, { 2.871094, 1, 1.210938, 0 } }, { "SONY", "ILCE-7", Cloudy, 0, { 2.597656, 1, 1.347656, 0 } }, { "SONY", "ILCE-7", Incandescent, 0, { 1.464844, 1, 2.621094, 0 } }, { "SONY", "ILCE-7", WarmWhiteFluorescent, 0, { 1.703125, 1, 2.605469, 0 } }, { "SONY", "ILCE-7", CoolWhiteFluorescent, 0, { 2.246094, 1, 2.117188, 0 } }, { "SONY", "ILCE-7", DayWhiteFluorescent, 0, { 2.296875, 1, 1.589844, 0 } }, { "SONY", "ILCE-7", DaylightFluorescent, 0, { 2.578125, 1, 1.382813, 0 } }, { "SONY", "ILCE-7", Flash, 0, { 2.648438, 1, 1.324219, 0 } }, { "SONY", "ILCE-7", "5500K", 0, { 2.214844, 1, 1.406250, 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-5R", Daylight, 0, { 2.5000, 1, 1.5117, 0 } }, { "SONY", "NEX-5R", Shade, 0, { 3.0156, 1, 1.2422, 0 } }, { "SONY", "NEX-5R", Cloudy, 0, { 2.7188, 1, 1.3828, 0 } }, { "SONY", "NEX-5R", Tungsten, 0, { 1.5039, 1, 2.7695, 0 } }, { "SONY", "NEX-5R", WarmWhiteFluorescent, 0, { 1.8164, 1, 2.7305, 0 } }, { "SONY", "NEX-5R", CoolWhiteFluorescent, 0, { 2.3086, 1, 2.1758, 0 } }, { "SONY", "NEX-5R", DayWhiteFluorescent, 0, { 2.4844, 1, 1.5703, 0 } }, { "SONY", "NEX-5R", DaylightFluorescent, 0, { 2.8555, 1, 1.4648, 0 } }, { "SONY", "NEX-5R", Flash, 0, { 2.8828, 1, 1.3906, 0 } }, // copied from NEX-5R { "SONY", "NEX-6", Daylight, 0, { 2.5000, 1, 1.5117, 0 } }, { "SONY", "NEX-6", Shade, 0, { 3.0156, 1, 1.2422, 0 } }, { "SONY", "NEX-6", Cloudy, 0, { 2.7188, 1, 1.3828, 0 } }, { "SONY", "NEX-6", Tungsten, 0, { 1.5039, 1, 2.7695, 0 } }, { "SONY", "NEX-6", WarmWhiteFluorescent, 0, { 1.8164, 1, 2.7305, 0 } }, { "SONY", "NEX-6", CoolWhiteFluorescent, 0, { 2.3086, 1, 2.1758, 0 } }, { "SONY", "NEX-6", DayWhiteFluorescent, 0, { 2.4844, 1, 1.5703, 0 } }, { "SONY", "NEX-6", DaylightFluorescent, 0, { 2.8555, 1, 1.4648, 0 } }, { "SONY", "NEX-6", Flash, 0, { 2.8828, 1, 1.3906, 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-A37", Daylight, 0, { 2.6641, 1, 1.5156, 0 } }, { "SONY", "SLT-A37", Shade, 0, { 3.1836, 1, 1.2539, 0 } }, { "SONY", "SLT-A37", Cloudy, 0, { 2.8828, 1, 1.3906, 0 } }, { "SONY", "SLT-A37", Incandescent, 0, { 1.6367, 1, 2.7070, 0 } }, { "SONY", "SLT-A37", WarmWhiteFluorescent, 0, { 1.9180, 1, 2.6914, 0 } }, { "SONY", "SLT-A37", CoolWhiteFluorescent, 0, { 2.4219, 1, 2.1523, 0 } }, { "SONY", "SLT-A37", DayWhiteFluorescent, 0, { 2.6172, 1, 1.5977, 0 } }, { "SONY", "SLT-A37", DaylightFluorescent, 0, { 2.9883, 1, 1.3984, 0 } }, { "SONY", "SLT-A37", Flash, 0, { 3.0859, 1, 1.3008, 0 } }, { "SONY", "SLT-A37", "5500K", 0, { 2.7227, 1, 1.4805, 0 } }, { "SONY", "SLT-A37", "9200K", 0, { 1.8945, 1, 2.4492, 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 } }, // firmware version 1.00 { "SONY", "SLT-A58", Daylight, 0, { 2.640625, 1, 1.546875, 0 } }, { "SONY", "SLT-A58", Cloudy, 0, { 2.875000, 1, 1.414063, 0 } }, { "SONY", "SLT-A58", Incandescent, 0, { 1.578125, 1, 2.843750, 0 } }, { "SONY", "SLT-A58", WarmWhiteFluorescent, 0, { 1.859375, 1, 2.796875, 0 } }, { "SONY", "SLT-A58", CoolWhiteFluorescent, 0, { 2.367188, 1, 2.238281, 0 } }, { "SONY", "SLT-A58", DayWhiteFluorescent, 0, { 2.550781, 1, 1.695313, 0 } }, { "SONY", "SLT-A58", DaylightFluorescent, 0, { 2.898438, 1, 1.472656, 0 } }, { "SONY", "SLT-A58", Flash, 0, { 2.992188, 1, 1.355469, 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.20/install-sh0000755000175000017500000003325612057543462011525 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.20/ufraw_preview.c0000644000175000017500000075460012410677406012554 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_preview.c - GUI for controlling all the image manipulations * Copyright 2004-2014 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 #ifdef _WIN32 /* GDK threads are not supported on the Windows platform. */ #define gdk_threads_add_timeout g_timeout_add #define gdk_threads_add_idle_full g_idle_add_full #endif #ifdef __MINGW32__ #ifdef __MINGW64__ #define uf_long gint64 #else #define uf_long gint32 #endif #else #define uf_long long #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 guarantee 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); gdouble zoom = gtk_image_view_get_zoom(GTK_IMAGE_VIEW(data->PreviewWidget)); int x1 = MAX(Crop.x, viewRect.x / zoom); int width = MIN(Crop.width, viewRect.width); int y1 = MAX(Crop.y, viewRect.y / zoom); 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; if (CropCount == 0) CropCount = 1; // Bug #387: Fix divide-by-zero crash. 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); uf_long i = (uf_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); uf_long i = (uf_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 (size == 0 || (croppedHeight == 0 && croppedWidth == 0)) data->height = data->width = data->shrink = 0; else 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_modify(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 int aspect_activate(GtkWidget *widget, gpointer user_data) { aspect_modify(widget, user_data); return FALSE; } static void aspect_changed(GtkWidget *widget, gpointer user_data) { if (gtk_combo_box_get_active((GtkComboBox *)widget) >= 0) aspect_modify(widget, user_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 */ uf_long accuracy = (uf_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, uf_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; uf_long type, index; dialog = GTK_DIALOG(gtk_widget_get_ancestor(widget, GTK_TYPE_DIALOG)); type = (uf_long)g_object_get_data(G_OBJECT(widget), "Type"); index = (uf_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; uf_long i, j; long 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", (gpointer)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); uf_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, _("Color filter array interpolation")); combo = GTK_COMBO_BOX(uf_combo_box_new_text()); if (data->UF->HaveFilters) { if (data->UF->IsXTrans) { uf_combo_box_append_text(combo, _("X-Trans interpolation"), (void*)xtrans_interpolation); uf_combo_box_append_text(combo, _("VNG interpolation"), (void*)vng_interpolation); } else if (data->UF->colors == 4) { uf_combo_box_append_text(combo, _("VNG four color interpolation"), (void*)four_color_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 color filter array")); 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) { uf_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 ? data->UF->colors == 1 ? "channel-grey" : "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 #if !HAVE_GIMP_2_9 , int plugin #endif ) { GtkTable *table; GtkWidget *button; GtkWidget *event_box; GtkWidget *icon; GtkWidget *label; GtkComboBox *combo; int i; uf_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), (gpointer)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 !HAVE_GIMP_2_9 if (plugin != ufraw_gimp_plugin) #endif 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); g_signal_connect(G_OBJECT(data->AspectEntry), "focus-out-event", G_CALLBACK(aspect_activate), NULL); g_signal_connect(G_OBJECT(data->AspectEntry), "activate", G_CALLBACK(aspect_activate), 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 == ufraw_standalone_output) 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 == ufraw_standalone_output) 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 == ufraw_standalone_output) 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 curveeditorHeight; uf_long status; 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 #if !HAVE_GIMP_2_9 , plugin #endif ); 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 != ufraw_gimp_plugin) { 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); if (plugin == ufraw_gimp_plugin) { // 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 == ufraw_standalone) { // 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 = (uf_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.20/configure.ac0000644000175000017500000003074212232053541011771 00000000000000dnl $Id: configure.ac,v 1.180 2013/10/17 04:30:17 nkbj Exp $ AC_INIT(UFRaw, 0.20) 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) AC_CHECK_FUNCS(strcasecmp) AC_CHECK_FUNCS(strcasestr) # 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(LCMS2, lcms2, [have_lcms="lcms 2.x" AC_DEFINE(HAVE_LCMS2, 1, have the lcms 2.x library) LCMS_CFLAGS="$LCMS2_CFLAGS" LCMS_LIBS="$LCMS2_LIBS"], [have_lcms="lcms 2.x not found"]) if test "x$have_lcms" != "xlcms 2.x"; then PKG_CHECK_MODULES(LCMS1, lcms >= 1.14, [have_lcms="lcms 1.x" AC_DEFINE(HAVE_LCMS1, 1, have the lcms 1.x library) LCMS_CFLAGS="$LCMS1_CFLAGS" LCMS_LIBS="$LCMS1_LIBS"], [AC_MSG_ERROR(can not build UFRaw without lcms)]) fi 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 if test "$have_gtk" = "yes"; then PKG_CHECK_MODULES(GTK, gtkimageview >= 1.6) # It is not clear if we should install the GIMP plugin # in the corresponding place in our prefix, or in GIMP's # lib dir in its prefix. Currently, we install the # plugin in our prefix. If the GIMP 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 # 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) # 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 '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(color management support: $have_lcms) AC_MSG_NOTICE(build GTK GUI: $have_gtk) AC_MSG_NOTICE(build GIMP plug-in: $have_gimp) 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 support using lensfun: $have_lensfun) ufraw-0.20/ufraw_settings.cc0000644000175000017500000003541112401246236013057 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_settings.cc - define all UFObject settings. * Copyright 2004-2014 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 (strcasecmp(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 (strcasecmp(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 (strcasecmp(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.20/ufraw_icons.c0000644000175000017500000000600412401246236012163 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_icons.c - load icons for UFRaw's GUI. * Copyright 2004-2014 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, channel_grey_24, "channel-grey"); 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.20/ufraw.desktop0000664000175000017500000000464711470103417012232 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.20/ufraw_routines.c0000644000175000017500000004726712303017427012737 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_routines.c - general routines * Copyright 2004-2014 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.20/ufraw_chooser.c0000644000175000017500000001554512303017427012523 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_chooser.c - A very simple file chooser for UFRaw. * Copyright 2004-2014 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.20/dcraw_api.h0000644000175000017500000000562212401246236011607 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_api.h - API for DCRaw * Copyright 2004-2014 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, raw_color; unsigned filters; int top_margin, left_margin, 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, xtrans[6][6]; 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_xtrans_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.20/depcomp0000755000175000017500000005064312057543462011075 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.20/ufraw_icon.ico0000664000175000017500000000727610304702673012350 0000000000000000(0` xxw >=<Y_e6544321//,+*``_&%$YXXXXWWVV IHHZXVyyyCBBBBA bce@@? ((*gggaaa**)(('Z[ZGIJ$$#VWV!" UUUSSSQQQLML][Z~~[YX||}AAA qrr|777hhi 111 dde./.!!!1/./-,-+*MNN)'&JJK'%$[ZYZXXWVU!PUXuuwrstnop "  =<;543VWX.,,-,+*((]]\&$$gjm$""XWWxz{" POOHLQkln|||zzzEED  ;;::99YZ\jjjdddbbb```\\\ZZZVVVRRRPPPSRP  gjrVWZ[[\YYZjih0.-QQRPQQ^]\(&%&$#FGG$"!zz|#" KKIUtpJLPZ+K(@ǕiiMMj%#…Fa(Ijk֙X * bchxo. ace흁#_,v ܿGv^xv Z왝VgތCEY 3$`xWzenč8 (жzxvx*&GY}}lrtygqmfd̽xrzzW&zzY--Xʷ{wsq!8/FEBCr}[RRRA˰~usq!8_|QC S-ں;X"4~{wD=A>>:])Fʏ午 ~yuH!7\5tT"?ƍ0~68UƏ İ'pۄ4B],T l , 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 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-2013 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. # 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.14' 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.14.1], [], [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.14.1])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-2013 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. # 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-2013 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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-2013 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. # 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", "OBJC", "OBJCXX", "UPC", or "GJC". # 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh. echo '/* dummy */' > 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], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) 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-2013 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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-2013 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi]) 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-2013 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. # 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-2013 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. # 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-2013 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. # 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-2013 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. # 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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 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. # _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])]) # Copyright (C) 1999-2013 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 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. # 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], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) 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-2013 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. # 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-2013 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. # _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-2013 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. # _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}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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.20/ufraw_lensfun.cc0000644000175000017500000007650412401357662012707 00000000000000/* * UFRaw - Unidentified Flying Raw converter for digital camera images * * ufraw_lensfun.cc - define lensfun UFObject settings. * Copyright 2004-2014 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) || (strcasecmp(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