2010-07-27 102 views
3

我正在使用DSOFile从某些Crystal Reports报告文件获取摘要属性。 SummaryProperties.Thumbnail返回一个对象,我需要将该对象转换为图像,以便我可以将其显示为我的窗体上的预览。我试图将其转换为System.Drawing.Image但我收到一个错误“ImageConverter无法从System .__ ComObject转换。”如何将System__ComObject转换为图像?

回答

3

这可能是一个COM接口的图像,IPicture或IPictureDisp,可能。您可以使用AxHost.GetPictureFromIPicture或GetPictureFromIPictureDisp静态方法进行转换。

+0

它采取了一些更为Google找到了我不得不实施AxHost使用GetPictureFromIPicture方法,但我得到了它,谢谢。 – jac 2010-07-27 18:01:30

0

我最后写一个小包装类,什么工作对我来说:

stdole.IPictureDisp iPictureDisp = row.Parent.Thumbnail; 
pictureBox1.Image = IconTools.GetImage(iPictureDisp); 

您需要使用AxHost,如由Hans提及。虽然实施起来有点棘手。请注意,您需要使用AxHost.GetPictureFromIPicture而不是GetPictureFromIPictureDisp

关于AxHost.GetPictureFromIPictureDisp:

这种方法不能正常工作。您可以使用 GetPictureFromIPicture方法但是到IPictureDisp对象转换成图像,因为IPictureDisp OLE 接口是IPICTURE接口的子集。

这里的包装:

public class IconTools 
{ 
    private class IconToolsAxHost : System.Windows.Forms.AxHost 
    { 
     private IconToolsAxHost() : base(string.Empty) { } 

     public static stdole.IPictureDisp GetIPictureDispFromImage(System.Drawing.Image image) 
     { 
      return (stdole.IPictureDisp)GetIPictureDispFromPicture(image); 
     } 

     public static System.Drawing.Image GetImageFromIPicture(object iPicture) 
     { 
      return GetPictureFromIPicture(iPicture); 
     } 
    } 

    public static stdole.IPictureDisp GetIPictureDisp(System.Drawing.Image image) 
    { 
     return IconToolsAxHost.GetIPictureDispFromImage(image); 
    } 

    public static System.Drawing.Image GetImage(stdole.IPicture iPicture) 
    { 
     return IconToolsAxHost.GetImageFromIPicture(iPicture); 
    } 

    public static System.Drawing.Image GetImage(stdole.IPictureDisp iPictureDisp) 
    { 
     return IconToolsAxHost.GetImageFromIPicture(iPictureDisp); 
    } 
} 
+0

这与我最后的结果非常相似。我得到缩略图对象并将其传递给我的IPictureDispHost类。该类实现了一个静态方法,Image GetPictureFromIPicture(object picture)。 – jac 2012-11-29 15:44:48