From 512daa03c2e79352c2a40e6eb61b9604d7eb1f7a Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Wed, 14 Mar 2012 20:14:42 +0100 Subject: wimmel: Dont use get_pixel for permormance reasons --- wimmel.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/wimmel.c b/wimmel.c index 0a35ec2..03fc1d4 100644 --- a/wimmel.c +++ b/wimmel.c @@ -23,39 +23,34 @@ find_image_in_wimmel(GdkPixbuf *wimmel, GdkPixbuf *match, GdkPixbuf *output) barrier = width * height / 2; - for (j = 0; j < wimmel_height - height; ++j) { - for (i = 0; i < wimmel_width - width; ++i) { + int stride = gdk_pixbuf_get_rowstride(wimmel); + int nch = gdk_pixbuf_get_n_channels(wimmel); + guchar *row = gdk_pixbuf_get_pixels(wimmel); + guchar *pix, *pix_m; + + int stride_m = gdk_pixbuf_get_rowstride(match); + + for (j = 0; j < wimmel_height - height; ++j, row += stride) { + for (i = 0, pix = row; i < wimmel_width - width; ++i, pix += nch) { difference = 0; - for (n = 0; n < height; ++n) { - for (k = 0; k < width; ++k) { - color_t color = get_pixel(wimmel, POINT(i + k, j + n)); - color_t color_orig = get_pixel(match, POINT(k, n)); - -#if 1 - if (abs(color.r - color_orig.r) > 50 || - abs(color.g - color_orig.g) > 50 || - abs(color.b - color_orig.b) > 50) { + guchar *row_m = gdk_pixbuf_get_pixels(match); + for (n = 0; n < height; ++n, row_m += stride_m) { + for (k = 0, pix_m = row_m; k < width; ++k, pix_m += nch) { + + pix = row + n * stride + (i + k) * nch; + + if (abs((int)pix[0] - (int)pix_m[0]) > 50 || + abs((int)pix[1] - (int)pix_m[1]) > 50 || + abs((int)pix[2] - (int)pix_m[2]) > 50) { difference++; if (difference > barrier) break; } -#else - difference += - abs(color.r - color_orig.r) + - abs(color.g - color_orig.g) + - abs(color.b - color_orig.b); - if (difference > barrier * 300) - break; -#endif } } -#if 0 - if (difference < barrier * 300) { -#else if (difference < barrier) { -#endif g_print("kleeblatt @ %d, %d; difference: %d\n", i, j, difference); color_t color = COLOR(255, 0, 0, 0); for (k = i; k < i+width; k++) { -- cgit