如何从dll中为wpf图像控件检索嵌入的图像?

时间:2013-02-11 02:26:03

标签: c# wpf dll

 public partial class MainWindow : Window
    {
        System.Reflection.AssemblyName aName;
        System.Reflection.Assembly asm;
        public MainWindow()
        {
            InitializeComponent();

            aName = System.Reflection.AssemblyName.GetAssemblyName(
            @"C:\Users\Adam\Documents\Visual Studio 2012\Projects\WPFResources\WPFResources\bin\Release\WPFResources.dll");

            asm = System.Reflection.Assembly.Load(aName);

            string[] manifest = asm.GetManifestResourceNames();
            image1 =
        }

这就是我如何让它发挥作用的地方。在Winforms中,我只是创建一个新的位图,并在位图的构造函数中传递来自DLL的流及其清单位置......

2 个答案:

答案 0 :(得分:1)

您可以使用BitmapImage.StreamSource,它允许您从System.IO.Stream创建图像。

看看这是否适合你

asm = System.Reflection.Assembly.Load(aName)
string[] manifest = asm.GetManifestResourceNames();

using (UnmanagedMemoryStream stream = (UnmanagedMemoryStream)asm.GetManifestResourceStream(manifest[0]))//The Index of the Image you want to use
{
    using (MemoryStream ms1 = new MemoryStream())
    {
        stream.CopyTo(ms1);
        BitmapImage bmi = new BitmapImage();
        bmi.BeginInit();
        bmi.StreamSource = new MemoryStream(ms1.ToArray());
        bmi.EndInit();
        image1.Source  = bmi; //The name of your Image Control
    }

}

答案 1 :(得分:0)

创建一个ResourceManager,在ctor中给他'基本名称' - 资源文件的名称(程序集可以包含许多资源集),以及程序集在哪里查找资源。

ResourceManager resMan= new ResourceManager("MainWindowResources",asm);
Stream imageStream= resMan.GetStream("Image1");