Forráskód Böngészése

compdfkit(win) - Viewer 图片菜单补充

weixiangjie 1 éve
szülő
commit
8cf916bbfc

+ 72 - 4
Demo/Examples/Compdfkit_Tools/PDFView/RegularViewerControl.xaml.cs

@@ -1,15 +1,23 @@
 using System;
 using System.ComponentModel;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
 using System.Runtime.CompilerServices;
 using System.Windows;
-using System.Windows.Controls;
 using System.Windows.Input;
+using System.Windows.Media.Imaging;
 using Compdfkit_Tools.Annotation.PDFAnnotationPanel.PDFAnnotationUI;
 using Compdfkit_Tools.Common;
 using Compdfkit_Tools.Helper;
 using Compdfkit_Tools.PDFControl;
+using ComPDFKit.PDFPage;
+using ComPDFKit.PDFPage.Edit;
 using ComPDFKitViewer;
 using ComPDFKit.Tool;
+using ContextMenu = System.Windows.Controls.ContextMenu;
+using MenuItem = System.Windows.Controls.MenuItem;
+using UserControl = System.Windows.Controls.UserControl;
 
 namespace Compdfkit_Tools.PDFView
 {
@@ -122,6 +130,9 @@ namespace Compdfkit_Tools.PDFView
                 case MouseHitTestType.Text:
                     CreateSelectTextContextMenu(sender, ref ContextMenu);
                     break;
+                case MouseHitTestType.ImageSelect:
+                    CreateSelectImageContextMenu(sender, ref ContextMenu);
+                    break;
                 default:
                     PdfViewControl.CreateViewerMenu(sender, ref ContextMenu);
                     break;
@@ -129,6 +140,23 @@ namespace Compdfkit_Tools.PDFView
             PdfViewControl.SetRightMenu(ContextMenu);
         }
 
+        private void CreateSelectImageContextMenu(object sender, ref ContextMenu menu)
+        {
+            if (menu == null)
+            {
+                menu = new ContextMenu();
+            }
+            MenuItem copyImage = new MenuItem();
+            copyImage.Header = "Copy Image";
+            copyImage.Click += CopyImage_Click;
+            menu.Items.Add(copyImage);
+
+            MenuItem extractImage = new MenuItem();
+            extractImage.Header = "Extract Image";
+            extractImage.Click += ExtractImage_Click;
+            menu.Items.Add(extractImage);
+        }
+
         private void CreateSelectTextContextMenu(object sender, ref ContextMenu menu)
         {
             menu.Items.Add(new MenuItem() { Header = LanguageHelper.CommonManager.GetString("Menu_Copy"), Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
@@ -240,14 +268,54 @@ namespace Compdfkit_Tools.PDFView
 
         #region Context Menu
 
-        private void ExtraImage_Click(object sender, RoutedEventArgs e)
+        private void ExtractImage_Click(object sender, RoutedEventArgs e)
         {
-            //CommandHelper.ExtraImage_Click(PdfViewControl.PDFView.GetSelectedImages());
+            System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();
+            if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                var image = PdfViewControl.FocusPDFViewTool.GetSelectImage();
+                if(image == null)
+                {
+                    return;
+                }
+                CPDFPage page = PdfViewControl.PDFToolManager.GetDocument().PageAtIndex(image.PageIndex);
+                string savePath = Path.Combine(folderDialog.SelectedPath, Guid.NewGuid() + ".jpg");
+                string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".jpg");
+                page.GetImgSelection().GetImgBitmap(image.ImageIndex, tempPath);
+
+                Bitmap bitmap = new Bitmap(tempPath);
+                bitmap.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
+                Process.Start("explorer", "/select,\"" + savePath + "\"");
+            }
         }
 
         private void CopyImage_Click(object sender, RoutedEventArgs e)
         {
-            //CommandHelper.CopyImage_Click(PdfViewControl.PDFView.GetSelectedImages());
+            var image = PdfViewControl.FocusPDFViewTool.GetSelectImage();
+            if(image == null)
+            {
+                return;
+            }
+            CPDFPage page = PdfViewControl.PDFToolManager.GetDocument().PageAtIndex(image.PageIndex);
+            string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".jpg");
+            page.GetImgSelection().GetImgBitmap(image.ImageIndex, tempPath);
+
+            Bitmap bitmap = new Bitmap(tempPath);
+            BitmapImage imageData;
+            using (MemoryStream ms = new MemoryStream())
+            {
+                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                imageData = new BitmapImage();
+                imageData.BeginInit();
+                imageData.StreamSource = ms;
+                
+                imageData.CacheOption = BitmapCacheOption.OnLoad;
+                imageData.EndInit();
+                imageData.Freeze();
+                Clipboard.SetImage(imageData);
+                bitmap.Dispose();
+                File.Delete(tempPath);
+            }
         }
 
         //private void PDFView_AnnotCommandHandler(object sender, AnnotCommandArgs e)