1

fresco キャッシュ イメージ フォーム loacl ストレージを共有するためのより高速で迅速なプロセスが必要

fresco がコールバックでビットマップを返すと、画像の取得に時間がかかります。

最初に画像の一時ファイルを保存し、次に画像のファイル パス 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 に答える