Ответы пользователя по тегу C++
  • Работа с изображениями в C++?

    @mardokvk
    Я junior-программист, мой профиль С#, изучаю С++.
    Считаю что может подойти GDI+
    Ответ написан
    Комментировать
  • Утечка памяти gdiplus?

    @mardokvk Автор вопроса
    Я junior-программист, мой профиль С#, изучаю С++.
    Я подозреваю что утечка идет в этой функции
    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 тогда не будет утечки, а если просто буду передавать его в функцию, то не придется создавать его множество раз.
    Ответ написан
    Комментировать
  • Bitmap, hBitmap как загрузить сохраненный bmp?

    @mardokvk Автор вопроса
    Я junior-программист, мой профиль С#, изучаю С++.
    Я просто не прописал этот код перед тем как запускать чтение файла.
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    Ответ написан
    Комментировать