Пример #1
0
        public async Task<StorageFile> SaveToImageX(StorageFile file, bool calculateMax = true, bool isCached = true)
        {
            try
            {
                Helper.CreateCachedFolder();
                //{"message": "Uploaded image isn't in an allowed aspect ratio", "status": "fail"}
                using (var source = new StorageFileImageSource(file))
                using (var renderer = new JpegRenderer(source, JpegOutputColorMode.Yuv422, OutputOption.Stretch))
                {
                    var info = await source.GetInfoAsync();
                    var size = AspectRatioHelper.GetDesireSize(info.ImageSize.Width, info.ImageSize.Height, info.ImageSize.Height < info.ImageSize.Width);
                    //var max = Math.Max(size.Height, size.Width);
                    var ratio = info.ImageSize.Height > info.ImageSize.Width ? info.ImageSize.Height / info.ImageSize.Width : info.ImageSize.Width / info.ImageSize.Height;
                    var h = (size.Height / (float)ratio);
                    var w = (size.Width / (float)ratio);

                    if (calculateMax)
                        renderer.Size = new Size(Math.Round(w), Math.Round(h));
                    else
                        renderer.Size = new Size(info.ImageSize.Width, info.ImageSize.Height);
                    var folder = await GetOutputFolder(isCached);
                    var saveAsTarget = await folder.CreateFileAsync(Helper.GenerateString("IMG") + ".jpg", CreationCollisionOption.GenerateUniqueName);
                    var render = await renderer.RenderAsync();
                    using (var fs = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite))
                    {
                        await fs.WriteAsync(render);
                        await fs.FlushAsync();
                        return await SaveToImageX2(saveAsTarget);
                    }
                }
            }
            catch { }
            return file;
        }
Пример #2
0
        /// <summary>
        /// Creates an image source of the overlay, specifying the size of the background image it will be used on. The image source will be sized and cropped correctly.
        /// </summary>
        /// <param name="backgroundSize">The size of the background image.</param>
        /// <returns>The constructed overlay image source.</returns>
        public async Task <IImageProvider> CreateAsync(Size backgroundSize)
        {
            var uriAndRotation = GetUriAndRotation(backgroundSize);
            var file           = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uriAndRotation.Item1).AsTask().ConfigureAwait(false);

            var overlayImageSource = new StorageFileImageSource(file);

            var overlayImageInfo = await overlayImageSource.GetInfoAsync().AsTask().ConfigureAwait(false);

            var overlayImageAspectRatio = overlayImageInfo.ImageSize.Width / overlayImageInfo.ImageSize.Height;

            int overlayImageScaledWidth  = (int)overlayImageInfo.ImageSize.Width;
            int overlayImageScaledHeight = (int)overlayImageInfo.ImageSize.Height;

            if ((int)backgroundSize.Width > (int)backgroundSize.Height)
            {
                overlayImageScaledHeight = (int)(backgroundSize.Width / overlayImageAspectRatio);
                overlayImageScaledWidth  = (int)(backgroundSize.Width);
            }
            else if ((int)backgroundSize.Width < (int)backgroundSize.Height)
            {
                overlayImageScaledWidth  = (int)(backgroundSize.Height * overlayImageAspectRatio);
                overlayImageScaledHeight = (int)(backgroundSize.Height);
            }

            var renderer = new BitmapRenderer(overlayImageSource)
            {
                Size = new Size(overlayImageScaledWidth, overlayImageScaledHeight)
            };
            var overlayBitmap = await renderer.RenderAsync().AsTask().ConfigureAwait(false);

            var overlayBitmapImageSource = new BitmapImageSource(overlayBitmap);

            return(Crop(overlayBitmapImageSource, overlayImageInfo, (int)overlayImageInfo.ImageSize.Width, (int)overlayImageInfo.ImageSize.Height));
        }
