主题:SOUI中绘制HBITMAP

admin 2018年12月08日 141

直接在RT->getDC上绘制HBITMAP会导致alpha通道丢失,需要使用gdiplus来绘制。

 下面是关键代码:


void SBmpViewer::OnPaint(IRenderTarget *pRT)
        {
                if(!m_hBmp) return;
                HDC hdc = pRT->GetDC();
                CRect rc = GetClientRect();
                Gdiplus::Graphics *p = new Gdiplus::Graphics(hdc);
                Gdiplus::Bitmap *pImg = Gdiplus::Bitmap::FromHBITMAP(m_hBmp,NULL);
                p->DrawImage(pImg,rc.left,rc.top,rc.Width(),rc.Height());
                delete pImg;
                delete p;
                pRT->ReleaseDC(hdc);
        }