Beispiel #1
0
        private async void AttemptSave()
        {
            if (Processing)
            {
                return;
            }
            Processing = true;

            GC.Collect();

            var lowMemory = false;

            try
            {
                var result = (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");

                lowMemory = result / 1024 / 1024 < 300;
            }
            catch (ArgumentOutOfRangeException)
            {
            }

            IBuffer buffer;

            Model.OriginalImage.Position = 0;

            using (var source = new StreamImageSource(Model.OriginalImage))
                using (var segmenter = new InteractiveForegroundSegmenter(source))
                    using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                    {
                        segmenter.Quality           = lowMemory ? 0.5 : 1;
                        segmenter.AnnotationsSource = annotationsSource;

                        var foregroundColor = Model.ForegroundBrush.Color;
                        var backgroundColor = Model.BackgroundBrush.Color;

                        segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                        segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                        using (var effect = new LensBlurEffect(source, new LensBlurPredefinedKernel(Shape, (uint)SizeSlider.Value)))
                            using (var renderer = new JpegRenderer(effect))
                            {
                                effect.KernelMap = segmenter;

                                buffer = await renderer.RenderAsync();
                            }
                    }

            using (var library = new MediaLibrary())
                using (var stream = buffer.AsStream())
                {
                    library.SavePicture("lensblur_" + DateTime.Now.Ticks, stream);

                    Model.Saved = true;

                    AdaptButtonsToState();
                }

            Processing = false;
        }
        private void SetUIMeasurements(int selectedRoofIndex)
        {
            try
            {
                if (_property == null || _image == null)
                {
                    return;
                }
                // Recalculate roof totals for current property
                CalculateCurrentTotals(_property);

                // Materialize view
                _recalculated = GetViewModelFromProperty(_property, selectedRoofIndex > 0 ?
                                                         _property.Roofs.FirstOrDefault(x => x.RoofId == (selectedRoofIndex - 1).ToString()) : null);

                // Set GUI and event handlers
                var stream = new StreamImageSource();
                stream.Stream = (x) =>
                {
                    return(Task.FromResult <Stream>(new MemoryStream(_image.Image)));
                };
                OrderId          = $"Order ID: {_order.OrderId}";
                PredominantPitch = $"{_recalculated.CurrentPitch}:12";
                NumberOfPitches  = $"Number of Distinct Pitches Measured: {_recalculated.PitchCount}";
                ImageSource      = stream;
                Address          = StringUtility.RemoveEmptyLines(_property.Address);
                Area             = $"{Convert.ToInt64(_recalculated.Roofs.Sum(x => x.TotalArea)).ToString()} sq. ft.";
                Squares          = $"Total Squares: {_recalculated.Roofs.Sum(x => x.TotalSquares).ToString()} squares";
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to set UI to new measurements.", ex);
            }
            RefreshTableView(_recalculated.Roofs.Sum(x => x.TotalArea));
        }
Beispiel #3
0
        protected override void OnPaintSurface(SKPaintSurfaceEventArgs e)
        {
            Trace.WriteLine($"{GetType().Name} OnPaintSurface");
            SKImageInfo info    = e.Info;
            SKSurface   surface = e.Surface;
            SKCanvas    canvas  = surface.Canvas;

            using (var snap = surface.Snapshot())
            {
                using (var paint = new SKPaint())
                {
                    Debug.WriteLine($"Source={Source.ToString()}");
                    if (Source is StreamImageSource)
                    {
                        // 一部だけ切り出そうにも土台のサイズがわからない
                        StreamImageSource streamImageSource = (StreamImageSource)Source;
                        CancellationToken cancellationToken = CancellationToken.None;
                        Task <Stream>     task   = streamImageSource.Stream(cancellationToken);
                        Stream            stream = task.Result;
                        var sKBitmap             = SKBitmap.Decode(stream);
                        paint.ImageFilter = SKImageFilter.CreateBlur(1, 1);
                        canvas.DrawBitmap(sKBitmap, info.Rect, paint);
                    }
                }
            }
        }
        public static ImageSource ByteToImage(byte[] imageByte)
        {
            //! Esse linha de código abaixo só funciona com o '() =>' (Func<T>'
            var returnImage = StreamImageSource.FromStream(() => new MemoryStream(imageByte));

            return(returnImage);
        }
        public async Task Add(Media media)
        {
            DataManager  dataManager = DataManager.Instance;
            MemoryStream stream      = null;

            DataObjects.Media dataMedia       = null;
            FileImageSource   fileImageSource = null;

            fileImageSource = media.Image as FileImageSource;

            Stream downsampleStream = null;

            // If this is still from a file downsample it to be stored in the database
            if (fileImageSource != null)
            {
                downsampleStream = await ImageService.Instance.LoadFile(fileImageSource.File).DownSample(width: 300).AsJPGStreamAsync();
            }
            else
            {
                StreamImageSource streamsource = media.Image as StreamImageSource;

                if (streamsource != null)
                {
                    downsampleStream = await ImageService.Instance.LoadStream(
                        sct => {
                        return(((IStreamImageSource)streamsource).GetStreamAsync());
                    }).DownSample(width: 300).AsJPGStreamAsync();
                }
            }

            if (downsampleStream != null)
            {
                stream = new MemoryStream();
                await downsampleStream.CopyToAsync(stream);

                if (Device.RuntimePlatform == Device.iOS)
                {
                    // Lets use the downsample one rather the big-size image selected by user to lower the app memory usage
                    // (Actually we are using the downsample one from datamanger when the app starts)
                    stream.Seek(0, SeekOrigin.Begin);
                    media.Image = ImageSource.FromStream(() => stream);
                }
            }

            if (stream != null)
            {
                // Add to the Data Manager
                dataMedia = new DataObjects.Media()
                {
                    Id   = Guid.NewGuid().ToString(),
                    Type = (byte)MediaType.Image,
                    Data = stream.ToArray()
                };

                await dataManager.AddMedia(dataMedia);

                media.Id = dataMedia.Id;
                _media.Add(media);
            }
        }
Beispiel #6
0
        async void pct_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
                return;

            try
            {
                // Create a source to read the image from PhotoResult stream
                using (var source = new StreamImageSource(e.ChosenPhoto))
                {
                    using (var effect = new PixlateEffect(source))
                    {
                        _effect = effect;
                        var target = new WriteableBitmap((int)ResultImage.ActualWidth, (int)ResultImage.ActualHeight);
                        // Create a new renderer which outputs WriteableBitmaps
                        using (var renderer = new WriteableBitmapRenderer(effect, target))
                        {
                            // Render the image with the filter(s)
                            await renderer.RenderAsync();
                            // Set the output image to Image control as a source
                            ResultImage.Source = target;
                        }

                    }
                }

            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                return;
            }
        }
