0

Androidアプリで使用したいバイト配列として、サーバーのデータベースに多数の画像が保存されています。

バイト配列はWindowsPhone7アプリの画像から作成されたため、.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がnullになります。これは、BitmapFactoryがバイト配列を正しくデコードできなかったことを示しているようです。

Windows Phone 7の場合、byte [](リアリティ)をMemoryStream(mstream)にロードし、そのMemoryStreamを使用してBitmap(bmp)のSetSourceメソッドを呼び出します。

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

そこで、Androidで、バイト配列をMemoryFileに読み込んでから、BitmapFactoryを使用してMemoryFileのInputStreamをロードしてみました。

    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でこの形式のバイト配列を正常にロードして画像を表示するにはどうすればよいですか?

4

1 に答える 1

0

Bingとここによると、このエラーはおそらく無効な画像を示しています。正しいURLをダウンロードしていることを注意深く再確認します。その場合は、そのbyte []の内容をログに出力してみてください(またはデバッガーで確認してください)。それが何らかの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); 

お知らせ下さい!

于 2011-07-27T02:44:33.693 に答える