public async void AddBackImage(ContactModel contactItem, RasterImage backImage, Stream imageStream) { string imageFileName = Path.GetFileNameWithoutExtension(contactItem.Picture).Replace("image_", ""); string backImagePath = Path.Combine(HomePage.APP_DIR, $"back_{imageFileName}.jpeg"); if (imageStream != null) { await DependencyService.Get <IPictureSaver>().SaveImage(imageStream, backImagePath, PictureSaveResolution.Medium, false); } else if (backImage != null) { LeadSize size = ImageSizeHelper.GetImageSize(backImage.Width, backImage.Height, PictureSaveResolution.Medium); ResizeInterpolateCommand resizeInterpolateCommand = new ResizeInterpolateCommand(size.Width, size.Height, ResizeInterpolateCommandType.Resample); resizeInterpolateCommand.Run(backImage); using (var codecs = new RasterCodecs()) { codecs.Save(backImage, backImagePath, RasterImageFormat.Jpeg, 0); } } contactItem.BackImage = backImagePath; HomePage.Instance.SaveContactList(); SetBackImage(); }
public async void AddProfileImage(ContactModel contactItem, RasterImage image, Stream imageStream) { string imageFileName = Path.GetFileNameWithoutExtension(contactItem.Picture).Replace("image_", ""); string filePath = Path.Combine(HomePage.PROFILE_PICS_DIR, $"profile_{imageFileName}.jpeg"); if (imageStream != null) { await DependencyService.Get <IPictureSaver>().SaveImage(imageStream, filePath, PictureSaveResolution.Low, false); } else if (image != null) { LeadSize size = ImageSizeHelper.GetImageSize(image.Width, image.Height, PictureSaveResolution.Low); ResizeInterpolateCommand resizeInterpolateCommand = new ResizeInterpolateCommand(size.Width, size.Height, ResizeInterpolateCommandType.Resample); resizeInterpolateCommand.Run(image); using (var codecs = new RasterCodecs()) { codecs.Save(image, filePath, RasterImageFormat.Jpeg, 0); } } contactItem.ProfileImage = filePath; Device.BeginInvokeOnMainThread(() => profileImageView.Source = filePath); HomePage.Instance.SaveContactList(); }
public async Task AdjustSize_Expected_Result(Stretch stretch, double availableWidth, double availableHeight, double expectedWidth, double expectedHeight) { var imageNaturalSize = new Size(1000, 500); var availableSize = new Size(availableWidth, availableHeight); var expectedOutputSize = new Size(expectedWidth, expectedHeight); ImageSizeHelper .AdjustSize(stretch, availableSize, imageNaturalSize) .Should() .Be(expectedOutputSize, 0.5, $"Invalid output for image size {imageNaturalSize} when available is {availableSize} using stretch {stretch}"); }
public static Size GetDefaultImageSize(IProperties settings) { ImageSizeName boundsSize = GetDefaultBoundsSizeName(settings); Size defaultBoundsSize; if (boundsSize != ImageSizeName.Custom) { defaultBoundsSize = ImageSizeHelper.GetSizeConstraints(boundsSize); } else { int defaultWidth = settings.GetInt(DEFAULT_WIDTH, 240); int defaultHeight = settings.GetInt(DEFAULT_HEIGHT, 240); defaultBoundsSize = new Size(defaultWidth, defaultHeight); } return(defaultBoundsSize); }
public static void CreateScaledImages(HydrantWikiManager _manager, Guid _originalGuid) { //Get the image from the originals folder from S3 //Load the original byte[] data = _manager.GetOriginal(_originalGuid, ".jpg"); try { using (Image full = ImageHelper.GetImage(data)) { //Standard sizes must fit in 800 x 800 SizeF thumbSize = ImageSizeHelper.SizeThatFits(full, 800); using (Image reduced = ImageHelper.GetThumbnail(full, Convert.ToInt32(thumbSize.Height), Convert.ToInt32(thumbSize.Width))) { data = ImageHelper.GetBytes(reduced, ImageFormat.Jpeg); _manager.PersistWebImage(_originalGuid, ".jpg", "image/jpg", data); } //Thumbnails must fit in 100 x 100 thumbSize = ImageSizeHelper.SizeThatFits(full, 100); using (Image reduced = ImageHelper.GetThumbnail(full, Convert.ToInt32(thumbSize.Height), Convert.ToInt32(thumbSize.Width))) { data = ImageHelper.GetBytes(reduced, ImageFormat.Jpeg); _manager.PersistThumbnailImage(_originalGuid, ".jpg", "image/jpg", data); } } } catch (Exception ex) { //Bad Image TraceFileHelper.Exception(ex); } }
protected override Vector3 MeasureOverride(Vector3 availableSizeWithoutMargins) { return(ImageSizeHelper.CalculateImageSizeFromAvailable(sprite, availableSizeWithoutMargins, StretchType, StretchDirection, true)); }
protected override Vector3 ArrangeOverride(Vector3 finalSizeWithoutMargins) { return(ImageSizeHelper.CalculateImageSizeFromAvailable(sprite, finalSizeWithoutMargins, StretchType, StretchDirection, false)); }
/// <inheritdoc/> protected override Vector3 MeasureOverride(Vector3 availableSizeWithoutMargins) { return(sizeToContent ? base.MeasureOverride(availableSizeWithoutMargins) : ImageSizeHelper.CalculateImageSizeFromAvailable(ButtonImage, availableSizeWithoutMargins, ImageStretchType, ImageStretchDirection, true)); }
/// <inheritdoc/> protected override Vector3 ArrangeOverride(Vector3 finalSizeWithoutMargins) { return(sizeToContent ? base.ArrangeOverride(finalSizeWithoutMargins) : ImageSizeHelper.CalculateImageSizeFromAvailable(ButtonImage, finalSizeWithoutMargins, ImageStretchType, ImageStretchDirection, false)); }
internal static Size AdjustImageSizeForNewBaseSize(bool allowEnlargement, IResizeDecoratorSettings s, Size newBaseSize, RotateFlipType rotation, ImageDecoratorContext context) { Size rotatedBaseSize = ImageUtils.IsRotated90(rotation) ? new Size(newBaseSize.Height, newBaseSize.Width) : newBaseSize; if (s.ImageSizeName != ImageSizeName.Custom) { // If a standard image size is being used, fit to that Size sizeBounds = ImageSizeHelper.GetSizeConstraints(s.ImageSizeName); if (!allowEnlargement) { sizeBounds.Width = Math.Min(rotatedBaseSize.Width, sizeBounds.Width); sizeBounds.Height = Math.Min(rotatedBaseSize.Height, sizeBounds.Height); } return(ImageUtils.GetScaledImageSize(sizeBounds.Width, sizeBounds.Height, rotatedBaseSize)); } else { // If custom size, but we know the base size, preserve // the aspect ratio "skew" (difference in x and y DPI) // and pixel area Size imageSize = s.ImageSize; // Need to get the image size to the non-rotated angle, // because s.BaseSize dimensions are always pre-rotation. // Although ImageSize has not been fully updated for this // decorator yet (that's what we're trying to do here), // the width/height gets flipped immediately when a // rotation is applied, so rotation is already taken // into account. if (ImageUtils.IsRotated90(rotation)) { imageSize = new Size(imageSize.Height, imageSize.Width); } // If the base size has not been set yet, we have to guess. // This basically means the image was inserted using an older // build of Writer that did not have the crop feature. Ideally // we would use the original image size, but this is expensive // to get from here. It just so happens that newBaseSize works // for now because the crop dialog defaults to the same aspect // ratio as the original image, but if that ever changes this // will break. #if DEBUG if (s.BaseSize == null) { using (Bitmap bitmap = (Bitmap)Bitmap.FromFile(context.SourceImageUri.LocalPath)) { Size size = new Size(Math.Max(1, bitmap.Width / 2), Math.Max(1, bitmap.Height / 2)); Debug.Assert(size.Equals(newBaseSize) || bitmap.Size.Equals(newBaseSize), "Check base size assumptions. Can't use 's.BaseSize ?? newBaseSize', instead must calculate original image size (context.SourceImageUri.LocalPath)."); } } #endif Size baseSize = s.BaseSize ?? newBaseSize; double xFactor = imageSize.Width / (double)baseSize.Width; double yFactor = imageSize.Height / (double)baseSize.Height; newBaseSize = new Size( (int)Math.Round(xFactor * newBaseSize.Width), (int)Math.Round(yFactor * newBaseSize.Height) ); // Need to re-apply the rotation if necessary. if (ImageUtils.IsRotated90(rotation)) { newBaseSize = new Size(newBaseSize.Height, newBaseSize.Width); } // At this point, newBaseSize has the right aspect ratio; we now // need to scale it so it uses about the same number of pixels // as it did before. double factor = (imageSize.Width * imageSize.Height) / (double)(newBaseSize.Width * newBaseSize.Height); factor = Math.Sqrt(factor); newBaseSize.Width = (int)Math.Round(newBaseSize.Width * factor); newBaseSize.Height = (int)Math.Round(newBaseSize.Height * factor); if (!allowEnlargement) { if (newBaseSize.Width > rotatedBaseSize.Width || newBaseSize.Height > rotatedBaseSize.Height) { newBaseSize = ImageUtils.GetScaledImageSize(rotatedBaseSize.Width, rotatedBaseSize.Height, newBaseSize); } } return(newBaseSize); } }
public static double[,] EnhanceImage(double[,] imgBytes) { Stopwatch sw = new Stopwatch(); sw.Start(); var g1 = ImageSizeHelper.Reduce2(imgBytes, 1.7d); var g2 = ImageSizeHelper.Reduce2(g1, 1.21d); var g3 = ImageSizeHelper.Reduce2(g2, K); var g4 = ImageSizeHelper.Reduce2(g3, K); var p3 = ImageSizeHelper.Expand2(g4, K, new Size(g3.GetLength(0), g3.GetLength(1))); var p2 = ImageSizeHelper.Expand2(g3, K, new Size(g2.GetLength(0), g2.GetLength(1))); var p1 = ImageSizeHelper.Expand2(g2, 1.21d, new Size(g1.GetLength(0), g1.GetLength(1))); var l3 = ContrastEnhancement(KernelHelper.Subtract(g3, p3)); var l2 = ContrastEnhancement(KernelHelper.Subtract(g2, p2)); var l1 = ContrastEnhancement(KernelHelper.Subtract(g1, p1)); //SaveArray(l3, "C:\\temp\\l3.png"); //SaveArray(l1, "C:\\temp\\l1.png"); //SaveArray(l2, "C:\\temp\\l2.png"); var ls1 = SymmetryHelper.EstimateLS(l1, sigma1, sigma2); var ls2 = SymmetryHelper.EstimateLS(l2, sigma1, sigma2); var ls3 = SymmetryHelper.EstimateLS(l3, sigma1, sigma2); //SaveComplexArrayAsHSV(ls1, "C:\\temp\\ls1.png"); //SaveComplexArrayAsHSV(ls2, "C:\\temp\\ls2.png"); //SaveComplexArrayAsHSV(ls3, "C:\\temp\\ls3.png"); var ls2Scaled = KernelHelper.MakeComplexFromDouble( ImageSizeHelper.Expand2(ls2.Select2D(x => x.Real), K, new Size(l1.GetLength(0), l1.GetLength(1))), ImageSizeHelper.Expand2(ls2.Select2D(x => x.Imaginary), K, new Size(l1.GetLength(0), l1.GetLength(1)))); var multiplier = KernelHelper.Subtract(ls1.Select2D(x => x.Phase), ls2Scaled.Select2D(x => x.Phase)); for (int x = 0; x < ls1.GetLength(0); x++) { for (int y = 0; y < ls1.GetLength(1); y++) { ls1[x, y] *= Math.Abs(Math.Cos(multiplier[x, y])); } } DirectionFiltering(l1, ls1, tau1, tau2); DirectionFiltering(l2, ls2, tau1, tau2); DirectionFiltering(l3, ls3, tau1, tau2); var ll2 = ImageSizeHelper.Expand2(l3, K, new Size(l2.GetLength(0), l2.GetLength(1))); l2 = KernelHelper.Add(ll2, l2); var ll1 = ImageSizeHelper.Expand2(l2, 1.21d, new Size(l1.GetLength(0), l1.GetLength(1))); l1 = KernelHelper.Add(ll1, l1); var ll0 = ImageSizeHelper.Expand2(l1, 1.7d, new Size(imgBytes.GetLength(0), imgBytes.GetLength(1))); ll0 = ContrastEnhancement(ll0); sw.Stop(); var enhanced = RearrangeArray(ll0, 0, 255); return(enhanced); }