现在正在开发一个VSTO Word插件,想要对选中的图片进行OCR识别。那么就需要把图片缓存到临时文件夹。从网上找了半天没找到解决方法,硬是用了两个AI(通义千问,文心一言)问了10次才拼凑出解决方案。
原理大概是这样的,先把选中的图片复制到剪切板上,然后保存剪切板的图像。
话不多说,上代码
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Tools.Ribbon;
using Word = Microsoft.Office.Interop.Word;
using System.Drawing;
using System.IO;
using System;
namespace SavePicFromWord
{
public partial class Ribbon1
{
private void StartSave()
{
Word.Application wordApp = Globals.ThisAddIn.Application;
// 检查是否选择了图片
if (wordApp.Selection.InlineShapes.Count > 0)
{
InlineShape selectedInlineShape = wordApp.Selection.InlineShapes[1];
if (selectedInlineShape.Type == WdInlineShapeType.wdInlineShapePicture)
{
selectedInlineShape.Range.CopyAsPicture ();
SavePic();
}
}
}
private void SavePic()
{
if (Clipboard.ContainsImage())
{
try
{
// 获取剪贴板中的图片
Image clipboardImage = Clipboard.GetImage();
// 定义要保存图片的路径
string savePath = Path.GetTempPath(); // 修改为你需要的路径,这里是操作系统缓存目录
string fileName = "ClipboardImage_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
// 保存图片到指定路径
string fullPath = Path.Combine(savePath, fileName);
clipboardImage.Save(fullPath, System.Drawing.Imaging.ImageFormat.Png);;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}