let design0 = """YYYYYYYYYB PPPPPPPPYB PRPYYYYYYB PRPPPPYBYB PRPRBRYBYB PRPRYPYBYB PRPRBBBBYB PRRRRRRBYB PRBBBBBBBB PRRRRRRRRR""" let design1 = """YYYYYYYYYB PPPPPPPPYB PRPYYYYYYB PRPPBPYBYB PRPRBRRBYB PRPYYPYBYB PRPRBPBBYB PRRRRRRBYB PRBBBBBBBB PRRRRRRRRR""" let design2 = """YYYYYYYYYB PPPPPPPPYB PRPYYYYYYB PRPBBBRBYB PRPYBRRBYB PRPYYPRBYB PRPYPPPBYB PRRRRRRBYB PRBBBBBBBB PRRRRRRRRR""" let design3 = """YYYYYYYYYB PPPPPPPPYB PRBRRRRRYB PRBBBBRPYB PRBYBRRPYB PRBYYPRPYB PRBYPPPPYB PRYYYYYPYB PRBBBBBBBB PRRRRRRRRR""" let design4 = """YYYYYYYYYB PBBBBBBBRB PYBRRRRRRB PYBBBBRPRB PYBYBRRPRB PYBYYPRPRB PYBYPPPPRB PYYYYYYPRB PYPPPPPPPB PRRRRRRRRR""" let design5 = """RRRRRRRRRP BBBBBBBBRP BYBRRRRRRP BYBBBBRPRP BYBYBRRPRP BYBYYPRPRP BYBYPPPPRP BYYYYYYPRP BYPPPPPPPP BYYYYYYYYY""" #r "System.Drawing.dll" open System open System.Drawing let toColor = function | 'R' -> Color.FromArgb(255,245,117,26) | 'Y' -> Color.FromArgb(255,238,241,0) | 'P' -> Color.FromArgb(255,161,129,228) | 'B' -> Color.FromArgb(255,80,170,241) | _ -> Color.White let toBrush c = new SolidBrush(toColor c) :> Brush let create (design:string) = let image = new Bitmap(500, 500) use graphics = Graphics.FromImage(image) let lines = design.Split([|'\n'|]) let k = 50 lines |> Seq.iteri (fun y line -> line |> Seq.iteri (fun x c -> let brush = toBrush c graphics.FillRectangle(brush, x*k, y*k, k, k) ) ) image #r @"Gif.Components.dll" open Gif.Components let encoder = AnimatedGifEncoder() if encoder.Start(@"c:\app\.gif") then encoder.SetFrameRate(5.0f) encoder.SetRepeat(0) [design0;design0;design1;design2;design3;design4;design5;design5;design5;design5;design4;design3;design2;design1;design0;design0;] |> List.iter (fun design -> encoder.AddFrame(create design) |> ignore) encoder.Finish() |> ignore