Beispiel #7
0
        public async Task InitializeAsync()
        {
            //Using the built-in FileImageSource would be much less code than manually creating
            //a StreamImageSource. However, the FileImageSource doesn't appear to release the
            //lock on the file that it displays, so attempting to delete the file causes an
            //"Access Denied" error in the UWP app. So here we copy the file into memory and
            //immediately dispose the FileStream.

            byte[] fileBytes;
            string fileName = FileReference.FileName;
            // we need to reconstruct the path at runtime because on iOS when rebuilding/redeploying the debug
            // app due to an actual source change, the OS renames the directory, specifically changing the application GUID part of the directory name.
            // So the photo files are there, but nested inside an applicaton directory with a new name.
            // Upon starting the new deployment of the rebuilt app, the saved pictures cannot be found and displayed by the app
            // using the old directory path because the application directory has changed.
            var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            var fullPath      = Path.Combine(documentsPath, fileName);

            using (var fileStream = await Task.Run(() => File.OpenRead(fullPath)))
            {
                fileBytes = new byte[fileStream.Length];
                fileStream.Read(fileBytes, 0, (int)(fileStream.Length));
            }
            Func <System.Threading.CancellationToken, Task <Stream> > getStreamFunc =
                ct => Task.FromResult((Stream)(new MemoryStream(fileBytes)));

            ImageSource = new StreamImageSource()
            {
                Stream = getStreamFunc
            };
        }
Beispiel #8
0
        public static Task <SKImage?> ToSKImageAsync(this ImageSource imageSource, CancellationToken cancellationToken = default)
        {
            if (imageSource == null)
            {
                throw new ArgumentNullException(nameof(imageSource));
            }

            return(imageSource switch
            {
                // 1. first try SkiaSharp sources
                SKImageImageSource iis => FromSkia(iis.Image),
                SKBitmapImageSource bis => FromSkia(SKImage.FromBitmap(bis.Bitmap)),
                SKPixmapImageSource xis => FromSkia(SKImage.FromPixels(xis.Pixmap)),
                SKPictureImageSource pis => FromSkia(SKImage.FromPicture(pis.Picture, pis.Dimensions)),

                // 2. then try Stream sources
                StreamImageSource stream => FromStream(stream.Stream.Invoke(cancellationToken)),
                UriImageSource uri => FromStream(uri.GetStreamAsync(cancellationToken)),

                // 3. finally, use the handlers
                FileImageSource file => FromHandler(PlatformToSKImageAsync(file, cancellationToken)),
                FontImageSource font => FromHandler(PlatformToSKImageAsync(font, cancellationToken)),

                // 4. all is lost
                _ => throw new ArgumentException("Unable to determine the type of image source.", nameof(imageSource))
            });
        public async Task <StorageFile> ApplyFilter(StorageFile file, FilterOption filterOption)
        {
            IImageProvider source = null;

            var properties = await file.Properties.GetImagePropertiesAsync();

            this.SelectFilter(filterOption);

            using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                source = new StreamImageSource(stream.AsStream(), ImageFormat.Jpeg);

                using (var filterEffect = new FilterEffect(source))
                {
                    // Initialize the filter and add the filter to the FilterEffect collection
                    //var filter = new SketchFilter(SketchMode.Gray);

                    filterEffect.Filters = new IFilter[] { this.SelectedFilter };

                    // Create a target where the filtered image will be rendered to
                    var target = new WriteableBitmap((int)properties.Width, (int)properties.Height);

                    // Create a new renderer which outputs WriteableBitmaps
                    using (var renderer = new WriteableBitmapRenderer(filterEffect, target))
                    {
                        // Render the image with the filter(s)
                        await renderer.RenderAsync();

                        return(await this.WriteableBitmapToStorageFile(target, FileFormat.Jpeg));
                    }
                }
            }
        }
Beispiel #10
0
        async void proofButton_Clicked(object sender, System.EventArgs e)
        {
            try
            {
                ICameraProvider cameraProvider = DependencyService.Get <ICameraProvider>();

                var myImage = await cameraProvider.AcquirePicture();

                StreamImageSource streamImageSource = (StreamImageSource)myImage;
                System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
                Task <Stream> task   = streamImageSource.Stream(cancellationToken);
                Stream        stream = task.Result;

                var memoryStream = new MemoryStream();
                stream.CopyTo(memoryStream);
                Console.WriteLine("Wrote The Stream" + memoryStream.ToArray().Length);

                base64String = DependencyService.Get <MyImageCompressor>().ImageCompressor(memoryStream.ToArray());
                Console.WriteLine("base64 String : " + base64String);
            }
            catch (Exception CameraException)
            {
                //No camera presenet or no access provided.So, instead of crashing, let's not get the data.
                Console.WriteLine("Exception CameraException : " + CameraException);
                await DisplayAlert("No Camera Found!", "I could not get access to your camera.", "Ok");
            }
        }
Beispiel #11
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                var filePath = value as string;

                try
                {
                    TagLib.File tagFile = TagLib.File.Create(filePath); //can throw exception: mpeg header not found

                    //TODO: потрібно доробити щоб закривати стрим

                    var mStream      = new MemoryStream();
                    var firstPicture = tagFile.Tag.Pictures.FirstOrDefault();
                    if (firstPicture != null)
                    {
                        byte[] pData = firstPicture.Data.Data;
                        mStream.Write(pData, 0, System.Convert.ToInt32(pData.Length));

                        System.Diagnostics.Debug.WriteLine("pData.Length: " + pData.Length);
                        System.Diagnostics.Debug.WriteLine("mStream.Length: " + mStream.Length);

                        var source = StreamImageSource.FromStream(() => mStream);

                        return(source);
                    }
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }

            return(parameter);
        }
Beispiel #12
0
        private async void RecoverValues(string entry)
        {
            foreach (WorkModel.WorkEntry e in NewBook.Entries)
            {
                if (entry == e.Name)
                {
                    NewEntry = e;
                    break;
                }
            }

            if (NewEntry.ImageChanged)
            {
                ImageSource = (StreamImageSource)Xamarin.Forms.ImageSource.FromStream(() => new MemoryStream(NewEntry.NewImageData));
            }
            else
            {
                NewEntry.OldImagePath = NewEntry.ImagePath;
                ImageSource           = await FileManager.GetImage(NewEntry.ImagePath);
            }

            NewName     = NewEntry.Name;
            Description = NewEntry.Description;
            foreach (WorkTag t in NewEntry.Tags)
            {
                CurrentTags.Add(t);
            }
        }
        public AnalyseImageResultPageViewModel(StreamImageSource photo, IList <DetectedFace> faces)
        {
            AnalysedPhoto = photo;
            var emotions = faces.Select(face => GetEmotion(face));

            Description = "Most likely emotion: " + emotions.FirstOrDefault().Key + " with a score of " + emotions.FirstOrDefault().Value.ToString();
        }
        private  void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                PhotoChooserTask task = new PhotoChooserTask();
                task.Completed += async (s, res) =>
                {
                    if (res.TaskResult == TaskResult.OK)
                    {
                       

                       using( var source  = new StreamImageSource(res.ChosenPhoto))
                        using(var renderer = new BitmapRenderer(source,input))
                        {
                            await renderer.RenderAsync();
                        }
                        if(manager != null)
                        {
                            manager.Dispose();
                            manager = null;
                        }
                        manager = new PipelineManager.Manager.PipelineManager(picture);
                        GeneratePicture();
                    }

                };
                task.Show();
            }
            catch (Exception)
            {


            }
        }
        private async void AttemptUpdatePreviewAsync()
        {
            if (!Processing)
            {
                Processing = true;

                AdaptButtonsToState();

                Model.OriginalImage.Position = 0;

                using (var source = new StreamImageSource(Model.OriginalImage))
                    using (var segmenter = new InteractiveForegroundSegmenter(source))
                        using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                        {
                            segmenter.Quality           = 0.5;
                            segmenter.AnnotationsSource = annotationsSource;

                            var foregroundColor = Model.ForegroundBrush.Color;
                            var backgroundColor = Model.BackgroundBrush.Color;

                            segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                            segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                            do
                            {
                                _processingPending = false;

                                var previewBitmap = new WriteableBitmap((int)Model.AnnotationsBitmap.Dimensions.Width, (int)Model.AnnotationsBitmap.Dimensions.Height);

                                using (var effect = new LensBlurEffect(source, new LensBlurPredefinedKernel(Model.KernelShape, (uint)Model.KernelSize)))
                                    using (var renderer = new WriteableBitmapRenderer(effect, previewBitmap))
                                    {
                                        effect.KernelMap = segmenter;

                                        try
                                        {
                                            await renderer.RenderAsync();

                                            PreviewImage.Source = previewBitmap;

                                            previewBitmap.Invalidate();
                                        }
                                        catch (Exception ex)
                                        {
                                            System.Diagnostics.Debug.WriteLine("AttemptUpdatePreviewAsync rendering failed: " + ex.Message);
                                        }
                                    }
                            }while (_processingPending);
                        }

                Processing = false;

                AdaptButtonsToState();
            }
            else
            {
                _processingPending = true;
            }
        }
