Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava将字节数组转换为位图_Java_Android_Rx Java - Fatal编程技术网

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

对不起我的英语。现在我正在学习rxjava1,尝试将byte[]转换为位图,并将其设置为imageview。但是它工作得很慢。我是否正确使用rxJava?ps:我的chek和asynkTask工作比rxJava还要快,怎么可能呢

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的答案也是正确的