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; }
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(); }
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); } }
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!"); } }
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(); } }
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); } }
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; }