RGB(5,6,5)位图混合算法优化
嘿 各位:
我现在在WINCE上处理一张800X480的RGB565的位图混合算法,是逐个像素混合,下面是具体的混合算法,但是速度还是达不到理想效果,想了很多天了没有找到解决方法,请各位给点建议!谢谢
for (int i=0;i<nDrawHeight;i++)//图像高度
{
for (int j=0;j<nDrawWidth;j++)//图像宽度
{
BYTE btAlp = *(LPBYTE)( m_LpAlpData+nSrcBegIdxAlp); //获取ALP值
if ( btAlp==ALLTRANSPARENTVAL) //如果ALP为0 全透
{
//全透
}
else if ( btAlp ==NOTRANSPARENTVAL) //如果ALP为255 不透
{
//不透直接赋值
*(WORD*)( lpBtDstData+nDstBegIdx) =*(WORD*)( m_LpImageData +nSrcBegIdx);
}
else
{
//ALPHA混合
WORD wdR,wdG,wdB;
WORD wdPixelSrc =*((WORD*)(m_LpImageData+nSrcBegIdx ));//源图像像素值
WORD wdPixelDst =*((WORD*)( lpBtDstData+nDstBegIdx )); //目的图像素值
BYTE btOtherAlp = 255-btAlp;
//RED颜色分量混合
wdR = ((GETREDVALNOTRAN(wdPixelSrc)*btAlp + GETREDVALNOTRAN(wdPixelDst)*(btOtherAlp))>>8)&REDMASK;
//GREEN颜色分量混合
wdG = ((GETGREENVALNOTRAN(wdPixelSrc)*btAlp + GETGREENVALNOTRAN(wdPixelDst)*(btOtherAlp))>>8)&GREENMASK;
//BLUE颜色分量混合
wdB = ((GETBLUEVALNOTRAN(wdPixelSrc)*btAlp + GETBLUEVALNOTRAN(wdPixelDst)*(btOtherAlp))>>8)&BLUEMASK;
*(WORD*)( lpBtDstData+nDstBegIdx) = (wdR|wdG|wdB); //最终颜色值
}
}
nSrcBegIdx=nSrcBegIdx+2; //下一个源像素索引
nDstBegIdx=nDstBegIdx+2; //下一个目的像素索引
nSrcBegIdxAlp++; //ALP值索引
}
nDstBegIdx = (nDstBegIdxbk=nDstBegIdxbk+nLineBytesDst);
nSrcBegIdx = (nSrcBegIdxbk=nSrcBegIdxbk+nLineBytesSrc);
nSrcBegIdxAlp = (nSrcBegIdxAlpbk = nSrcBegIdxAlpbk+m_stImageAttribute.m_dwWidth);
}