internal static void Crop(CleanApertureBox cleanApertureBox, ref Surface surface) { if (cleanApertureBox is null) { ExceptionUtil.ThrowArgumentNullException(nameof(cleanApertureBox)); } if (cleanApertureBox.Width.Denominator == 0 || cleanApertureBox.Height.Denominator == 0 || cleanApertureBox.HorizontalOffset.Denominator == 0 || cleanApertureBox.VerticalOffset.Denominator == 0) { return; } int cropWidth = cleanApertureBox.Width.ToInt32(); int cropHeight = cleanApertureBox.Height.ToInt32(); double offsetX = cleanApertureBox.HorizontalOffset.ToDouble(); double offsetY = cleanApertureBox.VerticalOffset.ToDouble(); double pictureCenterX = offsetX + ((surface.Width - 1) / 2.0); double pictureCenterY = offsetY + ((surface.Height - 1) / 2.0); int cropRectX = (int)Math.Round(pictureCenterX - ((cropWidth - 1) / 2.0)); int cropRectY = (int)Math.Round(pictureCenterY - ((cropHeight - 1) / 2.0)); Rectangle cropRect = new Rectangle(cropRectX, cropRectY, cropWidth, cropHeight); // Check that the crop rectangle is within the surface bounds. if (cropRect.IntersectsWith(surface.Bounds)) { Surface temp = new Surface(cropWidth, cropHeight); try { temp.CopySurface(surface, cropRect); surface.Dispose(); surface = temp; temp = null; } finally { temp?.Dispose(); } } }
public void GetTransformationProperties(uint itemId, out CleanApertureBox cleanAperture, out ImageRotateBox imageRotate, out ImageMirrorBox imageMirror) { cleanAperture = null; imageRotate = null; imageMirror = null; ItemPropertiesBox itemPropertiesBox = this.metaBox.ItemProperties; IReadOnlyList <ItemPropertyAssociationEntry> items = itemPropertiesBox.TryGetAssociatedProperties(itemId); if (items != null) { for (int i = 0; i < items.Count; i++) { IItemProperty property = itemPropertiesBox.TryGetProperty(items[i].PropertyIndex); if (property != null) { if (property.Type == BoxTypes.CleanAperture) { cleanAperture = (CleanApertureBox)property; } else if (property.Type == BoxTypes.ImageRotation) { imageRotate = (ImageRotateBox)property; } else if (property.Type == BoxTypes.ImageMirror) { imageMirror = (ImageMirrorBox)property; } } } } }