본문 바로가기
Development/Visual C++

[MFC, WIN32] Picture Control Bitmap Drawing, Resizing

by qWooWp 2022. 9. 1.
반응형

MFC 방법

// 
HBITMAP imagehandle = LoadBitmap(DLLHandle, MAKEINTRESOURCE(103));

CImage img1;
int dimx = 400, dimy = 400;
img1.Attach(imagehandle);

CDC* screenDC = GetDC();
CDC* pMDC = new CDC;
pMDC->CreateCompatibleDC(screenDC);

CBitmap* pb = new CBitmap;
pb->CreateCompatibleBitmap(screenDC, dimx, dimy);

CBitmap* pob = pMDC->SelectObject(pb);
		
img1.StretchBlt(pMDC->m_hDC, 0, 0, 400, 400, 
	0, 0, img1.GetWidth(), img1.GetHeight(), SRCCOPY);
pMDC->SelectObject(pob);

CImage new_image;
new_image.Attach((HBITMAP)(*pb));

((CStatic*)GetDlgItem(IDC_SAMPLE_IMAGE0))->SetBitmap(new_image.Detach());
		
ReleaseDC(screenDC);

 

WIN32 방법

BITMAP bm;
::GetObject(imagehandle, sizeof(bm), &bm);

HDC hDC = ::GetDC(NULL);
HDC hSrcDC = ::CreateCompatibleDC(hDC);
HDC hDestDC = ::CreateCompatibleDC(hDC);

HBITMAP hOutBitmap = ::CreateCompatibleBitmap(hDC, 500, 500);
HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hDestDC, hOutBitmap);

HBITMAP hOldSrcBitmap = (HBITMAP)::SelectObject(hSrcDC, imagehandle);

::StretchBlt(hDestDC, 0, 0, 500, 500, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
		
::SelectObject(hDestDC, hOldBitmap);
::SelectObject(hSrcDC, hOldSrcBitmap);
				
//((CStatic*)GetDlgItem(IDC_SAMPLE_IMAGE0))->SetBitmap(hOutBitmap);
::SendMessage(hWnd0, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hOutBitmap);

::ReleaseDC(NULL, hDC);

 

이제 비인기 코드 예제들을 구하기 어려운 시절이 되버렸다. .. 

반응형

댓글