直接代码
Gdiplus::Image* IPicture2Image( IPicture* pPicture )
{
ASSERT(NULL != pPicture);
if( NULL == pPicture )
{
return NULL;
}
CDC dcScreen;
dcScreen.Attach(::GetDC(NULL));
// create memory dc
CDC dcMem;
VERIFY(dcMem.CreateCompatibleDC(&dcScreen));
// get picture dimension
OLE_XSIZE_HIMETRIC nPictureWidth = 0;
OLE_XSIZE_HIMETRIC nPictureHeight = 0;
pPicture->get_Width(&nPictureWidth);
pPicture->get_Height(&nPictureHeight);
// to pixel
CSize sz((LONG)nPictureWidth, (LONG)nPictureHeight);
dcMem.HIMETRICtoDP(&sz);
// bitmap
CBitmap bmp;
VERIFY(bmp.CreateCompatibleBitmap(&dcScreen, sz.cx, sz.cy));
CBitmap* pOldBmp = dcMem.SelectObject(&bmp);
// draw picture
pPicture->Render(dcMem.GetSafeHdc(), 0,
0, sz.cx, sz.cy,
0, nPictureHeight, nPictureWidth, -nPictureHeight, NULL);
// IPicture加载的图片没有透明度,直接构造
Gdiplus::Bitmap* pImg = Gdiplus::Bitmap::FromHBITMAP((HBITMAP)bmp.GetSafeHandle(),NULL)
dcMem.SelectObject(pOldBmp);
bmp.DeleteObject();
dcMem.DeleteDC();
VERIFY(::ReleaseDC(NULL,dcScreen.GetSafeHdc() ));
return pImg;
}
绘制效果