100分,求解决GDI+中设置透明色的方法
当我用GDI+把GIF动画解析出来后,在保存每一帧的时候怎么将其颜色设为透明色呢?
源GIF文件就是透明色的,可是我解出来时却有了白底,不知用什么方法变为透明。请高手帮忙。
问题点数:100、回复次数:5Top
1 楼lanphaday(恋花蝶)回复于 2004-11-03 23:13:02 得分 20
alpha值设为255?Top
2 楼ReDamos(康师傅)回复于 2004-11-03 23:22:29 得分 60
你这个问题我看得不是很明白,
不过还是贴一下我写的把图变成透明(该图贴在背景图上)的方法,希望对你有点帮助
GetClientRect(&rect);
BITMAP bm;
int x,y,i=0;
mdc =new CDC; 临时DC用于储存位图然后再贴到内存中
mdc->CreateCompatibleDC(dc);与当前dc匹配
bitmap=new CBitmap;
bgbmp=new CBitmap;
bitmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bitmap.bmp",IMAGE_BITMAP,150,150,LR_LOADFROMFILE);
bgbmp->m_hObject=(HBITMAP)::LoadImage(NULL,"bgbmp.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);
bitmap->GetObject(sizeof(BITMAP),&bm);
double *px=new double [bm.bmHeight*bm.bmWidthBytes];
bitmap->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
//计算透明度
for(y=0;y<bm.bmHeight;y++)
{
for(x=0;x<bm.bmWidth;x++)
{
px[x*3+y*bm.bmWidthBytes]*=0.5;
px[x*3+1+y*bm.bmWidthBytes]*=0.5;
px[x*3+2+y*bm.bmWidthBytes]*=0.5;
}
}
//调试
/*bitmap->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
mdc->SelectObject(bitmap);
dc->BitBlt(0,0,150,150,mdc,0,0,SRCCOPY);
MessageBox("f");*/
bgbmp->GetObject(sizeof(BITMAP),&bm);
double *px1=new double [bm.bmHeight*bm.bmWidthBytes];
bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);
for(y=0;y<150;y++)
{
for(x=0;x<150;x++)
{
px1[x*3+y*bm.bmWidthBytes]=px1[x*3+y*bm.bmWidthBytes]*0.5+px[i*3];
px1[x*3+1+y*bm.bmWidthBytes]=px1[x*3+1+y*bm.bmWidthBytes]*0.5+px[i*3+1];
px1[x*3+2+y*bm.bmWidthBytes]=px1[x*3+2+y*bm.bmWidthBytes]*0.5+px[i*3+2];
i++;
}
}
bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);
delete px;
delete px1;
mdc->SelectObject(bgbmp);
具体的方法就是把图的像素都读出来再存在数组中,然后改变他的rgb值达到透明的效果,
具体的算法就是图*透明度+背景图*(1-透明度)
我这个是半透明,所以就用了%50
希望对你有点作用Top
3 楼GameWeaverDummy(小白菜)回复于 2004-11-04 00:21:03 得分 10
顶Top
4 楼yangyue2846464(冬冬)回复于 2004-11-05 10:05:24 得分 0
好像不行哩~~~同志们还有别的方法吗?Top
5 楼xili()回复于 2004-11-08 16:34:31 得分 10
俺觉得gdi+太慢了Top




