Member 12633893 Ответов: 1

CDC *screendc = getdc (); предоставление ошибки "значение типа "HDC" не может быть использовано для инициализации сущности типа " CDC *"


Привет У меня возникли проблемы с фрагментом кода, предназначенным для масштабирования изображения.Я нашел Пейс кода, чтобы сделать это здесь Масштабирование CImage[^Моя проблема заключается в том, что строка CDC *screenDC = GetDC(); выдает ошибку "значение типа "HDC" не может быть использовано для инициализации сущности типа "CDC *". Я не совсем уверен, как это исправить, так как все мои учетные записи должны работать правильно, и большинство других решений предлагают это в качестве примера.

Вот код
int iNewWidth = 2048;
	int iNewHeight = 2048;

	CImage image;
	image.Load(_T("C:\\Image.jpg"));
	
	CDC *screenDC = GetDC(); //Section that gives error
	CDC *pMDC = new CDC;
	pMDC->CreateCompatibleDC(screenDC);

	CBitmap *pb = new CBitmap;
	pb->CreateCompatibleBitmap(screenDC, iNewWidth, iNewHeight);

	CBitmap *pob = pMDC->SelectObject(pb);
	image.StretchBlt(pMDC->m_hDC,0, 0, iNewWidth, iNewHeight, 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
	pMDC->SelectObject(pob);
	
	CImage new_image;
	new_image.Attach((HBITMAP)(*pb));
	new_image.Save(_T("c:\\NewImage.jpg"));
	new_image.Detach();
	ReleaseDC(screenDC);


Спасибо

Что я уже пробовал:

Удаление этой линии приводит к тому, что изображение становится черным после масштабирования.

barneyman

вы находитесь в производном классе CWnd, когда вызываете это?

Похоже, вы получаете :: GetDC, который возвращает HDC

Member 12633893

Он находится в функции void, которая вызывается из main () приложения, если вы это имеете в виду?

Mohibur Rashid

Ваш код представляет собой смесь простых функций win32 и MFC. В MFC вы не взаимодействуете с основной функцией. CWnd:: GetDC () return CDC* с другой стороны :: GetDC return HDC.
CDC *screenDC = GetDC();
должно быть
HDC screenDC = GetDC();
а также заменить все CDC* на HDC

1 Ответов

Рейтинг:
2

KarstenK

Я предполагаю, что вы не находитесь в производном классе CWnd, где он является функцией-членом.

По этой причине есть функция FromHandle() доступный.

Прочтите еще немного о графике и примерах кода, чтобы заполнить пробелы в знаниях. ;-)