BitmapImage处理网络图片,例如阿里云获取的图片。异步加载到需要显示的控件上。提升速度非常明显。

Posted 歌·颂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BitmapImage处理网络图片,例如阿里云获取的图片。异步加载到需要显示的控件上。提升速度非常明显。相关的知识,希望对你有一定的参考价值。

想直接把网络图片赋给控件,又要下载又要缓存,速度非常慢。不流畅。

需要进行处理,异步加载会显著提升速度。方法如下:

        public static BitmapImage ByteArrayToBitmapImage(byte[] byteArray)
        {
            BitmapImage bmp = null;
            try
            {
                bmp = new BitmapImage();
                bmp.BeginInit();
                bmp.StreamSource = new MemoryStream(byteArray);
                bmp.EndInit();
            }
            catch
            {
                bmp = null;
            }
            return bmp;
        }

调用以上方法显示在控件中:

                
           //注:1
            string tttt = 获取的网络图片地址; Task t = new Task(() => { WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials; ///方法一: Byte[] pageData = wc.DownloadData(tttt); instance.Dispatcher.BeginInvoke(((Action)(() => { instance.imageBrush.ImageSource = ByteArrayToBitmapImage(pageData); } ))); }); t.Start();

注1:“System.InvalidOperationException”类型的异常在 WindowsBase.dll 中发生,但未在用户代码中进行处理
其他信息: 调用线程无法访问此对象,因为另一个线程拥有该对象。如果不定义一个string 类型的变量 转换 会报以上的错误。堆栈怎么就找不到了,定义一个就找到了。说这个意思。

图片经过这样处理就是控件先加载出来,图片慢慢加载出来,速度非常流畅。直接赋给控件图片和控件一起缓存非常迟钝。

 

以上是关于BitmapImage处理网络图片,例如阿里云获取的图片。异步加载到需要显示的控件上。提升速度非常明显。的主要内容,如果未能解决你的问题,请参考以下文章

oss 图片处理

简单上传图片到阿里云OSS

阿里云里oss图片上传的复制文件地址太长了,怎么办?

阿里云OSS 图片处理api(custom)

阿里云经典网络和专有网络的区别

阿里云Ocr识别封装