// 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>();
        }
Beispiel #2
0
        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())}"
                });
            }
        }