6

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

Bitmap bm = BitmapFactory.decodeStream(is);

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

我知道我是否可以实现 PNG 解码器,或者使用开源实现,我可以修改它以在读取像素后立即将像素渲染到 ImageView 的位图,但这对于我的意图来说似乎是一项巨大的努力。

4

2 回答 2

0

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

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

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

于 2013-06-19T18:41:09.543 回答
0

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

于 2015-03-27T17:31:40.413 回答