2010-07-27 37 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