Created
November 28, 2016 10:53
-
-
Save afaucogney/07f8fad95a8d0e871cb4750f42609555 to your computer and use it in GitHub Desktop.
RxImageConverters from Uri to File/Bitmap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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