示例#1
0
        private async Task ShowImageAsync()
        {
            _originalStream.Seek(0, SeekOrigin.Begin);
            Helpers.SafeDispose(ref _editingSession);
            _editingSession = await EditingSessionFactory.CreateEditingSessionAsync(_originalStream);

            ImageWidth  = (int)_editingSession.Dimensions.Width;
            ImageHeight = (int)_editingSession.Dimensions.Height;

            MainImage = new WriteableBitmap(ImageWidth, ImageHeight);
            await _editingSession.RenderToWriteableBitmapAsync(MainImage);

            _buffer     = new int[MainImage.PixelWidth * MainImage.PixelHeight];
            _maskBuffer = new byte[MainImage.PixelWidth * MainImage.PixelHeight];
            _oldPixels  = new int[MainImage.PixelWidth * MainImage.PixelHeight];
            MainImage.Pixels.CopyTo(_oldPixels, 0);
            MainImage.Invalidate();
            PreviewImage = null;

            BindTool();

            if (_backup == null)
            {
                _backup = new WriteableBitmap(MainImage.PixelWidth, MainImage.PixelHeight);
                MainImage.Pixels.CopyTo(_backup.Pixels, 0);
            }

            CanApply = false;
            HasImage = true;
        }
示例#2
0
        private async void UndoExecute()
        {
            _buffer        = new int[MainImage.PixelWidth * MainImage.PixelHeight];
            _maskBuffer    = new byte[MainImage.PixelWidth * MainImage.PixelHeight];
            _filterApplied = false;

            _originalStream.Seek(0, SeekOrigin.Begin);
            _editingSession = await EditingSessionFactory.CreateEditingSessionAsync(_originalStream);

            await _editingSession.RenderToWriteableBitmapAsync(MainImage);

            MainImage.Invalidate();

            CanApply   = false;
            _noChanges = true;
            UndoCommand.RaiseCanExecuteChanged();

            if (PreviewImage != null)
            {
                for (var i = 0; i < PreviewImage.Pixels.Length; ++i)
                {
                    PreviewImage.Pixels[i] = 0;
                }
                PreviewImage.Invalidate();
            }

            BindTool();
        }
示例#3
0
        private async void task_Completed(object sender, PhotoResult e)
        {
            /* byte[] imageBits = new byte[(int)e.ChosenPhoto.Length];
            e.ChosenPhoto.Read(imageBits, 0, imageBits.Length);
            e.ChosenPhoto.Seek(0, System.IO.SeekOrigin.Begin);
            MemoryStream screenshot = new MemoryStream(imageBits);
            BitmapImage imageFromStream = new BitmapImage();
            imageFromStream.SetSource(screenshot); */
            Stream imgstream = e.ChosenPhoto;
            //System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
            //bmp.SetSource(e.ChosenPhoto);
            //img.Source = bmp;
            ApplyButton.Visibility = Visibility.Visible;
            session = await EditingSessionFactory.CreateEditingSessionAsync(imgstream);
            try
            {
                session.AddFilter(FilterFactory.CreateCartoonFilter(true));

                // Save the image as a jpeg to the camera roll
                using (MemoryStream stream = new MemoryStream())
                {
                    WriteableBitmap bitmap = new WriteableBitmap(3552, 2448);
                    await session.RenderToWriteableBitmapAsync(bitmap);
                    bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);
                    img.Source = bitmap;
                }
                //Force the framework to redraw the Image.
            }
            catch (Exception exception)
            {
                MessageBox.Show("Exception:" + exception.Message);
            }
            
        }
示例#4
0
        private async void Save_Clicked(object sender, RoutedEventArgs e)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                WriteableBitmap bitmap = new WriteableBitmap(3552, 2448);
                await session.RenderToWriteableBitmapAsync(bitmap);

                bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);
                stream.Seek(0, SeekOrigin.Begin);
                using (MediaLibrary mediaLibrary = new MediaLibrary())
                    mediaLibrary.SavePictureToCameraRoll("Picture.jpg", stream);
                MessageBox.Show("Image saved!");
            }
        }
示例#5
0
        private async void UpdatePreviewAsync()
        {
            using (EditingSession session = new EditingSession(previewBuffer))
            {
                // Add all previous filters
                foreach (FilterBase filterContainer in filterManager.AppliedFilters)
                {
                    if (filterContainer.IsFilterEnabled)
                    {
                        session.AddFilter(filterContainer.Filter);
                    }
                }

                await session.RenderToWriteableBitmapAsync(currentPreviewBitmap, OutputOption.PreserveAspectRatio);
                currentPreviewBitmap.Invalidate();
            }
        }
