Masoud AMR
Masoud AMR

Reputation: 134

set image source in wpf

I try to follow code to set image source in WPF, when i want to delete old and set new image, rightly but image not refresh and show old picture. why?

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

string subpath = "UserProfile";
Directory.CreateDirectory(subpath);


// Set filter for file extension and default file extension 
dlg.DefaultExt = ".jpg";
dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
// Display OpenFileDialog by calling ShowDialog method 
if (dlg.ShowDialog() == true)
{
       string fileName = "pic" + txtEmployeeID.Text + ".jpg";
       string newPath = "\\" + subpath + "\\" + fileName;

       if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
       {
            imgUser.Source = null;
            File.Delete(Directory.GetCurrentDirectory() + newPath);
       }

  File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

       ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
       imgUser.Source = imageSrc;

}



 public static ImageSource BitmapFromUri(Uri source)
 {
      var bitmap = new BitmapImage();
      bitmap.BeginInit();
      bitmap.UriSource = source;
      bitmap.CacheOption = BitmapCacheOption.OnLoad;
      bitmap.EndInit();
      return bitmap;
 }

Upvotes: 1

Views: 2476

Answers (1)

Eldho
Eldho

Reputation: 8291

Try this, Works for me.

        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(source.AbsoluteUri);
        bitmap.EndInit();
        return bitmap;

Full Source Code

  public MainWindow()
    {
        InitializeComponent();

        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

        string subpath = "UserProfile";
        Directory.CreateDirectory(subpath);


        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".jpg";
        dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
        // Display OpenFileDialog by calling ShowDialog method 
        if (dlg.ShowDialog() == true)
        {
            string fileName = "pic" + txtEmployeeID.Text + ".jpg";
            string newPath = "\\" + subpath + "\\" + fileName;

            if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
            {
                imgUser.Source = null;
                File.Delete(Directory.GetCurrentDirectory() + newPath);
            }

            File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

            ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
            imgUser.Source = imageSrc;

        }





    }

    public static ImageSource BitmapFromUri(Uri source)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(source.AbsoluteUri);
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.EndInit();
        return bitmap;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

        string subpath = "UserProfile";
        Directory.CreateDirectory(subpath);


        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".jpg";
        dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
        // Display OpenFileDialog by calling ShowDialog method 
        if (dlg.ShowDialog() == true)
        {
            string fileName = "pic" + DateTime.Now.Millisecond + ".jpg";
            string newPath = "\\" + subpath + "\\" + fileName;

            if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
            {
                imgUser.Source = null;
                // File.Delete(Directory.GetCurrentDirectory() + newPath);
            }

            File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

            ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
            imgUser.Source = imageSrc;

        }
    }

Xaml

 <Image x:Name="imgUser" Margin="88,70,49,72"> </Image>

    <Button Margin="0,277,425,0" Click="Button_Click"> </Button>

Upvotes: 1

Related Questions