注意,分割后的pBitmap一定要是8字节对齐,这是优化的一个重要条件,所以,我的算法中: BYTE* p = new BYTE[lSize*2+8]; BYTE* pOrig = p; p += (DWORD)p%8; WORD* color = (WORD*)p; 这是不规范的写法,把指针强行改变为8位对齐,实际使用的时候,要记住释放的原始指针不是p,而是pOrig,在这里,我没有释放分配的内存,请谅解。 //----------------------------------------------------------------------- // Name: SplitRGBA( DWORD* pRGBABuffer, LPBYTE* pAlpha, LPWORD* pBitmap, long lWidth, long lHeight ) // Desc: // Time: 2002.06.22 00:36 // Author: RealRender // Para: // Return: // Note: 把从32bit的缓冲建立16bit的565缓冲和8bit的alpha通道 //----------------------------------------------------------------------- void SplitRGBA( DWORD* pRGBABuffer, LPBYTE* pAlpha, LPWORD* pBitmap, long lWidth, long lHeight ) { long lSize = lWidth*lHeight; BYTE* alpha = new BYTE[lSize]; BYTE* p = new BYTE[lSize*2+8]; // 强行转换为8字节对齐 p += (DWORD)p%8; WORD* color = (WORD*)p; DWORD dwPixel; DWORD r, g, b, a; for( int i = 0; i < lSize; i++ ) { dwPixel = pRGBABuffer[i]; r = ((dwPixel>>24)&0x000000ff); g = ((dwPixel>>16)&0x000000ff); b = ((dwPixel>> 8)&0x000000ff); a = ((dwPixel>> 0)&0x000000ff); alpha[i] = a; // 888i转化为565 color[i] = RGBTo16( r, g, b ); } *pAlpha = alpha; *pBitmap = color; } // 这个视intel官方提供的函数,函数的描述,用我的话来说就是把一个带有256级alpha通道的565颜色数据绘制到16位目标页面。 |
正在阅读:可能是最快的算法alpha blend汇编源代码可能是最快的算法alpha blend汇编源代码
2004-02-14 09:34
出处:PConline
责任编辑:zwg
键盘也能翻页,试试“← →”键