0

私はこのアプリを持っており、バイト配列の形式で画像を受信する必要があります。そのイメージは、以前は次のようにサーバーに送信されています。

 image = image.createScaledBitmap((Bitmap) extras.get("data"), 380, 400, true);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        imagen.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();

画像はサーバーに正常に送信されます。アプリケーションの別の部分がサーバーを呼び出して、画像が含まれているJSONを取得します。string.getBytes()それを文字列に格納してから、次のようなバイト配列を取得するために使用します。

byte[] array=stringimage.getbytes();

配列は次のようなものです:119,80,78,71,13,10 .. ..

「OK、今はBitmapFactory、decodeByteArrayを使用して、ビットマップを取得する」と思いますが、nullを返します。私はグーグルを始めて、ここスタックオーバーフローを見て、問題へのさまざまなアプローチを目にします。その1つ:

image = Bitmap.createBitmap(380, 400, Bitmap.Config.RGB_565);
int row = 0, col = 0;
for (int i = 0; i < array.length; i += 3) {
    image.setPixel(col++, row, array[i + 2] & array[i + 1] & array[i]);
    
    if (col == 380) {
        col = 0;
        row++;
        
    }
}

これは、画像をデコードしてピクセルを手動で設定するようなものです。

動作しません。

もう1つ:

byte[] array=Base64.decode(fotostring.getBytes(),Base64.DEFAULT);

動かない

私の質問は、サーバー側を担当している仲間にアレイを送ってもらうにはどうすればよいですか?どの形式で?彼は私が以前に彼に送った画像にはまったく触れていません。彼はする必要がありますか?

または、バイト配列をどのように管理する必要がありますか?decodeByteArrayが理解できる別の形式に「変換」する必要はありませんか?

4

1 に答える 1

1

あなたが直面している問題は、エンコーディング/デコーディングが原因です。画像から受け取ったバイト配列はバイナリであり、テキストとして解釈することはできません。テキストベースのプロトコル(HTTPを使用したと思います)を介して転送するには、テキスト形式にエンコードする必要があります。サーバーから対称操作を受信するときに実行する必要があります。

サーバーに送信するときは、ある形式(Base64など)でエンコードし、同じ形式を使用して受信した文字列をデコードします。

于 2012-04-19T12:25:37.263 に答える