2012-01-17 3 views
1

だから私は開くためにカメラを取得して、写真を撮った後、次のようにカメラの結果を返す限り得ている:峠カメラOnActivityResultイメージとしてサーバ上に保存されるのWebServiceする

bt.Click += delegate 
    { 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     StartActivityForResult(intent, 0); 
    }; 
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
    { 
     base.OnActivityResult(requestCode, resultCode, data); 

     if (resultCode == Result.Ok && requestCode == 0) 
     { 
      string result = data.ToURI();    
     } 

値を結果の「#Intent; action = inline-data; B.bitmap-data = true; end」となる。画像の結果を取得し、それをサーバー上の画像ファイルとして保存する私のWebサービスに送ることができる限り、私はここからどこに行くのか本当に分かりません。

編集:同じ問題

bt.Click += delegate 
    { 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    StartActivityForResult(intent, 0); 
    }; 
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{ 
    Bitmap bitmap = (Android.Graphics.Bitmap)data.Extras.Get("data"); 

    using (var stream = new System.IO.MemoryStream()) 
    { 
     bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 0, stream); 
     byte[] imageBytes = stream.ToArray(); 
     string base64String = Convert.ToBase64String(imageBytes); 

     inst.saveImage(base64String); 
    } 
} 
    [WebMethod] 
    public void saveImage(string stream) 
    { 
     byte[] imageBytes = Convert.FromBase64String(stream); 
     MemoryStream ms = new MemoryStream(imageBytes, 0, 
      imageBytes.Length); 
     var filepath = "C:\\Temp\\Test.png"; 

     using (Stream file = File.OpenWrite(filepath)) 
     { 
      ms.CopyTo(file, (int)stream.Length); 
     } 

    } 

答えて

1

とのだれでものための最終的なコードあなたが戻って取得データは、あなたの「結果」の文字列が示すように、ビットマップデータを含んでいます。あなたはテントの外にビットマップを引くと、このような何かをすることによって、ストリームにそれを圧縮することができます:

var bitmap = (Android.Graphics.Bitmap) data.Extras.Get("data"); 

using (var stream = new MemoryStream()) 
{ 
    bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 0, stream); 

    // stream now contains the image data 
} 

あなたはそこ.NETストリームのいずれかのタイプを使用することができますので、MemoryStreamをは一例です。

+0

var bitmap =(Android.Graphics.Bitmap)data.GetStringExtra( "data");行がnull参照例外を生成しています。 – jmease

+0

それは意味がある、私は明らかに文字列ではないときにGetStringExtraを呼び出すことを意味しませんでした...更新されました。 –

+0

ヌル参照エラーがもう発生しません。しかし、まだストリームには何も含まれていません。保存するWebサービスにストリームを渡すときに、ストリームを文字列に変換する必要があります(ストリームとして残すと、狂ったタイプの不一致の状態になっていました)。私がStreamReaderをするときreader =新しいStreamReader(ストリーム);文字列テキスト= reader.ReadToEnd();テキストは空です。 – jmease

関連する問題