From 943854b57d12960a19f24dd6741ba4fda8c66ad7 Mon Sep 17 00:00:00 2001 From: Søren Sandmann Pedersen Date: Mon, 27 Sep 2010 08:10:27 -0400 Subject: thresholding --- bluenoise.c | 6 ++++-- gtk-utils.c | 64 ++++++++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/bluenoise.c b/bluenoise.c index 97ea96e..f40f969 100644 --- a/bluenoise.c +++ b/bluenoise.c @@ -84,7 +84,7 @@ main () #endif if (f <= 0.5) { - factor = 0.5 * (cos (M_PI * (1 - 2 * (f))) + 1.0); + factor = pow (0.5 * (cos (M_PI * (1 - 2 * (f))) + 1.0), 8); } else { @@ -94,10 +94,12 @@ main () noise[i * N_SAMPLES + j].re *= 2.4 * f; noise[i * N_SAMPLES + j].im *= 2.4 * f; #endif +#if 0 if (f < 0.2) factor = 0; else - factor = 5 * (f - 0.2); + factor = 2.5 * (f - 0.2); +#endif noise[i * N_SAMPLES + j].re *= factor; noise[i * N_SAMPLES + j].im *= factor; // 8 * N_SAMPLES * N_SAMPLES * factor; diff --git a/gtk-utils.c b/gtk-utils.c index 8d8add6..d499f11 100644 --- a/gtk-utils.c +++ b/gtk-utils.c @@ -9,7 +9,10 @@ pixbuf_from_buffer (complex_t *buffer, int n) gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, n, n); guint32 *p_bits = (guint32 *)gdk_pixbuf_get_pixels (pixbuf); int p_stride = gdk_pixbuf_get_rowstride (pixbuf); - int w, h; + int w, h, total, set; + + total = 0; + set = 0; for (h = 0; h < n; ++h) { @@ -20,22 +23,45 @@ pixbuf_from_buffer (complex_t *buffer, int n) double v; int vi; int g; + double no; pb += h * p_stride + w * 4; - v = c.re * 255.0 + 0.5; - if (v > 255.0) - v = 255.0; - if (v < 0) - v = 0; + no = c.re; + +#define THRESHOLD (0.5) + total++; + + if (THRESHOLD + 2 * (no - 0.5) >= 0.5) + { + g = 0xff; + set++; + } + else if (THRESHOLD + 2 * (no - 0.5) >= -0.5) + { + g = 0x80; + } + else if (THRESHOLD + 2 * (no - 0.5) >= -1.5) + { + g = 0x00; + set--; + } + else + { + printf ("asdf\n"); + g = 100; + } + #if 0 vi *= 0x0f; #endif #define SADD(v,a) (((v) + (a) > 0xff)? 0xff : ((v) + (a) < 0)? 0 : ((v) + (a))) +#if 0 g = ((double)w / n) * 255; +#endif #if 0 if (vi + g > 0xff) @@ -43,28 +69,28 @@ pixbuf_from_buffer (complex_t *buffer, int n) else pb[0] = pb[1] = pb[2] = 0x00; #endif +#if 0 vi = (v - 0x80); - vi >>= 5; + vi >>= 3; int rr, gg, bb; - rr = 0; - gg = g * 0.5; - bb = 0; + rr = 0x20 + 0.5 * g; + gg = 0x20 + 0.5 * g; + bb = 0 + 0.3 * g; int x = drand48() > 0.5; - pb[0] = SADD (rr, vi); - pb[1] = SADD (gg, - (vi)); - pb[2] = SADD (bb, vi); + pb[0] = SADD (rr, 0.5 * vi); + pb[1] = SADD (gg, - 0.5 * vi); + pb[2] = SADD (bb, 2 * vi); pb[3] = 0xff; +#endif -#if 0 - pb[0] = rr; - pb[1] = gg; - pb[2] = bb; + pb[0] = g; + pb[1] = g; + pb[2] = g; pb[3] = 0xff; -#endif #define TRUNC(x, n) \ x >>= (8 - n); \ @@ -78,7 +104,9 @@ pixbuf_from_buffer (complex_t *buffer, int n) TRUNC(pb[2], 5); #endif } + } + printf ("%d of %d (%f)\n", set, total, (double)set / total); return pixbuf; } -- cgit v1.2.3