fresco的setDownsampleEnabled

发现一个bug:使用fresco加载的图片放大之后还是很模糊,跟缩略图一样。

写一个demo加载同一张图片发现能够看清楚,后来发现在初始化fresco的时候的设置不一样,一个设置了一个属性.setDownsampleEnabled(true),另一个没有设置(默认是false)。发现把这个注释掉就好了。

接着找到了类似的issue
https://github.com/facebook/fresco/issues/1343

再来看看fresco相关文档发现:

Resizing


Resize 并不改变原始图片,它只在解码前修改内存中的图片大小。
如果要 resize,创建ImageRequest时,提供一个 ResizeOptions :

Uri uri = "file:///mnt/sdcard/MyApp/myfile.jpg";
int width = 50, height = 50;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setResizeOptions(new ResizeOptions(width, height))
    .build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
    .setOldController(mDraweeView.getController())
    .setImageRequest(request)
    .build();
mSimpleDraweeView.setController(controller)

Resize 有以下几个限制:

  • 目前,只有 JPEG 图片可以修改尺寸。
  • 对于产生的图片的尺寸,只能粗略地控制。图片不能修改为确定的尺寸,只能通过支持的修改选项来变化。这意味着即使是修改后的图片,也需要在展示前进行 scale 操作。
  • 只支持以下的修改选项: N / 8,1 <= N <= 8
  • Resize 是由软件执行的,相比硬件加速的 scale 操作较慢。
  • the actual resize is carried out to the nearest 1/8 of the original size
  • it cannot make your image bigger, only smaller (not a real limitation though)

向下采样(Downsampling)


向下采样是一个正在实验中的特性。使用的话需要在设置 image pipeline 时进行设置:

   .setDownsampleEnabled(true)

如果开启该选项,pipeline 会向下采样你的图片,代替 resize 操作。你仍然需要像上面那样在每个图片请求中调用 setResizeOptions 。
向下采样在大部分情况下比 resize 更快。除了支持 JPEG 图片,它还支持 PNG 和 WebP(除动画外) 图片。
但是目前还有一个问题是它在 Android 4.4 上会在解码时造成更多的内存开销(相比于Resizing)。这在同时解码许多大图时会非常显著,我们希望在将来的版本中能够解决它并默认开启此选项。

原文文档:
https://www.fresco-cn.org/docs/resizing-rotating.html

还有fresco关于放大缩小的官方demo:
https://github.com/facebook/fresco/tree/master/samples/zoomable
ZoomableDraweeView

In Android Studio, choose File > Open... and select the fresco folder.

你可能感兴趣的:(fresco的setDownsampleEnabled)