渐进式JPEG图
注意: 本页提及的API仅是初步设计,后续可能变动
Fresco 支持渐进式的网络JPEG图。在开始加载之后,图会从模糊到清晰渐渐呈现。
你可以设置一个清晰度标准,在未达到这个清晰度之前,会一直显示占位图。
渐进式JPEG图仅仅支持网络图。
初始化
配置Image pipeline时 需要传递一个 ProgressiveJpegConfig. 的实例。
这个实例需要完成两个事情:
- 返回下一个需要解码的扫描次数
 - 确定多少个扫描次数之后的图片才能开始显示。
 
下面的实例中,为了实现节省CPU,并不是每个扫描都进行解码。
注意:
- 每次解码完之后,调用
getNextScanNumberToDecode, 等待扫描值大于返回值,才有可能进行解码。 
假设,随着下载的进行,下载完的扫描序列如下: 1, 4, 5, 10。那么:
- 首次调用
getNextScanNumberToDecode返回为2, 因为初始时,解码的扫描数为0。 - 那么1将不会解码,下载完成4个扫描时,解码一次。下个解码为扫描数为6
 - 5不会解码,10才会解码
 
ProgressiveJpegConfig pjpegConfig = new ProgressiveJpegConfig() {
  @Override
  public int getNextScanNumberToDecode(int scanNumber) {
    return scanNumber + 2;
  }    
  public QualityInfo getQualityInfo(int scanNumber) {
    boolean isGoodEnough = (scanNumber >= 5);
    return ImmutableQualityInfo.of(scanNumber, isGoodEnough, false);
  }
}
ImagePipelineConfig config = ImagePipelineConfig.newBuilder()
    .setProgressiveJpegConfig(pjpeg)
    .build();
除了自己实现ProgressiveJpegConfig, 也可以直接使用SimpleProgressiveJpegConfig.
At Request Time
目前,我们必须显式地在加载时,允许渐进式JPEG图片加载。
Uri uri;
ImageRequest request = ImageRequestBuilder
    .newBuilderWithSource(uri)
    .setProgressiveRenderingEnabled(true)
    .build();
PipelineDraweeController controller = Fresco.newControllerBuilder()
    .setImageRequest(requests)
    .setOldController(mSimpleDraweeView.getController())
    .build();
mSimpleDraweeView.setController(controller);
我们希望在后续的版本中,在setImageURI方法中可以直接支持渐进式图片加载。
						上一篇: 使用ControllerBu...
			
						下一篇: 动画图(gif)