private async void Cancel_Click(object sender, RoutedEventArgs e) { if (CropToolbar != null && CropToolbar.Visibility == Visibility.Visible) { // Reset Cropper await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle); _rotation = _media.EditState.Rotation; _flip = _media.EditState.Flip; Crop.IsChecked = IsCropped(Cropper.CropRectangle); ResetUiVisibility(); } else if (DrawToolbar != null && DrawToolbar.Visibility == Visibility.Visible) { Canvas.RestoreState(); ResetUiVisibility(); SettingsService.Current.Pencil = DrawSlider.GetDefault(); } else { if (_media is StorageMedia) { _media.EditState = _originalMediaEditState; // Reset to state before starting editing } if (_media is StorageVideo video) { video.IsMuted = _originalVideoIsMuted; video.Compression = _originalVideoCompression; } ResetUiVisibility(); Hide(ContentDialogResult.Secondary); } }
private async void Button_Click(object sender, RoutedEventArgs e) { FileOpenPicker fo = new FileOpenPicker(); fo.FileTypeFilter.Add(".png"); fo.FileTypeFilter.Add(".jpg"); fo.SuggestedStartLocation = PickerLocationId.Desktop; var file = await fo.PickSingleFileAsync(); if (file != null) { Cropper.Reset(); Canvas.Reset(); await Cropper.SetSourceAsync(file); Canvas.SetFile(file); Canvas.SetSource(Cropper._software); Canvas.SetRect(Cropper.CropRectangle); //if (!_hasMessageContext) //TODO: Fix mask bug, remove hack (#2017 references mask position) //{ // await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle); // Cropper.SetProportions(_media.EditState.Proportions); //} //Cropper.IsCropEnabled = true; } }
private async void Rotate_Click(object sender, RoutedEventArgs e) { var rotation = BitmapRotation.None; var proportions = RotateProportions(Cropper.Proportions); var rectangle = RotateArea(Cropper.CropRectangle); switch (_rotation) { case BitmapRotation.None: rotation = BitmapRotation.Clockwise90Degrees; break; case BitmapRotation.Clockwise90Degrees: rotation = BitmapRotation.Clockwise180Degrees; break; case BitmapRotation.Clockwise180Degrees: rotation = BitmapRotation.Clockwise270Degrees; break; } _rotation = rotation; await Cropper.SetSourceAsync(_file, rotation, _flip, proportions, rectangle); Rotate.IsChecked = _rotation != BitmapRotation.None; Canvas.Invalidate(); }
private async void AccepscdtButton_Click(object sender, RoutedEventArgs e) { FileOpenPicker fo = new FileOpenPicker(); fo.FileTypeFilter.Add(".png"); fo.FileTypeFilter.Add(".jpg"); fo.SuggestedStartLocation = PickerLocationId.Desktop; var file = await fo.PickSingleFileAsync(); if (file != null) { ResetUI(); Cropper.Reset(); Canvas.Reset(); await Cropper.SetSourceAsync(file); Canvas.SetFile(file); Canvas.SetSource(Cropper._software); Canvas.SetRect(Cropper.CropRectangle); DisbaleCloseButton(); CropMode(true, false); } }
public EditYourPhotoView(StorageFile file) { InitializeComponent(); //_inkPresenter = Canvas.InkPresenter; //_inkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Pen | CoreInputDeviceTypes.Touch; Loaded += async(s, args) => { await Cropper.SetSourceAsync(file); }; }
private async void Save_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { LoadingControl.IsLoading = true; MainPage.ThisPage.IsAnyTaskRunning = true; using (IRandomAccessStream Stream = await OriginFile.OpenAsync(FileAccessMode.ReadWrite)) { Stream.Size = 0; switch (OriginFile.FileType) { case ".png": await Cropper.SaveAsync(Stream, BitmapFileFormat.Png).ConfigureAwait(true); break; case ".jpg": case ".jpeg": await Cropper.SaveAsync(Stream, BitmapFileFormat.Jpeg).ConfigureAwait(true); break; case ".bmp": await Cropper.SaveAsync(Stream, BitmapFileFormat.Bmp).ConfigureAwait(true); break; case ".gif": await Cropper.SaveAsync(Stream, BitmapFileFormat.Gif).ConfigureAwait(true); break; case ".tiff": await Cropper.SaveAsync(Stream, BitmapFileFormat.Tiff).ConfigureAwait(true); break; default: await Cropper.SaveAsync(Stream, BitmapFileFormat.Png).ConfigureAwait(true); await OriginFile.RenameAsync(Path.GetFileNameWithoutExtension(OriginFile.Name) + ".png", NameCollisionOption.GenerateUniqueName); break; } } await Task.Delay(1000).ConfigureAwait(true); LoadingControl.IsLoading = false; MainPage.ThisPage.IsAnyTaskRunning = false; FileControlNav.GoBack(); }
public void TestInvalidParameter() { var cropper = Cropper.CreateCropper(); try { cropper.AddParameter(Model.Tools.Common.ParameterName.Brightness, new Parameter <Double>(150)); Assert.Fail("The Parameter Name is not valid"); } catch (Exception e) { Assert.True(true); } }
private async void Save_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { LoadingControl.IsLoading = true; MainPage.ThisPage.IsAnyTaskRunning = true; using (IRandomAccessStream Stream = await OriginFile.GetRandomAccessStreamFromFileAsync(FileAccessMode.ReadWrite).ConfigureAwait(true)) { switch (OriginFile.Type.ToLower()) { case ".png": await Cropper.SaveAsync(Stream, BitmapFileFormat.Png).ConfigureAwait(true); break; case ".jpg": case ".jpeg": await Cropper.SaveAsync(Stream, BitmapFileFormat.Jpeg).ConfigureAwait(true); break; case ".bmp": await Cropper.SaveAsync(Stream, BitmapFileFormat.Bmp).ConfigureAwait(true); break; case ".gif": await Cropper.SaveAsync(Stream, BitmapFileFormat.Gif).ConfigureAwait(true); break; case ".tiff": await Cropper.SaveAsync(Stream, BitmapFileFormat.Tiff).ConfigureAwait(true); break; default: await Cropper.SaveAsync(Stream, BitmapFileFormat.Png).ConfigureAwait(true); break; } } await Task.Delay(1000).ConfigureAwait(true); LoadingControl.IsLoading = false; MainPage.ThisPage.IsAnyTaskRunning = false; Frame.GoBack(); }
private async void Accept_Click(object sender, RoutedEventArgs e) { if (Cropper.IsCropEnabled) { if (_media != null) { var rect = Cropper.CropRectangle; var w = Cropper.PixelWidth; var h = Cropper.PixelHeight; _media.EditState = new BitmapEditState { //Rectangle = new Rect(rect.X * w, rect.Y * h, rect.Width * w, rect.Height * h), Rectangle = rect, Proportions = Cropper.Proportions, Strokes = Canvas.Strokes, Flip = _flip, Rotation = _rotation }; Hide(ContentDialogResult.Primary); return; } var cropped = await Cropper.CropAsync(); var drawing = Canvas.Strokes; if (drawing != null && drawing.Count > 0) { cropped = await ImageHelper.DrawStrokesAsync(cropped, drawing, Cropper.CropRectangle, _rotation, _flip); } Result = cropped; Hide(ContentDialogResult.Primary); } else { Canvas.SaveState(); Cropper.IsCropEnabled = true; Canvas.IsEnabled = false; BasicToolbar.Visibility = Visibility.Visible; DrawToolbar.Visibility = Visibility.Collapsed; DrawSlider.Visibility = Visibility.Collapsed; SettingsService.Current.Pencil = DrawSlider.GetDefault(); } }
public void TestRepeatedParameter() { var cropper = Cropper.CreateCropper(); cropper.AddParameter(Model.Tools.Common.ParameterName.X1, new Parameter <Double>(30)); try { cropper.AddParameter(Model.Tools.Common.ParameterName.X1, new Parameter <Double>(100)); Assert.Fail("You need to remove the parameter first"); } catch (Exception) { Assert.IsTrue(true); } }
public void TestOutOfRangeParameter() { var cropper = Cropper.CreateCropper(); cropper.AddParameter(Model.Tools.Common.ParameterName.X1, new Parameter <Double>(1500000)); try { cropper.ApplyTool(_input); Assert.Fail("Should be between -255 and 255"); } catch (Exception) { Assert.IsTrue(true); } }
public EditMediaPopup(StorageMedia media, ImageCropperMask mask = ImageCropperMask.Rectangle) { InitializeComponent(); Canvas.Strokes = media.EditState.Strokes; Cropper.SetMask(mask); Cropper.SetProportions(mask == ImageCropperMask.Ellipse ? BitmapProportions.Square : media.EditState.Proportions); if (mask == ImageCropperMask.Ellipse) { Proportions.IsChecked = true; Proportions.IsEnabled = false; } _file = media.File; _media = media; Loaded += async(s, args) => { if (mask == ImageCropperMask.Ellipse) { await Cropper.SetSourceAsync(media.File, proportions : BitmapProportions.Square); } else { await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle); } }; Unloaded += (s, args) => { Media.Source = null; }; if (mask == ImageCropperMask.Ellipse && string.Equals(media.File.FileType, ".mp4", StringComparison.OrdinalIgnoreCase)) { FindName(nameof(TrimToolbar)); TrimToolbar.Visibility = Visibility.Visible; BasicToolbar.Visibility = Visibility.Collapsed; InitializeVideo(media.File); } }
public EditMediaPopup(StorageFile file, BitmapProportions proportions = BitmapProportions.Custom, ImageCropperMask mask = ImageCropperMask.Rectangle) { InitializeComponent(); Cropper.SetMask(mask); Cropper.SetProportions(proportions); if (proportions != BitmapProportions.Custom) { Proportions.IsChecked = true; Proportions.IsEnabled = false; } _file = file; Loaded += async(s, args) => { await Cropper.SetSourceAsync(file, proportions : proportions); }; }
private void Proportions_Click(object sender, RoutedEventArgs e) { if (Cropper.Proportions != BitmapProportions.Custom) { Cropper.SetProportions(BitmapProportions.Custom); Proportions.IsChecked = false; } else { var flyout = new MenuFlyout(); var items = Cropper.GetProportions(); var handler = new RoutedEventHandler((s, args) => { if (s is MenuFlyoutItem option) { Cropper.SetProportions((BitmapProportions)option.Tag); Proportions.IsChecked = true; } }); foreach (var item in items) { var option = new MenuFlyoutItem(); option.Click += handler; option.Text = ProportionsToLabelConverter.Convert(item); option.Tag = item; option.MinWidth = 140; option.HorizontalContentAlignment = HorizontalAlignment.Center; flyout.Items.Add(option); } if (flyout.Items.Count > 0) { flyout.ShowAt((GlyphToggleButton)sender); } } }
public EditMediaPopup(StorageMedia media) { InitializeComponent(); Canvas.Strokes = media.EditState.Strokes; Cropper.SetMask(ImageCropperMask.Rectangle); Cropper.SetProportions(media.EditState.Proportions); if (media.EditState.Proportions != BitmapProportions.Custom) { Proportions.IsChecked = true; Proportions.IsEnabled = true; } _file = media.File; _media = media; Loaded += async(s, args) => { await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle); }; }
private void ResetButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { AspList.SelectedIndex = 0; ResetButton.IsEnabled = false; OriginImage.Dispose(); OriginImage = SoftwareBitmap.Copy(OriginBackupImage); WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); OriginImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(OriginImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } FilterImage?.Dispose(); FilterImage = null; FilterBackupImage?.Dispose(); FilterBackupImage = null; AlphaSlider.ValueChanged -= AlphaSlider_ValueChanged; BetaSlider.ValueChanged -= BetaSlider_ValueChanged; FilterGrid.SelectionChanged -= FilterGrid_SelectionChanged; FilterGrid.SelectedIndex = 0; FilterGrid.SelectionChanged += FilterGrid_SelectionChanged; AlphaSlider.Value = 1; BetaSlider.Value = 0; AlphaSlider.ValueChanged += AlphaSlider_ValueChanged; BetaSlider.ValueChanged += BetaSlider_ValueChanged; Cropper.Reset(); }
private async void SaveAs_Click(SplitButton sender, SplitButtonClickEventArgs args) { FileSavePicker Picker = new FileSavePicker { SuggestedFileName = Path.GetFileNameWithoutExtension(OriginFile.Name), SuggestedStartLocation = PickerLocationId.Desktop }; Picker.FileTypeChoices.Add($"PNG {Globalization.GetString("Transcode_Dialog_Format_Text")}", new List <string>() { ".png" }); Picker.FileTypeChoices.Add($"JPEG {Globalization.GetString("Transcode_Dialog_Format_Text")}", new List <string>() { ".jpg" }); Picker.FileTypeChoices.Add($"BMP {Globalization.GetString("Transcode_Dialog_Format_Text")}", new List <string>() { ".bmp" }); Picker.FileTypeChoices.Add($"GIF {Globalization.GetString("Transcode_Dialog_Format_Text")}", new List <string>() { ".gif" }); Picker.FileTypeChoices.Add($"TIFF {Globalization.GetString("Transcode_Dialog_Format_Text")}", new List <string>() { ".tiff" }); StorageFile File = await Picker.PickSaveFileAsync(); if (File != null) { LoadingControl.IsLoading = true; MainPage.ThisPage.IsAnyTaskRunning = true; using (IRandomAccessStream Stream = await File.OpenAsync(FileAccessMode.ReadWrite)) { Stream.Size = 0; switch (File.FileType) { case ".png": await Cropper.SaveAsync(Stream, BitmapFileFormat.Png).ConfigureAwait(true); break; case ".jpg": case ".jpeg": await Cropper.SaveAsync(Stream, BitmapFileFormat.Jpeg).ConfigureAwait(true); break; case ".bmp": await Cropper.SaveAsync(Stream, BitmapFileFormat.Bmp).ConfigureAwait(true); break; case ".gif": await Cropper.SaveAsync(Stream, BitmapFileFormat.Gif).ConfigureAwait(true); break; case ".tiff": await Cropper.SaveAsync(Stream, BitmapFileFormat.Tiff).ConfigureAwait(true); break; default: throw new InvalidOperationException("Unsupport image format"); } } await Task.Delay(1000).ConfigureAwait(true); LoadingControl.IsLoading = false; MainPage.ThisPage.IsAnyTaskRunning = false; FileControlNav.GoBack(); } }
private async void Flip_Click(object sender, RoutedEventArgs e) { var flip = _flip; var rotation = _rotation; var proportions = Cropper.Proportions; var rectangle = FlipArea(Cropper.CropRectangle); switch (rotation) { case BitmapRotation.Clockwise90Degrees: case BitmapRotation.Clockwise270Degrees: switch (flip) { case BitmapFlip.None: flip = BitmapFlip.Vertical; break; case BitmapFlip.Vertical: flip = BitmapFlip.None; break; case BitmapFlip.Horizontal: flip = BitmapFlip.None; rotation = rotation == BitmapRotation.Clockwise90Degrees ? BitmapRotation.Clockwise270Degrees : BitmapRotation.Clockwise90Degrees; break; } break; case BitmapRotation.None: case BitmapRotation.Clockwise180Degrees: switch (flip) { case BitmapFlip.None: flip = BitmapFlip.Horizontal; break; case BitmapFlip.Horizontal: flip = BitmapFlip.None; break; case BitmapFlip.Vertical: flip = BitmapFlip.None; rotation = rotation == BitmapRotation.None ? BitmapRotation.Clockwise180Degrees : BitmapRotation.None; break; } break; } _flip = flip; _rotation = rotation; await Cropper.SetSourceAsync(_file, _rotation, flip, proportions, rectangle); //Transform.ScaleX = _flip == BitmapFlip.Horizontal ? -1 : 1; //Transform.ScaleY = _flip == BitmapFlip.Vertical ? -1 : 1; Flip.IsChecked = _flip != BitmapFlip.None; Canvas.Invalidate(); }
public EditMediaPopup(StorageMedia media, ImageCropperMask mask = ImageCropperMask.Rectangle, bool ttl = false) { InitializeComponent(); Canvas.Strokes = media.EditState.Strokes; Cropper.SetMask(mask); if (mask == ImageCropperMask.Ellipse) { _hasMessageContext = false; media.EditState.Proportions = BitmapProportions.Square; } Cropper.SetProportions(media.EditState.Proportions); _file = media.File; _media = media; _originalMediaEditState = CopyBitmapEditState(media.EditState); Loaded += async(s, args) => { await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle); if (!_hasMessageContext) //TODO: Fix mask bug, remove hack (#2017 references mask position) { await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle); Cropper.SetProportions(_media.EditState.Proportions); } Cropper.IsCropEnabled = !_hasMessageContext && _media.IsVideo; }; Unloaded += (s, args) => { Media.Source = null; }; #region Init UI if (mask == ImageCropperMask.Ellipse && string.Equals(media.File.FileType, ".mp4", StringComparison.OrdinalIgnoreCase)) { FindName(nameof(TrimToolbar)); TrimToolbar.Visibility = Visibility.Visible; BasicToolbar.Visibility = Visibility.Collapsed; SeparatorLeft.Visibility = Visibility.Collapsed; SeparatorRight.Visibility = Visibility.Collapsed; InitializeVideo(media.File); } if (_media is StorageVideo video) { _originalVideoCompression = video.Compression; _originalVideoIsMuted = video.IsMuted; Mute.IsChecked = video.IsMuted; Mute.Visibility = Visibility.Visible; Compress.IsChecked = video.Compression != video.MaxCompression; Compress.Visibility = video.CanCompress ? Visibility.Visible : Visibility.Collapsed; if (video.CanCompress) { Compress.Glyph = new CompressionToGlyphConverter().Convert(video.Compression, typeof(string), null, video.MaxCompression.ToString()).ToString(); Compress.CheckedGlyph = Compress.Glyph; Compress.IsChecked = video.Compression != video.MaxCompression; } } else { Mute.Visibility = Visibility.Collapsed; Compress.Visibility = Visibility.Collapsed; } Crop.Visibility = _media is StoragePhoto ? Visibility.Visible : Visibility.Collapsed; Draw.Visibility = Crop.Visibility; Ttl.Visibility = ttl ? Visibility.Visible : Visibility.Collapsed; Ttl.IsChecked = _media.Ttl > 0; if (_media.EditState is BitmapEditState editSate) { Crop.IsChecked = editSate.Proportions != BitmapProportions.Custom || editSate.Flip != BitmapFlip.None || editSate.Rotation != BitmapRotation.None || (!editSate.Rectangle.IsEmpty && (editSate.Rectangle.X > 0 || editSate.Rectangle.Y > 0 || Math.Abs(editSate.Rectangle.Width - 1) > 0.1f || Math.Abs(editSate.Rectangle.Height - 1) > 0.1f)); Draw.IsChecked = editSate.Strokes != null && editSate.Strokes.Count > 0; } else { Crop.IsChecked = false; Draw.IsChecked = false; } if (_hasMessageContext) { if (!string.IsNullOrWhiteSpace(media.Caption?.Text)) { CaptionInput.SetText(media.Caption); } } else { CaptionInput.Visibility = Visibility.Collapsed; } #endregion }
private async void Accept_Click(object sender, RoutedEventArgs e) { Result = await Cropper.CropAsync(640, 640); Hide(ContentDialogBaseResult.OK); }
public MainPage() { this.InitializeComponent(); Cropper.SetMask(ImageCropperMask.Rectangle); Loaded += MainPage_Loaded; }