CImage 加载透明PNG图片

CImage m_img;

void LoadImage();
void SetAlphaBits();


void CceshipngView::LoadImage()
{
//第1步 寻找资源
HRSRC  hrsrc_resource=::FindResource(NULL,MAKEINTRESOURCE(IDB_NARUTO),"PNG");
if(!hrsrc_resource)
{
MessageBox("FindResource failed");
return;
}

//第2步 加载资源
HGLOBAL hglobal_resource=::LoadResource(NULL,hrsrc_resource);
if(!hglobal_resource)
{
MessageBox("LoadResource failed");
return;
}

//第3步 加载资源
LPVOID pImgData=::LockResource(hglobal_resource);
if(!pImgData)
{
    MessageBox("LockResource failed");
return;
}

//第4步 获取图片的大小
DWORD  ImgSize=::SizeofResource(NULL,hrsrc_resource);


//第5步 创建IStream
IStream *pStream=NULL;

if(S_OK!=CreateStreamOnHGlobal(NULL,TRUE,&pStream))
{
MessageBox("CreateStreamOnHGlobal failed");
return;
}

ULONG pcbWritten;
pStream->Write(pImgData,ImgSize,&pcbWritten);

m_img.Destroy();
if(S_OK!=m_img.Load(pStream))
{
MessageBox("Load  Image failed");
return;
}


pStream->Release();
pStream=NULL;


}

//设置为透明
void CceshipngView::SetAlphaBits()
{
//获取图片的HBITMAP
HBITMAP hbitmap=(HBITMAP)m_img;
 
BITMAP bitmapInfo;

    ::GetObject( hbitmap, sizeof(BITMAP), &bitmapInfo);

if(32!=bitmapInfo.bmBitsPixel||NULL==bitmapInfo.bmBits)
{
MessageBox("not a  png  Image or  no  Image  Data ");
return;
}

BYTE *ptr=(BYTE *)bitmapInfo.bmBits;
for(int i=0;i<bitmapInfo.bmWidth;i++)
for(int j=0;j<bitmapInfo.bmHeight;j++)
{
      BYTE  alpha=ptr[3];
  ptr[0]=(ptr[0]*alpha)/255;
  ptr[1]=(ptr[1]*alpha)/255;
  ptr[2]=(ptr[2]*alpha)/255;
  ptr+=4;
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值