• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

BitmapSource Disposal/cleanup

K

King Adrock

#1
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 Computer

R

robertwl@nospam.microsoft.com

#2
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 Computer

K

King Adrock

#3
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/ShowPost.aspx?PostID=523409&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 Computer

Users Who Are Viewing This Thread (Users: 1, Guests: 0)