private void CorrectPhotoNumber(int i, PhotoContext context) { foreach (var guy in context.People.Where(x => x.Id > i)) { guy.CommonPhotoNumber -= 1; } context.SaveChanges(); }
public override int SaveChanges() { var context = new PhotoContext(); var changedEntities = ChangeTracker.Entries(); foreach (var changedEntity in changedEntities) { if (!(changedEntity.Entity is Photo)) { continue; } var entity = (Photo)changedEntity.Entity; if (entity.Id == 1) { continue; } if (!entity.IsTheBest) { continue; } switch (changedEntity.State) { case EntityState.Added: { var p = context.Photos.First(x => x.Id == 1); PutImage(p.Face.Image, entity.Face.Image, context); } break; case EntityState.Modified: { var p = context.Photos.First(x => x.Id == 1); var photoPosition = context.People.Where(x => x.Id == entity.OwnerId).Select(x => x.CommonPhotoNumber).First(); ReplaceImage(p.Face.Image, entity.Face.Image, photoPosition, context); } break; case EntityState.Deleted: { var p = context.Photos.First(x => x.Id == 1); var newPhoto = context.Photos.FirstOrDefault(x => (x.OwnerId == entity.OwnerId) && x.Id != entity.Id); var position = context.People.First(x => x.Id == entity.OwnerId).CommonPhotoNumber; if (newPhoto == null) { DeleteImage(p.Face.Image, entity.OwnerId, context); } else { ReplaceImage(p.Face.Image, newPhoto.Face.Image, position, context); } } break; } //TODO:придумать логику обновления общей фотографии } return(base.SaveChanges()); }
private void ReplaceImage(byte[] commonPhoto, byte[] newPhoto, int position, PhotoContext context) { MemoryStream stream1 = new MemoryStream(commonPhoto); Bitmap bmp1 = new Bitmap(stream1); if (bmp1.Width / 100 <= position) { PutImage(commonPhoto, newPhoto, context); return; } MemoryStream stream2 = new MemoryStream(newPhoto); Bitmap bmp2 = new Bitmap(stream2); int outputImageWidth = bmp1.Width; int outputImageHeight = bmp1.Height; Bitmap outputImage = new Bitmap(outputImageWidth, outputImageHeight, PixelFormat.Format32bppArgb); using (Graphics graphics = Graphics.FromImage(outputImage)) { graphics.DrawImage(bmp1, 0, 0, new Rectangle(0, 0, 100 * position, 100), GraphicsUnit.Pixel); outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); graphics.DrawImage(bmp2, 100 * position, 0, new Rectangle(0, 0, bmp2.Width, 100), GraphicsUnit.Pixel); outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); graphics.DrawImage(bmp1, 100 * (position + 1), 0, new Rectangle(100 * (position + 1), 0, bmp1.Width - (100 * (position + 1)), 100), GraphicsUnit.Pixel); outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); } MemoryStream m = new MemoryStream(); var p = context.Photos.First(x => x.Id == 1); outputImage.Save(m, ImageFormat.Jpeg); p.Face.Image = m.ToArray(); context.SaveChanges(); outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); }
private void PutImage(byte[] commonPhoto, byte[] newPhoto, PhotoContext context) { if (commonPhoto != null) { MemoryStream stream1 = new MemoryStream(commonPhoto); Bitmap bmp1 = new Bitmap(stream1); MemoryStream stream2 = new MemoryStream(newPhoto); Bitmap bmp2 = new Bitmap(stream2); int outputImageWidth = bmp1.Width + bmp2.Width; int outputImageHeight = bmp1.Height > bmp2.Height ? bmp1.Height : bmp2.Height; Bitmap outputImage = new Bitmap(outputImageWidth, outputImageHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); using (Graphics graphics = Graphics.FromImage(outputImage)) { graphics.DrawImage(bmp1, new Rectangle(new Point(), bmp1.Size), new Rectangle(new Point(), bmp1.Size), GraphicsUnit.Pixel); graphics.DrawImage(bmp2, new Rectangle(new Point(bmp1.Width, 0), bmp2.Size), new Rectangle(new Point(), bmp2.Size), GraphicsUnit.Pixel); } MemoryStream m = new MemoryStream(); var p = context.Photos.First(x => x.Id == 1); outputImage.Save(m, ImageFormat.Jpeg); p.Face.Image = m.ToArray(); context.SaveChanges(); outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); } else { MemoryStream stream2 = new MemoryStream(newPhoto); var p = context.Photos.First(x => x.Id == 1); p.Face.Image = stream2.ToArray(); context.SaveChanges(); } }
private void DeleteImage(byte[] commonPhoto, int ownerId, PhotoContext context) { MemoryStream stream1 = new MemoryStream(commonPhoto); Bitmap bmp1 = new Bitmap(stream1); int outputImageWidth = bmp1.Width - 100; int outputImageHeight = bmp1.Height; if (outputImageWidth == 0) { var photo = context.Photos.First(x => x.Id == 1); photo.Face.Image = null; context.SaveChanges(); return; } Bitmap outputImage = new Bitmap(outputImageWidth, outputImageHeight, PixelFormat.Format32bppArgb); int position = context.People.First(x => x.Id == ownerId).CommonPhotoNumber; using (Graphics graphics = Graphics.FromImage(outputImage)) { graphics.DrawImage(bmp1, new Rectangle(0, 0, 100 * position, outputImageHeight), new Rectangle(0, 0, 100 * position, outputImageHeight), GraphicsUnit.Pixel); graphics.DrawImage(bmp1, new Rectangle(100 * position, 0, outputImageWidth - 100 * position, outputImageHeight), new Rectangle(100 * (position + 1), 0, bmp1.Width - 100 * (position + 1), 100), GraphicsUnit.Pixel); } outputImage.Save(@"C:\Users\vinnik\Desktop\Новая папка\img.jpg", ImageFormat.Jpeg); var p = context.Photos.First(x => x.Id == 1); MemoryStream m = new MemoryStream(); outputImage.Save(m, ImageFormat.Jpeg); p.Face.Image = m.ToArray(); context.SaveChanges(); CorrectPhotoNumber(position, context); }