画面に表示する必要がある画像データを含む ushort[] があり、その時点で Windows.System.Drawing.Bitmap を作成し、これを BitmapImage に変換していますが、これは遅くて非効率な方法のように感じます。
ushort[] の BitmapImage を作成する最速の方法は誰ですか?
または、代わりにデータから ImageSource オブジェクトを作成しますか?
ありがとう、
エーモン
画面に表示する必要がある画像データを含む ushort[] があり、その時点で Windows.System.Drawing.Bitmap を作成し、これを BitmapImage に変換していますが、これは遅くて非効率な方法のように感じます。
ushort[] の BitmapImage を作成する最速の方法は誰ですか?
または、代わりにデータから ImageSource オブジェクトを作成しますか?
ありがとう、
エーモン
BitmapをBitmapImageに変換するための以前の方法は次のとおりです。
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
私はそれを使用してそれをスピードアップすることができました
Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
編集:これを使用する人は誰でも、bitmap.GetHbitmapがアンマネージオブジェクトを作成することを知っている必要があります。これはアンマネージであるため、.netガベージコレクターによって取得されず、メモリリークを回避するために削除する必要があります。これを解決するには、次のコードを使用してください:
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
IntPtr hBitmap = bitmap.GetHbitmap();
try
{
imageSource = Imaging.CreateBitmapSourceFromHBitmap(hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
catch (Exception e) { }
finally
{
DeleteObject(hBitmap);
}
(のようなdllをインポートする必要はあまりありませんが、これはmsdnから取得されたものであり、この問題を回避する唯一の方法のようです-http: //msdn.microsoft.com/en-us/library/1dz311e4.aspx)