代码之家  ›  专栏  ›  技术社区  ›  jac

如何将系统对象转换为图像?

  •  3
  • jac  · 技术社区  · 14 年前

    我正在使用dsofile从一些Crystal Reports报告文件中获取摘要属性。 摘要属性.缩略图 返回一个对象,我需要将该对象转换为图像,以便在窗体上显示为预览。我试着把它投射到 系统.绘图.图像 但我得到一个错误“ImageConverter不能从系统转换。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Hans Passant    14 年前

    它可能是图像、ipicture或ipicturedisp的COM接口。可以使用axhost.getPictureFromIPicture或getPictureFromIPictureDisp静态方法进行转换。

        2
  •  0
  •   johv Chris    11 年前

    最后我写了一个小包装类,这对我很有用:

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

    正如汉斯所提到的,您将要使用axhost。但实施起来比我最初想象的要复杂一些。请注意,您将要使用 AxHost.GetPictureFromIPicture 而不是 GetPictureFromIPictureDisp .

    关于 AxHost.GetPictureFromIPictureDisp:

    此方法无法正常工作。你可以使用 从图片获取图片 方法来转换 IPICTISDISP 但是,由于 IPICTISDISP 对象链接和嵌入 接口是 意指 接口。

    这是包装纸:

    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);
        }
    }