从 Android 中的输入流套接字检索 JPEG 图像时出现问题



我想从Android中的输入流套接字中检索JPEG图像。我实际上可以使用位图方法并立即将输入流转换为JPG,还是应该将输入流转换为字节数组,然后将其转换为JPG?

我实际尝试的代码是:

            private final BluetoothSocket mmBTSocket;
    private final InputStream mmBTInStream;
    private final OutputStream mmBTOutStream;
    public ConnectedThread(BluetoothSocket socket) {
        Log.d(BTTAG, "create ConnectedThread");
        mmBTSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;
        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(BTTAG, "temp sockets not created", e);
        }
        mmBTInStream = tmpIn;
        mmBTOutStream = tmpOut;
    }
                      public void run() {
                      Log.i(BTTAG, "BEGIN mBTConnectedThread");
                        byte[] inBTBuffer = new byte[1024];
                         boolean BTFileEndOne = false;
                         byte[] mBTimageBuffer = new byte[15360]; // 15KB reserved
                               int bytes;
                                bytes = mmBTInStream.read(inBTBuffer);
                for (int i = 0; i < bytes; i++) {
                    mBTimageBuffer[mBTfileIndex] = inBTBuffer[i];
                    mBTfileIndex++;
                    // start = System.currentTimeMillis();
                    // Log.i(BTTAG, bytes+"="+String.format("%02X",
                    // inBTBuffer[i]));
                    if (i > 0) {
                        if (inBTBuffer[i] == (byte) 0xD9) {
                             BTFileEndOne = true;
                             Log.i(BTTAG, "BTFileEndOne = true");
                            if (inBTBuffer[i - 1] == (byte) 0xFF) {
                                //if (SaveImagetoSD() == true) {
                                    //byte[] readBuf = (byte[]) msg.obj;
        Bitmap bitmap = BitmapFactory.decodeStream(mmBTInStream);   
        bitmap.compress(CompressFormat.JPEG, 80, mmBTOutStream);
        String writeTo = new File(Environment.getExternalStorageDirectory()+ File.separator + "motoduino.jpg")  .toString();                   
         FileOutputStream output = null;  
         try {
            output = new FileOutputStream(writeTo);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }`

BitmapFactory 可以同时加载 png 和 jpg。

Bitmap bitmap = BitmapFactory.decodeStream(inputstream);

您可以使用以下命令另存为 JPEG 或 PNG:

bitmap.compress(CompressFormat.JPEG, 80, outputstream);

编辑:保存到外部存储:

File sdcard = Environment.getExternalStorageDirectory();
    if(sdcard!=null){
        File myjpg = new File(sdcard,"test.jpg");
        try{
            OutputStream outputstream = new FileOutputStream(myjpg);
            mybitmap.compress(CompressFormat.JPEG, 80, outputstream);
            outputstream.close();
        }catch(Exception e){ e.printStackTrace(); }
    }else{
        Log.e("jpg save","sdcard not inserted or not ready");
    }

您需要在清单中使用权限android.permission.WRITE_EXTERNAL_STORAGE。

最新更新