Skip to content

Instantly share code, notes, and snippets.

@afaucogney
Created November 28, 2016 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save afaucogney/07f8fad95a8d0e871cb4750f42609555 to your computer and use it in GitHub Desktop.
Save afaucogney/07f8fad95a8d0e871cb4750f42609555 to your computer and use it in GitHub Desktop.
RxImageConverters from Uri to File/Bitmap
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
// RxImagePicker/library/src/main/java/com/mlsdev/rximagepicker/RxImageConverters.java
public class RxImageConverters {
public static Observable<File> uriToFile(final Context context, final Uri uri, final File file) {
return Observable.create(new Observable.OnSubscribe<File>() {
@Override
public void call(Subscriber<? super File> subscriber) {
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
copyInputStreamToFile(inputStream, file);
subscriber.onNext(file);
subscriber.onCompleted();
} catch (Exception e) {
Log.e(RxImageConverters.class.getSimpleName(), "Error converting uri", e);
subscriber.onError(e);
}
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
public static Observable<Bitmap> uriToBitmap(final Context context, final Uri uri) {
return Observable.create(new Observable.OnSubscribe<Bitmap>() {
@Override
public void call(Subscriber<? super Bitmap> subscriber) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
subscriber.onNext(bitmap);
subscriber.onCompleted();
} catch (IOException e) {
Log.e(RxImageConverters.class.getSimpleName(), "Error converting uri", e);
subscriber.onError(e);
}
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
private static void copyInputStreamToFile(InputStream in, File file) throws IOException {
OutputStream out = new FileOutputStream(file);
byte[] buf = new byte[10 * 1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
in.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment