我试图在代码中设置WPF图像的源代码。图像作为资源嵌入到项目中。通过查看示例,我提出了下面的代码。由于某种原因,它不工作-图像不显示。

通过调试,我可以看到流包含图像数据。怎么了?

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;

图标的定义如下:<Image x:Name="_icon" Width="16" Height="16" />


当前回答

你只是漏了一点。

要从任何程序集获取嵌入式资源,你必须像我在这里提到的那样,用你的文件名提到程序集名称:

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream(asm.GetName().Name + "." + "Desert.jpg");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = iconStream;
bitmap.EndInit();
image1.Source = bitmap;

其他回答

如果你想把它定位在可执行文件旁边(相对于可执行文件)

img.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + @"\Images\image.jpg", UriKind.Absolute));

你有没有试过:

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = iconStream;
bitmap.EndInit();
_icon.Source = bitmap;
var uriSource = new Uri(@"/WpfApplication1;component/Images/Untitled.png", UriKind.Relative);
foo.Source = new BitmapImage(uriSource);

这将在名为“WpfApplication1”的程序集中加载名为“Untitled.png”的图像到名为“Images”的文件夹中,其“Build Action”设置为“Resource”。

我是WPF的新手,但不熟悉。net。

我花了五个小时尝试在。net 3.5 (Visual Studio 2010)中添加一个PNG文件到“WPF自定义控件库项目”,并将其设置为图像继承控件的背景。

与uri相关的任何东西都不起作用。我无法想象为什么没有方法从资源文件中获取URI,通过智能感知,可能是:

Properties.Resources.ResourceManager.GetURI("my_image");

我已经尝试了很多uri和ResourceManager,以及Assembly的GetManifest方法,但都有异常或NULL值。

在这里我罐的代码,为我工作:

// Convert the image in resources to a Stream
Stream ms = new MemoryStream()
Properties.Resources.MyImage.Save(ms, ImageFormat.Png);

// Create a BitmapImage with the stream.
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = ms;
bitmap.EndInit();

// Set as source
Source = bitmap;

如何从嵌入的资源图标和图像(校正版本的Arcturus)加载图像:

假设您想添加一个带有图像的按钮。你该怎么办?

Add to project folder icons and put image ClickMe.png here In properties of 'ClickMe.png', set 'BuildAction' to 'Resource' Suppose your compiled assembly name is 'Company.ProductAssembly.dll'. Now it's time to load our image in XAML <Button Width="200" Height="70"> <Button.Content> <StackPanel> <Image Width="20" Height="20"> <Image.Source> <BitmapImage UriSource="/Company.ProductAssembly;component/Icons/ClickMe.png"></BitmapImage> </Image.Source> </Image> <TextBlock HorizontalAlignment="Center">Click me!</TextBlock> </StackPanel> </Button.Content> </Button>

完成了。