Update of /cvsroot/ufraw/ufraw
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv12176
Modified Files:
dcraw_api.cc ufraw.h ufraw_preview.c
Log Message:
Calculate shrink from zoom when needed and get rid of conf->Shrink.
Try using shrink instead of resize when reasonable, because it is faster.
Index: ufraw.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -d -r1.124 -r1.125
--- ufraw.h 4 Oct 2009 09:00:24 -0000 1.124
+++ ufraw.h 7 Oct 2009 00:28:32 -0000 1.125
@@ -205,7 +205,6 @@
/* GUI settings */
double Zoom;
- int Scale;
gboolean LockAspect; /* True if aspect ratio is locked */
int saveConfiguration;
int histogram, liveHistogramScale;
Index: dcraw_api.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/dcraw_api.cc,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- dcraw_api.cc 29 Sep 2009 03:51:17 -0000 1.54
+++ dcraw_api.cc 7 Oct 2009 00:28:32 -0000 1.55
@@ -404,6 +404,7 @@
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;
@@ -513,7 +514,7 @@
if (threshold)
wavelet_denoise_INDI(h->raw.image, h->black, h->raw.height,
h->raw.width, h->height, h->width, h->raw.colors, h->shrink,
- h->pre_mul, threshold, h->filters);
+ h->pre_mul, threshold, h->fourColorFilters);
}
void dcraw_wavelet_denoise_shrinked(dcraw_image_data *f, float threshold)
Index: ufraw_preview.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_preview.c,v
retrieving revision 1.282
retrieving revision 1.283
diff -u -d -r1.282 -r1.283
--- ufraw_preview.c 5 Oct 2009 22:07:49 -0000 1.282
+++ ufraw_preview.c 7 Oct 2009 00:28:32 -0000 1.283
@@ -502,6 +502,19 @@
gtk_label_set_markup(l->labels[c], buf2);
}
+static int zoom_to_scale(double zoom)
+{
+ /* Try to setup for shrink instead of resize because of speed.
+ * We only round down to guaranty that scale-to-fit actually fits.
+ */
+ int percent = zoom;
+ int mul = 100 / percent;
+ if (percent * mul <= 100 && (percent + 1) * mul > 100)
+ return mul;
+ else
+ return 0;
+}
+
static void redraw_navigation_image(preview_data *data)
{
#if defined(HAVE_GTKIMAGEVIEW) && GTK_IMAGE_VIEW_DAMAGE_PIXELS==0
@@ -832,14 +845,15 @@
}
if (data->ProgressBar!=NULL) {
char progressText[max_name];
- if (CFG->Scale==0)
+ 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,
- CFG->Scale);
+ scale);
gtk_progress_bar_set_text(data->ProgressBar, progressText);
gtk_progress_bar_set_fraction(data->ProgressBar, 0);
}
@@ -1900,15 +1914,14 @@
#endif
int shrinkSave = CFG->shrink;
int sizeSave = CFG->size;
- if (CFG->Scale==0) {
+ 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 = CFG->Zoom / 100.0 * cropSize;
- CFG->shrink = 0;
} else {
CFG->size = 0;
- CFG->shrink = CFG->Scale;
}
preview_invalidate_layer(data, ufraw_first_phase);
ufraw_developer_prepare(data->UF, display_developer);
@@ -2071,15 +2084,16 @@
const double prev_zoom = CFG->Zoom;
(void)user_data;
if (data->FreezeDialog) return;
- if (CFG->Scale==0) {
- if (CFG->Zoom<100.0/max_scale) CFG->Zoom = 100.0/max_scale;
- CFG->Scale = floor(100.0/CFG->Zoom);
- if (CFG->Scale==100.0/CFG->Zoom) CFG->Scale--;
+ int scale = zoom_to_scale(CFG->Zoom);
+ if (scale==0) {
+// if (CFG->Zoom<100.0/max_scale) CFG->Zoom = 100.0/max_scale;
+ scale = floor(100.0/CFG->Zoom);
+ if (scale==100.0/CFG->Zoom) scale--;
} else {
- CFG->Scale--;
+ scale--;
}
- CFG->Scale = LIM(CFG->Scale, min_scale, max_scale);
- CFG->Zoom = 100.0/CFG->Scale;
+ scale = LIM(scale, min_scale, max_scale);
+ CFG->Zoom = MIN(MAX(floor(100.0/scale), CFG->Zoom+1), 100.0);
if (prev_zoom != CFG->Zoom) {
gtk_adjustment_set_value(data->ZoomAdjustment, CFG->Zoom);
preview_invalidate_layer(data, ufraw_first_phase);
@@ -2093,15 +2107,16 @@
const double prev_zoom = CFG->Zoom;
(void)user_data;
if (data->FreezeDialog) return;
- if (CFG->Scale==0) {
- if (CFG->Zoom<100.0/max_scale) CFG->Zoom = 100.0/max_scale;
- CFG->Scale = ceil(100.0/CFG->Zoom);
- if (CFG->Scale==100.0/CFG->Zoom) CFG->Scale++;
+ int scale = zoom_to_scale(CFG->Zoom);
+ if (scale==0) {
+// if (CFG->Zoom<100.0/max_scale) CFG->Zoom = 100.0/max_scale;
+ scale = ceil(100.0/CFG->Zoom);
+ if (scale==100.0/CFG->Zoom) scale++;
} else {
- CFG->Scale++;
+ scale++;
}
- CFG->Scale = LIM(CFG->Scale, min_scale, max_scale);
- CFG->Zoom = 100.0/CFG->Scale;
+ scale = LIM(scale, min_scale, max_scale);
+ CFG->Zoom = floor(100.0/scale);
if (prev_zoom != CFG->Zoom) {
gtk_adjustment_set_value(data->ZoomAdjustment, CFG->Zoom);
preview_invalidate_layer(data, ufraw_first_phase);
@@ -2123,7 +2138,6 @@
double wScale = (double)data->UF->rotatedWidth / previewWidth;
double hScale = (double)data->UF->rotatedHeight / previewHeight;
CFG->Zoom = 100.0/LIM(MAX(wScale, hScale), min_scale, max_scale);
- CFG->Scale = 0;
if (prev_zoom != CFG->Zoom) {
gtk_adjustment_set_value(data->ZoomAdjustment, CFG->Zoom);
preview_invalidate_layer(data, ufraw_first_phase);
@@ -2137,8 +2151,7 @@
const double prev_zoom = CFG->Zoom;
(void)user_data;
if (data->FreezeDialog) return;
- CFG->Scale = min_scale;
- CFG->Zoom = 100.0/CFG->Scale;
+ CFG->Zoom = 100.0/min_scale;
if (prev_zoom != CFG->Zoom) {
gtk_adjustment_set_value(data->ZoomAdjustment, CFG->Zoom);
preview_invalidate_layer(data, ufraw_first_phase);
@@ -2885,7 +2898,6 @@
CFG->autoExposure = FALSE;
if (CFG->autoBlack==enabled_state) CFG->autoBlack = apply_state;
} else if (valuep==&CFG->Zoom) {
- CFG->Scale = 0;
preview_invalidate_layer(data, ufraw_first_phase);
} else if (valuep==&CFG->threshold) {
preview_invalidate_layer(data, ufraw_denoise_phase);
@@ -5246,14 +5258,14 @@
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);
- CFG->Scale = MAX((uf->rotatedWidth-1)/max_preview_width,
+ int scale = MAX((uf->rotatedWidth-1)/max_preview_width,
(uf->rotatedHeight-1)/max_preview_height)+1;
- CFG->Scale = MAX(min_scale, CFG->Scale);
- CFG->Zoom = 100.0 / CFG->Scale;
+ scale = MAX(scale, min_scale);
+ 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) / CFG->Scale;
- preview_height = (uf->rotatedHeight+1) / CFG->Scale;
+ preview_width = (uf->rotatedWidth+1) / scale;
+ preview_height = (uf->rotatedHeight+1) / scale;
if (screen.height<=600) {
curveeditorHeight = 192;
data->HisMinHeight = 0;
@@ -5579,7 +5591,6 @@
double wScale = (double)data->UF->rotatedWidth / scrollWidth;
double hScale = (double)data->UF->rotatedHeight / scrollHeight;
CFG->Zoom = 100/MAX(wScale, hScale);
- CFG->Scale = 0;
preview_width = uf->rotatedWidth * CFG->Zoom/100;
preview_height = uf->rotatedHeight * CFG->Zoom/100;
}
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
ufraw-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs