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

本文关键字:图像 检索 dll 控件 wpf | 更新日期: 2023-09-27 17:58:31

 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传递流及其清单位置。。。

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

您可以使用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
    }
}

创建一个ResourceManager,在ctor中为他提供"基本名称"-资源文件的名称(一个程序集可以包含许多资源集(,以及查找资源的程序集。

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

我找到了一个简单的方法,结合使用其他答案。

var dllAssembly = Assembly.LoadFile(dllPath);
var resMan = new ResourceManager(namespace, dllAssembly);
var image = resMan.GetObject(imageName) as Image;

dllPath=从获取图像的dll的完整路径

namespace=这是dll中资源的位置,例如";Apps.Properties.Resources";

imageName=图像资源的名称

注意:确保所有图像在其属性中都设置为"资源">