2

我们可以使用 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不再使用后。

4

2 回答 2

1
  • 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,因此它们中的任何一个都可以在该上下文中使用。

于 2008-10-09T03:08:02.923 回答
1

不,您不能Bitmap直接使用。这是因为System.Drawing.Bitmap它是一个 GDI+ 位图,而像BitmapImagein这样的类System.Windows.Media.Imaging是 D3D/DirectX。

关于内存使用,您不能直接释放它,但通常在后台会有某种缓存。您可以通过多种方式加载 aBitmapImage以使其忽略缓存。

于 2008-10-09T19:31:13.873 回答