从Excel OLE对象C#获取图像(元文件)

时间:2012-09-09 14:17:16

标签: c# excel clipboard ole metafile

我正在使用Add in To Excel对OLE对象执行某些操作。它需要从工作表中以编程方式嵌入OLE对象中的一些数据(从数学类型转换为TeX语言)。到目前为止,我已经处理了大多数问题,例如将其添加到Excel工作表,从Math Type OLE对象获取等式并设置等式。但最后还是要做。

我需要使用由数学类型OLE对象设置的等式的图像来提取图元文件。我想提取图像并将其保存为内存位图,然后将其显示在某种控件中。问题是 - 我有从OLE对象获取元文件的代码:

MTSDKDN.MathTypeSDK.IOleObject oleObject = null;
        oleDataObject = dataObject as IDataObject;

        oleObject = dataObject as MTSDKDN.MathTypeSDK.IOleObject;

        ConnectFORMATETC formatEtc = new ConnectFORMATETC();
        ConnectSTGMEDIUM stgMedium = new ConnectSTGMEDIUM();
        DataFormats.Format dataFormat;

        obj.Verb((Excel.XlOLEVerb)3);
        dataObject = obj.Object;

         formatEtc.cfFormat =(Int16)DataFormats.GetFormat(DataFormats.MetafilePict ).Id;

        formatEtc.dwAspect =  System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT;

        formatEtc.lindex = -1;
        formatEtc.ptd = (IntPtr)0;
        formatEtc.tymed = TYMED.TYMED_MFPICT;

        stgMedium.unionmember=(IntPtr)0;
        stgMedium.tymed=TYMED.TYMED_NULL;
        stgMedium.pUnkForRelease=0;

        oleDataObject.GetData(ref formatEtc,out stgMedium);
        //from this point no idea what to do
        IntPtr ptr;
        ptr = stgMedium.unionmember;
        HandleRef handleRef = new HandleRef(null, ptr);
        IntPtr ptrToHandle = GlobalLock(handleRef);
        int Length = GlobalSize(handleRef);

我不知道我是否做正确的事情来获取元文件,并且最重要的是(假设这样就可以获得元文件):如何管理元文件以将图像数据保存为位图添加 - 的记忆。

我真的很满意你的答案。

0 个答案:

没有答案