Frage

Wir verwenden Bitmapsource-Objekt als Inhalt einer Bildsteuerung, aber wenn ich nur Bitmap-Objekt haben, kann ich es direkt verwenden, wenn ich Bitmap konvertieren mit dem folgenden Verfahren Bitmapsouce:

        Bitmap bitmap = imageObjToBeConvert;
        IntPtr HBitmap = bitmap.GetHbitmap();
        result = Imaging.CreateBitmapSourceFromHBitmap
            (HBitmap,
            IntPtr.Zero,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());
        DeleteObject(HBitmap);
        bitmap.Dispose();

Es einige Zeit dauern. Gibt es eine Möglichkeit Bitmap direkt zu benutzen?

Und ich fand Bitmap scheint nicht direkt freigegeben werden, gibt es eine Probe Methode, um die Speicher sofort freizugeben, nachdem der Bitmapsouce nicht wieder verwendet wird.

War es hilfreich?

Lösung

Nein, können Sie nicht Bitmap direkt verwenden. Dies liegt daran, System.Drawing.Bitmap ein GDI + Bitmap ist, während Klassen wie BitmapImage in System.Windows.Media.Imaging sind D3D / DirectX.

In Bezug auf die Speichernutzung, können Sie es nicht direkt freigeben, aber es ist in der Regel eine Art von Caching, die im Hintergrund geht. Es gibt Möglichkeiten, die Ihnen eine BitmapImage laden kann, so dass er den Cache ignoriert.

Andere Tipps

  • System.Windows.Media.Imaging .. ::. Bitmapframe
  • System.Windows.Media.Imaging .. ::. Bitmap
  • System.Windows.Media.Imaging .. ::. CachedBitmap
  • System.Windows.Media.Imaging .. ::. ColorConvertedBitmap
  • System.Windows.Media.Imaging .. ::. CroppedBitmap
  • System.Windows.Media.Imaging .. ::. FormatConvertedBitmap
  • System.Windows.Media.Imaging .. ::. Rendertargetbitmap
  • System.Windows.Media.Imaging .. ::. TransformedBitmap
  • System.Windows.Media.Imaging .. ::. Writeablebitmap

Alle diese Klassen erben von Bitmapsource, so dass jeder von ihnen konnte in diesem Zusammenhang verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top