Exemple #1
0
        public async Task <ActionResult> CreateFixedImageModal(CreateFixedImageModel model, HttpPostedFileBase imageFile)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            if (!imageFile.IsValidImage())
            {
                ModelState.AddModelError("", "Invalid image upload");
                return(View(model));
            }

            model.ImageStream = imageFile.InputStream;
            var result = await ImageWriter.CreateFixedImage(model);

            if (!ModelState.IsWriterResultValid(result))
            {
                return(View(model));
            }

            return(CloseModalSuccess());
        }
Exemple #2
0
        public async Task <IWriterResult> CreateFixedImage(CreateFixedImageModel model)
        {
            using (var context = DataContextFactory.CreateContext())
                using (var bitmap = new Bitmap(model.ImageStream))
                {
                    var game = await context.Games
                               .Where(x => x.Status == Enums.GameStatus.NotStarted && x.Id == model.GameId)
                               .FirstOrDefaultAsync();

                    if (game == null)
                    {
                        return(new WriterResult(false, "Game not found"));
                    }

                    var width  = bitmap.Width;
                    var height = bitmap.Height;

                    if (model.X + width > game.Width)
                    {
                        return(new WriterResult(false, "X + Width = Out of bounds"));
                    }

                    if (model.Y + height > game.Height)
                    {
                        return(new WriterResult(false, "Y + Height = Out of bounds"));
                    }

                    var imagePixels = new List <Entity.Pixel>();
                    for (int x = 0; x < width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            var color = bitmap.GetPixel(x, y);
                            if (color.A == 0)
                            {
                                continue;
                            }

                            var hexColor = ColorTranslator.ToHtml(color);
                            imagePixels.Add(new Entity.Pixel
                            {
                                UserId     = Constant.SystemUserId,
                                GameId     = game.Id,
                                X          = model.X + x,
                                Y          = model.Y + y,
                                Points     = 1,
                                Color      = hexColor,
                                LastUpdate = DateTime.UtcNow,
                                Type       = model.IsFixed
                                                                ? PixelType.Fixed
                                                                : PixelType.User
                            });
                        }
                    }

                    context.Pixel.AddRange(imagePixels);
                    await context.SaveChangesAsync();

                    return(new WriterResult(true));
                }
        }