Android fresco lib,应用自定义过滤器

标签 android image filter fresco

我正在使用 fresco 向我的应用程序显示图像。现在我正在尝试对我的图像应用一些过滤器,但问题是过滤器库只产生位图。但 draweeView.setImageBitmap 已弃用。

我也试过这样的后处理器

    MeshPostprocessor meshPostprocessor = new MeshPostprocessor();
    meshPostprocessor.setFilter(filters.get(0));

    draweeView = (SimpleDraweeView) view.findViewById(R.id.filter_image);

    ImageRequest request = ImageRequestBuilder.newBuilderWithSource(image)
            .setPostprocessor(meshPostprocessor)
            .setResizeOptions(new ResizeOptions(100, 100))
            .build();

    PipelineDraweeController controller = (PipelineDraweeController)
            Fresco.newDraweeControllerBuilder()
                    .setImageRequest(request)
                    .setOldController(draweeView.getController())
                    .build();
    draweeView.setController(controller);

这是后处理器

public static class MeshPostprocessor extends BaseRepeatedPostProcessor {
    private AbstractConfig.ImageFilterInterface filter;

    public void setFilter(AbstractConfig.ImageFilterInterface filter) {
        this.filter = filter;
        update();
    }

    @Override
    public String getName() {
        return "meshPostprocessor";
    }

    @Override
    public void process(Bitmap bitmap) {
        bitmap = filter.renderImage(bitmap);
    }
}

所以当我点击一个过滤器时,我就运行这个

meshPostprocessor.setFilter(colorFilterConfig.get(position));

我尝试使用调试器,代码遍历了所有方法(setFilter、process 等),但图像根本没有改变...

我错过了什么?

最佳答案

我认为您不需要 BaseRepeatedPostProcessor在你的情况下。 正常BasePostProcessor在这里应该足够了。

但是,问题似乎出在您的自定义过滤器上:

@Override
public void process(Bitmap bitmap) {
    bitmap = filter.renderImage(bitmap);
}

我想它会返回一个不同的位图?这在 Java/Fresco 中不起作用。

如果您的过滤器可以就地进行处理,您可以使用 process(Bitmap bitmap)并直接修改给定的位图(例如 bitmap.setPixel(...) )。

如果你不能原地做,你可以覆盖process(Bitmap destBitmap, Bitmap sourceBitmap)相反,修改 destBitmap .

如果您的位图改变了它的大小,您可以覆盖 CloseableReference<Bitmap> process(Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) .但是,在这种情况下,请确保实际使用提供的 bitmapFactory以高效创建新位图。

有关更多信息,请查看 http://frescolib.org/docs/modifying-image.html了解更多信息或查看 JavaDoc for BasePostprocessor .

关于Android fresco lib,应用自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39410777/

相关文章:

android - 编译选择时在 ","附近出现语法错误

Android EditText 空间验证

javascript - 从 jquery 通过 AJAX 发送图像数据

Wordpress login_redirect 过滤器被忽略并且无效

androids putExtra

java - 读取/写入文件时出现异常

javascript - 通过带有输入字段的嵌套 ul/li 结构进行过滤,如果输入为空,则重置为原始状态

c# - 模型状态错误过滤器

ios - iPhone 6 - 通过命名约定使用精确尺寸的图像

javascript - 我如何更新我的 MVC 3 站点中的图像?