private async void UnirAbaixo_Click(object sender, RoutedEventArgs e) { Button botao = (Button)sender; if (botao.DataContext is ImagemProcessar imagemProcessar) { int indiceSelecionado = arquivos.IndexOf(imagemProcessar); if (indiceSelecionado == arquivos.Count - 1) { MessageBox.Show("Não há imagem para unir", "Alerta", MessageBoxButton.OK, MessageBoxImage.Error); } overlayGrid.Visibility = Visibility.Visible; BitmapSource novaImagem = null; await Task.Factory.StartNew(() => { novaImagem = ProcessarImagens.CombinarImagens(arquivos.ElementAt(indiceSelecionado), arquivos.ElementAt(indiceSelecionado + 1)); Dispatcher.Invoke(() => { arquivos.RemoveAt(indiceSelecionado + 1); arquivos.RemoveAt(indiceSelecionado); arquivos.Insert(indiceSelecionado, new ImagemProcessar(novaImagem)); }); }); overlayGrid.Visibility = Visibility.Hidden; } }
private async void UnirTodas_Click(object sender, RoutedEventArgs e) { MessageBoxResult messageBoxResult = MessageBox.Show("Deseja realmente unitor todas as imagens? Isso pode demorar bastante tempo.", "Unir Todas", MessageBoxButton.YesNo); if (messageBoxResult == MessageBoxResult.No) { return; } overlayGrid.Visibility = Visibility.Visible; await Task.Factory.StartNew(() => { var imagemUnida = ProcessarImagens.CombinarImagens(arquivos.ToList()); Dispatcher.Invoke(() => { arquivos.Clear(); arquivos.Add(new ImagemProcessar(imagemUnida)); }); }); overlayGrid.Visibility = Visibility.Hidden; }
private async void DividirImagen_ClickMeio(object sender, MouseButtonEventArgs e) { if (!(e.ButtonState == MouseButtonState.Pressed && e.ChangedButton == MouseButton.Middle)) { return; } Image imagem = (Image)sender; if (imagem.DataContext is ImagemProcessar imagemProcessar) { int indiceSelecionado = arquivos.IndexOf(imagemProcessar); if (indiceSelecionado == 0 || indiceSelecionado == arquivos.Count - 1) { MessageBox.Show("Não é possivel realizar essa operação na primeira ou ultima imagem", "Alert", MessageBoxButton.OK, MessageBoxImage.Error); return; } overlayGrid.Visibility = Visibility.Visible; int altura = (int)(e.GetPosition(imagem).Y *(arquivos.ElementAt(indiceSelecionado).Imagem.Height / imagem.ActualHeight)); List <BitmapSource> novasImagens = null; await Task.Factory.StartNew(() => { novasImagens = ProcessarImagens.SepararUnirImagem(arquivos.ElementAt(indiceSelecionado - 1), arquivos.ElementAt(indiceSelecionado), altura); var imagemUnificada = ProcessarImagens.CombinarImagens(novasImagens.ElementAt(1), arquivos.ElementAt(indiceSelecionado + 1).Imagem); Dispatcher.InvokeAsync(() => { arquivos.RemoveAt(indiceSelecionado - 1); arquivos.RemoveAt(indiceSelecionado - 1); arquivos.RemoveAt(indiceSelecionado - 1); arquivos.Insert(indiceSelecionado - 1, new ImagemProcessar(imagemUnificada)); arquivos.Insert(indiceSelecionado - 1, new ImagemProcessar(novasImagens.ElementAt(0))); }); }); overlayGrid.Visibility = Visibility.Hidden; } }