@mardokvk
Я junior-программист, мой профиль С#, изучаю С++.

Как передавать Bitmap в функции? Как возвращать Bitmap?

У меня есть класс создающий hBitmap, я пытался создать класс который бы возвращал Bitmap.
У меня это не вышло. Как передавать созданный Bitmap в функции? Возможно ли это?

Мой код:
bool SearchToRegion(wchar_t* templateName, wchar_t nameClassWindow[100], Point& pt_center, Point startP, int Widht, int Height)
{
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

	Color clr, clr_main;
	int countpxMax = 0, countpx = 0;
	Bitmap bmpTemplate(LoadHbitmapFromFile(templateName), NULL);
	countpxMax = bmpTemplate.GetHeight() * bmpTemplate.GetWidth();
	bmpTemplate.GetPixel(0, 0, &clr);
	GDI_SearchToTrinity GDI(nameClassWindow, startP, Widht, Height);
	Bitmap bmpLauncher(GDI.hBitmap, NULL);
	bmpLauncher.Save(L"D:\\trinity.bmp", &bmp);
	bmpTemplate.Save(L"D:\\template.bmp", &bmp);

	for (int y = 0; y < bmpLauncher.GetHeight() && countpx != countpxMax; y++) //int x = 0; x < bmpLauncher.GetWidth(); x++
		for (int x = 0; x < bmpLauncher.GetWidth() && countpx != countpxMax; x++) //int y = 0; y < bmpLauncher.GetHeight(); y++
		{
			bmpLauncher.GetPixel(x, y, &clr_main);
			if (clr.GetValue() == clr_main.GetValue() && countpx != countpxMax)
			{
				countpx = Comparison_two_bmp(templateName, GDI.hBitmap, x, y);
				
			}
		}
	if (countpx == countpxMax)
	{
		RECT rc;
		GetWindowRect(FindWindow(nameClassWindow, NULL), &rc);
		SetForegroundWindow(FindWindow(nameClassWindow, NULL));
		SetCursorPos(rc.left + pt_center.X, rc.top + pt_center.Y);	
		return true;
	}
	else
		return false;
}

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;
			
		}
	
	return CountPx;
}
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Скорее всего не получается вернуть объект типа Bitmap, потому что его нельзя копировать. Попробуйте возвращать через std::move или возвращайте, например std::unique_ptr<gdiplus::Bitmap>.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы