Я подозреваю что утечка идет в этой функции
int Comparison_two_bmp(wchar_t* templateName, HBITMAP hBmp, int x, int y)
{
Color clr_t, clr_main;
int CountPx = 0;
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Bitmap bmpTemplate(LoadHbitmapFromFile(templateName), NULL);
Bitmap bmp(hBmp, NULL);
for (int y_t = 0; y_t < bmpTemplate.GetHeight(); y_t++)
for (int x_t = 0; x_t < bmpTemplate.GetWidth(); x_t++)
{
bmp.GetPixel(x + x_t, y + y_t, &clr_main);
bmpTemplate.GetPixel(x_t, y_t, &clr_t);
if (clr_t.GetValue() == clr_main.GetValue())
CountPx++;
else
return CountPx;
//cout << "CountPX(" << CountPx << ") - " << "xt(" << x + x_t << ") - " << "yt(" << y + y_t << ") - " << "x_t(" << x_t << ") - " << "y_t(" << y_t << ")" << endl;
}
//bmp.Save(L"bmp_test.bmp", &png);
return CountPx;
}
я предполагаю что постоянное создание Bitmap и отсутствие адекватной его очистки может приводить к утечке.
Bitmap bmpTemplate(LoadHbitmapFromFile(templateName), NULL);
Bitmap bmp(hBmp, NULL);
Вот эти две функции по факту вызываются каждый раз когда вызывается функция, а функция вызывается часто из-за того что она в цикле.
Соответственно эти Bitmap не удаляются и не очищаются после создания, скорее всего она и создают утечку.
Вопрос в том как этого избежать?
Тут у меня две проблемы, вопрос в том как передать Bitmap в функцию, чтобы не приходилось его создавать снова и снова?
Второй вопрос, как удалять Bitmap?
Если бы я смог удалять Bitmap тогда не будет утечки, а если просто буду передавать его в функцию, то не придется создавать его множество раз.