将Matlab图像发送到Android平板电脑

时间:2013-03-04 03:16:24

标签: java android matlab bluetooth javax.imageio

我开发了一款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方面的任何建议都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

您是否只是想从Matlab接收串行数据?为什么不像任何其他串行数据一样对待它。

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

答案 1 :(得分: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