summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2010-09-27 08:10:27 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-09-27 08:10:27 -0400
commit943854b57d12960a19f24dd6741ba4fda8c66ad7 (patch)
treee9d2042c2c53ebe324d785ebbed1530efc7a9664
parent7cac4c120b1aa35cbdb2997516ecdd01b7ca8588 (diff)
thresholding
-rw-r--r--bluenoise.c6
-rw-r--r--gtk-utils.c64
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;
}