Beispiel #16
0
 private static async Task <Stream> GetStreamFromImageSourceAsync(StreamImageSource imageSource, CancellationToken cancellationToken = default(CancellationToken))
 {
     if (imageSource.Stream != null)
     {
         return(await imageSource.Stream(cancellationToken));
     }
     return(null);
 }
Beispiel #17
0
 public static async Task <Stream> GetStreamAsync(this StreamImageSource imageSource, CancellationToken cancellationToken = default(CancellationToken))
 {
     if (imageSource.Stream != null)
     {
         return(await imageSource.Stream(cancellationToken));
     }
     return(null);
 }
        public static Stream ToStream(this ImageSource img)
        {
            StreamImageSource streamImageSource = (StreamImageSource)img;

            System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
            Task <Stream> task = streamImageSource.Stream(cancellationToken);

            return(task.Result);
        }
 public static IImageSourceHandler GetImageSourceHandler(this ImageSource source)
 {
     return(source switch
     {
         FileImageSource _ => new FileImageSourceHandler(),
         StreamImageSource _ => new StreamImagesourceHandler(),
         FontImageSource _ => new FontImageSourceHandler(),
         _ => new ImageLoaderSourceHandler(),
     });
Beispiel #20
0
        public static AchievementViewModel CreateFrom(IAchievement achievement)
        {
            var src = new StreamImageSource
            {
                Stream = token => achievement.LoadImage()
            };

            return(new AchievementViewModel(achievement, src));
        }
Beispiel #21
0
        private static async Task <Stream> GetStreamFromStreamImageSource(ImageSource imageSource)
        {
            StreamImageSource streamImageSource = (StreamImageSource)imageSource;

            System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
            var result = await streamImageSource.Stream(cancellationToken);

            return(result);
        }
Beispiel #22
0
		public void TestConstructors ()
		{
			var filesource = new FileImageSource { File = "File.png" };
			Assert.AreEqual ("File.png", filesource.File);

			Func<CancellationToken, Task<Stream>> stream = token => new Task<Stream> (() => new FileStream ("Foo", System.IO.FileMode.Open), token);
			var streamsource = new StreamImageSource { Stream = stream };
			Assert.AreEqual (stream, streamsource.Stream);
		}
Beispiel #23
0
        public async Task <ImageSource> SelectPicture()
        {
            MediaFile mf = await CrossMedia.Current.PickPhotoAsync();

            StreamImageSource sis = new StreamImageSource();

            sis.Stream = (t => new Task <Stream>(() => mf.GetStream()));
            return(sis);
        }
Beispiel #24
0
        public static Stream GetStreamFromImageSource(ImageSource source)
        {
            StreamImageSource streamImageSource = (StreamImageSource)source;

            System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
            Task <Stream> task   = streamImageSource.Stream(cancellationToken);
            Stream        stream = task.Result;

            return(stream);
        }
Beispiel #25
0
        public static byte[] ImageToByte(this ImageSource ImageSource)
        {
            StreamImageSource streamImageSource = (StreamImageSource)ImageSource;

            System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
            Task <Stream> task   = streamImageSource.Stream(cancellationToken);
            MemoryStream  stream = task.Result as MemoryStream;

            return(stream.ToArray());
        }
        private void EndSession()
        {
            if (_source != null)
            {
                _source.Dispose();
                _source = null;
            }

            _info = null;
        }
Beispiel #27
0
        public byte [] ImgToByteArray()
        {
            StreamImageSource streamImageSource = (StreamImageSource)imgAvatar.Source;

            System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
            Task <Stream> task   = streamImageSource.Stream(cancellationToken);
            Stream        stream = task.Result;
            var           res    = ReadFully(stream);

            return(res);
        }
        public static async Task <ImageSource> AddText(this StreamImageSource source, string text, PointF point, Font font, Color color)
        {
            var token  = new CancellationTokenSource();
            var stream = await source.Stream(token.Token);

            var image = UIImage.LoadFromData(NSData.FromStream(stream));

            var bytes = image.AddText(text, point, font.ToUIFont(), color.ToUIColor()).AsPNG().ToArray();

            return(ImageSource.FromStream(new Func <Stream>(() => new MemoryStream(bytes))));
        }
        /// <summary>
        /// Updates the data displayed by the notification.
        /// </summary>
        /// <param name="achievement">Achievement to be displayed.</param>
        /// <returns></returns>
        private void UpdateDisplayedData(IAchievement achievement)
        {
            AchievementTitle       = achievement.Title;
            AchievementDescription = achievement.Description;
            var source = new StreamImageSource
            {
                Stream = token => achievement.LoadImage()
            };

            AchievementImage = source;
        }
    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Source == null)
        {
            return(null);
        }
        var imageSource = new StreamImageSource {
            Stream = async(ct) => this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream(Source)
        };

        return(imageSource);
    }
Beispiel #31
0
        private async void OnAddImage()
        {
            string[] types = { ".jpg", ".png" };
            Image = await CrossFilePicker.Current.PickFile(types);

            if (Image == null)
            {
                return;
            }

            ImageSource = (StreamImageSource)Xamarin.Forms.ImageSource.FromStream(() => Image.GetStream());
        }
Beispiel #32
0
        /// <summary>
        /// アイコン画像の変換
        /// </summary>
        /// <param name="source">画像ソース</param>
        /// <returns>画像情報</returns>
        public static async Task <BandIcon> ToNativeIcon(StreamImageSource source)
        {
            var stream = await source.Stream.Invoke(new CancellationToken());

            using (var ras = stream.AsRandomAccessStream())
            {
                var bitmap = new WriteableBitmap(1, 1);
                await bitmap.SetSourceAsync(ras);

                return(bitmap.ToBandIcon());
            }
        }
        /// <summary>
        /// アプリタイルを生成する
        /// </summary>
        /// <param name="id">ID</param>
        /// <param name="name">名称</param>
        /// <param name="icon">アイコンの画像ソース(46 x 46 px)</param>
        /// <param name="smallIcon">小さいアイコンの画像ソース(24 x 24 px)</param>
        /// <param name="theme">テーマカラー</param>
        /// <returns>アプリタイル</returns>
        public async Task <IBandTile> CreateTile(Guid id, string name, StreamImageSource icon, StreamImageSource smallIcon, BandTheme theme = null)
        {
            var nativeIcon = await NativeBandImageConvert.ToNativeIcon(icon);

            var nativeSmallIcon = await NativeBandImageConvert.ToNativeIcon(smallIcon);

            var tile = new NativeBandTile(id, name, nativeIcon, nativeSmallIcon);

            tile.Theme = theme;

            return(tile);
        }
