Ist Bitmap die einzige Art kann in Image Source verwendet werden?
-
06-07-2019 - |
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.
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.