Пример #3
0
        async void Next_Click(object sender, RoutedEventArgs e)
        {
            // Width of Photo should be 1080 at last
            // photo that has a width between 320 and 1080 pixels,
            // photo's aspect ratio is between 1.91:1 and 4:5 (a height between 566 and 1350 pixels with a width of 1080 pixels)
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var size = (await source.GetInfoAsync()).ImageSize;
                var res  = await AppCore.InstaApi.UploadPhotoAsync(
                    new InstaSharper.Classes.Models.InstaImage((FiltersList.SelectedItem as FilterListItem).bitmapSource.LocalPath, (int)size.Width, (int)size.Height), "#تست #موقت");
            }

            StorageFile F2S = null;

            if (FiltersList.SelectedItem == null)
            {
                F2S = imageStorageFile;
            }

            else
            {
                F2S = await StorageFile.GetFileFromApplicationUriAsync((FiltersList.SelectedItem as FilterListItem).bitmapSource);
            }

            var fsp = new FileSavePicker();

            fsp.FileTypeChoices.Add(".jpg", new List <string> {
                ".jpg"
            });
            fsp.SuggestedFileName      = "WinGoTag";
            fsp.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            var fs = await fsp.PickSaveFileAsync();

            if (fs == null)
            {
                return;
            }
            await F2S.CopyAndReplaceAsync(fs);

            //    using (var source = new StorageFileImageSource(imageStorageFile))
            //    using (var contrastEffect = new BlurEffect(source) { KernelSize = 40 })
            //    using (var renderer = new JpegRenderer(contrastEffect, JpegOutputColorMode.Yuv420))
            //    {
            //        var info = await source.GetInfoAsync();
            //        var saveAsTarget = await ApplicationData.Current.LocalFolder.CreateFileAsync("TempImage1.Jpg", CreationCollisionOption.OpenIfExists);
            //        var render = await renderer.RenderAsync();
            //        using (var fs = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite))
            //        {
            //            await fs.WriteAsync(render);
            //            await fs.FlushAsync();
            //        }
            //    }
            //    var res = await AppCore.InstaApi.UploadPhotoAsync(new InstaSharper.Classes.Models.InstaImage()
            //    {
            //        URI = new Uri("ms-appdata:///TempImage1.Jpg", UriKind.Absolute).LocalPath,
            //        Width = 391,
            //        Height = 428
            //    }, "از بیرون تحریم؛ از داخل فیلتر :|");
        }