Beispiel #34
0
        public async Task applyFilter(byte[] imageData, WriteableBitmap processedBitmap, List<IFilter> _components)
        {   
            MemoryStream ms = new MemoryStream(imageData);
            var source = new StreamImageSource(ms);
            var effect = new FilterEffect(source);
            var renderer = new WriteableBitmapRenderer(effect, processedBitmap);

            var filters = new List<IFilter>();
            filters = _components;

            effect.Filters = filters;
            await renderer.RenderAsync();
            processedBitmap.Invalidate();
        }
        public async Task SetStreamImage(StreamImageSource streamImage)
        {
            try
            {
                m_StreamImageSource = streamImage;

                ImageProviderInfo imageInfo = await m_StreamImageSource.GetInfoAsync();
                m_FrameSize = imageInfo.ImageSize;

                Initialize();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(string.Concat("Error in SetStreamImage() >>> ", ex));
            }
        }
Beispiel #36
0
        async public static Task<WriteableBitmap> Render(List<IFilter> filterList, MemoryStream inputStream)
        {
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(inputStream);
            WriteableBitmap outputBitmap = new WriteableBitmap(bitmapImage.PixelWidth, bitmapImage.PixelHeight);
            inputStream.Position = 0;

            // An effect is initialized with selected image stream as source.
            var imageStream = new StreamImageSource(inputStream);
            FilterEffect _effect = new FilterEffect(imageStream);
            _effect.Filters = filterList;

            // Render the image to a WriteableBitmap.
            var renderer = new WriteableBitmapRenderer(_effect, outputBitmap, OutputOption.Stretch);
            outputBitmap = await renderer.RenderAsync();
            return outputBitmap;
        }
        private async void PickImageCallback(object sender, PhotoResult e)
        {
            if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
                return;

            try
            {
                // Show thumbnail of original image.
                _thumbnailImageBitmap.SetSource(e.ChosenPhoto);
                OriginalImage.Source = _thumbnailImageBitmap;

                // Rewind stream to start.                     
                e.ChosenPhoto.Position = 0;
                                
                // A cartoon effect is initialized with selected image stream as source.
                var imageStream = new StreamImageSource(e.ChosenPhoto);
                _cartoonEffect = new FilterEffect(imageStream);

                // Add the cartoon filter as the only filter for the effect.
                var cartoonFilter = new CartoonFilter();
                _cartoonEffect.Filters = new[] { cartoonFilter };

                // Render the image to a WriteableBitmap.
                var renderer = new WriteableBitmapRenderer(_cartoonEffect, _cartoonImageBitmap);
                _cartoonImageBitmap = await renderer.RenderAsync();

                // Set the rendered image as source for the cartoon image control.
                CartoonImage.Source = _cartoonImageBitmap;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                return;
            }

            SaveButton.IsEnabled = true;
        }
        async void setInput(Stream s)
        {
           
            //reset stream position
            s.Seek(0, SeekOrigin.Begin);
            //create a session
            using (var source = new StreamImageSource(s))
            using (var renderer = new WriteableBitmapRenderer(source))
            {
                var info = await source.GetInfoAsync();
                InputLR = new WriteableBitmap(
                                (int)( info.ImageSize.Width),
                                (int)(info.ImageSize.Height)
                                );

                renderer.WriteableBitmap = InputLR;
                await renderer.RenderAsync();
                inputSize = new Size() { Width = info.ImageSize.Width, Height = info.ImageSize.Height };
                currentPos = new Point(info.ImageSize.Width / 2, info.ImageSize.Height / 2);
                if (info.ImageSize.Width > info.ImageSize.Height)
                {
                    currentScale = outputSize.Height / info.ImageSize.Height;
                }
                else
                {
                    currentScale = outputSize.Width / info.ImageSize.Width;
                }
                currentAngle = 0.0;
            }
            saveLastPossaveLastPositionData();
            brush.ImageSource = InputLR;
            brush.Stretch = Stretch.None;
            brush.AlignmentX = AlignmentX.Left;
            brush.AlignmentY = AlignmentY.Top;

           processRenderingLR();
        }
        private async void PickImageCallback(object sender, PhotoResult e)
        {
            if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
                return;

            try
            {
                // mostramos el thumbnail de la imagen original.
                _thumbnailImageBitmap.SetSource(e.ChosenPhoto);
                ImagenOriginal.Source = _thumbnailImageBitmap;

                e.ChosenPhoto.Position = 0;

                // inicializamos lo necesario para el filtro de la imagen.
                var imageStream = new StreamImageSource(e.ChosenPhoto);
                _fotoEffect = new FilterEffect(imageStream);

                // agregammos el filtro a la imagen.
                var filtro = new AntiqueFilter(); ;
                _fotoEffect.Filters = new[] { filtro };

                // renderizamos la imagen a un WriteableBitmap.
                var renderer = new WriteableBitmapRenderer(_fotoEffect, _effectImageBitmap);
                _effectImageBitmap = await renderer.RenderAsync();

                // Establecemos la imagen renderizada como fuente para el control de la imagen efecto.
                ImagenEfecto.Source = _effectImageBitmap;
                rendererefect = _effectImageBitmap;

            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                return;
            }

        }
