|

楼主 |
发表于 2004-5-22 19:04:00
|
显示全部楼层
Re: 不知能不能再优化?
我说的太简单了,下面给出我画透明Bar的函数,请问在这基础之上能不能优化.
其中:
typedef unsigned short COLOR16; // 16bits color
typedef COLORREF COLOR32; // 32bits color
函数中所有未定义的量都是全局变量
void DDAlphaBar(LPDIRECTDRAWSURFACE7 lpdds, int x1, int y1, int x2, int y2, COLOR32 color, int alpha)
{
int x, y;
COLOR16 color16 = RGB16Bit(color);
if(x1 < 0)
{
if(x2 < 0) return;
x1 = 0;
}
else
{
if(x2 >= SCREEN_WIDTH)
{
if(x1 >= SCREEN_WIDTH) return;
x2 = SCREEN_WIDTH - 1;
}
}
if(y1 < 0)
{
if(y2 < 0) return;
y1 = 0;
}
else
{
if(y2 >= SCREEN_HEIGHT)
{
if(y1 >= SCREEN_HEIGHT) return;
y2 = SCREEN_HEIGHT - 1;
}
}
int width = x2 - x1 + 1, height = y2 - y1 + 1;
DDCreateSurface(lpDDTemp, width, height, 0); // 0表示建在内存中
DDBltFast(lpDDTemp, 0, 0, lpdds, x1, y1, width, height, 0);
if(DDBeginDraw(lpDDTemp)) //获取页面指针存入GraphBuffer
{
for(x = 0; x < width; x++)
{
for(y = 0; y < height; y++)
{
GraphBuffer[GraphPitch * y + x] = _AlphaPixel(GraphBuffer[GraphPitch * y + x], color16, alpha);
} // end for y
} // end for x
DDEndDraw(lpDDTemp); //页面解锁
DDBltFast(lpdds, x1, y1, lpDDTemp, 0, 0, width, height, 0);
} // end if
} // end DDAlphaBar |
|