Bind Xaml bitmap image

2019-07-09 01:43发布

问题:

I have bitmap image variable and i want to bind it to my xaml window.

System.Reflection.Assembly thisExe;
        thisExe = System.Reflection.Assembly.GetExecutingAssembly();
        string[] resources = thisExe.GetManifestResourceNames();
        var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("SplashDemo.Resources.Untitled-100000.png");
        Bitmap image = new Bitmap(stream);

And this is my xaml code

<Image Source="{Binding Source}" HorizontalAlignment="Left"  Height="210" Margin="35,10,0,0" VerticalAlignment="Top" Width="335">
    </Image>

can u assist me binding this bitmap variable to this xaml image by C# code?

回答1:

If you really want to set it from C# code and not from inside XAML, you should use this easy solution described further on the MSDN reference:

string path = "Resources/Untitled-100000.png";
BitmapImage bitmap = new BitmapImage(new Uri(path, UriKind.Relative));
image.Source = bitmap;

But first, you need to give your Image a name so you can reference it from c#:

<Image x:Name="image" ... />

No need to reference Windows Forms classes. If you insist on having the Image embedded into your Assembly, you need the following more lengthy code to load the image:

string path = "SplashDemo.Resources.Untitled-100000.png";
using (Stream fileStream = GetType().Assembly.GetManifestResourceStream(path))
{
    PngBitmapDecoder bitmapDecoder = new PngBitmapDecoder(fileStream,
        BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    ImageSource imageSource = bitmapDecoder.Frames[0];
    image.Source = imageSource;
}


回答2:

Here is some sample code:

// Winforms Image we want to get the WPF Image from...
System.Drawing.Image imgWinForms = System.Drawing.Image.FromFile("test.png");

// ImageSource ...
BitmapImage bi = new BitmapImage();
bi.BeginInit();
MemoryStream ms = new MemoryStream();

// Save to a memory stream...
imgWinForms.Save(ms, ImageFormat.Bmp);

// Rewind the stream...    
ms.Seek(0, SeekOrigin.Begin);

// Tell the WPF image to use this stream...
bi.StreamSource = ms;
bi.EndInit();

Click here to view reference



回答3:

If you are using WPF, right click your image in your project and set the Build Action to Resource. Assuming your image is called MyImage.jpg and is in a Resources folder in your project, you should be able to reference it directly in your xaml without using any C# code. Like this:

<Image Source="/Resources/MyImage.jpg" 
    HorizontalAlignment="Left"
    Height="210" 
    Margin="35,10,0,0"
    VerticalAlignment="Top"
    Width="335">
</Image>