PNG图片已经是透明的了,为什么贴图之后,还是有一个白底?

guguqiaqia 2009-09-28 04:34:19
PNG图片已经是透明的了,为什么贴图之后,还是有一个白底?

用的贴图函数是通常的BitBlt
...全文
3752 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
街坊跳舞 2009-10-12
  • 打赏
  • 举报
回复
使用AlphaBlend()函数替换你的BitBlt()函数
chenyu2202863 2009-10-11
  • 打赏
  • 举报
回复
你是不是把Image转为化了hBitmap类型?
如果是,那就是透明区域为白色
如果不是,转换代码那里有问题,给你看几个帮主函数


ATLINLINE HBITMAP AtlLoadGdiplusImage(ATL::_U_STRINGorID bitmap, ATL::_U_STRINGorID type = (UINT) 0)
{
USES_CONVERSION;

shared_ptr<Bitmap> pBitmap;

if( HIWORD(bitmap.m_lpstr) != NULL )
{
// Load from filename
pBitmap.reset(new Bitmap(T2CW(bitmap.m_lpstr)));
}
else if( type.m_lpstr != NULL && type.m_lpstr != RT_BITMAP )
{
// Loading PNG, JPG resources etc
WTL::CResource res;
if( !res.Load(type, bitmap) )
return NULL;

DWORD dwSize = res.GetSize();
HANDLE hMemory = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
if( hMemory == NULL )
return NULL;

::memcpy(::GlobalLock(hMemory), res.Lock(), dwSize);
::GlobalUnlock(hMemory);
IStream* pStream = NULL;
if( FAILED( ::CreateStreamOnHGlobal(hMemory, TRUE, &pStream) ) )
{
::GlobalFree(hMemory);
return FALSE;
}

pBitmap.reset(new Gdiplus::Bitmap(pStream));
pStream->Release();
}
else
{
// This only loads BMP resources
pBitmap.reset(new Gdiplus::Bitmap(_Module.GetResourceInstance(), (LPCWSTR) (UINT) bitmap.m_lpstr));
}

if( pBitmap == NULL )
return NULL;

HBITMAP hBitmap = NULL;
pBitmap->GetHBITMAP(NULL, &hBitmap);

return hBitmap;
}
fakemajia 2009-09-28
  • 打赏
  • 举报
回复
AlphaBlend + 一些处理,具体说不清,找找资料
hnzlk 2009-09-28
  • 打赏
  • 举报
回复
用gdi+就不要用BitBlt了。用drawImage
我是苦力 2009-09-28
  • 打赏
  • 举报
回复
bitblt 可以这样做吗?
没有做过.
不过使用GDI+ 肯定没有问题.

15,981

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