4

BluetoothSPPを介してMatlabを実行しているラップトップに接続するAndroidアプリを開発しました。文字列を簡単にやり取りできるので、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イメージがある場合、Android側でデコードできるように、バイト配列を適切に構築するためにjavaBufferedImageを作成する必要があることがわかりました。

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 に答える