質問

Androidアプリで消費したいバイト配列として、サーバーのデータベースに格納されている画像がたくさんあります。

バイト配列はWindows Phone 7アプリの画像から作成されたため、.NETのWriteableBitMap(WBMP)を使用して、IsolatedStorageFileStream(ISFS)に保存してください。

     wbmp.SaveJpeg(isfs, newWidth, newHeight, 0, 90);

Androidアプリには、画像の1つを表示するために使用しようとしているImageViewウィジェットがあります。 BitMapFactoryを使用してバイト配列(ペイロード)をデコードしようとしました。

    Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
    img1.setImageBitmap(bmp); 

しかし、それはうまくいきません - 私がデバッガーを踏むとき、画像表示はなく、BMPはヌルです。これは、BitMapFactoryがバイト配列を適切にデコードできなかったことを示しているようです。

Windows Phone 7の場合、バイト[](リアリティ)をメモリストリーム(MSTREAM)にロードするだけで、そのメモリストリームを使用してBitMap(BMP)のSetSourceメソッドを呼び出します。

    mstream = new MemoryStream(reality);
    bmp.SetSource(mstream);

その後、Androidでバイト配列をメモリファイルに読み取り、bitmapFactoryを使用してメモリファイルの入力ストリームをロードしようとしました。

    MemoryFile mf;
        try {
            mf = new MemoryFile("myFile", payload.length);
            mf.writeBytes(payload, 0, 0, payload.length);
            InputStream is = mf.getInputStream();
            Bitmap bmp = BitmapFactory.decodeStream(is);
            img1.setImageBitmap(bmp); 
        } catch (IOException e) {               
            e.printStackTrace();
        }

しかし、これはまだうまくいきません。

Androidのこの形式にバイト配列を正常にロードして画像を表示するにはどうすればよいですか?

役に立ちましたか?

解決

Bing and Hereによると、このエラーはおそらく無効な画像を示しています。適切なURLをダウンロードしていることを注意深く再確認します。その場合は、そのバイトの内容をログに印刷してみてください(またはデバッガーでチェックしてください)。ある種のHTMLメッセージであるかどうかを確認してください。

ビンゴ!追加情報に基づいて、これはBase64エンコードデータです。あなたが投稿したものはプレーンテキストのように見えすぎたので、Linuxマシンでuudecodeとbase64 -dの両方を実行してみました。後者は機能し、JPEGとして認識されたファイルを生成しました。

これをデコードするのは非常に簡単です。これを変える:

Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp); 

これに:

import android.util.Base64;
...
payload = Base64.decode(payload, Base64.Default);
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp); 

お知らせ下さい!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top