BitmapSource è l'unico tipo che può essere utilizzato in Image Source?
-
06-07-2019 - |
Domanda
Possiamo usare l'oggetto Bitmapsource come contenuto di un controllo Image, tuttavia se ho solo un oggetto Bitmap, posso usarlo direttamente, se converto Bitmap in Bitmapsouce usando il seguente metodo:
Bitmap bitmap = imageObjToBeConvert;
IntPtr HBitmap = bitmap.GetHbitmap();
result = Imaging.CreateBitmapSourceFromHBitmap
(HBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
DeleteObject(HBitmap);
bitmap.Dispose();
Ci vuole del tempo. Esiste un modo per utilizzare direttamente Bitmap?
E ho scoperto che BitmapSource sembra non poter essere rilasciato direttamente, esiste un metodo di esempio per rilasciare immediatamente la memoria, dopo che Bitmapsouce non viene usato di nuovo.
Soluzione
No, non puoi utilizzare Bitmap
direttamente. Questo perché System.Drawing.Bitmap
è un bitmap GDI +, mentre classi come BitmapImage
in System.Windows.Media.Imaging
sono D3D / DirectX .
Per quanto riguarda l'utilizzo della memoria, non è possibile rilasciarlo direttamente, ma di solito c'è una sorta di cache che va in background. Esistono modi per caricare un BitmapImage
in modo che ignori la cache.
Altri suggerimenti
- System.Windows.Media.Imaging .. ::. BitmapFrame
- System.Windows.Media.Imaging .. ::. BitmapImage
- 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
Tutte queste classi ereditano da BitMapSource, quindi ognuna di esse potrebbe essere utilizzata in quel contesto.