2012-01-04 20 views
7

相続人は私の状況バイト配列から画像を取得:私は私のサーバー上で実行されているRESTfulなWCFサービスを持っているがAndroidアプリにJSONオブジェクトに

を、サービスがデータベースから人となりますに関する各種のデータを取得するためのものですそのデータは単一のJSONオブジェクトとして利用できます。それは素晴らしい作品です!

[編集]サーバー上のファイルシステムにイメージキャッシュを保持するもう1つのサービスがあります。要求がRESTfulサービスに送信されると、そのサービスはイメージサービスからイメージを要求します。イメージがすでにキャッシュにある場合(要求と同じ幅、高さ、および人物)、それはバイト配列として返されます。このサービスを使用して画像を取得する必要があります。

私が欲しいのは、その人のイメージです。私たちのデータベースでは、イメージは長い生(ew)です。しかし、私はすでにその問題に取り組んできました(前段落)。イメージはバイト配列になりました。私はかなりアンドロイドに新しいです、そして、私はこのイメージを検索する最良の方法が何であるか分かりません。私ができると思ったのは、バイト配列をJSONオブジェクトに追加し、base64デコーダを使って描画可能なイメージに変換することでした。しかし、私が試してみるたびに、それはタイムアウトし、JSONオブジェクトのcharバッファの任意のインデックスで '、'または ''を期待しています。

JSONオブジェクトから小さなデータを取り出すことはできましたが、大きなバイト配列があるので、JSONObjectは嫌いです。私のサービスからこのイメージを得るためのよりよい方法は何でしょうか?

答えて

10
  1. Base64は、文字列を取得するためにバイト配列をエンコードします。
  2. 文字列をJSONオブジェクトに追加して送信します。
  3. JSONが受信されると、文字列を取得します。
  4. Base64をデコードして、バイト配列を取得します。
  5. バイト配列を使用してイメージを作成します。
+0

です。 –

+0

私はそれがより良い方法だと信じています:http://stackoverflow.com/a/15929125/245460 –

0

storing imagesでこの質問をご覧ください。ファイルシステムにこの種のデータを保存する方が良いでしょう。可能であれば、そのフィールドを非推奨にし、既存のイメージをファイルシステムに移動するスクリプトを作成します。

URLで取得できるファイルシステム(または何らかの種類のコンテンツ管理システム)に画像を保存する必要があります。

次に、URLをデータベースに格納します。これをあなたのjsonオブジェクトに送ることができます。

{ 
... 
    image_url:<url from database> 
... 
} 

クライアントがこれを受け取ると、そのURLを呼び出して画像をダウンロードします。

お客様のクライアントは画像を取得するために別途呼び出しを行う必要がありますが、通常はデータベースにバイナリデータを入力するよりも優れています。これは、画像をバックグラウンドでダウンロードしながらデータを高速に表示したい場合にも効果的です。 Base64エンコードを使用するよりも良い

+0

私が意味するものではありません、私はもう少し明確にしようとしました。私の編集をチェックしてください。 –

0

は、私はそれが私が探していたものであると考えている(WCF RAW programmingから)ストリームを返すこのよう

 

[OperationContract, WebGet] 
public Stream GetTestImage(Image image) 
{ 
    MemoryStream stream = new MemoryStream(); 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    stream.Position = 0; 
    WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; 
    return stream; 
} 
 
関連する問題