2017-04-12 9 views
0

私はこの実装に数時間苦労しています(SO、Xamarin Forums、Googleなど)どこでも解決策を見つけることができません。 ..byte []変換のために保存された画像からストリームを作成できません

この現在のシナリオでは、.Droid.Resources.Drawableに私の共有コードからbyte[]にアクセスして変換したい画像がいくつかあります。これは私のCRUDの機能を、サーバーのエンドポイントとして設定したREST APIでテストしたいからです。

画像はアプリケーションでうまく表示されますが、何らかの理由でXamarinの画像をbyte[]に変換する過程で私の頭を歪ませることができません。私はそれを何度も「正常」で行った。C# ...

申し訳ありませんがコードがちょっと混乱していますが、私はあなたがそのアイデアを得ると確信しています。

  1. 私は.Droidストレージ(後でiOS向けに移植されます)
  2. 変換から画像を取得したいがbyte[]
  3. にイメージが私のAPIにそのbyte[]表現を送ると述べました。以下の例をベースに、私は新しいストリーム(new Stream(sauce)


    を作成しようとしてる

    C#: An instance of an abstract class can not be created

    :コードの現在の状態では

が、私はこのエラーを取得していますスニペットでhereが見つかり、全額がStenとVincentに送られます。

/* 
    * Takes an arbitrary string as a token, updates a record with dummy data and a placeholder_image. 
    */ 
    public async Task<string> PostUpdateFoundation(string arbitrary, Image img) 
    { 

     ImageSource sauce = ImageSource.FromFile("abc.png"); 
     byte[] byte_img = FromStreamToByte(new Stream(sauce)); //error occurs here 
     Debug.WriteLine("I'm in!"); 
     var client = new System.Net.Http.HttpClient(); 
     client.DefaultRequestHeaders.Add("Accept", "application/json"); 

     var content = new StringContent(arbitrary); 
     var response = await client.PostAsync(String.Format("http://some.api.to.test.com?s={0}&img={1}", arbitrary, byte_img), content); 
     var result = response.Content.ReadAsStringAsync().Result; 
     return result; 

    } 
    /* 
    * Attempts to convert an stream (based on image source) into a byte[]. 
    */ 
    public static byte[] FromStreamToByte (Stream input) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      input.CopyTo(ms); 
      return ms.ToArray(); 
     } 
    } 
+0

そして、あなたは何が原因ですか? –

+0

それを紛失して申し訳ありません。ちょうどこんなにも混乱してしまいました。 コードの現在の状態では、 ''新しいストリーム(ソース) 'を作成しようとしている行で、" C#:抽象クラスのインスタンスを作成できません "というエラーが表示されます。 – geostocker

+0

バイト配列をクエリ文字列パラメータとして含めるのはなぜですか?あなたはそれが何をすると思いますか?あなたは実質的に 'ToString()'を 'byte []'で呼び出しています。これはあなたが望むものにならない*本当に*です。私はあなたのイメージデータがバイナリデータとして(またはテキストが必要な場合)base64としてリクエストの本文に存在することを望みます。 –

答えて

0

・ホープ、このことができますPlugin.Media

  byte BImageSource = ReadFully(file.GetStream()); 
      var bytes = new byte[file.GetStream().Length]; //file is from the plugin and contains your image 
      file.GetStream().Position = 0; 
      file.GetStream().Read(bytes, 0, (int)file.GetStream().Length); 
      BImageSource = ReadFully(file.GetStream()); //BImageSource is your resource in bytes 

    byte[] ReadFully(Stream input) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      input.CopyTo(ms); 
      return ms.ToArray(); 
     } 
    } 

を使用してみてください!

関連する問題