从BitmapImage文件创建一个FrameworkElement,然后销毁?

时间:2013-05-24 09:45:38

标签: wpf frameworkelement

我有一个WPF项目,我们使用一些WindowsForm控件(来自OWC的PivotTable,Office Web Component)。但是,由于数据透视表不能很好地支持打印,我们能想到的唯一方法是打印图像文件数据透视表导出(另一种方法是从导出的Excel文件打印,但我们想避免它,因为它不能保证Excel安装在机器上)。

我们已经有一个打印项目,可以很好地打印WPF ElementFramework。所以我想使用那段代码。现在我的问题是:如何从代码中生成FrameworkElement BitmapImage。由于这个FrameworkElement纯粹是用于打印,所以我想我必须从代​​码中创建它,可能会为它分配一个父项,而不是在屏幕上显示它,并且在打印后销毁FrameworkElement以便最终我可以删除临时BitmapImage文件。

所以这是我所不知道的。我甚至不知道这是否是一种正确的方法:为一些非UI相关工作创建一个UI元素?有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您应该将临时图像文件的字节加载到内存中,并从这些字节创建Image。 您的Image将不会直接使用临时文件,您可以在读取字节后立即将其删除,其余为GarbageCollector's作业。这是一个从字节创建BitmapImage的函数:

        public static BitmapImage GetImageFromByteArray(byte[] rawImageBytes)
        {
            BitmapImage imageSource = null;

            try
            {
                using (MemoryStream stream = new MemoryStream(rawImageBytes))
                {
                    stream.Seek(0, SeekOrigin.Begin);
                    BitmapImage bi = new BitmapImage();
                    bi.BeginInit();
                    bi.CacheOption = BitmapCacheOption.OnLoad;
                    bi.StreamSource = stream;
                    bi.EndInit();
                    imageSource = bi;
                }
            }
            catch (System.Exception)
            {
            }

            return imageSource;
        }

并像这样使用它: testImage.Source = GetImageFromByteArray(rawImageBytes);