|
|
发表于 2005-8-23 17:11:00
|
显示全部楼层
Re: 请教:怎样去掉BMP图的背景色..
六楼的方法需要比较多的资源 [em1]
想了一个用glBlendFunc(*)的方法,我这里没编译器,不能测试,麻烦你自己试试 [em5]
/*
一些假设:
1、24位的位图(16位无ALPHA的位图同理);
2、位图的原点(0,0)位于左下角;
3、OpenGL使用RGBA模式。
*/
/*
思路:
创建这个图象的ALPHA数组,透明的位置设1.0,不透明的位置设0.0,在绘制图象之前,先将此ALPHA图绘上,再利用此时的源ALPHA绘制目标图象。
*/
//用到的数据:
BYTE colorKey[3]=...;
BYTE *image=...;
UINT width=...;
UINT height=...;
//创建ALPHA数组:
UINT size=width*height;
BYTE *alpha=new BYTE[size];
BYTE *pixel[3]=image;
for(int i=0; i<size; i++)
{
if(pixel[0]==colorKey[0] &&
pixel[1]==colorKey[1] &&
pixel[2]==colorKey[2])
{
alpha=0xFF; //透明
}
else
{
alpha=0; //不透明
}
}
//绘制过程:(x,y为图象的绘制位置)
glDisable(GL_BLEND);
glRasterPos(x,y);
glDrawPixels(width, height, GL_ALPHA, GL_UNSIGNED_BYTE, alpha);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glRasterPos(x,y);
glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, image);
glDisable(GL_BLEND);
/*
备注:
请将以上各段代码分别放入恰当的过程中,我这里未做划分;
代码可能存在不少拼写错误,请谅解 [em13]
*/ |
|