// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseResponseCompression(); app.Use(async(context, next) => { if (context.Request.Path == "/_framework/blazor.js") { context.Request.Path = "/_framework/blazor.webassembly.js"; } await next.Invoke(); }); app.Use(async(context, next) => { if (context.Request.Path == "/application.json") { var application = new ChildApplicationModel() { ApplicationName = "Client", ApplicationUrl = $"{context.Request.Scheme}://{context.Request.Host}{context.Request.PathBase}" }; await context.Response.WriteAsync(JsonConvert.SerializeObject(application)); return; } await next.Invoke(); }); app.Use(async(context, next) => { if (context.Request.Path.StartsWithSegments("/avatar.png", StringComparison.OrdinalIgnoreCase) && context.Request.Method == "POST") { TechnologyCharacterAvatarModel model = null; var technologyCharacterAvatarImageGenerator = context.RequestServices.GetService <ITechnologyCharacterAvatarImageGenerator>(); if (context.Request.Body != default(Stream) && context.Request.Body != Stream.Null) { var body = await new StreamReader(context.Request.Body).ReadToEndAsync(); model = JsonConvert.DeserializeObject <TechnologyCharacterAvatarModel>(body); } var avatar = technologyCharacterAvatarImageGenerator .GenerateTechnologyCharacterAvatarImage(model); await context.Response.WriteAsync(JsonConvert.SerializeObject(avatar)); return; } await next.Invoke(); }); app.UseBlazor <TechnologyCharacterGenerator.Child.Common.Startup>(); }
public TechnologyCharacterAvatarImage GenerateTechnologyCharacterAvatarImage(TechnologyCharacterAvatarModel model) { string gender = "Male"; var avatarBase = GetEmbeddedBitmap($"TechnologyCharacterGenerator.Avatar.images.Programmer 1 - {gender} - Base.png"); var avatarHair = GetEmbeddedBitmap($"TechnologyCharacterGenerator.Avatar.images.Programmer 1 - {gender} - Hair.png"); var avatarSkin = GetEmbeddedBitmap($"TechnologyCharacterGenerator.Avatar.images.Programmer 1 - {gender} - Skin.png"); var avatarMain = GetEmbeddedBitmap($"TechnologyCharacterGenerator.Avatar.images.Programmer 1 - {gender} - Main.png"); var avatarAccent = GetEmbeddedBitmap($"TechnologyCharacterGenerator.Avatar.images.Programmer 1 - {gender} - Accent.png"); var avatar = new Bitmap(avatarBase.Width, avatarBase.Height); var skinColor = new HslColor(ColorTranslator.FromHtml(model.SkinColor)); var hairColor = new HslColor(ColorTranslator.FromHtml(model.HairColor)); var mainColor = new HslColor(ColorTranslator.FromHtml(model.MainColor)); var accentColor = new HslColor(ColorTranslator.FromHtml(model.AccentColor)); for (var y = 0; y < avatarBase.Height; y++) { for (var x = 0; x < avatarBase.Width; x++) { SetColor(avatarHair, hairColor, x, y); SetColor(avatarSkin, skinColor, x, y); SetColor(avatarMain, mainColor, x, y); SetColor(avatarAccent, accentColor, x, y); } } using (var g = Graphics.FromImage(avatar)) { g.DrawImage(avatarBase, new Rectangle(0, 0, avatarBase.Width, avatarBase.Height)); g.DrawImage(avatarHair, new Rectangle(0, 0, avatarHair.Width, avatarHair.Height)); g.DrawImage(avatarSkin, new Rectangle(0, 0, avatarSkin.Width, avatarSkin.Height)); g.DrawImage(avatarMain, new Rectangle(0, 0, avatarMain.Width, avatarMain.Height)); g.DrawImage(avatarAccent, new Rectangle(0, 0, avatarAccent.Width, avatarAccent.Height)); } using (var stream = new MemoryStream()) { avatar.Save(stream, ImageFormat.Png); return(new TechnologyCharacterAvatarImage() { ImageSource = $"data:image/png;base64, {Convert.ToBase64String(stream.ToArray())}" }); } }