0

Androidのアプリケーションで使用したいバイト配列として、サーバーのデータベースにたくさんの画像が保存されています。.NETで作成されたバイト配列を使用してAndroidのImageViewerウィジェットに画像を表示

バイト配列がIsolatedStorageFileStreamに保存するので、.NETのWriteableBitmap(WBMP)を使用して、Windowsの携帯電話7アプリで画像から作成された(ISF申告):Androidアプリで

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

、私が持っていますイメージの1つを表示するために使用しようとしているImageViewウィジェット。私はバイト配列(ペイロード)をデコードするBitmapFactoryを使用して試してみた:

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

しかし、それは動作しません - 私は、デバッガをステップ実行するときにイメージが表示され、BMPはnullです。これは、BitmapFactoryがバイト配列を正しくデコードできなかったことを示しているようです。 Windowsの携帯電話7の場合

、私はただのMemoryStream(mstream)にバイト[](現実)をロードし、そのMemoryStreamをしてビットマップ(BMP)のSetSourceメソッドを呼び出します。

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

それでは

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上で私はその後BitmapFactoryを使用してMemoryFileのInputStreamを読み込みMemoryFileにバイト配列を読んでみました。

画像を表示するには、Androidでこの形式のバイト配列を正常に読み込むにはどうすればよいですか?

+0

logcatを確認してエラーがないか確認してください。 – wilbur4321

+0

これは言う: 07-27 01:13:55.629:DEBUG/skia(7808):--- SkImageDecoder :: Factory returned null – ckbhodge

答えて

0

Bing氏によると、このエラーはおそらく無効な画像を示しています。正しいURLをダウンロードしていることを慎重に確認します。そうであれば、そのバイト[]の内容をログに出力してみてください(またはデバッガでチェックしてください)。それが何らかのHTMLメッセージであるかどうかを確認してください。

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

これをデコードするのは非常に簡単です。私に教えてください

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

:これまで

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

:これを変更!

+0

ありがとうございました!私は複雑なデータ型の別のプロパティを正しく取得しているので、正しいWebサービスURLを呼び出すように見えます。 BitmapFactoryクラスを使ってデコードしていないのはbyte []だけです。ここでは、バイト配列の文字列表現の最初の数文字をです: /9J/4AAQSkZJRgABAQEAgwCDAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT 画像データであるように思える(この同じWebサービスメソッドは、適切にWP7にデコードされ、作業のバイト配列を返します) 。 – ckbhodge

+0

Webサービスと同じ呼び出しを行う.NETプロジェクトを追跡しただけです。バイト配列の文字列表現の最初の部分は同じように見えます。これは、AndroidのBitmapFactoryが、.NETで有効なエンコーディングであっても、それをデコードする方法を知らないと信じています。何か案は? – ckbhodge

+0

@ckbhodge:私は問題があると信じています。上記の編集済みの回答を参照してください。 – wilbur4321

関連する問題