A few years back I put together a simple Fractal Zoom in Silverlight using gray scales.
Time for a little makeover with color:
Hold down the mouse button over the Mandelbrot and move the mouse to highlight a rectangle, then release the mouse button to zoom in on that area.
Implementation
To get a nice colour progression I used the HSB color circle:
let H,S,L = 0.95 + (10.0 * n), 0.6, 0.5
Then created a colour lookup table using a list comprehension:
[for i in 0..maxIteration >
let n = float i / float maxIteration
let H,S,L = 0.95 + (10.0 * n), 0.6, 0.5
let H = H  floor H
let r,g,b = RGB.FromHSL(H,S,L)
0xff000000 + (r <<< 16) + (g <<< 8) + b]
For the HSL to RGB conversion I converted Colin Eberhardt’s accepted Stack Overflow answer from C# to F#:
C# 
F# 
double v;
double r, g, b;
if (A > 1.0)
A = 1.0;
r = L; // default to gray
g = L;
b = L;
v =
(L <= 0.5)
? (L * (1.0 + S))
: (L + S  L * S);
if (v > 0)
{
double m;
double sv;
int sextant;
double fract, vsf, mid1, mid2;
m = L + L  v;
sv = (v  m) / v;
H *= 6.0;
sextant = (int)H;
fract = H  sextant;
vsf = v * sv * fract;
mid1 = m + vsf;
mid2 = v  vsf;
switch (sextant)
{
case 0:
r = v;
g = mid1;
b = m;
break;
case 1:
r = mid2;
g = v;
b = m;
break;
case 2:
r = m;
g = v;
b = mid1;
break;
case 3:
r = m;
g = mid2;
b = v;
break;
case 4:
r = mid1;
g = m;
b = v;
break;
case 5:
r = v;
g = m;
b = mid2;
break;
}
}
ColorRGB rgb = new ColorRGB();
rgb.R = Convert.ToByte(r * 255.0f);
rgb.G = Convert.ToByte(g * 255.0f);
rgb.B = Convert.ToByte(b * 255.0f);
rgb.A = Convert.ToByte(A * 255.0f);
return rgb;

let v =
if (L <= 0.5)
then (L * (1.0 + S))
else (L + S  L * S)
if v > 0.0 then
let m = L + L  v;
let sv = (v  m) / v;
let H = H * 6.0;
let sextant = int H
let fract = H  float sextant
let vsf = v * sv * fract;
let mid1 = m + vsf;
let mid2 = v  vsf;
match sextant with
 0 > v, mid1, m
 1 > mid2, v, m
 2 > m, v, mid1
 3 > m, mid2, v
 4 > mid1, m, v
 5 > v, m, mid2
 _ > L, L, L
else L, L, L
> fun (r,g,b) –>
byte(r*255.),
byte(g*255.),
byte(b*255.)

Voila, happy zooming :)