|
|

楼主 |
发表于 2006-1-27 08:39:00
|
显示全部楼层
Re:大家来看看这种用来实现镂空的Alpha通道创建方法,真
大家误会了,我这个说的镂空是3D游戏,上面的图就是3D游戏中的树枝的图片资源。
用单一的把黑色的Alpha值设为0,然后用Blend(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)混合的确可以实现镂空,但边缘有残留的黑色,用上面说的两张图片,Alpha通道从第二张产生的方法黑边就没有了。下面是这种方法的代码,大家帮忙看看这样写的目的是什么?
LoadBitmap(filename1); //先读取第一个图片的数据到m_pImageData中(RGB)
//定义一个将来存放RGBA数据的数组
unsigned char *alpha=new unsigned char[ 4 * m_iWidth * m_iHeight ];
for (int a=0; a<m_iWidth * m_iHeight; a++)
{
alpha[4*a] = m_pImageData[a*3]; // R
alpha[4*a+1]= m_pImageData[a*3+1]; // G
alpha[4*a+2]= m_pImageData[a*3+2]; // B
}
//下面的代码是产生Alpha通道的
FILE file= fopen(filename2, "rb");
fseek(file,54,SEEK_SET);
unsigned char temp[3];
for ( a=0; a<m_iWidth * m_iHeight; a++)
{
fread(temp,sizeof(unsigned char),3,file);
alpha[4*a+3]=(temp[0]>temp[1])?temp[0]:temp[1];
if(temp[2]>alpha[4*a+3])
alpha[4*a+3]=temp[2];
if(alpha[4*a+3]>50)
alpha[4*a+3]=255;
}
fclose(file);
|
|