2016-03-03 64 views
1

我正在开发一个简单的C#winform应用程序。 我创建一个位图并获得一个位图句柄。 并使用位图句柄。位图和句柄内存泄漏

那时候,我配置位图的时候,是位图处理空闲内存吗? 而当我使用DeleteObject方法释放内存句柄时,是位图处理?

感谢您的建议。

----------- ------------编辑

int prevCookie = 0; 
private void testMethod(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(100, 100); 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
     //Draw some shapes on bitmap 
    } 
    int hBitmap = bmp.GetHBitmap().ToInt32(); 
    //I used intel media sdk library. 
    int newCookie; 
    intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie); 
    if (prevCookie > 0) 
     intelMediaSdkVariable.RemoveItem2(prevCookie); 
    prevCookie = newCookie; 
    bmp.Dispose(); 
} 

当时,当我打电话TestMethod的1000倍,内存增加。 当我打电话给bmp.Dispose()时,hBitmap是免费的吗? 我该如何解决它?

+0

可能。取决于代码 – Plutonix

+1

Plutonix你应该发布它作为答案:) – Sakura

+0

我们需要看到_how_是否创建位图为例。对于我们所知道的所有你正在使用p-invoke。 _“我创建一个位图,并获得一个位图句柄”_担心我 – MickyD

回答

1

您忘记删除hBitmap手柄。

int prevCookie = 0; 
private void testMethod(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(100, 100); 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
     //Draw some shapes on bitmap 
    } 
    int hBitmap = bmp.GetHBitmap().ToInt32(); 
    //I used intel media sdk library. 
    int newCookie; 
    intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie); 
    if (prevCookie > 0) 
     intelMediaSdkVariable.RemoveItem2(prevCookie); 
    prevCookie = newCookie; 
    DeleteObject((IntPtr)hBitmap); // <---------- You dont have this line. 
    bmp.Dispose(); 
} 

[System.Runtime.InteropServices.DllImport("gdi32.dll")] 
public static extern bool DeleteObject(IntPtr hObject); 

我不使用英特尔媒体SDK库,因此,如果娄代码有内存泄漏或不,我不能说:

int newCookie; 
intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie); 
if (prevCookie > 0) 
    intelMediaSdkVariable.RemoveItem2(prevCookie); 
prevCookie = newCookie; 
+0

您的意思是删除句柄并同时处理位图。 配置位图不释放句柄内存。对? – Zuiche

+0

[GetHBitmap](https://msdn.microsoft.com/en-us/library/1dz311e4(v = vs.110).aspx)创建新对象,所以'bmp'&'hBitmap'是两个不同的对象。你的代码只处理一个。 – Sakura

+0

感谢您的回复。 – Zuiche