Ci sono diversi modi per caricare una immagine.... eccone alcuni:
1) includere l'immagine nel progetto, settare nelle proprietà dell'immagine "Build Action" su "Resource" e "Do not copy":
<Image x:Name="imgPic" Source="images/Babba.jpg" />
In questo caso l'immagine sarà embeddata nel nostro assembly.
2) stesso esempio ma fatto da codice:
private void OnLoad(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImage = new BitmapImage();
Uri uri = new Uri("images/Babba.jpg", UriKind.Relative);
bitmapImage.UriSource = uri;
imgPic.Source = bitmapImage;
}
3) settare "Build Action" su "Content" e "Do not copy", in questo modo l'immagine sarà embeddata nello XAP:
private void OnLoad(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImage = new BitmapImage();
Uri uri = new Uri("/images/Babba.jpg", UriKind.Relative);
bitmapImage.UriSource = uri;
imgPic.Source = bitmapImage;
}
4) settare "Build Action" su "None" e "Copy always" (o anche "Copy if newer"); in questo caso l'immagine non sarà embeddata ma sarà esterna. Nell'esempio sotto basta copiare l'immagine allo stesso livello dello XAP (nella ClientBin):
private void OnLoad(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImage = new BitmapImage();
Uri uri = new Uri("/Babba.jpg", UriKind.Relative);
bitmapImage.UriSource = uri;
imgPic.Source = bitmapImage;
}
5) caricare una immagine dal web specificando il tipo di Uri Assoluto:
private void OnLoad(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImage = new BitmapImage();
Uri uri = new Uri("http://www.ongari.it/Images/BabbaOnLine.jpg", UriKind.Absolute);
bitmapImage.UriSource = uri;
imgPic.Source = bitmapImage;
}
6) caricamento tramite WebClient in modo asincrono per file di grosse dimensioni; nell'esempio sotto riportato, posizionare l'immagine nella ClientBin dove si trova lo XAP:
private void OnLoad(object sender, RoutedEventArgs e)
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri("Babba.jpg", UriKind.Relative));
}
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
StreamResourceInfo streamResourceInfo = new StreamResourceInfo(e.Result as Stream, null);
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(streamResourceInfo.Stream);
imgPic.Source = bitmapImage;
}
}
7) caricamento da un file ZIP scaricato tramite WebClient; nell'esempio sotto riportato, posizionare lo ZIP nella ClientBin dove si trova lo XAP:
private void OnLoad(object sender, RoutedEventArgs e)
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri("MioZippone.zip", UriKind.Relative), "Babba.jpg");
}
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
StreamResourceInfo stream1 = new StreamResourceInfo(e.Result as Stream, null);
String uri = e.UserState as String;
StreamResourceInfo stream2 = Application.GetResourceStream(stream1, new Uri(uri, UriKind.Relative));
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(stream2.Stream);
imgPic.Source = bitmapImage;
}
}
8) caricamento da percorso locale:
private void OnLoad(object sender, RoutedEventArgs e)
{
OpenFileDialog d = new OpenFileDialog();
d.Filter = "Immagini (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|Tutti i files (*.*)|*.*";
if (d.ShowDialog() == true)
{
Stream stream = d.SelectedFile.OpenRead();
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(stream);
imgPic.Source = bitmapImage;
stream.Close();
}
}