Является ли 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, поэтому любой из них может быть использован в этом контексте.

Другие вопросы по тегам