Browse Source

compdfkit(win) - 注释图片菜单

weixiangjie 1 year ago
parent
commit
a538a8467f

+ 71 - 0
Demo/Examples/Compdfkit_Tools/Annotation/AnnotationControl/AnnotationControl.xaml.cs

@@ -20,6 +20,7 @@ using ComPDFKit.PDFAnnotation;
 using ComPDFKit.Tool;
 using ComPDFKit.Tool;
 using PasswordBoxPlus.Helper;
 using PasswordBoxPlus.Helper;
 using ComPDFKit.NativeMethod;
 using ComPDFKit.NativeMethod;
+using ComPDFKit.PDFPage;
 
 
 namespace Compdfkit_Tools.PDFControl
 namespace Compdfkit_Tools.PDFControl
 {
 {
@@ -225,6 +226,9 @@ namespace Compdfkit_Tools.PDFControl
                 case MouseHitTestType.Text:
                 case MouseHitTestType.Text:
                     CreateSelectTextContextMenu(sender, ref ContextMenu);
                     CreateSelectTextContextMenu(sender, ref ContextMenu);
                     break;
                     break;
+                case MouseHitTestType.ImageSelect:
+                    CreateSelectImageContextMenu(sender, ref ContextMenu);
+                    break;
                 default:
                 default:
                     ContextMenu.Items.Add(new MenuItem() { Header = LanguageHelper.CommonManager.GetString("Menu_Paste"), Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
                     ContextMenu.Items.Add(new MenuItem() { Header = LanguageHelper.CommonManager.GetString("Menu_Paste"), Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
                     PDFViewControl.CreateViewerMenu(sender, ref ContextMenu);
                     PDFViewControl.CreateViewerMenu(sender, ref ContextMenu);
@@ -260,6 +264,73 @@ namespace Compdfkit_Tools.PDFControl
                     break;
                     break;
             }
             }
         }
         }
+        
+        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 ExtractImage_Click(object sender, RoutedEventArgs e)
+        {
+            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)
+        {
+            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);
+            }
+        }
 
 
         public void UnloadEvent()
         public void UnloadEvent()
         {
         {