public IActionResult Back(CardType?type) { if (type == default) { return(BadRequest("Unknown card type")); } CallCardBack ??= RenderService.RenderCardBack(Color.Black, Color.White); ResponseCardBack ??= RenderService.RenderCardBack(Color.White, Color.Black); var cardBitmap = type switch { CardType.Call => CallCardBack, CardType.Response => ResponseCardBack, _ => throw new InvalidOperationException(), }; var cardStream = new MemoryStream(); lock ( cardBitmap ) { cardBitmap.Save(cardStream, ImageFormat.Png); cardStream.Seek(0, SeekOrigin.Begin); } return(File(cardStream, "image/png")); }
private static async Task Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Usage: CardCastToImage.exe <deck codes>"); return; } var deckCodes = args[0].Split(','); // Render the card backs (calls then responses) using (var callCardBack = RenderService.RenderCardBack(Color.Black, Color.White)) callCardBack.Save("CallCardBack.png", ImageFormat.Png); using (var responseCardBack = RenderService.RenderCardBack(Color.White, Color.Black)) responseCardBack.Save("ResponseCardBack.png", ImageFormat.Png); // Fetch and render all the individual decks foreach (var deckCode in deckCodes) { try { Console.Write($"Attempting to fetch card deck \"{deckCode}\"..."); var deck = await CardCastService.GetDeckAsync(deckCode); Console.WriteLine("Done!"); Console.Write("Rendering..."); // Render the card fronts (calls then responses) var callCardSheets = RenderService.RenderCardSheets(deck.Cards.Calls, deckCode, Color.Black, Color.White); var responseCardSheets = RenderService.RenderCardSheets(deck.Cards.Responses, deckCode, Color.White, Color.Black); foreach (var(sheetIndex, sheetBitmap) in callCardSheets.Pairs()) { using (sheetBitmap) sheetBitmap.Save($"DeckCalls-{deckCode}-{sheetIndex}.png", ImageFormat.Png); } foreach (var(sheetIndex, sheetBitmap) in responseCardSheets.Pairs()) { using (sheetBitmap) sheetBitmap.Save($"DeckResponses-{deckCode}-{sheetIndex}.png", ImageFormat.Png); } Console.WriteLine("Done!"); // Don't want to piss off the server timeouts Thread.Sleep(1000); } catch (Exception ex) { Console.WriteLine("Error!"); Console.WriteLine(ex.ToString()); } } Console.WriteLine("Done with all decks! Press any key to exit."); while (Console.KeyAvailable) { Console.ReadKey(true); } Console.ReadKey(true); }