2009-04-28 8 views
3

私はデシベルから(バイト[])バイトの配列を取得し、以下の方法で使用してイメージコントロールにレンダリング:だからWPFでImage.Clone()をどのように達成できますか?

public Image BinaryImageFromByteConverter(byte[] valueImage) 
    { 
     Image img = new Image(); 
     byte[] bytes = valueImage as byte[]; 
     MemoryStream stream = new MemoryStream(bytes); 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.StreamSource = stream; 
     image.EndInit(); 
     img.Source = image; 
     img.Height = 240; 
     img.Width = 240; 
     return img; 
    } 

を今それがレンダリングされ、私は「コピー」からImage.Sourceしたいです画像別の要素に(コントロール)、例えば:段落..

paragraph1.Inlines.Add(new InlineUIContainer(ImageOne)); 

しかしナッシングが表示されたら、私はImageOne.Sourceを使用して新しいイメージを作成しようとするんだけど、ウリで、この例を見つけました(@「パス」) BitmapImageがbyte []型から来ているため、このメソッドを適用できません。

Image img = new Image(); 
img.Source = new BitmapImage(new Uri(@"c:\icons\A.png")); 

この問題を解決してくれてありがとう!

+0

を私は(お勧めしません。ピクセル形式、幅、高さ、ストライドをシリアライズせずにストリームから画像をシリアライズします。 - これはバグのオープンですか? –

+0

BitmapSourceをイメージとして使用する場合、バッファを読み取り、バッファから新しいBitmapSourceを作成できます。 –

答えて

3

ただ、新しいイメージ・要素を作成し、同じのBitmapImageにそのソースを設定します。

byte[] imageInfo = File.ReadAllBytes("IMG_0726.JPG"); 

BitmapImage image; 

using (MemoryStream imageStream = new MemoryStream(imageInfo)) 
{ 
    image = new BitmapImage(); 
    image.BeginInit(); 
    image.CacheOption = BitmapCacheOption.OnLoad; 
    image.StreamSource = imageStream; 
    image.EndInit(); 
} 

this.mainImage.Source = image; 
this.secondaryImage.Source = image; 

また、あなただけの他の1つのソースコピーした場合に動作します:

this.mainImage.Source = image; 
this.secondaryImage.Source = this.mainImage.Source; 
+0

この方法でイメージからソースをコピーすることはできません。同じオブジェクトを2番目のオブジェクトにアタッチしようとする前に、最初のメディアからメディアを切断する必要があります。 –

+0

BitmapCacheOption.OnLoadで行うことができます。ファイルをロックしません。私はコードをテストし、それは動作します。 – RandomEngy

関連する問題