Beispiel #40
0
        async public static Task<WriteableBitmap> Render(List<String> effString, MemoryStream inputStream)
        {
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(inputStream);
            WriteableBitmap outputBitmap = new WriteableBitmap(bitmapImage.PixelWidth, bitmapImage.PixelHeight);
            inputStream.Position = 0;

            // An effect is initialized with selected image stream as source.
            var imageStream = new StreamImageSource(inputStream);
            List<IFilter> _effListTmp = new List<IFilter>();
            foreach (String effStr in effString)
            {
                // Add filter
                _effListTmp.Add(GetIFilter(effStr));
            }

            FilterEffect _effect = new FilterEffect(imageStream);
            _effect.Filters = _effListTmp;

            // Render the image to a WriteableBitmap.
            var renderer = new WriteableBitmapRenderer(_effect, outputBitmap, OutputOption.Stretch);
            outputBitmap = await renderer.RenderAsync();
            return outputBitmap;
        }
        void selectPicture()
        {
            try
            {
                PhotoChooserTask task = new PhotoChooserTask();
                task.Completed += async (s, res) =>
                {
                    if (res.TaskResult == TaskResult.OK)
                    {
                        if (HRImagesource != null)
                        {
                            HRImagesource.Dispose();
                            HRImagesource = null;
                        }
                        HRImagesource = new StreamImageSource(res.ChosenPhoto);
                        var info = await HRImagesource.GetInfoAsync();
                        ImageSize = info.ImageSize;

                        //create LR image
                        using (var renderer = new WriteableBitmapRenderer(HRImagesource, LRImageSource))
                            await renderer.RenderAsync();

                        requestProcessing();
                    }

                };
                task.Show();
            }
            catch (Exception)
            {

                throw;
            }
        }
        private async void AttemptSaveAsync()
        {
            if (!Processing)
            {
                Processing = true;

                AdaptButtonsToState();

                GC.Collect();

                var lowMemory = false;

                try
                {
                    long result = (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");

                    lowMemory = result / 1024 / 1024 < 300;
                }
                catch (ArgumentOutOfRangeException)
                {
                }

                IBuffer buffer = null;

                Model.OriginalImage.Position = 0;

                using (var source = new StreamImageSource(Model.OriginalImage))
                using (var segmenter = new InteractiveForegroundSegmenter(source))
                using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                {
                    segmenter.Quality = lowMemory ? 0.5 : 1;
                    segmenter.AnnotationsSource = annotationsSource;

                    var foregroundColor = Model.ForegroundBrush.Color;
                    var backgroundColor = Model.BackgroundBrush.Color;

                    segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                    segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                    using (var effect = new LensBlurEffect(source, new LensBlurPredefinedKernel(Model.KernelShape, (uint)Model.KernelSize)))
                    using (var renderer = new JpegRenderer(effect))
                    {
                        effect.KernelMap = segmenter;

                        try
                        {
                            buffer = await renderer.RenderAsync();
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Debug.WriteLine("AttemptSave rendering failed: " + ex.Message);
                        }
                    }
                }

                if (buffer != null)
                {
                    using (var library = new MediaLibrary())
                    using (var stream = buffer.AsStream())
                    {
                        library.SavePicture("lensblur_" + DateTime.Now.Ticks, stream);

                        Model.Saved = true;

                        AdaptButtonsToState();
                    }
                }

                Processing = false;

                AdaptButtonsToState();
            }
        }
        private void BeginSession(Stream image)
        {
            System.Diagnostics.Debug.WriteLine("Begin session");

            // Initialize session with image

            using (var memoryStream = new MemoryStream())
            {
                image.Position = 0;
                image.CopyTo(memoryStream);

                try
                {
                    // Some streams do not support flushing

                    image.Flush();
                }
                catch (Exception)
                {
                }

                memoryStream.Position = 0;

                // Initialize image source

                _source = new StreamImageSource(memoryStream);

                // Get image info

                Task.Run(async () => { _info = await _source.GetInfoAsync(); }).Wait();

                // Create crop filter effect

                _reframingFilter = new ReframingFilter();

                _filterEffect = new FilterEffect(_source)
                {
                    Filters = new List<IFilter>() { _reframingFilter }
                };

                // Create renderer

                _renderer = new WriteableBitmapRenderer(_filterEffect, _highResolutionCropBitmap);
            }

            // Set _lowResolutionBitmap decoding to a quite low resolution and initialize it with image
            if (_info.ImageSize.Width >= _info.ImageSize.Height)
            {
                _lowResolutionBitmap.DecodePixelWidth = 1536;
                _lowResolutionBitmap.DecodePixelHeight = 0;
            }
            else
            {
                _lowResolutionBitmap.DecodePixelWidth = 0;
                _lowResolutionBitmap.DecodePixelHeight = 1536;
            }

            image.Position = 0;

            _lowResolutionBitmap.SetSource(image);

            // Set LowResolutionCropBrush scaling so that it matches with the pixel perfect HighResolutionCropImage renderings
            var screenScaleFactor = App.Current.Host.Content.ScaleFactor / 100.0;
            var lowResolutionToHighResolutionCropScale = _info.ImageSize.Width / _lowResolutionBitmap.PixelWidth / screenScaleFactor * DIGITAL_MAGNIFICATION;

            _lowResolutionBrushTransform.ScaleX = lowResolutionToHighResolutionCropScale;
            _lowResolutionBrushTransform.ScaleY = lowResolutionToHighResolutionCropScale;

            // Show photo information in InformationTextBlock
            SetupInformationPanel();
        }
        private void EndSession()
        {
            if (_renderer != null)
            {
                _renderer.Dispose();
                _renderer = null;
            }
            if (_filterEffect != null)
            {
                _filterEffect.Dispose();
                _filterEffect = null;
            }

            if (_source != null)
            {
                _source.Dispose();
                _source = null;
            }

            _reframingFilter = null;
            _info = null;
        }
        private async void AttemptUpdatePreviewAsync()
        {
            if (!Processing)
            {
                Processing = true;

                AdaptButtonsToState();

                Model.OriginalImage.Position = 0;

                using (var source = new StreamImageSource(Model.OriginalImage))
                using (var segmenter = new InteractiveForegroundSegmenter(source))
                using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                {
                    segmenter.Quality = 0.5;
                    segmenter.AnnotationsSource = annotationsSource;

                    var foregroundColor = Model.ForegroundBrush.Color;
                    var backgroundColor = Model.BackgroundBrush.Color;

                    segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                    segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                    do
                    {
                        _processingPending = false;

                        var previewBitmap = new WriteableBitmap((int)Model.AnnotationsBitmap.Dimensions.Width, (int)Model.AnnotationsBitmap.Dimensions.Height);

                        using (var effect = new LensBlurEffect(source, new LensBlurPredefinedKernel(Model.KernelShape, (uint)Model.KernelSize)))
                        using (var renderer = new WriteableBitmapRenderer(effect, previewBitmap))
                        {
                            effect.KernelMap = segmenter;

                            try
                            {
                                await renderer.RenderAsync();

                                PreviewImage.Source = previewBitmap;

                                previewBitmap.Invalidate();
                            }
                            catch (Exception ex)
                            {
                                System.Diagnostics.Debug.WriteLine("AttemptUpdatePreviewAsync rendering failed: " + ex.Message);
                            }
                        }
                    }
                    while (_processingPending);
                }

                Processing = false;

                AdaptButtonsToState();
            }
            else
            {
                _processingPending = true;
            }
        }
        public async Task<StorageFile> ApplyFilter(StorageFile file, FilterOption filterOption)
        {
            IImageProvider source = null;

            var properties = await file.Properties.GetImagePropertiesAsync();

            this.SelectFilter(filterOption);

            using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                source = new StreamImageSource(stream.AsStream(), ImageFormat.Jpeg);

                using (var filterEffect = new FilterEffect(source))
                {
                    // Initialize the filter and add the filter to the FilterEffect collection
                    //var filter = new SketchFilter(SketchMode.Gray);

                    filterEffect.Filters = new IFilter[] { this.SelectedFilter };

                    // Create a target where the filtered image will be rendered to
                    var target = new WriteableBitmap((int)properties.Width, (int)properties.Height);
                    
                    // Create a new renderer which outputs WriteableBitmaps
                    using (var renderer = new WriteableBitmapRenderer(filterEffect, target))
                    {
                        // Render the image with the filter(s)
                        await renderer.RenderAsync();
                        
                        return await this.WriteableBitmapToStorageFile(target, FileFormat.Jpeg);
                    }
                }
            }
        }
        private async void ApplicationBarIconButton_reframing(object sender, EventArgs e)
        {
            sFace.Position = 0;
            sBackground.Position = 0;

            IBuffer result;
            using (var faceSource = new StreamImageSource(sFace))
            using (var faceReframing = new FilterEffect(faceSource))
            using (var source = new StreamImageSource(sBackground))
            using (var effect = new FilterEffect(source) )
            using (var renderer = new JpegRenderer(effect))
            {

                //face reframing => blend input
                faceReframing.Filters = new IFilter[] { gestureFace.CreateReframingFilter() } ;

                //face
                effect.Filters = new IFilter[] { 
                    gestureBackground.CreateReframingFilter() ,//background reframing
                    new BlendFilter(faceReframing) //blending


                };


                result = await renderer.RenderAsync();
            }

            using (var media = new MediaLibrary())
                media.SavePictureToCameraRoll("test", result.ToArray());

        }
        private async void AttemptUpdateImageAsync()
        {
            if (!Processing)
            {
                Processing = true;

                GC.Collect();

                var lowMemory = false;

                try
                {
                    long result = (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");

                    lowMemory = result / 1024 / 1024 < 300;
                }
                catch (ArgumentOutOfRangeException)
                {
                }

                var maxSide = lowMemory ? 2048.0 : 4096.0;

                Model.OriginalImage.Position = 0;

                using (var source = new StreamImageSource(Model.OriginalImage))
                using (var segmenter = new InteractiveForegroundSegmenter(source))
                using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                {
                    segmenter.Quality = lowMemory ? 0.5 : 1;
                    segmenter.AnnotationsSource = annotationsSource;

                    var foregroundColor = Model.ForegroundBrush.Color;
                    var backgroundColor = Model.BackgroundBrush.Color;

                    segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                    segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                    var info = await source.GetInfoAsync();

                    double scaler, rotation;
                    var width = info.ImageSize.Width;
                    var height = info.ImageSize.Height;

                    if (width > height)
                    {
                        scaler = maxSide / width;
                        rotation = 90;

                        var t = width; // We're rotating the image, so swap width and height
                        width = height;
                        height = t;
                    }
                    else
                    {
                        scaler = maxSide / height;
                        rotation = 0;
                    }

                    scaler = Math.Max(1, scaler);

                    _bitmap = new WriteableBitmap((int)(width * scaler), (int)(height * scaler));

                    using (var blurEffect = new LensBlurEffect(source, new LensBlurPredefinedKernel(Model.KernelShape, (uint)Model.KernelSize)))
                    using (var filterEffect = new FilterEffect(blurEffect) { Filters = new[] { new RotationFilter(rotation) }})
                    using (var renderer = new WriteableBitmapRenderer(filterEffect, _bitmap))
                    {
                        blurEffect.KernelMap = segmenter;

                        try
                        {
                            await renderer.RenderAsync();

                            Image.Source = _bitmap;

                            _bitmap.Invalidate();

                            ConfigureViewport();
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Debug.WriteLine("AttemptUpdateImageAsync rendering failed: " + ex.Message);
                        }
                    }
                }

                Processing = false;
            }
        }
        private async void ProcessImage_v1()
        {
            try
            {
                // Initialize a WriteableBitmap with the dimensions of the image control in XAML
                WriteableBitmap writeableBitmap = new WriteableBitmap((int)FilterEffectImage.Width, (int)FilterEffectImage.Height);

                // Example: Accessing an image stream within a standard photo chooser task callback
                // http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394019(v=vs.105).aspx
                //using (var imageStream = new StreamImageSource(e.ChosenPhoto))

                // Example: Accessing an image stream from a sample picture loaded with the project in a folder called "Pictures"
                //m_LocalPictureName = "sample_photo_01.jpg";
                m_LocalPictureName = "sample_photo_08.jpg";
                var resource = App.GetResourceStream(new Uri(string.Concat("Pictures/", m_LocalPictureName), UriKind.Relative));
                using (var imageStream = new StreamImageSource(resource.Stream))
                {
                    // Applying an inbuilt filter and a custom effect to the image stream
                    //IImageProvider imageEffect = new FilterEffect(imageStream) { Filters = new List<IFilter>() { new WarpFilter(WarpEffect.Twister, 0.50) } };
                    //using (var customEffect = new PsychedelicEffect(imageEffect, 50))

                    // Applying the custom filter effect to the image stream
                    using (var customEffect = new SepiaEffect(imageStream, 0.42))
                    //using (var customEffect = new MirrorEffect(imageStream, MirrorEffect.MirrorType.Vertical))
                    //using (var customEffect = new NegativeEffect(imageStream))
                    //using (var customEffect = new FilterEffect(imageStream) { Filters = new List<IFilter>() { new NegativeFilter() } })
                    //using (var customEffect = new GrayscaleNegativeEffect(imageStream))
                    //using (var customEffect = new FilterEffect(imageStream) { Filters = new List<IFilter>() { new GrayscaleNegativeFilter() } })
                    //using (var customEffect = new BrightnessEffect(imageStream, 0.50))
                    //using (var customEffect = new FilterEffect(imageStream) { Filters = new List<IFilter>() { new GrayscaleFilter() } })
                    //using (var customEffect = new GrayscaleEffect(imageStream))
                    //using (var customEffect = new GrayscaleEffect(imageStream, 0.2126, 0.7152, 0.0722)) // Algorithm 1 - Default
                    //using (var customEffect = new GrayscaleEffect(imageStream, 0.299, 0.587, 0.114)) // Algorithm 2
                    //using (var customEffect = new GrayscaleEffect(imageStream, 0.3333, 0.3333, 0.3333))
                    {
                        // Rendering the resulting image to a WriteableBitmap
                        using (var renderer = new WriteableBitmapRenderer(customEffect, writeableBitmap))
                        {
                            // Applying the WriteableBitmap to our xaml image control
                            FilterEffectImage.Source = await renderer.RenderAsync();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(string.Concat("Error in ProcessImage_v1() >>> ", ex));
            }
        }
        private async void ApplicationBarIconButton_All(object sender, EventArgs e)
        {
            sFace.Position = 0;
            sBackground.Position = 0;

            IBuffer result;
            using (var faceSource = new StreamImageSource(sFace))
            using (var faceReframing = new FilterEffect(faceSource))
            using (var source = new StreamImageSource(sBackground))
            using (var effect = new FilterEffect(source))
            using (var renderer = new JpegRenderer(effect))
            {

                

                var size = gestureBackground.ImageSize;
                var Facesize = gestureFace.ImageSize;

                //target scale
                var scale = gestureFace.Scale / gestureBackground.Scale;
                //target angle
                var angle = gestureFace.Angle - gestureBackground.Angle;


                //translation between image center and background position
                var backgroundTranslation = new Point(size.Width / 2 - gestureBackground.Pos.X, size.Height / 2 - gestureBackground.Pos.Y);

                //convert translation to Face referential translation
                CompositeTransform gestureTransform = new CompositeTransform();
                gestureTransform.ScaleX = gestureTransform.ScaleY = scale;
                gestureTransform.Rotation = angle;
                var translation = gestureTransform.Inverse.Transform(backgroundTranslation);

                //target position
                var posX = gestureFace.Pos.X + translation.X;
                var posY = gestureFace.Pos.Y + translation.Y;



                var currentSize = new Windows.Foundation.Size(size.Width / scale, size.Height / scale);
                var corner = new Windows.Foundation.Point(posX - currentSize.Width / 2, posY - currentSize.Height / 2);
                var reframing = new ReframingFilter(new Windows.Foundation.Rect(corner, currentSize), -angle);

                //face reframing => blend input
                faceReframing.Filters = new IFilter[] { reframing };
                effect.Filters = new IFilter[] { new BlendFilter(faceReframing) };//


                result = await renderer.RenderAsync();
            }

            using (var media = new MediaLibrary())
                media.SavePictureToCameraRoll("test", result.ToArray());
        }
        public async Task<IBuffer> TakePicture()
        {
            if (_photoCaptureDevice == null && _cameraSemaphore.WaitOne(100))
                return null;

            if (_cameraSemaphore.WaitOne(100))
            {
                try
                {
                    int angle = 0;

                    if (Orientation.HasFlag(PageOrientation.LandscapeLeft))
                    {
                        angle = (int)_photoCaptureDevice.SensorRotationInDegrees - 90;
                    }
                    else if (Orientation.HasFlag(PageOrientation.LandscapeRight))
                    {
                        angle = (int)_photoCaptureDevice.SensorRotationInDegrees + 90;
                    }
                    else // PageOrientation.PortraitUp
                    {
                        angle = (int)_photoCaptureDevice.SensorRotationInDegrees;
                    }


                    if (angle < 0) angle += 360;
                    if (_cameraLocation == CameraSensorLocation.Back)
                    {
                        _photoCaptureDevice.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation, angle);
                    }
                    else
                    {
                        _photoCaptureDevice.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation, -angle);
                    }
                    _photoCaptureDevice.SetProperty(KnownCameraGeneralProperties.SpecifiedCaptureOrientation, 0);


                    var cameraCaptureSequence = _photoCaptureDevice.CreateCaptureSequence(1);
                    var stream = new MemoryStream();
                    cameraCaptureSequence.Frames[0].CaptureStream = stream.AsOutputStream();
                    await _photoCaptureDevice.PrepareCaptureSequenceAsync(cameraCaptureSequence);
                    await cameraCaptureSequence.StartCaptureAsync();


                    IBuffer capturedPicture;
                    if (_cameraLocation == CameraSensorLocation.Back)
                    {
                        capturedPicture = stream.GetWindowsRuntimeBuffer();
                    }
                    else
                    {
                        capturedPicture = await JpegTools.FlipAndRotateAsync(stream.GetWindowsRuntimeBuffer(), FlipMode.Horizontal, Rotation.Rotate0, JpegOperation.AllowLossy);
                    }


                    using (var source = new StreamImageSource(capturedPicture.AsStream()))
                    {
                        var recipe = RecipeFactory.Current.CreatePipeline(source);
                        using (var renderer = new JpegRenderer(recipe))
                        {
                            capturedPicture = await renderer.RenderAsync();
                        }
                        if (recipe is IDisposable)
                            (recipe as IDisposable).Dispose();
                    }
                    return capturedPicture;
                }
                finally
                {
                    _cameraSemaphore.Release();
                }
            }

            return null;
        }
Beispiel #52
0
		public void TestStreamImageSourcePropertiesChangedTriggerResize ()
		{
			var source = new StreamImageSource ();
			var image = new Image { Source = source };
			bool fired = false;
			image.MeasureInvalidated += (sender, e) => fired = true;
			Assert.Null (source.Stream);
			source.Stream = token => Task.FromResult<Stream> (null);
			Assert.NotNull (source.Stream);
			Assert.True (fired);
		}
 private async Task LoadLocalImage()
 {
     try
     {
         // Example: Accessing an image stream from a sample picture loaded with the project in a folder called "Pictures"
         var resource = App.GetResourceStream(new Uri(string.Concat("Pictures/", m_LocalPictureName), UriKind.Relative));
         StreamImageSource imageStream = new StreamImageSource(resource.Stream);
         await m_SDKCustomEffects.SetStreamImage(imageStream);
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine(string.Concat("Error in LoadLocalImage() >>> ", ex));
     }
 }
        /// <summary>
        /// Begins a photo stream item rendering process loop. Loop is executed asynchronously item by item
        /// until there are no more items in the queue.
        /// </summary>
        private async void Process()
        {
            _processingNow++;

            while (_enabled && Count > 0)
            {
                StreamItemViewModel item;

                if (_priorityQueue.Count > 0)
                {
                    Busy = true;

                    item = _priorityQueue[0];

                    _priorityQueue.RemoveAt(0);
                }
                else
                {
                    item = _standardQueue[0];

                    _standardQueue.RemoveAt(0);
                }

                try
                {
                    WriteableBitmap bitmap = null;
                    Stream thumbnailStream = null;

                    System.Diagnostics.Debug.Assert(item.RequestedSize != StreamItemViewModel.Size.None);

                    if (item.RequestedSize == StreamItemViewModel.Size.Large)
                    {
                        bitmap = new WriteableBitmap(280, 280);
                        thumbnailStream = item.Model.Picture.GetImage();
                    }
                    else if (item.RequestedSize == StreamItemViewModel.Size.Medium)
                    {
                        bitmap = new WriteableBitmap(140, 140);
                        thumbnailStream = item.Model.Picture.GetThumbnail();
                    }
                    else
                    {
                        bitmap = new WriteableBitmap(70, 70);
                        thumbnailStream = item.Model.Picture.GetThumbnail();
                    }

                    thumbnailStream.Position = 0;

                    using (StreamImageSource source = new StreamImageSource(thumbnailStream))
                    using (FilterEffect effect = new FilterEffect(source))
                    {
                        List<IFilter> filters = new List<IFilter>();

                        if (item.RequestedSize == StreamItemViewModel.Size.Large)
                        {
                            int width = item.Model.Picture.Width;
                            int height = item.Model.Picture.Height;

                            if (width > height)
                            {
                                filters.Add(new CropFilter(new Windows.Foundation.Rect()
                                {
                                    Width = height,
                                    Height = height,
                                    X = width / 2 - height / 2,
                                    Y = 0
                                }));
                            }
                            else
                            {
                                filters.Add(new CropFilter(new Windows.Foundation.Rect()
                                {
                                    Width = width,
                                    Height = width,
                                    X = 0,
                                    Y = height / 2 - width / 2
                                }));
                            }
                        }

                        if (item.Model.Filter != null)
                        {
                            foreach (IFilter f in item.Model.Filter.Components)
                            {
                                filters.Add(f);
                            }
                        }

                        effect.Filters = filters;

                        using (WriteableBitmapRenderer renderer = new WriteableBitmapRenderer(effect, bitmap))
                        {
                            await renderer.RenderAsync();
                        }
                    }
                    
                    item.TransitionToImage(bitmap);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine("Rendering stream item failed:" + ex.Message);

                    item.TransitionToImage(null);
                }
            }

            _processingNow--;

            if (_processingNow == 0)
            {
                Busy = false;
            }
        }
        private async void ChooseImageButton_Callback(object sender, PhotoResult e)
        {
            // Example: Accessing an image stream within a standard photo chooser task callback
            // http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394019(v=vs.105).aspx

            if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
                return;

            try
            {
                if (m_SDKCustomEffects == null)
                {
                    await Initialize();
                }

                e.ChosenPhoto.Position = 0;
                StreamImageSource imageStream = new StreamImageSource(e.ChosenPhoto);
                await m_SDKCustomEffects.SetStreamImage(imageStream);
                await ProcessImage();
            }
            catch (Exception ex)
            {
                Busy = false;
                System.Diagnostics.Debug.WriteLine(string.Concat("Error in ChooseImageButton_Callback() >>> ", ex));
            }

            Busy = false;
        }
        private void BeginSession(Stream image)
        {
            // Initialize session with image

            using (var memoryStream = new MemoryStream())
            {
                image.Position = 0;
                image.CopyTo(memoryStream);

                try
                {
                    // Some streams do not support flushing

                    image.Flush();
                }
                catch (Exception ex)
                {
                }

                memoryStream.Position = 0;

                // Initialize image source

                _source = new StreamImageSource(memoryStream);

                // Get image info

                Task.Run(async () => { _info = await _source.GetInfoAsync(); }).Wait();

                // Set _lowResolutionBitmap decoding to a quite low resolution and initialize it with image
                if (_info.ImageSize.Width >= _info.ImageSize.Height)
                {
                    _bitmap.DecodePixelWidth = 1536;
                    _bitmap.DecodePixelHeight = 0;
                }
                else
                {
                    _bitmap.DecodePixelWidth = 0;
                    _bitmap.DecodePixelHeight = 1536;
                }

                image.Position = 0;

                _bitmap.SetSource(image);
            }
        }
        private void EndSession()
        {
            if (_source != null)
            {
                _source.Dispose();
                _source = null;
            }

            _info = null;
        }
Beispiel #58
0
        private async void AttemptUpdatePreviewAsync2()
        {
            if (!Processing)
            {
                Processing = true;

                Model.OriginalImage.Position = 0;


                using (var source = new StreamImageSource(Model.OriginalImage))
                using (var segmenter = new InteractiveForegroundSegmenter(source))
                using (var annotationsSource = new BitmapImageSource(Model.AnnotationsBitmap))
                {
                    segmenter.Quality = 0.5;
                    segmenter.Source = source;
                    segmenter.AnnotationsSource = annotationsSource;

                    var foregroundColor = Model.ForegroundBrush.Color;
                    var backgroundColor = Model.BackgroundBrush.Color;

                    segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                    segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);

                   
                    do
                    {
                        _processingPending = false;




                        var previewBitmap = new WriteableBitmap((int)Model.AnnotationsBitmap.Dimensions.Width, (int)Model.AnnotationsBitmap.Dimensions.Height);


                        using (var backgroundSource = new StreamImageSource(Model.OriginalImage2))

                        using (var filterEffect = new FilterEffect(backgroundSource))

                        using (var blendFilter = new BlendFilter(source))


                        using (var renderer = new WriteableBitmapRenderer(filterEffect, previewBitmap))
                        

                        {
                            
                            blendFilter.BlendFunction = BlendFunction.Normal;
                            blendFilter.MaskSource = segmenter;
                            filterEffect.Filters = new IFilter[] { blendFilter };
                            try
                            {
                                await renderer.RenderAsync();
                            }
                            catch
                            {
                            }
                            
                            var wb = previewBitmap;
                            var fileStream = new MemoryStream();
                            wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 100, 100);
                            fileStream.Seek(0, SeekOrigin.Begin);

                            var effect = new LensBlurEffect(new StreamImageSource(fileStream), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Circle, 10));
                            var renderer2 = new WriteableBitmapRenderer(effect, previewBitmap);
                            effect.KernelMap = segmenter;
                            try
                            {
                                await renderer2.RenderAsync();
                            }
                            catch
                            {
                            }

                            PreviewImage.Source = previewBitmap;


                            wb = previewBitmap;
                            fileStream = new MemoryStream();
                            wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 100, 100);
                            fileStream.Seek(0, SeekOrigin.Begin);

                           // var m = new MediaLibrary();
                           // m.SavePictureToCameraRoll("test", fileStream);
                            Model.MixedStream = fileStream;
                           // Model.MixedStream = ConvertToStream(previewBitmap);
                            previewBitmap.Invalidate();

                            

                        }

                    }
                    while (_processingPending);
                }


                Processing = false;
            }
            else
            {
               
                _processingPending = true;
            }
        }
        private List<IImageProvider> CreateImageSequenceFromResources(int sequenceId)
        {
            List<IImageProvider> imageProviders = new List<IImageProvider>();

            try
            {
                int i = 0;
                while (true)
                {
                    Uri uri = new Uri(@"Assets/Sequences/sequence." + sequenceId + "." + i + ".jpg", UriKind.Relative);
                    Stream stream = Application.GetResourceStream(uri).Stream;
                    StreamImageSource sis = new StreamImageSource(stream);
                    imageProviders.Add(new StreamImageSource(stream));
                    i++;
                }
            }
            catch (NullReferenceException ex)
            {
                // No more images available
            }

            return imageProviders;
        }
