我用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控件。
希望各位高手能帮忙解决一下。非常感谢。
是不是你的内存被其他资源占用了。
使用多线程:
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秒吧。