Windows Vista Forums

BitmapSource Disposal/cleanup

  1. #1


    King Adrock Guest

    BitmapSource Disposal/cleanup

    I have a dispatchtimer pulling System.Drawing.Bitmap Images from my
    webcam and I am displaying them on my WPF UI. I am using a
    BitmapSource created by CreateBitmapSourceFromHBitmap using the
    ..GetHbitmap() method from my Bitmap object.

    I am getting some serious memory leaks - besides setting my ImageSource
    to null before assinging a new BitmapSource to it, is there anyway I
    can dispose of the object?


      My System SpecsSystem Spec

  2.   


  3. #2


    robertwl@nospam.microsoft.com Guest

    re: BitmapSource Disposal/cleanup

    You are likely leaking HBITMAPs. Are you doing something like this:

    BitmapSource bmpSrc = null;

    using(System.Drawing.Bitmap bmp = ...)
    {
    bmpSrc = System.Windows.Interop.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),...);
    }

    ?

    If not, then you're leaking HBITMAPs from the System.Drawing.Bitmap. Those need to be disposed after using them.

    -----Original Message-----
    From: King Adrock
    Posted At: Monday, July 24, 2006 4:31 PM
    Posted To: microsoft.public.windows.developer.winfx.avalon
    Conversation: BitmapSource Disposal/cleanup
    Subject: BitmapSource Disposal/cleanup


    I have a dispatchtimer pulling System.Drawing.Bitmap Images from my
    webcam and I am displaying them on my WPF UI. I am using a
    BitmapSource created by CreateBitmapSourceFromHBitmap using the
    ..GetHbitmap() method from my Bitmap object.

    I am getting some serious memory leaks - besides setting my ImageSource
    to null before assinging a new BitmapSource to it, is there anyway I
    can dispose of the object?

      My System SpecsSystem Spec

  4. #3


    King Adrock Guest

    Re: BitmapSource Disposal/cleanup

    I've made the changes you've shown me but I'm still leaking memory.
    Here is a snippit of code form my app - this is running at 30fps and I
    update whenever I receive a new frame from my Video Camera

    using( System.Drawing.Bitmap bmp = IMGManager.MainBitmap )
    {
    if (vidMain.Fill == null)
    {
    vidMain.Fill = new
    ImageBrush(System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),
    IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()));
    }
    else
    {
    ImageBrush bmpSrc = vidMain.Fill as ImageBrush;
    BitmapSource bsrc = bmpSrc.ImageSource as BitmapSource;
    bsrc = null; //no dispose method.. how do i clean up?
    bmpSrc.ImageSource =
    System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),
    IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
    }
    }

    I see a post on the MSDN forums quoting a simmilar issue - Our issue is
    there is no visible way of manually disposing of the interopbitmapsouce

    http://forums.microsoft.com/MSDN/Sho...23409&SiteID=1


    robertwl@nospam.microsoft.com wrote:
    > You are likely leaking HBITMAPs. Are you doing something like this:
    >
    > BitmapSource bmpSrc = null;
    >
    > using(System.Drawing.Bitmap bmp = ...)
    > {
    > bmpSrc = System.Windows.Interop.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),...);
    > }
    >
    > ?
    >
    > If not, then you're leaking HBITMAPs from the System.Drawing.Bitmap. Those need to be disposed after using them.
    >
    > -----Original Message-----
    > From: King Adrock
    > Posted At: Monday, July 24, 2006 4:31 PM
    > Posted To: microsoft.public.windows.developer.winfx.avalon
    > Conversation: BitmapSource Disposal/cleanup
    > Subject: BitmapSource Disposal/cleanup
    >
    >
    > I have a dispatchtimer pulling System.Drawing.Bitmap Images from my
    > webcam and I am displaying them on my WPF UI. I am using a
    > BitmapSource created by CreateBitmapSourceFromHBitmap using the
    > .GetHbitmap() method from my Bitmap object.
    >
    > I am getting some serious memory leaks - besides setting my ImageSource
    > to null before assinging a new BitmapSource to it, is there anyway I
    > can dispose of the object?



      My System SpecsSystem Spec


BitmapSource Disposal/cleanup
Similar Threads
Thread Forum
Trojan cleanup. Vista General
Disk Cleanup Crashes and Debugging
Disk Cleanup Tutorials
Problem creating an BitmapSource from an HBitmap in threaded code .NET General
How to put unmanaged CBitmap*->GetBitmapBits() into an BitmapSource-derivedclass Avalon