使用Facebook的Fresco加载位图

我试图用我的android应用程序中的壁纸replace毕加索。 不过,我不确定如何使用Fresco简单地加载位图

毕加索,我只是做下面的事情。

Bitmap poster = Picasso.with(getActivity()) .load(url) .resize(Utils.convertDpToPixel(WIDTH,HEIGHT)) .centerCrop() .get(); 

我一直无法弄清楚如何用这个Fresco创build一个位图。 有任何想法吗?

Solutions Collecting From Web of "使用Facebook的Fresco加载位图"

正如Fresco所说:

如果您对pipe道的请求是针对解码图像(Android位图),则可以利用我们更易于使用的BaseBitmapDataSubscriber:

 dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override public void onNewResultImpl(@Nullable Bitmap bitmap) { // You can use the bitmap in only limited ways // No need to do any cleanup. } @Override public void onFailureImpl(DataSource dataSource) { // No cleanup required here. } }, executor); 

您不能将位图分配给不在onNewResultImpl方法范围内的任何variables。

http://frescolib.org/docs/datasources-datasubscribers.html#_

我的代码:

 public void setDataSubscriber(Context context, Uri uri, int width, int height){ DataSubscriber dataSubscriber = new BaseDataSubscriber<CloseableReference<CloseableBitmap>>() { @Override public void onNewResultImpl( DataSource<CloseableReference<CloseableBitmap>> dataSource) { if (!dataSource.isFinished()) { return; } CloseableReference<CloseableBitmap> imageReference = dataSource.getResult(); if (imageReference != null) { final CloseableReference<CloseableBitmap> closeableReference = imageReference.clone(); try { CloseableBitmap closeableBitmap = closeableReference.get(); Bitmap bitmap = closeableBitmap.getUnderlyingBitmap(); if(bitmap != null && !bitmap.isRecycled()) { //you can use bitmap here } } finally { imageReference.close(); closeableReference.close(); } } } @Override public void onFailureImpl(DataSource dataSource) { Throwable throwable = dataSource.getFailureCause(); // handle failure } }; getBitmap(context, uri, width, height, dataSubscriber); } /** * * @param context * @param uri * @param width * @param height * @param dataSubscriber */ public void getBitmap(Context context, Uri uri, int width, int height, DataSubscriber dataSubscriber){ ImagePipeline imagePipeline = Fresco.getImagePipeline(); ImageRequestBuilder builder = ImageRequestBuilder.newBuilderWithSource(uri); if(width > 0 && height > 0){ builder.setResizeOptions(new ResizeOptions(width, height)); } ImageRequest request = builder.build(); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(request, context); dataSource.subscribe(dataSubscriber, UiThreadExecutorService.getInstance()); } 

你会直接使用Fresco的图像pipe道:

http://frescolib.org/docs/using-image-pipeline.html

虽然如果你不介意我的问题 – 这里的动机是什么? 为什么你需要位图本身?