Android:如何在不加载完整位图的情况下实时渲染流图像到ImageView



我从一个URL加载图像显示在一个ImageView。标准的方法是按如下方式创建位图(其中InputStream is已从URL获得):

Bitmap bm = BitmapFactory.decodeStream(is);

但是我正在处理大型图像,我想在整个图像加载位图之前开始显示像素,即我想实现图像的渐进式渲染(类似于在web浏览器中加载大型图像)。例如,如果图像是隔行的PNG,这将允许我在用户等待完整图像加载时向他们显示较低质量的图像。基本上,我想实现如下http://www.codinghorror.com/blog/2005/12/progressive-image-rendering.html

所示的渲染

我知道如果我可以实现一个PNG解码器,或者使用一个开源的实现,我可以修改它来渲染像素到ImageView的位图,只要我读取它们,但这看起来像一个巨大的努力,我想。

简单渐进式接收渲染:这是通过考虑传输网络层(TCP)来实现的。按顺序接收的每个数据包在应用层中传递,并立即显示。如果您希望实现这一点,那么您需要考虑在应用程序中使用套接字编程。

然而,这是一种老方法,实际上计算量更大。我个人更喜欢使用存根图像。在开始时显示存根映像,并启动一个具有url连接和下载(管理器或缓存)的即时线程。下载完成后,返回主线程更新照片。这样更有条理。

如果我说错了,请纠正我。

试试Facebook的Freso项目:http://frescolib.org/#streaming我不确定它支持什么文件格式,但它支持渐进式渲染已经编码的jpeg。

相关内容

最新更新