如何在运行时添加PNG和JPG

时间:2012-02-15 18:33:00

标签: c# wpf silverlight

我正在使用C#和WPF。我想在runtıme上添加一个PNG和JPG到一个图像源,但我得到一个例外,说:

Can not implicitly add convert type string to Sytem.Windows.Media.imageSource

using System.IO;                      //for : input - output
using Microsoft.Win32;                //For : OpenFileDialog / SaveFileDialog
using System.Windows.Media.Imaging;   //For : BitmapImage etc etc


<Image x:Name="img" Margin="9,13.5,6,0.5" Source="Laugh.ico"> 


private void ac(object sender, RoutedEventArgs args)
{       
    OpenFileDialog dlg = new OpenFileDialog();
    // Configure open file dialog box
    dlg.FileName = "Document"; // Default file name
    dlg.DefaultExt = ".PNG"; // Default file extension
    dlg.Filter = " (.PNG)|*.PNG"; // Filter files by extension

    // Show open file dialog box
    Nullable<bool> result = dlg.ShowDialog();

    // Process open file dialog box results
    if (result == true)
    {
        // Open document
        string filename = dlg.FileName;
        img.Source=filename;
    }
}

3 个答案:

答案 0 :(得分:3)

很抱歉,但您可能已经注意到,该代码甚至无法编译。您无法将图像源设置为文件名

img.Source = filename

查看reference

试试这个:

 img.Source =  new BitmapImage(new Uri(filename));

答案 1 :(得分:0)

我认为关键是:

img.Source=filename

应该是这样的:

BitmapImage bi= new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(filename, UriKind.Relative);
bi.EndInit();
img.Source = bi;

因为您必须从磁盘中实际读取图像文件。

答案 2 :(得分:0)

不确定这是否适用于程序之外的图像,但您可以尝试:

Uri uri = new Uri(dlg.File.FullName, UriKind.RelativeOrAbsolute);
ImageSource imgSource = new BitmapImage(uri);
img.Source = imgSource;