.NETで作成されたBYTEアレイを使用して、AndroidのImageViewerウィジェットに画像を表示
-
26-10-2019 - |
質問
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);
お知らせ下さい!