|
@@ -0,0 +1,241 @@
|
|
|
|
+using ComPDFKitViewer.PdfViewer;
|
|
|
|
+using ComPDFKitViewer;
|
|
|
|
+using System;
|
|
|
|
+using System.Collections.Generic;
|
|
|
|
+using System.Windows;
|
|
|
|
+using System.Windows.Controls;
|
|
|
|
+using System.Windows.Media.Imaging;
|
|
|
|
+using ComPDFKit.PDFPage;
|
|
|
|
+using System.Windows.Controls.Primitives;
|
|
|
|
+using Microsoft.Win32;
|
|
|
|
+using System.Diagnostics;
|
|
|
|
+using System.Drawing;
|
|
|
|
+using System.IO;
|
|
|
|
+
|
|
|
|
+namespace Compdfkit_Tools.Edit
|
|
|
|
+{
|
|
|
|
+ public partial class PDFImageEditControl : UserControl
|
|
|
|
+ {
|
|
|
|
+ public CPDFViewer PDFView { get; private set; }
|
|
|
|
+ public PDFEditEvent EditEvent { get; set; }
|
|
|
|
+
|
|
|
|
+ public PDFImageEditControl()
|
|
|
|
+ {
|
|
|
|
+ InitializeComponent();
|
|
|
|
+ Loaded += PDFImageEditControl_Loaded;
|
|
|
|
+ Unloaded += PDFImageEditControl_Unloaded;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void PDFImageEditControl_Unloaded(object sender, RoutedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ RotateUI.RotationChanged -= RotateUI_RotationChanged;
|
|
|
|
+ FlipUI.FlipChanged -= FlipUI_FlipChanged;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void InitWithPDFViewer(CPDFViewer newPDFView)
|
|
|
|
+ {
|
|
|
|
+ PDFView = newPDFView;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void SetPDFImageEditData(PDFEditEvent newEvent)
|
|
|
|
+ {
|
|
|
|
+ EditEvent = null;
|
|
|
|
+ if (newEvent != null && newEvent.EditType == CPDFEditType.EditImage)
|
|
|
|
+ {
|
|
|
|
+ SetImageTransparency(newEvent.Transparency);
|
|
|
|
+ }
|
|
|
|
+ EditEvent = newEvent;
|
|
|
|
+ SetImageThumb();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void PDFImageEditControl_Loaded(object sender, RoutedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ RotateUI.RotationChanged += RotateUI_RotationChanged;
|
|
|
|
+ FlipUI.FlipChanged += FlipUI_FlipChanged;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void FlipUI_FlipChanged(object sender, bool e)
|
|
|
|
+ {
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ if(e)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.VerticalMirror = true;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ EditEvent.HorizontalMirror = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ SetImageThumb();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void RotateUI_RotationChanged(object sender, double e)
|
|
|
|
+ {
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.Rotate = (int)e;
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ SetImageThumb();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void Slider_DragStarted(object sender, DragStartedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ Slider slider = sender as Slider;
|
|
|
|
+ if (slider != null)
|
|
|
|
+ {
|
|
|
|
+ slider.Tag = "false";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void SliderOpacity_DragCompleted(object sender, DragCompletedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ Slider slider = sender as Slider;
|
|
|
|
+ if (slider != null)
|
|
|
|
+ {
|
|
|
|
+ slider.Tag = "true";
|
|
|
|
+ }
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ SetImageThumb();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void SliderOpacity_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
|
|
|
+ {
|
|
|
|
+ Slider slider = sender as Slider;
|
|
|
|
+ if(OpacityTextBox != null)
|
|
|
|
+ {
|
|
|
|
+ OpacityTextBox.Text = string.Format("{0}%", (int)(ImasgeOpacitySlider.Value * 100));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (slider != null && slider.Tag != null && slider.Tag.ToString() == "false")
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.Transparency = (int)(ImasgeOpacitySlider.Value * 255);
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ SetImageThumb();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void ImageReplaceBtn_Click(object sender, RoutedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ OpenFileDialog openFileDialog = new OpenFileDialog();
|
|
|
|
+ openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
|
|
|
|
+ if (openFileDialog.ShowDialog() == true)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.ReplaceImagePath = openFileDialog.FileName;
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ EditEvent = null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void ImageExportBtn_Click(object sender, RoutedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ if (PDFView != null)
|
|
|
|
+ {
|
|
|
|
+ Dictionary<int, List<Bitmap>> imageDict = PDFView.GetSelectedImages();
|
|
|
|
+ if (imageDict != null && imageDict.Count > 0)
|
|
|
|
+ {
|
|
|
|
+ System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
|
|
|
|
+ if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
|
|
+ {
|
|
|
|
+ string choosePath = folderBrowser.SelectedPath;
|
|
|
|
+ string openPath = choosePath;
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ foreach (int pageIndex in imageDict.Keys)
|
|
|
|
+ {
|
|
|
|
+ List<Bitmap> imageList = imageDict[pageIndex];
|
|
|
|
+ foreach (Bitmap image in imageList)
|
|
|
|
+ {
|
|
|
|
+ string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
|
|
|
|
+ image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
|
|
|
+ openPath = savePath;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ Process.Start("explorer", "/select,\"" + openPath + "\"");
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void ImageClipBtn_Click(object sender, RoutedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ if (EditEvent != null)
|
|
|
|
+ {
|
|
|
|
+ EditEvent.ClipImage = true;
|
|
|
|
+ EditEvent.UpdatePDFEditByEventArgs();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void OpacityComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ ComboBoxItem selectItem = OpacityComboBox.SelectedItem as ComboBoxItem;
|
|
|
|
+ if (selectItem != null && selectItem.Content != null)
|
|
|
|
+ {
|
|
|
|
+ if (double.TryParse(selectItem.Content.ToString().TrimEnd('%'), out double newOpacity))
|
|
|
|
+ {
|
|
|
|
+ OpacityTextBox.Text = selectItem.Content.ToString();
|
|
|
|
+ ImasgeOpacitySlider.Value = newOpacity / 100.0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void SetImageThumb()
|
|
|
|
+ {
|
|
|
|
+ if (PDFView != null && EditEvent!=null)
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ Dictionary<int, List<Bitmap>> imageDict = PDFView.GetSelectedImages();
|
|
|
|
+ foreach (int pageIndex in imageDict.Keys)
|
|
|
|
+ {
|
|
|
|
+ List<Bitmap> imageList = imageDict[pageIndex];
|
|
|
|
+ if (imageList.Count > 0)
|
|
|
|
+ {
|
|
|
|
+ Bitmap bitmapImage = imageList[0];
|
|
|
|
+ MemoryStream memoryStream = new MemoryStream();
|
|
|
|
+
|
|
|
|
+ bitmapImage.Save(memoryStream, bitmapImage.RawFormat);
|
|
|
|
+ BitmapImage imageShow = new BitmapImage();
|
|
|
|
+ imageShow.BeginInit();
|
|
|
|
+ imageShow.StreamSource = memoryStream;
|
|
|
|
+ imageShow.EndInit();
|
|
|
|
+ ImageThumbUI.Source = imageShow;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void SetImageTransparency(double transparency)
|
|
|
|
+ {
|
|
|
|
+ ImasgeOpacitySlider.Value = transparency / 255D;
|
|
|
|
+ OpacityTextBox.Text = string.Format("{0}%", (int)(Math.Ceiling(ImasgeOpacitySlider.Value * 100)));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|