Является ли BitmapSource единственным типом, который можно использовать в источнике изображения?

StackOverflow https://stackoverflow.com/questions/185741

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top