4

我开发了一个 Android 应用程序,它通过蓝牙 SPP 与运行 Matlab 的笔记本电脑连接。我能够轻松地来回发送字符串,现在我有兴趣从 Matlab 发送图像以显示在平板电脑上(48x64 灰度就足够了)。我不确定如何打包图像并将其发送到 Matlab 串行端口。我猜你不能只使用 fprintf 或 fwrite。

这就是我认为Android端可能的样子

public void drawImage(byte[] buffer){
    ImageView camView = (ImageView)findViewById(R.id.camView);
    Bitmap myBitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);  
    Log.d(TAG,"decoded image");
    if(myBitmap != null){
    camView.setImageBitmap(myBitmap);
    Log.d(TAG,"Trying to display...");
    }
    else{
        Log.d(TAG, "Bitmap = null");
    }
}// end drawImage

任何关于 Andriod 或 Matlab 方面的建议将不胜感激。谢谢!

4

2 回答 2

0

你只是想从 Matlab 接收串行数据吗?为什么不将其视为任何其他串行数据。

我会首先通过 Android 控制台应用程序进行调试,以确保它完全在传输,并确保数据以您希望它传输的方式传输。

于 2013-03-04T19:52:07.833 回答
0

所以我让它工作了。基本上问题是我没有发送正确压缩的图像(.jpg 或 .png)。我发现,如果您有一个 Matlab 图像,无论压缩如何,Matlab 都将其简单地表示为像素值矩阵,您需要创建一个 java BufferedImage 以便正确构造字节数组,以便您可以在 Android 端对其进行解码。

Matlab 方面

import java.awt.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
serCam = InitUSBcamera;  % initialize USB camera as a serial port
type = java.lang.String('jpg'); % translating matlab to java 
outputStream = ByteArrayOutputStream; % create java output stream
im = getsnapshot(serCam);  % get an image from the camera
im2 = imresize(im, [96,128],'nearest');  % reduce the size 
im3 = im2java2d(im2); % create java Buffered Image
ImageIO.write(im3, type, outputStream);
bytes = outputStream.toByteArray();
fwrite(serTablet, bytes, 'int8') % send the image // changed to async 
于 2013-04-18T02:44:45.680 回答