Is there an easier way to do it than this, and if this is the only way, are there any potential memory leaks here?
CImage img1;
int dimx = 100, dimy = 100;
img1.Load(filename);
//filename = path on local system to the bitmap
CDC *screenDC = GetDC();
CDC *pMDC = new CDC;
pMDC->CreateCompatibleDC(screenDC);
CBitmap *pb = new CBitmap;
pb->CreateCompatibleBitmap(screenDC, dimx, dimy);
CBitmap *pob = pMDC->SelectObject(pb);
pMDC->SetStretchBltMode(HALFTONE);
img1.StretchBlt(pMDC->m_hDC,0, 0, dimx, dimy, 0, 0, img1.GetWidth(), img1.GetHeight(), SRCCOPY);
pMDC->SelectObject(pob);
CImage new_image;
new_image.Attach((HBITMAP)(*pb));
//
m_pictureCtrl.SetBitmap(new_image.Detach());
ReleaseDC(screenDC);
I see no need for the CImage new_image (as SetBitmap takes a HBITMAP which you already have through pb) and pb and pMDC must be deleted (after detaching the HBITMAP), but for the rest it seems correct.
CImage img1;
int dimx = 100, dimy = 100;
img1.Load(filename);
//filename = path on local system to the bitmap
CDC *screenDC = GetDC();
CDC mDC;
mDC.CreateCompatibleDC(screenDC);
CBitmap b;
b.CreateCompatibleBitmap(screenDC, dimx, dimy);
CBitmap *pob = mDC.SelectObject(&b);
mDC.SetStretchBltMode(HALFTONE);
img1.StretchBlt(mDC.m_hDC, 0, 0, dimx, dimy, 0, 0, img1.GetWidth(), img1.GetHeight(), SRCCOPY);
mDC.SelectObject(pob);
m_pictureCtrl.SetBitmap((HBITMAP)b.Detach());
ReleaseDC(screenDC);
Of course I would put the scaling of the CImage/CBitmap into a separate function (make it reusable).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With