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);
これだけです。
ありがとうございます。
はOKに見えますが、多分ストリームが期待される形式を持っていません。このスレッドhttp://stackoverflow.com/questions/3886849/error-in-my-byte-to-wpf-bitmapimage-conversionを見てみましょう。 –
また、このブログの投稿は役に立ちます:http://tomlev2.wordpress.com/2009/02/05/wpf-paste-an-image-from-the-clipboard/ –
私は何をすべきかわかりませんこのフォーマットでは、ファイルからロードしていて、バイト配列全体をパラメータとして使用しているので問題にはなりません。 –