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();
        }
예제 #3
0
        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}");
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
 protected override Vector3 MeasureOverride(Vector3 availableSizeWithoutMargins)
 {
     return(ImageSizeHelper.CalculateImageSizeFromAvailable(sprite, availableSizeWithoutMargins, StretchType, StretchDirection, true));
 }
예제 #7
0
 protected override Vector3 ArrangeOverride(Vector3 finalSizeWithoutMargins)
 {
     return(ImageSizeHelper.CalculateImageSizeFromAvailable(sprite, finalSizeWithoutMargins, StretchType, StretchDirection, false));
 }
예제 #8
0
 /// <inheritdoc/>
 protected override Vector3 MeasureOverride(Vector3 availableSizeWithoutMargins)
 {
     return(sizeToContent
         ? base.MeasureOverride(availableSizeWithoutMargins)
         : ImageSizeHelper.CalculateImageSizeFromAvailable(ButtonImage, availableSizeWithoutMargins, ImageStretchType, ImageStretchDirection, true));
 }
예제 #9
0
 /// <inheritdoc/>
 protected override Vector3 ArrangeOverride(Vector3 finalSizeWithoutMargins)
 {
     return(sizeToContent
         ? base.ArrangeOverride(finalSizeWithoutMargins)
         : ImageSizeHelper.CalculateImageSizeFromAvailable(ButtonImage, finalSizeWithoutMargins, ImageStretchType, ImageStretchDirection, false));
 }
예제 #10
0
        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);
        }