首页 新闻 会员 周边

WPF 加载大图片的问题

0
悬赏园豆:50 [待解决问题]

我用wpf中的Image控件来显示大图片的时候,当图片超过12M,经常出现不显示的现象。其他的图片大小为6M左右的时候,基本都可以正常的显示。

如果图片能够正常显示的时候,中间会有个几秒钟的停顿,而没有正常显示的时候,就不会出现停顿现象。

代码如下:

   BinaryReader binReader = new BinaryReader(File.Open(picPath, FileMode.Open));
   FileInfo fileInfo = new FileInfo(picPath);
   byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
   binReader.Close();

   BitmapImage bitmap = new BitmapImage();
   bitmap.BeginInit();
   bitmap.StreamSource = new MemoryStream(bytes);
   bitmap.EndInit();

   image.Source = bitmap;

picPath 是图片的路径,image 就是Image控件。

希望各位高手能帮忙解决一下。非常感谢。

 

问题补充: 在使用ImageFailed事件的时候,图片不加载提示是:“没有足够的内存继续执行程序。”,怎么解决这个问题?
舌尖上的两颗大门牙的主页 舌尖上的两颗大门牙 | 初学一级 | 园豆:162
提问于:2011-01-10 11:17
< >
分享
所有回答(2)
0

是不是你的内存被其他资源占用了。

未页 | 园豆:226 (菜鸟二级) | 2012-09-28 10:31
0

使用多线程:

var source = await Task.Run<ImageSource>(() =>
                    {                       
                        var s = new BitmapImage();
                        s.BeginInit();
                        s.CacheOption = BitmapCacheOption.OnLoad;
                        using (var stream = File.OpenRead(path))//图片路径
                        {
                            s.StreamSource = stream;
                            s.EndInit();
                            s.Freeze();//冻结 否则不能被UI线程调用
                        }
                        return s;

        });

bigImage.Source=source;

//另外,可以先显示低分辨率的缩略图,添加过渡动画……

source.DecodePixelWidth =100;//设置一个较小的值即可“瞬间”加载……

以上代码测试过20多M的图片,耗时2~3秒吧。

疯狂的懒羊羊 | 园豆:76 (初学一级) | 2015-11-03 14:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册