| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1637 人关注过本帖
标题:[原创]基于DirectDraw的AlphaBlent半透明混色
只看楼主 加入收藏
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
结帖率:100%
收藏
 问题点数:0 回复次数:1 
[原创]基于DirectDraw的AlphaBlent半透明混色

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: flyue E-mail:ljypct@21cn.com QQ:406088125
*/ 时间: 2007-8-3 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


基于DirectDraw的AlphaBlent半透明混色实现代码:

//获得Direct Surface上的一点像素值
void DDGetPixel(BYTE *bits,int X,int Y,int Pitch,int Depth,BYTE *Pixel)
{
int pos=Pitch*Y+Depth*X;
for(int i=0;i<Depth;i++)
Pixel[i]=bits[pos+i];
}

//设置Direct Surface上的一点像素值
void DDSetPixel(BYTE *bits,int X,int Y,int Pitch,int Depth,BYTE *Pixel)
{
int pos=Pitch*Y+Depth*X;
for(int i=0;i<Depth;i++)
bits[pos+i]=Pixel[i];
}

//Alpha Blent函数
void AlphaBlent(BYTE *Target,int X,int Y,BYTE *Source,int SX,int SY,int Width,int Height,int Pitch,int Depth,BYTE *Col,double Alpha)
{
int TrnsX;
int TrnsY;
BYTE RGB1[5],RGB2[5],RGB3[5];
for(TrnsY=Y;TrnsY<=Y+Height-1;TrnsY++)
{
for(TrnsX=X;TrnsX<=X+Width-1;TrnsX++)
{
DDGetPixel(Source,TrnsX+SX-X,TrnsY+SY-Y,Pitch,Depth,RGB2);

if((RGB2[0]!=Col[0])||(RGB2[1]!=Col[1])||(RGB2[2]!=Col[2]))
{
double Alpha2=1-Alpha;
int Red2=RGB2[2];
int Green2=RGB2[1];
int Blue2=RGB2[0];

DDGetPixel(Target,TrnsX+X,TrnsY+Y,Pitch,Depth,RGB1);

int Red=RGB1[2];
int Green=RGB1[1];
int Blue=RGB1[0];

double RedF=Red*Alpha+Red2*Alpha2;
double GreenF=Green*Alpha+Green2*Alpha2;
double BlueF=Blue*Alpha+Blue2*Alpha2;

RGB3[0]=(BYTE)BlueF;
RGB3[1]=(BYTE)GreenF;
RGB3[2]=(BYTE)RedF;

DDSetPixel(Target,TrnsX+X,TrnsY+Y,Pitch,Depth,RGB3);
}
}
}
}

说明:要求Direct颜色设置为24,
ddsd为一个DDSURFACEDESC结构,
Pitch可以用lpDDSPic->Lock(&ddsd,...)来获得ddsd->lPitch,
Depth=ddsd.ddpfPixelFormat.dwRGBBitCount/8;

搜索更多相关主题的帖子: AlphaBlent DirectDraw 半透明 中国 像素 
2007-08-03 14:48
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
以上代码速度超慢,大家能告诉我解决的办法吗?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2007-08-03 19:58
快速回复:[原创]基于DirectDraw的AlphaBlent半透明混色
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024121 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved