如何从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传递流及其清单位置。。。
您可以使用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=图像资源的名称
注意:确保所有图像在其属性中都设置为"资源">