2011-05-13 8 views
3

Imageコントロールをバイト配列からロードしようとしましたが、私は複数のソリューションをオンラインで見つけましたが(特にこのサイト)、何も動作していないようです。 私の主な目標は、ImageSourceをバイト配列から取得し、それをコンバータから返すことでした。バイト配列からWPFイメージコントロールをロードしています

私が試してみた:

BitmapImage bi = new BitmapImage(); 
bi.BeginInit(); 
bi.StreamSource = new MemoryStream(lBytes); 
bi.EndInit(); 

をしかし、これはで失敗します。この操作を完了するのに適し

非サポート例外

ませイメージングコンポーネントが見つかりませんでした。

Bitmapを最初に読み込み、そこからImageSourceを取得しようとしました。

using (MemoryStream lMem = new MemoryStream(lBytes)) 
{ 
     TypeConverter tc = TypeDescriptor.GetConverter(typeof(System.Drawing.Bitmap)); 
     System.Drawing.Bitmap b = (System.Drawing.Bitmap)tc.ConvertFrom(lBytes); 
     lResult = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
      b.GetHbitmap(), 
      IntPtr.Zero, 
      System.Windows.Int32Rect.Empty, 
      BitmapSizeOptions.FromEmptyOptions()); 

     b.Dispose(); 
} 

しかし、これはとConvertFromに失敗した「パラメータが有効ではありません。」

私のファイルシステムに有効なPNGファイルをロードするときは、これがすべてです。

私はアイデア、任意の手掛かりが不足していますか?

ありがとうございました。

編集:

さてさて、問題は、私は

using (FileStream lFileStream = new FileStream(pFilePath, FileMode.Open)) 
{ 
    using (StreamReader lReader = new StreamReader(lFileStream)) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      string lString = lReader.ReadToEnd(); 
      bf.Serialize(ms, lString); 
      ms.Seek(0, 0); 
      lImage = ms.ToArray(); 
     } 
     lResult = new Graphic(lImage); 
    } 
} 

を使用していた

...ファイルをロードする私の方法でした。しかし、その後、私が使用できることを読む:

lImage = File.ReadAllBytes(pFilePath); 

これだけです。

ありがとうございます。

+1

はOKに見えますが、多分ストリームが期待される形式を持っていません。このスレッドhttp://stackoverflow.com/questions/3886849/error-in-my-byte-to-wpf-bitmapimage-conversionを見てみましょう。 –

+0

また、このブログの投稿は役に立ちます:http://tomlev2.wordpress.com/2009/02/05/wpf-paste-an-image-from-the-clipboard/ –

+0

私は何をすべきかわかりませんこのフォーマットでは、ファイルからロードしていて、バイト配列全体をパラメータとして使用しているので問題にはなりません。 –

答えて

0

最初の解決策は正しく動作しますが、問題は配列をビットマップに変換する方法ではなく配列バイトを読み取る方法です。
私はそのソリューションを何回も使用してきました。私のソリューションとあなたのソリューションの違いは、ファイルを読み込んでそれを配列に変換する方法です。

私は単純に使用します。

System.IO.File.ReadAllBytes(filepath) 
+0

確かに、それは私が使ったものです:) –

関連する問題