none
用FileOpenDialog打开图像文件后显示在Image控件时的问题。 RRS feed

  • 问题

  • 不知为什么,有时显示得很快,但切换到别的目录选择别的图像文件时有时要等几十秒才能显示出来。
    有的时候又完全没问题。
    大家帮我看看,选择图片后显示的代码有什么地方不对,有没有更正规的写法。
    thanks.

            private void openFileBtn_Click(object sender, RoutedEventArgs e)
            {
                byte[] bytes;

                FileStream fs;

                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter = "图像文件(*.jpg,*.bmp,*.png)|*.jpg;*.bmp;*.png";

                bool? dialogResult = dialog.ShowDialog();
                if (dialogResult == true)
                {
                    fs = (FileStream)dialog.OpenFile();
                    if (fs != null)
                    {
                        bytes = new byte[fs.Length];
                        fs.Position = 0;
                        fs.Read(bytes, 0, Convert.ToInt32(fs.Length));

                        BitmapImage bitmap = new BitmapImage();
                        MemoryStream ms = new MemoryStream(bytes);

                        bitmap.BeginInit();
                        bitmap.StreamSource = ms;
                        bitmap.EndInit();

                        myImage.Source = bitmap;
                    }
                }
            }

    2007年12月28日 7:17

答案

  •  

    程序块

    private void openFileBtn_Click(object sender, RoutedEventArgs e)
    {

       OpenFileDialog fd = new OpenFileDialog();
       fd.Filter = "Image files(*.jpg,*.gif,*.png)|*.jpg;*.gif;*.png|All files|*.*";

     

       bool result = fd.ShowDialog() ?? false;


       if (result)
       {
           BitmapImage bmp = new BitmapImage(new Uri(fd.FileName));
           myImage.Source = bmp;
       }

    }

     

    这段代码能满足需求吗?

     

    Hope to help

    2007年12月28日 14:37
    版主

全部回复

  •  

    程序块

    private void openFileBtn_Click(object sender, RoutedEventArgs e)
    {

       OpenFileDialog fd = new OpenFileDialog();
       fd.Filter = "Image files(*.jpg,*.gif,*.png)|*.jpg;*.gif;*.png|All files|*.*";

     

       bool result = fd.ShowDialog() ?? false;


       if (result)
       {
           BitmapImage bmp = new BitmapImage(new Uri(fd.FileName));
           myImage.Source = bmp;
       }

    }

     

    这段代码能满足需求吗?

     

    Hope to help

    2007年12月28日 14:37
    版主
  • 您可以单步跟踪您的每一行代码, 看看哪行代码的执行时间过长.

    另外,您也可以打开perfmon程序, 看一下那段时间内计算机中的哪些资源被大量使用也判定问题的所在

    2007年12月29日 6:50
    版主