private String CreateSubImageFilename(String originalFilename) { string fullFilename = originalFilename; string directory = Path.GetDirectoryName(fullFilename); string filename = Path.GetFileNameWithoutExtension(fullFilename); string extension = Path.GetExtension(fullFilename); string now = DateTime.Now.ToString("hh-mm-ss_MM-dd-yyy"); string newFilename = directory + Path.DirectorySeparatorChar + "sub" + Path.DirectorySeparatorChar + now + "_" + filename + extension; string newDirectoryName = Path.GetDirectoryName(newFilename); if (!Directory.Exists(newDirectoryName)) { Directory.CreateDirectory(newDirectoryName); } if (!Utitlies.HasWritePermissionOnDir(newDirectoryName)) { Log.Write("The program does not have access to write this file: " + newFilename); Error("You do not have access to write this file: " + newFilename, null); return(null); } else { return(newFilename); } }
private void SetSelectedImageCell(int row) { row = Utitlies.BoundTo(row, 0, uxDataGrid.Rows.Count - 1); if (row > 0) { uxDataGrid.ClearSelection(); DataGridViewCell cell = uxDataGrid[0, row]; cell.Selected = true; uxDataGrid.CurrentCell = cell; } }
private void uxImageDisplay_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && _tracking) { _tracking = false; _currentPoint = new PointF(e.X, e.Y); float selectionWidth = Math.Abs(_start.X - _currentPoint.X); float selectionHeight = Math.Abs(_start.Y - _currentPoint.Y); if (selectionWidth >= MIN_SUB_SIZE && selectionHeight >= MIN_SUB_SIZE) { using (Bitmap image = _currentImageHolder.LoadBitmap()) { System.Drawing.Point imageStartPoint = PointUtilities.ConvertToImagePoint(uxImageDisplay, _start.Floor()); System.Drawing.Point imageCurrentPoint = PointUtilities.ConvertToImagePoint(uxImageDisplay, _currentPoint.Floor()); int x = (int)Utitlies.BoundTo(imageStartPoint.X, 0, image.Width); int y = (int)Utitlies.BoundTo(imageStartPoint.Y, 0, image.Height); int width = (int)Utitlies.BoundTo(Math.Abs(x - imageCurrentPoint.X), 0, image.Width - x); int height = (int)Utitlies.BoundTo(Math.Abs(y - imageCurrentPoint.Y), 0, image.Height - y); try { using (Bitmap bitmap = ImageUtilities.SubImage(image, new Rectangle(x, y, width, height))) { string newFilename = CreateSubImageFilename(_currentImageHolder.FullFilename); if (newFilename != null) { bitmap.Save(newFilename); } } } catch (Exception ex) { Log.Write("The sub-image could not be saved: " + _currentImageHolder.FullFilename, ex); Error("The image could not be saved.", ex); } } } else { _clickPoints.Add(new IntPoint(e.X, e.Y)); if (_clickPoints.Count == 4) { try { List <IntPoint> clickPoints = PointUtilities.ConvertToImagePoints(uxImageDisplay, _clickPoints.ToArray().ConvertToPoints()) .ConvertToIntPoints() .ToList(); QuadrilateralTransformation transform = new QuadrilateralTransformation(clickPoints, 200, 200); using (Bitmap image = _currentImageHolder.LoadBitmap()) { using (Bitmap quadImage = transform.Apply(image)) { String newFilename = CreateSubImageFilename(_currentImageHolder.FullFilename); if (newFilename != null) { quadImage.Save(newFilename); } } } } catch (Exception ex) { Log.Write("The sub-image could not be saved: " + _currentImageHolder.FullFilename, ex); Error("The image could not be saved.", ex); } _clickPoints.Clear(); } uxImageDisplay.Invalidate(); } } uxImageDisplay.Invalidate(); }