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

时间:2013-06-19 08:57:15

标签: android bitmap imageview render progressive

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

Bitmap bm = BitmapFactory.decodeStream(is);

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

所示

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

2 个答案:

答案 0 :(得分:0)

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

然而,这是一种古老的方法,实际上是计算密集型方法。我个人更喜欢,使用存根图像。存根图像显示在开头,并启动具有URL连接和下载(管理器或缓存)的立即线程。下载完成后,您将返回主线程以更新照片。这更具组织性。

如果我在任何意义上都错了,请纠正我。

答案 1 :(得分:0)

尝试Facebook的Freso项目:http://frescolib.org/#streaming我不确定它支持哪种文件格式,但它支持逐步编码逐步编码的JPEG格式。