2016-11-05 11 views
0

今日、ストリームにイメージを保存する方法を知っています(実際にはメモリに適切な用語を使用していない可能性があります)。これを行うにはC#、Thread、Memory

私はこれらの手順を続行すると思う: A - 最初のスレッドで: 1 - ファイル 2からImageオブジェクト(System.Drawing)を作成します - (システムをストリーミングするためにサムネイルを保存する - サムネイル 3を作成します。 IO) 4 - ストリームオブジェクトを2番目のスレッドに送ります。

B - 2番目のスレッドで: 1 - 最初のスレッドから 2のストリームを受信 - このストリーム 3とのBitmapImageオブジェクトを作成 - UI上に表示します。 (Wpf)

Thks。

+0

何T2が受信すると、彼らは同時に発生しないように、貯蓄と読みが共通のロックオブジェクトを必要とする、T1を送信するものと同じメモリである場合。 –

+0

なぜストリームを使用しますか? A)1 - イメージオブジェクトを作成します。オブジェクトを2番目のスレッドに送信します。 B)1.画像オブジェクトを受信する。 2. UIでの表示。 (Wpf) – Fabio

+0

@Fabio私はこれを試しましたが、私はT2によって送信されたオブジェクトを使用できなかったので、これを実行できませんでした。あなたにこれを行う方法を私に説明するための例があれば、あなたは私を見せることができます。 –

答えて

0

私は私が何をしたかをお見せ私のコードの一部を取得しました:UIスレッドで

public void CreateImgObj(object sender) 
{ 
    try 
    { 
     FileStream fs = File.Open((string)sender, FileMode.Open); 
     Bitmap dImg = new Bitmap(fs); 
     MemoryStream ms = new MemoryStream(); 
     dImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     BitmapImage bi_img = new BitmapImage(); 
     bi_img.BeginInit(); 
     bi_img.StreamSource = new MemoryStream(ms.ToArray()); 
     bi_img.EndInit(); 
     evt_send_img(bi_img); 
    } 
    catch (Exception e) 
    { 
     evt_error(e); 
    } 
} 

:一部のフォルダに私の画像を確認スレッドで

private void img_recieve(object sender) 
    { 
     try 
     { 
      Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => 
       { 
        items.Add(new Img { Img_In = (BitmapImage)sender }); 
       })); 
     } 
     catch (Exception e) 
     { 
      messageerreur(e); 
     } 
    } 

注:「img_recieve」は「evt_send_img」によって実行されます。

Thks

+0

バグを隠そうとしない限り、 'catch(Exception e)'をコード化しないでください。 – Enigmativity