各位大哥看看,为什么我显示的PNG图片有黑框???PNG图片的边缘为渐变透明的。渐变透明的地方变成了黑框
BOOL OnEraseBkgnd()
{
HBITMAP hBitmap;
BITMAP m_bitmap;
hBitmap=LoadImgFormRs(IDR_PNG_StatusBar,L"PNG");
GetObject(hBitmap,sizeof(BITMAP),&m_bitmap);
HDC hDC,hDCmem;
PAINTSTRUCT ps;
hDC=BeginPaint(g_hWnd,&ps);
hDCmem=CreateCompatibleDC(hDC);
SelectObject(hDCmem,hBitmap);
RECT rc;
GetClientRect(g_hWnd,&rc);
StretchBlt(hDC,0,0,rc.right,rc.bottom,hDCmem,0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,SRCCOPY);
EndPaint(g_hWnd,&ps);
DeleteDC(hDCmem);
DeleteObject(hBitmap);
return TRUE;
}
LoadImgFormRs函数返回HBITMAP
HBITMAP LoadImgFormRs(UINT pResourceID,LPCTSTR pResourceType)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
Gdiplus::GdiplusStartup(&m_gdiplusToken,&gdiplusStartupInput,NULL);//初始化GDI
HBITMAP hBitmap=NULL;
HINSTANCE hInstance;
HRSRC hResource;
DWORD dwRsSize;
HGLOBAL hRsBuf;
const void* pRsData;
IStream* pIStream = NULL;
hInstance=::LoadLibrary(L"Resources.dll");
if(!hInstance)
return NULL;
hResource=FindResource(hInstance,MAKEINTRESOURCE(pResourceID),pResourceType);
if(!hResource)
return NULL;
dwRsSize=SizeofResource(hInstance,hResource);
if(!dwRsSize)
return NULL;
pRsData=LockResource(LoadResource(hInstance,hResource));
if(!pRsData)
return NULL;
hRsBuf=GlobalAlloc(GMEM_MOVEABLE,dwRsSize);
if (!hRsBuf)
{
GlobalFree(hRsBuf);
return NULL;
}
void* pRsBuf = GlobalLock(hRsBuf);
if(!pRsBuf)
{
GlobalUnlock(hRsBuf);
GlobalFree(hRsBuf);
return NULL;
}
CopyMemory(pRsBuf, pRsData, dwRsSize);
if(CreateStreamOnHGlobal(hRsBuf, FALSE, &pIStream)==S_OK)
{
Gdiplus::Image *pImage = Gdiplus::Image::FromStream(pIStream);
Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromStream(pIStream);
pIStream->Release();
GlobalUnlock(hRsBuf);
GlobalFree(hRsBuf);
Gdiplus::Status result = pBitmap->GetLastStatus();
if(result==Gdiplus::Ok)
{
pBitmap->GetHBITMAP(NULL, &hBitmap);
}
delete pBitmap;
}
GlobalUnlock(hRsBuf);
GlobalFree(hRsBuf);
FreeLibrary(hInstance);
GdiplusShutdown(m_gdiplusToken);
return hBitmap;
}