Является ли BitmapSource единственным типом, который можно использовать в Image Source?
Мы можем использовать объект Bitmapsource в качестве содержимого элемента управления Image. Однако, если у меня есть только объект Bitmap, могу ли я использовать его напрямую, если я преобразую Bitmap в Bitmapsouce, используя следующий метод:
Bitmap bitmap = imageObjToBeConvert;
IntPtr HBitmap = bitmap.GetHbitmap();
result = Imaging.CreateBitmapSourceFromHBitmap
(HBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
DeleteObject(HBitmap);
bitmap.Dispose();
Это займет некоторое время. Есть ли способ использовать Bitmap напрямую?
И я обнаружил, что BitmapSource, по-видимому, не может быть выпущен напрямую. Существует ли пример метода освобождения памяти сразу после того, как Bitmapsouce больше не используется.
2 ответа
Нет, вы не можете использовать Bitmap
непосредственно. Это потому что System.Drawing.Bitmap
это растровое изображение GDI+, в то время как классы BitmapImage
в System.Windows.Media.Imaging
являются D3D/DirectX.
Что касается использования памяти, вы не можете освободить ее напрямую, но обычно есть какое-то кэширование, которое идет в фоновом режиме. Есть способы, которыми вы можете загрузить BitmapImage
так что он игнорирует кеш.
- 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
Все эти классы наследуются от BitMapSource, поэтому любой из них может быть использован в этом контексте.