2010-02-26 3 views
3

더 쉬운 방법이 있을까요? 이것이 유일한 방법 일 경우 여기에 잠재적 인 메모리 누수가 있습니까? 합니다 (HBITMAP를 분리 한 후)와 PB (SetBitmap은 이미 PB를 통해이 HBITMAP을 필요로)와 PMDC는 삭제해야합니다크기가 조정 된 비트 맵 파일을 MFC 그림 컨트롤로 설정

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); 
+1

다른 사람이이 이미지를 찾고 있지만 크기를 조정할 필요가없는 경우에는 ((CStatic *) GetDlgItem (MyImageControl)) -> SetBitmap ((HBITMAP) myCImage.Detach())' Load를 호출 한 후 – Casebash

답변

7

은 내가 C 화상의 new_image에 대한 필요성을하지 않지만, 나머지는 올바른 것 같다.

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); 

물론 CImage/CBitmap의 배율을 별도의 함수 (재사용 가능)에 넣을 수 있습니다.

+0

스케일 된 이미지의 byte 버퍼를 얻는 방법? – DevAndroid

관련 문제