RxJava将字节数组转换为位图
对不起我的英语。现在我正在学习rxjava1,尝试将byte[]转换为位图,并将其设置为imageview。但是它工作得很慢。我是否正确使用rxJava?ps:我的chek和asynkTask工作比rxJava还要快,怎么可能呢RxJava将字节数组转换为位图,java,android,rx-java,Java,Android,Rx Java,对不起我的英语。现在我正在学习rxjava1,尝试将byte[]转换为位图,并将其设置为imageview。但是它工作得很慢。我是否正确使用rxJava?ps:我的chek和asynkTask工作比rxJava还要快,怎么可能呢 Observable.just(data) .map(new Func1<byte[], Bitmap>() { @Override public
Observable.just(data)
.map(new Func1<byte[], Bitmap>() {
@Override
public Bitmap call(byte[] bytes) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither = true;
options.inMutable = true;
Bitmap largeBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
Bitmap bitmap = Bitmap.createScaledBitmap(largeBitmap
, (int) ((float) largeBitmap.getWidth() / 10)
, (int) ((float) largeBitmap.getHeight() / 10)
, true);
if (bitmap.getWidth() > bitmap.getHeight()) {
Matrix matrix = new Matrix();
matrix.postRotate(90); // anti-clockwise by 90 degrees
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}
float k = (float) bitmap.getWidth() / (float) w_target;
if (w_target < bitmap.getWidth()) {
bitmap = Bitmap.createScaledBitmap(bitmap, w_target, (int) ((float) bitmap.getHeight() / k), true);
}
return createBlackAndWhite(bitmap);
}
})
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
imageview.setImageBitmap(bitmap);
}
});
Observable.just(数据)
.map(新函数1(){
@凌驾
公共位图调用(字节[]字节){
BitmapFactory.Options=new-BitmapFactory.Options();
options.inJustDecodeBounds=false;
options.inPreferredConfig=Bitmap.Config.RGB_565;
options.inDither=true;
options.inMutable=true;
Bitmap largeBitmap=BitmapFactory.decodeByteArray(data,0,data.length,options);
位图位图=位图。createScaledBitmap(大位图
,(int)((float)largeBitmap.getWidth()/10)
,(int)((float)largeBitmap.getHeight()/10)
,对);
if(bitmap.getWidth()>bitmap.getHeight()){
矩阵=新矩阵();
矩阵。后旋转(90);//逆时针旋转90度
bitmap=bitmap.createBitmap(位图,0,0,bitmap.getWidth(),bitmap.getHeight(),矩阵,true);
}
float k=(float)bitmap.getWidth()/(float)w_目标;
if(w_target
也许您应该更改用于处理进程的调度程序,而不是Schedulers.io()
尝试Schedulers.computation()
根据
计算():创建并返回用于
计算工作。这可用于事件循环、处理
回调和其他计算工作。不要执行IO绑定的工作
在这个调度程序上。请改用Schedulers.io()
io():创建和
返回用于IO绑定工作的计划程序。实施过程非常简单
由执行器线程池支持,该线程池将根据需要增长。这个可以
用于异步执行阻塞IO。不执行
这个调度程序的计算工作。使用Schedulers.computation()
相反
希望这有帮助
对不起,我的英语不好。将调度程序颠倒为
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
您在上面观察到的线程将调用imageView.setBitmap()
,另一方面subscribeOn将为位图操作设置线程您不使用Rxjava2?@cricket_007的任何原因我认为学习rx1然后RX2我认为这看起来不错,但是还有其他库可以用来加载images@cricket_007谢谢你能推荐一些图书馆吗?@lelloman的答案也是正确的