Newtonsoft.Json System.Net System.Threading.Tasks System.Drawing System.Drawing.Imaging async Task Main() { var r = new Random(); var palette1 = downloadPaletteAsync(r,0xFF000000); var palette2 = downloadPaletteAsync(r,0xFF000000); byte[] bytes = CreateGridImage(5,5, 9, 9, 40,(await palette1).ToArray()); FileStream file = new FileStream("C:\\Users\\marco.borgna\\paletteWallpaper_1.jpg", FileMode.Create, FileAccess.Write); file.Write(bytes,0,bytes.Length); byte[] bytes2 = CreateGridImage(5,5, 9, 9, 40,(await palette2).ToArray()); FileStream file2 = new FileStream("C:\\Users\\marco.borgna\\paletteWallpaper_2.jpg", FileMode.Create, FileAccess.Write); file2.Write(bytes2,0,bytes2.Length); } async Task> downloadPaletteAsync(Random r,uint alpha){ var url = String.Format( "http://www.colourlovers.com/api/palettes?resultOffset={0}&numResults=1&orderCol=numVote&sortBy=DESC",r.Next(0,200) ); Task xmlString = new WebClient().DownloadStringTaskAsync (url); var s = (await xmlString); var x = XDocument.Parse( s,LoadOptions.None); var palette = x.XPathSelectElement("//palette/colors") .Elements() .Select (c =>c.Value ) .Select (c => System.Int32.Parse(c,System.Globalization.NumberStyles.HexNumber)) .Select (c => Color.FromArgb((int)(c|alpha))); return palette; } // Define other methods and classes here public static byte[] CreateGridImage( int maxXCells, int maxYCells, int cellXPosition, int cellYPosition, int boxSize, Color[] palette ) { using (var bmp = new System.Drawing.Bitmap(maxXCells * boxSize+1, maxYCells * boxSize+1)) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.White); Pen pen = new Pen(Color.Black); pen.Color = palette[0]; pen.Width = boxSize; //Draw vert lines for (int i = 0; i <= maxXCells;i++ ) { pen.Color = palette[i%(palette.Length)]; g.DrawLine(pen, (i * boxSize), 0, i * boxSize, boxSize * maxYCells+1); } /* //Draw oriz lines for (int i = 0; i <= maxYCells; i++) { pen.Color = palette[i%(palette.Length)]; g.DrawLine(pen, 0, (i * boxSize), boxSize * maxXCells+1, i * boxSize); } */ } var memStream = new MemoryStream(); bmp.Save(memStream, ImageFormat.Png); return memStream.ToArray(); } }