Является ли BitmapSource единственным типом, который можно использовать в источнике изображения?
-
06-07-2019 - |
Вопрос
Мы можем использовать объект 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 больше не используется.
Решение
Нет, вы не можете использовать 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, поэтому любой из них можно использовать в этом контексте.