Невозможно установить изображение в ImageView после передачи в виде байтового массива через Wi-Fi P2P

Когда я пытаюсь отправить "Hello world!" он работает отлично, но когда я преобразую байты изображения в base64, он показывает java.lang.IllegalArgumentException: плохой base-64, и я все еще получаю bas64 на принимающей стороне, но он повторяется несколько раз, что означает, что поток для больших строк выполняется поток много раз! как это решить?

 public void onImageAvailable(ImageReader reader) {

                    Image image = null;
                    try {
                        image = reader.acquireLatestImage();
                        ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                        final byte[] bytes = new byte[buffer.capacity()];
                        buffer.get(bytes);
                        //((MainActivity)context).sendMessage(bytes);

                        ((MainActivity)context).sendMessage(bytes);

                    } catch (Exception e) {
                        Log.e(TAG, e.toString());
                    }
                    finally {
                        if (image != null) {
                            image.close();
                        }
                    }

на приемном конце обработчик обрабатывает полученное изображение

 @Override
    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;

        while (socket!=null)
        {
            try {
                bytes=inputStream.read(buffer);
                if(bytes>0)
                {
                    handler.obtainMessage(MESSAGE_READ,bytes,-1,buffer).sendToTarget();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

И установка изображения в представление изображения, напрямую передавая байтовый массив в функцию, которая преобразует byte[] в растровое изображение, но не работает!

 Handler handler=new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what)
        {
            case MESSAGE_READ:
                byte[] readBuff= (byte[]) msg.obj;
                String tempMsg=new String(readBuff,0,msg.arg1);
                /*filenameTextView.setText(tempMsg);*/
                Toast.makeText(MainActivity.this,tempMsg,Toast.LENGTH_LONG).show();
                try {
                    oldImageView.setImageBitmap(utilityImageProcessing.getBitmspFromBytes(readBuff));
                }catch (Exception e){
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this,e.toString(),Toast.LENGTH_LONG).show();
                }
                break;
        }
        return true;
    }
});

0 ответов

Другие вопросы по тегам