The first thing is in WPF you can't set the Source of an Image Control to that of a Bitmap, you need to use the BitmapImage
From StackOverflow (http://stackoverflow.com/questions/919041/c-wpf-image-handling-problem):
This gives you a build error:
Image I = new Image(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.bmp");
Imagecontrol.Image.Source = I
Imagecontrol.Image.Source = I
But this works:
Image I = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.bmp", UriKind.Absolute);
bi.EndInit();
Imagecontrol.Image.Source = bi;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.bmp", UriKind.Absolute);
bi.EndInit();
Imagecontrol.Image.Source = bi;
The problem with the above code is that whenever I used it and subsequently tried to delete the file Penguins.jpg or move it, I got an exception. It seems like we were holding a lock on the file. So the fix was to do the following:
Imagecontrol.Image.Source = LoadImage(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.bmp");
private BitmapImage LoadImage(string myImageFile)
{
BitmapImage myRetVal = null;
{
BitmapImage myRetVal = null;
if (myImageFile != null)
{
BitmapImage image = new BitmapImage();
{
BitmapImage image = new BitmapImage();
using (FileStream stream = File.OpenRead(myImageFile))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
myRetVal = image;
}
}
return myRetVal;
}
}
No comments:
Post a Comment