public Bitmap CropImage(Image im, CropPixels rect) { Bitmap image = new Bitmap((int)rect.W, (int)rect.H); using (Graphics gr = Graphics.FromImage(image)) { gr.CompositingQuality = CompositingQuality.HighSpeed; gr.InterpolationMode = InterpolationMode.HighQualityBicubic; gr.CompositingMode = CompositingMode.SourceCopy; float start = rect.X < 0 ? 0 : rect.X; gr.FillRectangle(Brushes.White, 0, 0, image.Width, image.Height); gr.DrawImage(im, new RectangleF(0, 0, image.Width, image.Height), new RectangleF(start, rect.Y, rect.W - start, rect.H), GraphicsUnit.Pixel ); } return(image); }
public string StoreThumb(string filePath, CropPixels rect, ThumbSize size, string extension = null) { int maxWidth = (int)size; int maxHeight = (int)size; FileInfo inf = new FileInfo(filePath); string fileName = FileUtils.GetThumbPath(filePath, size, extension); string newPath = Path.Combine(inf.Directory.FullName, fileName); Utils.CreateFolderForFile(newPath); Bitmap image = new Bitmap(maxWidth, maxHeight); Image im = Image.FromFile(filePath); Bitmap cropped = CropImage(im, rect); float ratio = image.Width / rect.W; using (Graphics gr = Graphics.FromImage(image)) { gr.FillRectangle(Brushes.White, 0, 0, maxWidth, maxHeight); float start = rect.X < 0 ? (rect.X * -1 * ratio) : 0; gr.CompositingQuality = CompositingQuality.HighSpeed; gr.InterpolationMode = InterpolationMode.HighQualityBicubic; gr.CompositingMode = CompositingMode.SourceCopy; gr.DrawImage(cropped, start, 0, image.Width, image.Height); } if (File.Exists(newPath)) { File.Delete(newPath); } image.Save(newPath, ImageFormat.Png); string th = FileUtils.GetThumbUrl(filePath, size); return(th); }