android - vectoriales - Usar el Fresco de Facebook para cargar un mapa de bits
que es una imagen vectorial (2)
Usará la tubería de imagen de Fresco directamente para esto:
http://frescolib.org/docs/using-image-pipeline.html
Aunque si no te importa que pregunte, ¿cuál es la motivación aquí? ¿Por qué necesitas el mapa de bits en sí?
Estoy intentando reemplazar a Picasso en mi aplicación de Android con Fresco. Sin embargo, no estoy seguro de cómo cargar un mapa de bits con Fresco.
Con Picasso, simplemente haría lo siguiente.
Bitmap poster = Picasso.with(getActivity())
.load(url)
.resize(Utils.convertDpToPixel(WIDTH,HEIGHT))
.centerCrop()
.get();
No he podido averiguar cómo crear un Bitmap con este Fresco. ¿Algunas ideas?
Como dijo Fresco:
Si su pedido a la canalización es para una imagen decodificada, un mapa de bits de Android, puede aprovechar nuestro BaseBitmapDataSubscriber más fácil de usar:
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);
No puede asignar el mapa de bits a ninguna variable que no esté dentro del alcance del método onNewResultImpl.
http://frescolib.org/docs/datasources-datasubscribers.html#_
Mi código :
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());
}