我正在使用DSOFile从某些Crystal Reports报表文件中获取摘要属性。 SummaryProperties.Thumbnail 返回一个对象,我需要将对象转换为图像,以便我可以在表单上将其显示为预览。我已经尝试将其转换为 System.Drawing.Image ,但我收到错误“ImageConverter无法从System .__ ComObject转换。”
答案 0 :(得分:3)
它可能是图像,IPicture或IPictureDisp的COM接口。您可以使用AxHost.GetPictureFromIPicture或GetPictureFromIPictureDisp静态方法进行转换。
答案 1 :(得分:0)
我最后写了一个小包装类,它对我有用:
stdole.IPictureDisp iPictureDisp = row.Parent.Thumbnail;
pictureBox1.Image = IconTools.GetImage(iPictureDisp);
你会想要使用汉斯提到的AxHost。实施起来比我最初想的要复杂一点。请注意,您需要使用AxHost.GetPictureFromIPicture
而不是GetPictureFromIPictureDisp
。
关于AxHost.GetPictureFromIPictureDisp:
此方法无法正常工作。你可以使用 GetPictureFromIPicture 方法将 IPictureDisp 对象转换为图片,但是,因为 IPictureDisp OLE interface是 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);
}
}