Пример #4
0
        async Task <Uri> Fog()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new FogEffect(source))
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #5
0
        async Task <Uri> Sepia()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new Lumia.Imaging.Artistic.SepiaEffect(source)
                {
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #6
0
        async Task <Uri> SpotlightEffect()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new SpotlightEffect(source)
                {
                    Position = new Point((inf.ImageSize.Width / 2), (inf.ImageSize.Height / 2)), Radius = (int)((inf.ImageSize.Width / 2) - 100), TransitionSize = 0.8
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #7
0
        async Task <Uri> BigNose()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new WarpingEffect(source)
                {
                    WarpMode = WarpMode.BigNose
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #8
0
        async Task <Uri> GraySketch()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new SketchEffect(source)
                {
                    SketchMode = SketchMode.Gray
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #9
0
        async Task <Uri> Posterize()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new PosterizeEffect(source)
                {
                    ColorComponentValueCount = 10
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #10
0
        async Task <Uri> Oil()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new OilyEffect(source)
                {
                    OilBrushSize = OilBrushSize.Medium
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #11
0
        async Task <Uri> LomoYellow()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new LomoEffect(source)
                {
                    LomoStyle = LomoStyle.Yellow
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #12
0
        async Task <Uri> LomoGreen()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new Lumia.Imaging.Artistic.LomoEffect(source)
                {
                    LomoStyle = LomoStyle.Green
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #13
0
        async Task <Uri> Cartoon()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
            {
                var inf = await source.GetInfoAsync();

                using (var sharpnessEffect = new CartoonEffect(source)
                {
                    DistinctEdges = false
                })
                {
                    LastEffect = sharpnessEffect;
                    return(await SaveToImage());
                }
            }
        }
Пример #14
0
        //private void SliderContrast_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
        //{
        //    if (EffectIndex is -1) { return; }

        //    int value = Convert.ToInt32(SliderContrast.Value);
        //    if (value is 0) { NoFilter(); return; }

        //    switch (EffectIndex)
        //    {
        //        case 0: /*add*/ break;
        //        case 1: Brightness(value); break;
        //        case 2: Contrast(value); break;
        //        case 3: Temperature(value); break;
        //        case 4: ColorBoost(value); break;
        //        case 5: /*Add*/ break;
        //        case 6: /*add*/ break;
        //    }
        //}

        //private void EditsList_ItemClick(object sender, ItemClickEventArgs e)
        //{
        //    var data = e.ClickedItem as GridViewEditItem;
        //    EffectIndex = data.Target;
        //    _NameEffect.Text = data.Text;
        //    EditRoot.Visibility = Visibility.Visible;
        //}

        //private void Cancel_Click(object sender, RoutedEventArgs e)
        //{
        //    EditRoot.Visibility = Visibility.Collapsed;
        //}

        //private void Done_Click(object sender, RoutedEventArgs e)
        //{
        //    EditRoot.Visibility = Visibility.Collapsed;
        //}

        async Task <Uri> SaveToImage()
        {
            using (var source = new StorageFileImageSource(imageStorageFile))
                using (var renderer = new JpegRenderer(LastEffect, JpegOutputColorMode.Yuv420))
                {
                    var info = await source.GetInfoAsync();

                    var max = Math.Max(info.ImageSize.Height, info.ImageSize.Width);
                    renderer.Size = new Size(max, max);
                    var saveAsTarget = await ApplicationData.Current.LocalFolder.CreateFileAsync("file.Jpg", CreationCollisionOption.GenerateUniqueName);

                    var render = await renderer.RenderAsync();

                    using (var fs = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite))
                    {
                        await fs.WriteAsync(render);

                        await fs.FlushAsync();

                        return(new Uri($"ms-appdata:///local/{saveAsTarget.Name}", UriKind.RelativeOrAbsolute));
                    }
                }
        }
        /// <summary>
        /// Creates an image source of the overlay, specifying the size of the background image it will be used on. The image source will be sized and cropped correctly.
        /// </summary>
        /// <param name="backgroundSize">The size of the background image.</param>
        /// <returns>The constructed overlay image source.</returns>
        public async Task<IImageProvider> CreateAsync(Size backgroundSize)
        {
            var uriAndRotation = GetUriAndRotation(backgroundSize);
            var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uriAndRotation.Item1).AsTask().ConfigureAwait(false);
            var overlayImageSource = new StorageFileImageSource(file);

            var overlayImageInfo = await overlayImageSource.GetInfoAsync().AsTask().ConfigureAwait(false);
            var overlayImageAspectRatio = overlayImageInfo.ImageSize.Width / overlayImageInfo.ImageSize.Height;

            int overlayImageScaledWidth = (int)overlayImageInfo.ImageSize.Width;
            int overlayImageScaledHeight = (int)overlayImageInfo.ImageSize.Height;

            if ((int)backgroundSize.Width > (int)backgroundSize.Height)
            {
                overlayImageScaledHeight = (int)(backgroundSize.Width / overlayImageAspectRatio);
                overlayImageScaledWidth = (int)(backgroundSize.Width);
            }
            else if ((int)backgroundSize.Width < (int)backgroundSize.Height)
            {
                overlayImageScaledWidth = (int)(backgroundSize.Height * overlayImageAspectRatio);
                overlayImageScaledHeight = (int)(backgroundSize.Height);
            }

            var renderer = new BitmapRenderer(overlayImageSource) { Size = new Size(overlayImageScaledWidth, overlayImageScaledHeight) };
            var overlayBitmap = await renderer.RenderAsync().AsTask().ConfigureAwait(false);
            var overlayBitmapImageSource = new BitmapImageSource(overlayBitmap);

            return Crop(overlayBitmapImageSource, overlayImageInfo, (int)overlayImageInfo.ImageSize.Width, (int)overlayImageInfo.ImageSize.Height);
        }