图像透明半透明处理
CClientDC hdc(this); CDC mdc ; mdc.CreateCompatibleDC (hdc); const int xst
CClientDC hdc(this);
CDC mdc ;
mdc.CreateCompatibleDC (&hdc);
const int xstart = 100 ;
const int ystart = 100 ;
unsigned char *px1,*px2 ;
HBITMAP bg ,fg;
BITMAP bm1,bm2 ;
bg=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"2007.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(bg,sizeof(BITMAP),&bm1);
px1 = new unsigned char [bm1.bmHeight *bm1.bmWidthBytes ];
::GetBitmapBits(bg,bm1.bmHeight *bm1.bmWidthBytes ,px1); //将图像像素存入数组
///处理前景图
fg=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"532.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
::GetObject(fg,sizeof(BITMAP),&bm2);
px2 = new unsigned char [bm2.bmHeight *bm2.bmWidthBytes ];
::GetBitmapBits(fg,bm2.bmHeight *bm2.bmWidthBytes ,px2); //将图像像素存入数组
int xend,yend ;
int x,y ,i,rgb_b ;
int pxBytes = bm1.bmBitsPixel /8 ;
xend = xstart +135 ;
yend = ystart +100 ;
//处理背景图像像素颜色
for(y=ystart ;y for(x=xstart ;x {
rgb_b = y*bm1.bmWidthBytes + x*pxBytes;
px1[rgb_b] = px1[rgb_b] * 0.7 ;
px1[rgb_b+1] = px1[rgb_b+1] *0.7 ;
px1[rgb_b+2] = px1[rgb_b+2] *0.7 ;
}
//处理前景图像像素颜色
for(y=0 ;y for(x=0; x {
rgb_b =y*bm2.bmWidthBytes +x*pxBytes ;
i = (ystart+y) *bm1.bmWidthBytes +(xstart+x) * pxBytes;
px2[rgb_b] =px2[rgb_b] *0.3 + px1[i];
px2[rgb_b+1] =px2[rgb_b+1] *0.3 + px1[i+1] ;
px2[rgb_b+2] =px2[rgb_b+2] *0.3 + px1[i+2] ;
}
::SetBitmapBits(fg,bm2.bmHeight *bm2.bmWidthBytes ,px2);
mdc.SelectObject (bg) ;
::BitBlt (hdc,0,0,800,600,mdc,0,0,SRCCOPY) ;
mdc.SelectObject (fg) ;
::BitBlt (hdc,ystart,ystart,135,100,mdc,0,0,SRCCOPY) ;
::ReleaseDC(this->m_hWnd, hdc);
delete [] px1 ;
delete [] px2 ;
本文作者:三月软件工作室 来源:http://www.cnblogs.com/chjw8016/
CIO之家 www.ciozj.com 微信公众号:imciow
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读