示例#6
0
        private async void task_Completed(object sender, PhotoResult e)
        {
            /* byte[] imageBits = new byte[(int)e.ChosenPhoto.Length];
             * e.ChosenPhoto.Read(imageBits, 0, imageBits.Length);
             * e.ChosenPhoto.Seek(0, System.IO.SeekOrigin.Begin);
             * MemoryStream screenshot = new MemoryStream(imageBits);
             * BitmapImage imageFromStream = new BitmapImage();
             * imageFromStream.SetSource(screenshot); */
            Stream imgstream = e.ChosenPhoto;

            //System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
            //bmp.SetSource(e.ChosenPhoto);
            //img.Source = bmp;
            ApplyButton.Visibility = Visibility.Visible;
            session = await EditingSessionFactory.CreateEditingSessionAsync(imgstream);

            try
            {
                session.AddFilter(FilterFactory.CreateCartoonFilter(true));

                // Save the image as a jpeg to the camera roll
                using (MemoryStream stream = new MemoryStream())
                {
                    WriteableBitmap bitmap = new WriteableBitmap(3552, 2448);
                    await session.RenderToWriteableBitmapAsync(bitmap);

                    bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);
                    img.Source = bitmap;
                }
                //Force the framework to redraw the Image.
            }
            catch (Exception exception)
            {
                MessageBox.Show("Exception:" + exception.Message);
            }
        }
示例#7
0
        private async void ApplyExecute()
        {
            IsWorking = true;

            if (_editingSession == null || _noChanges)
            {
                return;
            }

            if (!CanApply)
            {
                _queued = true;
                return;
            }

            CanApply = false;

            _filterApplied = true;
            if (_filterApplied && _editingSession.CanUndo())
            {
                try { _editingSession.Undo(); }
                catch (Exception e)
                {
                    App.LogError(e);
                }
            }

            // apply filter to selected pixels only
            PreviewImage = new WriteableBitmap(ImageWidth, ImageHeight);
            _buffer.CopyTo(PreviewImage.Pixels, 0);

            using (var ms = PreviewImage.ToStream())
            {
                var editingSession = await EditingSessionFactory.CreateEditingSessionAsync(ms);

                editingSession.AddFilter(SelectedFilter.Creator());
                await editingSession.RenderToWriteableBitmapAsync(PreviewImage);
            }

            // remove unnecessary pixels
            //var removal = ClearTransparent ? Constants.White & 0xFFFFFF : Constants.White;
            // transparent white
            var removal = (0xFF << 24) |
                          (Grayscale << 16) |
                          (Grayscale << 8) |
                          (Grayscale);

            for (var i = 0; i < PreviewImage.Pixels.Length; ++i)
            {
                if (_maskBuffer[i] == 0)
                {
                    PreviewImage.Pixels[i] = removal;
                }

                if (_maskBuffer[i] != 0)
                {
                    MainImage.Pixels[i] = ((Grayscale2 << 16) | (Grayscale2 << 8) | Grayscale2) | ((255 - _maskBuffer[i]) << 24);
                }
                else
                {
                    MainImage.Pixels[i] = _backup.Pixels[i];
                }
            }

#if DEBUG
            try
            {
                using (var fileStream = _isoStore.CreateFile("MainImage.jpg"))
                    MainImage.SaveJpeg(fileStream, ImageWidth, ImageHeight, 0, 100);
                using (var fileStream = _isoStore.CreateFile("PreviewImage.jpg"))
                    PreviewImage.SaveJpeg(fileStream, ImageWidth, ImageHeight, 0, 100);
            }
            catch (Exception e)
            {
                App.LogError(e);
            }
#endif

            using (var ms = MainImage.ToStream())
            {
                Helpers.SafeDispose(ref _editingSession);
                _editingSession = await EditingSessionFactory.CreateEditingSessionAsync(ms);
            }

            using (var ms = PreviewImage.ToStream())
                using (var blendingSession = await EditingSessionFactory.CreateEditingSessionAsync(ms))
                {
                    PreviewImage.Invalidate();

                    _editingSession.AddFilter(FilterFactory.CreateBlendFilter(blendingSession, SelectedBlendFunction));
                    var temp = new WriteableBitmap(MainImage.PixelWidth, MainImage.PixelHeight);
                    await _editingSession.RenderToWriteableBitmapAsync(temp);

                    MainImage = temp;
                    if (SelectedTool != null)
                    {
                        SelectedTool.TargetImage = MainImage;
                    }

                    UndoCommand.RaiseCanExecuteChanged();
                    CanApply = true;
                }

            if (_queued)
            {
                _queued = false;
                ApplyExecute();
            }

            IsWorking = false;
        }