1

想要更快更快速地共享 fresco 缓存图像形式 loacl 存储

壁画返回带有回调的位图需要一些时间来获取图像。

无法通过意图共享直接位图需要先存储图像临时然后共享图像的文件路径 URI。

            ImageRequest imageRequest = ImageRequestBuilder
                    .newBuilderWithSource(httpUri(article.getImage())).setAutoRotateEnabled(true)
                    .build();
            ImagePipeline imagePipeline = Fresco.getImagePipeline();
            final DataSource<CloseableReference<CloseableImage>>
                    dataSource = imagePipeline.fetchDecodedImage(imageRequest, view.getContext());
            dataSource.subscribe(new BaseBitmapDataSubscriber() {
                @Override
                public void onNewResultImpl(@Nullable Bitmap bitmap) {
                    if (dataSource.isFinished() && bitmap != null) {
                        String pathofBmp = MediaStore.Images.Media.insertImage(view.getContext().getContentResolver(), bitmap, "APp", null);
                        Uri bmpUri = Uri.parse(pathofBmp);
                        ShareCompat.IntentBuilder.from((Activity) parent.getContext())
                                .setChooserTitle(R.string.share)
                                .setText(format("%s via App %s", title, ""))
                                .setSubject(format("%s via App", title))
                                .setStream(bmpUri)
                                .setType("image/jpeg")
                                .startChooser();
                        dataSource.close();

                    }
                    dataSource.close();
                }
4

3 回答 3

1

当您在上面构建 ImageRequest 时,添加以下行:

.setLowestPermittedRequestLevel(BITMAP_MEMORY_CACHE)

然后您可以假设数据源将立即返回,您可以立即调用DataSource.hasResult()DataSource.getResult()获取您的位图。

您仍然必须遵守可关闭引用的规则

于 2016-02-08T11:58:21.553 回答
0

你不能使用 closeableimage 你需要使用 CloseableAnimatedImage。我正在努力解决同样的问题。

于 2018-06-20T23:56:55.597 回答
0

我正在使用不同的方法。只需使用后处理器来获取位图。

setPostprocessor(new BasePostprocessor() {
            @Override
            public void process(Bitmap bitmap) {
                super.process(bitmap);
                draweeBitmap = bitmap;

            }
        });

现在你有了你的位图,所以你可以保存在应用程序的某个地方。文件夹或 SD 卡并共享它。

于 2016-02-08T12:05:35.983 回答