如何使用BasePostprocessor有选择地调整位图大小

时间:2018-01-14 07:23:57

标签: android fresco

如果它们高于设备的最大纹理尺寸,我需要剪切一些图像,如果不是,则不要做任何事情。根据文档,因为我将调整大小,所以我需要使用以下方法:

CloseableReference<Bitmap> process(Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory);

这意味着我必须创建一个新的位图,即使我不必这样做。 (如果图像的大小不大于最大纹理大小)。这意味着更多的内存使用和更多的CUP时间。我的问题是,只有在需要时才能应用此后处理。

这是我的流程函数

@Override
public CloseableReference<Bitmap> process(Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) {

    final int height = sourceBitmap.getHeight();
    final int maxTextureSize = ImageUtils.getMaxTextureSize();

    if (height > maxTextureSize) {
        return bitmapFactory.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), maxTextureSize,
                sourceBitmap.getConfig());
    } else {
        return bitmapFactory.createBitmap(sourceBitmap);
    }
}

1 个答案:

答案 0 :(得分:0)

得到了Facebook好友的帮助,使用区域解码器来部分解码大位图将解决这个问题并变得更加内存友好。

他们提供的例子如下:

https://github.com/facebook/fresco/blob/baa629dd46797a3342a50b918ea0989b63819c87/samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/imagepipeline/ImagePipelineRegionDecodingFragment.java