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()); }
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)); } }