Преобразование изображений из текстового документа в растровый объект
В соответствии с требованиями проекта нам необходимо преобразовать изображения из текстового документа в растровый объект. Чтобы добиться этого, мы попытались преобразовать объект inlineshape из dll Microsoft.Office.Interop.Word в растровое изображение. Однако не удалось добиться успеха, получив объект буфера обмена как нулевой. Пожалуйста, найдите код, который мы попробовали, как показано ниже;
using System.Drawing;
using Microsoft.Office.Interop.Word;
namespace WordApp1
{
class Program
{
static void Main(string[] args)
{
Application wordApp = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
Documents documents = wordApp.Documents;
Document d = null;
foreach (Document document in documents)
{
if (document.ActiveWindow.Caption.Contains("{Word document name}"))
{
d = document;
}
}
foreach (InlineShape shape in d.InlineShapes)
{
shape.Range.Select();
d.ActiveWindow.Selection.Range.CopyAsPicture();
System.Windows.Forms.IDataObject dobj = System.Windows.Forms.Clipboard.GetDataObject(); //Getting clipboard object as null
if(dobj.GetDataPresent(typeof(System.Drawing.Bitmap)))
{
Bitmap bmp;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bmp = (Bitmap)dobj.GetData(typeof(System.Drawing.Bitmap));
}
}
}
}
}
Кто-нибудь работал над преобразованием изображений слов в растровое изображение? Было бы очень полезно, если бы вы помогли нам преобразовать изображения из текстового документа в растровые объекты.
3 ответа
Решено в этом сообщении: /questions/38583508/izvlech-izobrazhenie-iz-fajla-slova/38583512#38583512 Это проблема с STAThread:
Thread thread = new Thread([Method]);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
Попробуй это.
foreach (InlineShape shape in d.InlineShapes)
{
if (shape != null)
{
shape.Range.Select();
d.ActiveWindow.Selection.Copy();
Bitmap bitmap = new Bitmap(Clipboard.GetImage());
}
}
Там два буфера обмена.
Обычно мы будем использовать System.Windows.Forms.Clipboard
, но это отстой.
использование System.Windows.Clipboard
вместо этого просто добавьте PresentationCore в ваши ссылки.
(в моем случае C:\Program Files\ Справочные сборки \Microsoft\Framework.NETFramework\v4.0\Profile\Client\PresentationCore.dll)