Beispiel #60
0
        private async void AttemptUpdatePreviewAsync()
        {
            if (!Processing)
            {
                Processing = true;

                do
                {
                    _processingPending = false;

                    if (Model.OriginalImage != null && ForegroundAnnotationsDrawn && BackgroundAnnotationsDrawn)
                    {
                        Model.OriginalImage.Position = 0;

                        var maskBitmap = new WriteableBitmap((int)AnnotationsCanvas.ActualWidth, (int)AnnotationsCanvas.ActualHeight);
                        var annotationsBitmap = new WriteableBitmap((int)AnnotationsCanvas.ActualWidth, (int)AnnotationsCanvas.ActualHeight);

                        annotationsBitmap.Render(AnnotationsCanvas, new ScaleTransform
                        {
                            ScaleX = 1,
                            ScaleY = 1
                        });

                        annotationsBitmap.Invalidate();

                        Model.OriginalImage.Position = 0;

                        using (var source = new StreamImageSource(Model.OriginalImage))
                        using (var segmenter = new InteractiveForegroundSegmenter(source))
                        using (var renderer = new WriteableBitmapRenderer(segmenter, maskBitmap))
                        using (var annotationsSource = new BitmapImageSource(annotationsBitmap.AsBitmap()))
                        {
                            var foregroundColor = Model.ForegroundBrush.Color;
                            var backgroundColor = Model.BackgroundBrush.Color;

                            segmenter.ForegroundColor = Windows.UI.Color.FromArgb(foregroundColor.A, foregroundColor.R, foregroundColor.G, foregroundColor.B);
                            segmenter.BackgroundColor = Windows.UI.Color.FromArgb(backgroundColor.A, backgroundColor.R, backgroundColor.G, backgroundColor.B);
                            segmenter.Quality = 0.5;
                            segmenter.AnnotationsSource = annotationsSource;

                            await renderer.RenderAsync();

                            MaskImage.Source = maskBitmap;

                            maskBitmap.Invalidate();

                            Model.AnnotationsBitmap = (Bitmap)annotationsBitmap.AsBitmap();
                        }
                    }
                    else
                    {
                        MaskImage.Source = null;
                    }
                }
                while (_processingPending && !_manipulating);

                Processing = false;
            }
            else
            {
                _processingPending = true;
            }
        }