I want to change the background of a button manually in my WPF app.
I have an image imported into my resources and I want to do:
MyButton.Background = MyProject.Properties.Resources.myImage;
But I get the error:
cannot implicitly convert system.drawing.bitmap to media.brush
How can I do this??
You should read about brushes first here.
And then use ImageBrush, something like this:
MyButton.Background = new ImageBrush(...);
(or, maybe, put the brush into resources...)
UPDATE
You can find how to create imageSource from bitmap easilly. for example, here. Like:
var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
MyButton.Background = new ImageBrush(bitmapSource);
In a WPF application, you do usually not add image resources as you did in WinForms.
Instead you add the image file directly to your Visual Studio project, just like any other file. If there are multiple images, it may make sense to put them in a subfolder of the project (e.g. called "images"). The Build Action of that file has to be set to Resource (which is the default for image files).
Now you can create a BitmapImage from a Pack URI to that file.
Finally you create an ImageBrush from the BitmapImage to set the Background property.
var uri = new Uri("pack://application:,,,/images/myImage.jpg");
var image = new BitmapImage(uri);
MyButton.Background = new ImageBrush(image);
Related
This question already has answers here:
WPF - Import image as resource
(3 answers)
How do I change an image source dynamically from code-behind in WPF with an image in Properties.Resources?
(1 answer)
Closed 3 years ago.
I would like to use path to image from program resources instead of using full path from windows.
tlo.Fill = new ImageBrush
{
ImageSource = new BitmapImage(new Uri(#"D:\Willie\Documents\ColorTester\ColorTester\Resources\1.jpg", UriKind.Absolute))
};
I want to use path like this:
ImageSource = new BitmapImage(new Uri("ColorTester.Resources.1.jpg"));
Can anyone help me with this, because when I try to use it, visual studio throws and exception "System.UriFormatException"?
I don't know the correct path to your image, if you have a folder named Resources under your project and images are in there, you can address them like below:
ImageSource = new BitmapImage(new Uri("/Resources/1.jpg", UriKind.Relative));
If the image is inside a UserControl and you want to use it in another project, then address it like:
ImageSource = new BitmapImage(new Uri("pack://application:,,,/{YourAssemblyWhereResourceIsLocated};component/Resources/1.jpg"));
Useful links:
WPF image resources
Adding resource dictionaries to a usercontrol library in wpf
https://learn.microsoft.com/en-us/dotnet/framework/wpf/app-development/pack-uris-in-wpf
When I want to change an image's source, the image simply disappears.
The code I'm using:
tactImg.Source=tactImgList[i];
tactImgList = new BitmapImage[32];
tactImgList[0] = new BitmapImage(new Uri("ms-appx:///Assets/Images/1.png", UriKind.Absolute));
What am I doing wrong? Is there something I need to add to an xaml file or I'm making the global array wrong?
You don't need to use ms-appx in Windows Phone 8 projects , it's for WinRT projects.
Make sure your image's Build type is Content , remove the ms-appx part and since your image has relative uri , set your UriKind to Relative.
First, fill in the data, and then change the source.
tactImgList = new BitmapImage[32];
tactImgList[0] = new BitmapImage(new Uri("ms-appx:///Assets/Images/1.png", UriKind.Absolute));
tactImg.Source=tactImgList[i];
Or use ObservableCollection for storing images.
There are numerous questions and answers regarding setting image source in code behind, such as this Setting WPF image source in code.
I have followed all these steps and yet not able to set an image. I code in WPF C# in VS2010. I have all my image files under a folder named "Images" and all the image files are set to Copy always. And Build Action is set to Resource, as instructed from documentation.
My code is as follow. I set a dog.png in XAML and change it to cat.png in code behind.
// my XAML
<Image x:Name="imgAnimal" Source="Images/dog.png" />
// my C#
BitmapImage img = new BitmapImage();
img.UriSource = new Uri(#"pack://application:,,,/FooApplication;component/Images/cat.png");
imgAnimal.Source = img;
Then I get a empty, blank image of emptiness. I do not understand why .NET makes setting an image so complicated..w
[EDIT]
So the following works
imgAnimal.Source = new BitmapImage(new Uri(#"pack://application:,,,/FooApplication;component/Images/cat.png"));
It works, but I do not see any difference between the two code. Why the earlier doesn't work and the latter does? To me they are the same..
Try following:
imgAnimal.Source = new BitmapImage(new Uri("/FooApplication;component/Images/cat.png", UriKind.Relative));
Default UriKind is Absolute, you should rather use Relative one.
[EDIT]
Use BeginInit and EndInit:
BitmapImage img = new BitmapImage();
img.BeginInit();
img.UriSource = new Uri(#"pack://application:,,,/FooApplication;component/Images/cat.png");
img.EndInit();
imgAnimal.Source = img;
I want to open an Image from the IsolatedStorage?
The image was downloaded before and correctly written (I checked that with the Isolated Storage Explorer).
When I try to open the Image with BitmapImage(uriInIsolatedStorage) and set that as source for a Silverlight Image Control it crashs when I listen to the image failed event.
The exception said "AG_E_NETWORK_ERROR"
Does anyone has an idea?
Uri imageSource = new Uri("/cover.jpg", UriKind.Relative);
BitmapImage bi = new BitmapImage(imageSource);
bi.ImageFailed += new EventHandler<ExceptionRoutedEventArgs>(MainPage_ImageFailed);
bi.ImageOpened +=new EventHandler<RoutedEventArgs>(bi_ImageOpened);
imageCtrl.Source = bi;
Unfortunately you cannot load an image directly from isolated storage via URI. You have to open the file and do some more steps as described here or (a bit easier) here.
It boils down to:
creating an IsolatedStorageFileStream for your image
creating a BitmapImage from file data
setting BitmapImage as Image source
There is also an isostore: URI scheme but it doesn't work.
I'm using the Chart control from the DataVisualization library, and want to use image annotations on my chart. The problem is that the ImageAnnotation.Image property is a path to the image, and there doesn't appear to be an exposed Bitmap property that I could use to load the image from the Resources object like I can for any other .net control.
Is there anyway I'm overlooking to load this using embedded resources instead of reading a separate file off the disk?
I found the answer. You need to add the image to the parent Chart's NamedImage collection.
private string imageName = "myImage";
//in constructor
NamedImage namedImage = new NamedImage(imageName, Properties.Resources.myImage);
mChart.Images.Add(namedImage);
//where creating the annotation
ImageAnnotation imageAnnotation = new ImageAnnotation();
imageAnnotation.Image = imageName;