private static ImageCorners GetImgCornersWithExtraPadding(ImageClickInputDetails clickInputs, Bitmap image, ImageAlterationParams imageAlterationParams) { //image corners with respect to the dimensions of click area var clickImgCorners = ImageCorners.GetImageCornersFromClickInputs(clickInputs, imageAlterationParams.MinImageHeightRatio, imageAlterationParams.BottomPaddingPercent); //image corners in actual image dimension var actualImgCorners = ImageCorners.GetActualImageCorners(clickImgCorners, image, clickInputs.ClickPositionListForImages); //image corners with extra padding on on each side of disc return(GetModifiedImgCornersForExtraWidth(actualImgCorners, imageAlterationParams.PercentExtraWidth)); }
/// <summary> /// The width of the object can be more than the diameter of the base disc /// In such scenarios, we will need to keep some extra padding on each side of disc /// while cropping the image. This function calculates the amount by which we should pad. /// </summary> /// <param name="contract"></param> /// <returns></returns> public static double GetExtraPadding(CreateMeshContract contract) { var maxExtraPaddingPercent = 0.0; var bottomPaddingPercent = contract.BottomPaddingPercent; //for each image foreach (var clickInput in contract.ClickInputs.ImageClickInputDetailsList) { var imageName = clickInput.ImageName; var bitmapImg = (Bitmap)Image.FromFile(string.Format(@"{0}\{1}", contract.ImageFolder, imageName)); //resize to 100 (small size) const int newWidth = 100; var newHeight = newWidth * bitmapImg.Height / bitmapImg.Width; var imageAlterationParams = new ImageAlterationParams { ResizeType = ResizeType.ToSpecifiedSizes, SpecificResizeHeight = newHeight, SpecificResizeWidth = newWidth }; var resizedImage = ImageResizer.ResizeImage(bitmapImg, imageAlterationParams); //strip background BackgroundStripper.StripBackground(resizedImage, contract.BackgroundStrippingParams); //get actual borders for this image var origImageCorners = ImageCorners.GetImageCornersFromClickInputs(clickInput, contract.MinImageHeightRatio, bottomPaddingPercent); var actualImageCorners = ImageCorners.GetActualImageCorners(origImageCorners, resizedImage, clickInput.ClickPositionListForImages); //calculate extra padding percent var padding = ExtraPadding.GetExtraPaddingPercent(resizedImage, actualImageCorners, contract.InvalidColor); //check if it is more than the maximum so far if (maxExtraPaddingPercent < padding) { maxExtraPaddingPercent = padding; } } return(maxExtraPaddingPercent); }